深度学习入门基于Python的理论与实现(第6章 与学习相关的技巧)

优化方法

  1. SGD
    W \gets W - \eta\frac{\partial L}{\partial W}

缺点:梯度的方向并没有指向最小值的方向


image.png
  1. Momentum

    image.png

    v对应物理上的速度,\alpha能使物体逐渐减速

  2. AdaGrad


    image.png

    h保存了以前的所有梯度值的平方和,参数的元素中变动较大(被大幅更新)的元素的学习率将变小。也就是说,可以按参数的元素进行学习率衰减,使变动大的参数的学习率逐渐减小。


    image.png

    由于y 轴方
    向上的梯度较大,因此刚开始变动较大,但是后面会根据这个较大的变动按

    比例进行调整,减小更新的步伐。因此,y 轴方向上的更新程度被减弱,“之”
    字形的变动程度有所衰减。

  3. RMSProp
    AdaGrad会记录过去所有梯度的平方和。学习越深入,更新的幅度就越小。最后更新量就会变为0。为了改善这个问题,RMSProp方法并不是将过去的梯度一视同仁得相加,而是逐渐遗忘过去的梯度,称为“指数移动平均”,呈指数函数式地减小过去的梯度的尺度。
    h \gets \rho h+(1-\rho)\frac{\partial L}{\partial W} \odot \frac{\partial L}{\partial W}
    W \gets W- \eta \frac{1}{\sqrt h }\frac{\partial L}{\partial W}

  4. Adam
    Momentum和AdaGrad结合得到Adam


    image.png

一般而言,与SGD相比,其他3 种方法可以学习得更快,有时最终的识别精度也更高。

权重的初始值

  1. 可以将权重初始值设为0吗
    这是因为在误差反向传播法中,所有的权重值都会进行相同的更新。因此,权重被更新为相同的值,并拥有了对称的值(重复的值)。这使得神经网络拥有许多不同的权重的意义丧失了。

  2. 隐藏层的激活值的分布
    使用sigmoid作为激活函数


    image.png

    各层的激活值呈偏向0 和1 的分布。这里使用的sigmoid函数是S型函数,随着输出不断地靠近0(或者靠近1),它的导数的值逐渐接近0。因此,偏向0 和1 的数据分布会造成反向传播中梯度的值不断变小,最后消失。这个问题称为梯度消失(gradient vanishing)。层次加深的深度学习中,梯度消失的问题可能会更加严重。

在一般的深度学习框架中,Xavier 初始值已被作为标准使用。如果前一层的节点数为n,则初始值使用标准差为\frac{1}{\sqrt n }的高斯分布。

Xavier 初始值是以激活函数是线性函数为前提而推导出来的。因为sigmoid函数和tanh函数左右对称,且中央附近可以视作线性函数,所以适合使用Xavier 初始值。但当激活函数使用ReLU时,一般使用Kaiming He等人推荐的初始值,也称为“He初始值”。
He 初始值使用标准差为\frac{2}{\sqrt n }的高斯分布。因为ReLU的负值区域的值为0,为了使它更有广度,所以需要2 倍的系数。

image.png

总结一下,当激活函数使用ReLU时,权重初始值使用He初始值,当激活函数为sigmoid 或tanh 等S 型曲线函数时,初始值使用Xavier 初始值。这是目前的最佳实践。

Batch Normalization

  1. 为了使各层拥有适当的广度,“强制性”地调整激活值的分布会怎样呢?实际上,Batch Normalization方法就是基于这个想法而产生的.
    优点:
    • 可以使学习快速进行(可以增大学习率)。
    • 不那么依赖初始值(对于初始值不用那么神经质)。
    • 抑制过拟合(降低Dropout等的必要性)。
    Batch Norm,顾名思义,以进行学习时的mini-batch 为单位,按minibatch进行正规化。具体而言,就是进行使数据分布的均值为0、方差为1 的正规化。通过将BN插入到
    激活函数的前面(或者后面),可以减小数据分布的偏向。
    接着,Batch Norm层会对正规化后的数据进行缩放和平移的变换,用数学式可以如下表示。
    image.png

    初始值\gamma=1,\beta=0,然后通过学习调整到合适的值。
    image.png

    image.png

正则化

  1. 过拟合的原因
  • 模型拥有大量参数、表现力强。
  • 训练数据少。
  1. 权值衰减
    权值衰减是一种抑制过拟合的方法。该方法通过在学习的过程中对大的权重进行惩罚,来抑制过拟合。很多过拟合原本就是因为权重参数取值过大才发生的。
    在原来的损失函数上加上权重的L2范数 \frac{\lambda}{2}W^2

  2. Dropout


    image.png
image.png

p是出现的概率

集成学习与Dropout 有密切的关系,这是因为可以将Dropout
理解为,通过在学习过程中随机删除神经元,从而每一次都让不同的模型进行学习。并且,推理时,通过对神经元的输出乘以出现比例(比如,0.5 等),可以取得模型的平均值。

超参数的验证

  1. 验证数据
    不能使用测试数据评估超参数的性能。这一点非常重要,但也容易被忽视。
    为什么不能用测试数据评估超参数的性能呢?这是因为如果使用测试数据调整超参数,超参数的值会对测试数据发生过拟合。换句话说,用测试数据确认超参数的值的“好坏”,就会导致超参数的值被调整为只拟合测试数据。这样的话,可能就会得到不能拟合其他数据、泛化能力低的模型。

  2. 超参数的最优化
    先大致设定一个范围,从这个范围中随机选出一个超参数(采样),用这个采样到的值进行识别精度的评估;然后,多次重复该操作,观察识别精度的结果,根据这个结果缩小超参数的“好值”的范围。通过重复这一操作,就可以逐渐确定超参数的合适范围。

有报告显示,在进行神经网络的超参数的最优化时,与网格搜索等有规律的搜索相比,随机采样的搜索方式效果更好。这是因为在多个超参数中,各个超参数对最终的识别精度的影响程度不同。

在超参数的最优化中,减少学习的epoch,缩短一次评估所需的时间是一个不错的办法。

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容