1. Mini-batch gradient descent
    • Batch Gradient Descent

    神经网络训练过程是对所有m个样本,称为batch,通过向量化计算方式,同时进行的。如果m很大,例如达到百万数量级,训练速度往往会很慢,因为每次迭代都要对所有样本进行进行求和运算和矩阵运算。我们将这种梯度下降算法称为Batch Gradient Descent

    • Mini-batch Gradient Descent

    把m个训练样本分成若干个子集,称为mini-batches,这样每个子集包含的数据量就小了,例如只有1000,然后每次在单一子集上进行神经网络训练,速度就会大大提高。这种梯度下降算法叫做Mini-batch Gradient Descent

    • 过程
    1. 打乱

    2-2改善深层神经网络-优化算法 - 图1

    1. 切分

    2-2改善深层神经网络-优化算法 - 图2

    • 损失函数对比

    2-2改善深层神经网络-优化算法 - 图3

    mini-batch会出现震荡下降,因为不同的子集之间存在差异

    • epoch

    当所有mini-batches都训练完一遍,这个过程称为完成一个epoch

    值得一提的是,对于Mini-Batches Gradient Descent,可以进行多次epoch训练。而且,每次epoch,最好是将总体训练数据重新打乱、重新分成T组mini-batches,这样有利于训练出最佳的神经网络模型

    • Stochastic gradient descent(SGD)

    特殊的,当m个训练样本分成1一个子集时,为batch Gradient Descent;当m个训练样本分成m个子集时,为Stochastic gradient descent(随机梯度下降)。

    蓝色为batch gradient descent,比较平缓;紫色为SGD,在最小值附近波动,无法使用向量化计算。

    2-2改善深层神经网络-优化算法 - 图4

    • batch-size的选取

    总样本数小于2000,直接用batch Gradient Descent,样本数较多,size取值在64-512之间,为2的整数次幂。

    1. 指数加权移动平均( EWMA)
    • 例子

    2-2改善深层神经网络-优化算法 - 图52-2改善深层神经网络-优化算法 - 图6

    • 理解

    Vt一般形式展开:

    2-2改善深层神经网络-优化算法 - 图7

    将原始值与对应指数进行点乘,指数衰减。一般认为衰减到1/e时可忽略不计。

    2-2改善深层神经网络-优化算法 - 图8

    • Bias correction in exponentially weighted average(偏差修正)

    在开始时Vt的值会偏小,因此需要进行修正,每次在计算Vt后,计算

    2-2改善深层神经网络-优化算法 - 图9,当t足够大时,两者近似相等

    1. Gradient descent with momentum(动量梯度下降法)
    • 比较

    其速度要比传统的梯度下降算法快很多

    2-2改善深层神经网络-优化算法 - 图10

    原始的梯度下降算法如上图蓝色折线所示。在梯度下降过程中,梯度下降的振荡较大,尤其对于W、b之间数值范围差别较大的情况。此时每一点处的梯度只与当前方向有关,产生类似折线的效果,前进缓慢。而如果对梯度进行指数加权平均,这样使当前梯度不仅与当前方向有关,还与之前的方向有关,这样处理让梯度前进方向更加平滑,减少振荡,能够更快地到达最小值处。

    • 算法

    2-2改善深层神经网络-优化算法 - 图11

    关于偏移校正,可以不使用。因为经过10次迭代后,随着滑动平均的过程,偏移情况会逐渐消失。

    1. RMSprop
    • 算法

    2-2改善深层神经网络-优化算法 - 图12

    为了避免RMSprop算法中分母为零,通常可以在分母增加一个极小的常数ε

    2-2改善深层神经网络-优化算法 - 图13

    1. Adam

    Adam(Adaptive Moment Estimation)算法结合了动量梯度下降算法和RMSprop算法

    • 算法

    2-2改善深层神经网络-优化算法 - 图14

    1. 学习率衰减

    使用恒定的学习因子αα,由于每次训练αα相同,步进长度不变,在接近最优值处的振荡也大,在最优值附近较大范围内振荡,与最优值距离就比较远。绿色折线表示使用不断减小的αα,随着训练次数增加,αα逐渐减小,步进长度减小,使得能够在最优值处较小范围内微弱振荡,不断逼近最优值。

    2-2改善深层神经网络-优化算法 - 图15

    1. 局部最优&saddle point

    在使用梯度下降算法不断减小cost function时,可能会得到局部最优解(local optima)而不是全局最优解(global optima)。之前我们对局部最优解的理解是形如碗状的凹槽,如下图左边所示。但是在神经网络中,local optima的概念发生了变化。准确地来说,大部分梯度为零的“最优点”并不是这些凹槽处,而是形如右边所示的马鞍状,称为saddle point。也就是说,梯度为零并不能保证都是convex(极小值),也有可能是concave(极大值)。特别是在神经网络中参数很多的情况下,所有参数梯度为零的点很可能都是右边所示的马鞍状的saddle point,而不是左边那样的local optimum。

    2-2改善深层神经网络-优化算法 - 图16

    类似马鞍状的plateaus会降低神经网络学习速度。Plateaus是梯度接近于零的平缓区域,如下图所示。在plateaus上梯度很小,前进缓慢,到达saddle point需要很长时间。到达saddle point后,由于随机扰动,梯度一般能够沿着图中绿色箭头,离开saddle point,继续前进,只是在plateaus上花费了太多时间。

    2-2改善深层神经网络-优化算法 - 图17

    总的来说,关于local optima,有两点总结:

    • 只要选择合理的强大的神经网络,一般不太可能陷入local optima
    • Plateaus可能会使梯度下降变慢,降低学习速度

    上文介绍的动量梯度下降,RMSprop,Adam算法都能有效解决plateaus下降过慢的问题,大大提高神经网络的学习速度。