Tips for Training DNN

在训练DNN时,效果不好可能有两种情况,一个是训练集效果不好,一个是测试集效果不好。

训练数据上表现不好

1. 选择一个新的激活函数

在使用sigmoid函数时,可能会出现输入变化很大,但是输入sigmoid后输出的变化很小,导致梯度变化很小的情况。因此可以引入新的激活函数Relu函数。

在使用Relu函数的时候,有一部分单元的值取0,而另一部分的取值为本身,那么会不会导致最后的结果依然是一条直线呢?并不会,因为随着取值的变化不同的单元取值也会变化。同时只有忽略输入为0的时刻,该函数依然是可导的。

Relu的一些变形

同时,也有一个新的方式例如Maxout,时输出多个神经元中最大的值,显然Relu时其中的一个特殊值,同时Maxout也可以训练多种不同的函数。

2. 可变的学习率

上一讲中介绍了Adagrad这种可变的学习率

Adagrad迭代公式

RMSProp就是在Adagrad基础上演变出的,使得分母可以进行人为调节

α可以决定过去与现在哪个的比重更高

3. Momentum

在训练中可能会遇到局部最优的问题,而在现实生活中,如果不断下坡很有可能可以冲过局部最优,达到最好的效果

现实生活

因此,Momentum就是移动由梯度和惯性共同决定

递推方式

有可能有机会跳出局部最优点

测试集上表现不好

1. Early stopping

通过自设的测试机获取最佳迭代次数,尽早停止

2. 正则化

改变损失函数如下

$$L^{{}’}(\theta )=L(\theta )+\lambda \frac{1}{2}\left | \theta \right |_{2}$$

在迭代的过程中,会使得\(1-\eta \lambda\)为接近1但比1小的数,则在迭代过程中会使得\(\omega\)越来越接近0,但是后面的项不会使得\(\omega\)直接变为0。

Weight Decay就是对于某些用不到的权重,在训练之后值会趋近于0,相当于没有了这个神经元。

3. Dropout

在每一次更新参数之前每个神经元都会有p%概率不更新,也就是丢弃部分神经元

而在测试的时候是整个网络进行训练,同时权重也需要乘以1-p%

同时Dropout可以看成是Ensemble的一种

留下评论