《深度学习入门》,与学习相关技巧

1. 参数更新

1.1 SGD(随机梯度下降)

W ← W − η ∂ L ∂ W W\leftarrow{W}-\eta{\frac{\partial{L}}{\partial{W}}} WWηWL
SGD是朝着梯度方向只前进一定距离的简单方法,学习率η对于模型的收敛速度的影响很大。书中对SGD的缺点总结为,对于函数的形状非均向,比如呈现延伸状,搜索的路径就会比较低效,而低效的根本原因则是梯度方向并没有指向最小值的方向,而梯度是该算法利用的唯一信息。

1.2 Momentum

v ← α v − η ∂ L ∂ W v\leftarrow{\alpha{v}-\eta{\frac{\partial{L}}{\partial{W}}}} vαvηWL
W ← W + v W\leftarrow{W}+v WW+v
该算法中出现的新的变量 v v v对应物理上的速度,而速度的变化描述的是物体在梯度方向的一个受力,Momentum方法给人的感受就像是一个小球在地面上滚动。本身带有一定的速度,而梯度则作用在加速度上,对速度进行间接影响。

1.3 AdaGrad

在前面的两个算法中,学习率η的指定是很重要的,学习率过大或者过小会导致学习时间过长或者学习发散而不能收敛。
AdaGrad则为参数的每个元素适当地调整学习率,与此同时进行学习。
h ← h + ( ∂ L ∂ W ) 2 h\leftarrow{h}+(\frac{\partial{L}}{\partial{W}})^2 hh+(WL)2
W ← W − η 1 h ∂ L ∂ W W\leftarrow{W}-\eta{\frac{1}{\sqrt{h}}}\frac{\partial{L}}{\partial{W}} WWηh 1WL
该公式中给出的更新方法会面临着学习次数增加时候参数完全不更新的情况,更好的算法可以参考RMSProp。

1.4 Adam

Adam算法整体结合的是Momentum和AdaGrad算法的优点,此外还有进行超参数的“偏置校正”也是其特点之一,算是集中方法里面最好的一个。

1.5 简述

对于几种方法,应该是没有很明确的可以哪种方法可以实现通吃的情况,一般都是具体问题具体尝试,但是相对来说,可能Adam算法更优秀些。

2. 权重的初始值

在神经网络的学习中,在没有使用dropout等技术的情况下,权重的初始值的确定对于模型的收敛的影响还是很大的。

2.1 权值不能设置为0

严格来说,权值的初始值不能设定为相同的值,因为在反向传播的过程中,所有的权值会进行相同的更新。这意味着权重会被更新成相同的值,使得神经网络通过权重来学习特征的能力被弱化了。

2.2 隐藏层的激活值的分布

书中的实验主要是从初始值的赋值不同来观察隐藏层的结果分布的,比较概率论的东西,也是第一次接触到神经网络和概率论之间还有关系。。。
通过对比也提到了不均匀分布的数据可能带来的梯度消失现象以及模型表现力受限等问题。
此外介绍了Xavier初始值的初始化方法,不学好理论都不会炼丹。

2.3 ReLU的权重初始化

Xavier初始值是以激活函数是线性函数的基础上导出的。因为Sigmoid函数和tanh函数左右对称,且中央附近可以视作线性函数,所以适合Xavier初始值。对于ReLu函数,推荐的初始值是“He初始值”。

3. Batch Normalization

针对各个激活层的权值分布问题,Batch Normalization就是大杀器了,在《Gans in Action》中的作者也有提到该方法对于Gan网络的重要作用。该方法优点如下:
(1)可以让学习加速进行(可以增大学习率)
(2)不用那么依赖初始值
(3)抑制过拟合(降低Dropout等的必要性)
在学习的时候,依照mini-batch为单位,进行正规化。让数据分布的均值为0,方差为1,如下:
μ B ← 1 m ∑ i = 1 m x i σ B 2 ← 1 m ∑ i = 1 m ( x − μ B ) 2 x ^ i ← x i − μ B σ 2 + ε \mu{_B}\leftarrow\frac{1}{m}\sum_{i=1}^m{x_i}\\ \sigma_B^2\leftarrow\frac{1}{m}\sum_{i=1}^m(x-\mu_B)^2\\ \hat{x}_i\leftarrow{\frac{x_i-\mu_B}{\sqrt{\sigma^2+\varepsilon}}} μBm1i=1mxiσB2m1i=1m(xμB)2x^iσ2+ε xiμB
从书中的实验结果来看,Batch Norm层的增加有推动了学习的进行。并且,对权重的初始值更加健壮了。

4. 正则化

机器学习的目标是提高模型的泛化能力,相应的,抑制过拟合的技巧就很重要了。

4.1 过拟合

过拟合发生的原因:
(1)模型拥有大量的参数,表现力强
(2)训练数据少

4.2 权值衰减

权值衰减是抑制过拟合的一个标准的方法,一般的操作就是在损失函数中加上权重的 L 2 L_2 L2范数,这样可以抑制权重变大,而相应的还要有控制惩罚力度的超参数 λ \lambda λ,即加上 1 2 λ W 2 \frac{1}{2}\lambda{W^2} 21λW2

4.3 Dropout

对于网络模型比较复杂的情况,单纯的权值衰减是难以应对的。在这种情况下,可以考虑使用Dropout方法。
Dropout是在学习过程中删除神经元的方法。训练时,随机选出隐藏层的神经元,然后将其删除。被删除的神经元不再进行信号的传递,但是对于各个神经元的输出,要乘以训练时的删除比例后输出。

5. 超参数验证

超参数的取值对于模型的最终结果也是有着比较大的影响,而超参数的取值的确定则伴随着比较多的试错。

5.1验证数据

为了实现超参数的验证,一般都会将数据集分割为训练数据,验证数据,测试数据。训练数据是模型的学习,而验证数据则是用来调整超参数的数据集。

5.2 超参数的最优化

简单的步骤
(1)设定超参数的范围
(2)从设定的超参数范围中随机采样
(3)使用上一步的采样值进行学习,通过验证数据评估识别精度(将epoch设置比较小)
(4)重复步骤2和3,根据它们的识别精度的结果,缩小超参数的范围。

该方法更多的是假设超参数和识别精度之间的函数是连续的,否则应该是不适合进行范围缩小的。

猜你喜欢

转载自blog.csdn.net/qq_42573343/article/details/105590225