深度学习笔记二:梯度下降算法

  • 下山问题
        打个比方,一个人从山顶想要去山脚,首先要找到下山最快的 方向(梯度),走一步,再重新找到最快的方向,再走一步,如此重复到达山脚。

  • 梯度下降算法
        神经网络的训练过程中会不断更新参数,我们先用损失函数对参数求梯度(方向),然后在按照一个学习率(步长),进行参数的调整。
        找到合适的学习率对训练神经网络很重要,过大的学习率可能导致模型不收敛,即找不到loss的最小值;学习率太小会导致学习速度过慢。
    深度学习笔记二:梯度下降算法

  • 正向计算与反向传播
        神经网络的输出是正向计算的:每一个神经元的输入,都是上一层神经元的输出(第一层除外)
        神经网络的误差是反向传播的:在求解某个参数的梯度时,是从最后一层从后向前进行链式求导(由于后一层神经元的输入时上一层神经元的输出)。
    深度学习笔记二:梯度下降算法

  • 神经网络训练优化

  存在的问题1
    每次都在整个数据集上计算loss和梯度,计算量大、可能内存承载不住。梯度方向确定的时候,仍然是每次都走一个单位步长,太慢
  优化方法:
    (1)随机梯度下降:每次只使用一个样本。但是一个样本并不能反映所有样本的梯度方向。
    (2)Mini-Batch:每次使用一小部分随机采样出来的数据进行训练,如果Mini-batch的size过小会导致loss震荡问题,size越大,震荡不明显。
  存在的问题2
    局部极值和saddle point(鞍点)
深度学习笔记二:梯度下降算法
a.学习率过小跳不出局部极值。
深度学习笔记二:梯度下降算法
b.鞍点梯度为零,参数得不到更新
    优化方法
    (1)动量梯度下降(SGD + Momentum):在梯度部分增加了一个项,这个项是之前梯度的一个积累值(也可以看成均值)
深度学习笔记二:梯度下降算法
    当梯度方向变化较大时,这个积累量会和目前的梯度抵消一部分,当梯度大小变化较大时,这个积累量同样会削弱这种变化,从而减小loss曲线的振荡。
    在刚开始训练时,梯度方向较为稳定,因此可以加速训练,后期出现局部极小或鞍点时,由于存在动量积累量,因此可以跳出局部极小或者鞍点。