梯度消失
梯度消失原因
当神经网络层数加深时,可能会出现一些问题。
- 梯度消亡:训练过程非常缓慢
- 过拟合,在训练数据上表现得很好,在测试集上表现得很差。
梯度消亡的现象:神经网络输入端的网络层的系数逐渐不 再随着训练而变化,或者变化得很缓慢。随着网络层数增加,这个现象越发明显。
梯度消失的前提:
- 使用基于梯度的训练方法(梯度下降算法)
- 使用的激活函数具有输出值远远小于输入值的范围,如Logistic,tanh。
梯度消亡问题分析
- 梯度下降算法依靠理解系数的微小变化对输出的影响来学习网络系数的值。如果一个系数的微小变化对网络的输出没有影响或者影响非常小,那么就无法知道如何优化这个系数,或者优化得非常慢,造成训练的困难。
- 使用梯度下降算法训练网络,如果激活函数具备输出值范围远小于输入值范围,那么就会出现梯度消失,例如,双曲正切函数tanh将 -∞到+∞的输入压缩到输出-1到+1之间,除开-6到+6之间的数,其他输入值的梯度变化都非常小,接近于0。如图蓝色为tanh函数,红色为梯度
梯度消失解决方案
- 使用激活函数relu,输入大于0,梯度为1,否则为0
- 使用激活函数leakyrelu:输入大于等于0,梯度为1,否则为a。
- 采用不使用梯度的训练方法,如基于遗传进化算法,粒子群优化
过拟合
深度神经网络面临的第二个问题:过拟合。
以二分类问题为例
我们需要找到一条线把两类分开。过拟合就是在训练集表现得太好,没有找到普遍规律,在测试集上错误反而比较高。_
常用的过拟合解决方案:
- dropout
- L2正则化
- L1正则化
- MaxNorm(最大范数)
dropout
首先需要选择rate,如选择1/3
在一轮训练中,有1/3的隐含层神经元被舍弃用,如图1,
第二轮中,又有随机1/3的隐含层神经元被舍弃用,如图2
在第三轮中,又有随机1/3的隐含层神经元被舍弃用,如图3
最后结束后,使用整体网络,和每个神经元系数,因为之前网络变小(只有部分神经元发挥作用)时得到的是输出值,这次网络变大了,所以最每个神经元系数要乘以(1-dropout rate)
L2正则化
L1正则化
最大范数约束
-
对每一个神经元对应的系数向量,设置一个最大第二范数值C,这个值通常设为3,如果一个神经元的第二范数值大于C,那么将每一个系数值按比例减小,使得第二范数值等于C
-
在训练的每一次更新系数的时候都额外加上这一步:
-
由于最大范数的约束,可以防止由于训练步长较大引发的过拟合。
神经元系数的初始化
这里和过拟合无关
bias(偏置系数):初始化为0
普通系数:初始化为
n为神经元中输入元素的个数。
作者:电气工程的计算机萌新-余登武