参数的更新
神经网络学习的目的是找到使损失函数的值尽可能小的参数。常见的有以下四种:
SGD(stochastic gradient descent)、Momentum、AdaGrad、Adam。
Adam论文
这四种方法并不存在能在所有问题中都表现良好的方法,都有各自擅长和不擅长解决的问题。SGD受具体问题(函数形状)的限制,负梯度方向不一定始终指向最优值。所以后三种都是对其的一种改进(下图表示了四者的梯度变化趋势)。
权重的确定
权重的初始值
权值衰减:一种以减小权重参数的值为目的进行学习的方法。
通过减小权重参数的值抑制过拟合的发生。
权重的初始值可以设置为0吗?
不能,初始值设为0,将无法正确学习。如果设置为0,即就是权重被赋予了相同的初始值,在神经网络中权重更新过程中,会出现权值对称的现象。为了防止"权值均一化",必须随机生成初始值。
隐藏层的激活值的分布
梯度消失:随着输出不断地靠近0(或者靠近1),它的导数的值逐渐接近0.层次加深的深度学习中,梯度消失的问题可能会更加严重。各层的激活值分布要有适当的广度。通过各层间传递多样性的数据,神经网络可以进行高效的学习。反之如果传递的是有所偏向的数据,就会出现梯度消失或者表现能力受限的问题,导致学习有可能无法顺利进行。
权值初始值的确定方法
权重初始值对激活值分布具有重要影响。
目前初始值确定使用较广的方法“Xavier值”和"He初始值"。
Xavier初始值是以激活函数是线性函数为前提推导出来的,sigmoid和tanh都是左右对称函数,且在中央附近可以视作线性函数。
激活函数 | 初始值方法 | 初始值 |
---|---|---|
sigmoid或tanh | Xavier初始值 | 标准差为1/np.sqrt(n)的分布 |
ReLu | He初始值 | 标准差为2/np.sqrt(n)的分布 |
- n表示神经网络中前一层的节点个数
- 直观上的解释是,因为ReLU的负值区域的值为0,为了使它更有广度,所以需要两倍的系数
Batch Norm层
Batch Normalization是2015年提出来。
- 思路:调整各层的激活值分布使其拥有适当的广度。一般以mini-batch为单位。
- Batch Norm层会对正规化后的数据进行缩放和平移的转换,
xi->xi'(正规化),yi<-gamma*xi'+β,gamma,beta初值为1,0
优点:
- 可以使学习快速进行(增大学习率)
【Batch Normalization的评估:
在Minist数据集上,使用Batch Norm和不使用的区别是学习率增大,权值初始值变得更加稳健。】 - 不那么依赖初始值(对于初始值不在敏感)
- 抑制过拟合(降低Dropout等的必要性)
参考文献:
《深度学习入门:基于Python的理论与实现》