- 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
- 过程
- 打乱
- 切分
- 损失函数对比
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,在最小值附近波动,无法使用向量化计算。
- batch-size的选取
总样本数小于2000,直接用batch Gradient Descent,样本数较多,size取值在64-512之间,为2的整数次幂。
- 指数加权移动平均( EWMA)
- 例子
- 理解
Vt一般形式展开:
将原始值与对应指数进行点乘,指数衰减。一般认为衰减到1/e时可忽略不计。
- Bias correction in exponentially weighted average(偏差修正)
在开始时Vt的值会偏小,因此需要进行修正,每次在计算Vt后,计算
,当t足够大时,两者近似相等
- Gradient descent with momentum(动量梯度下降法)
- 比较
其速度要比传统的梯度下降算法快很多
原始的梯度下降算法如上图蓝色折线所示。在梯度下降过程中,梯度下降的振荡较大,尤其对于W、b之间数值范围差别较大的情况。此时每一点处的梯度只与当前方向有关,产生类似折线的效果,前进缓慢。而如果对梯度进行指数加权平均,这样使当前梯度不仅与当前方向有关,还与之前的方向有关,这样处理让梯度前进方向更加平滑,减少振荡,能够更快地到达最小值处。
- 算法
关于偏移校正,可以不使用。因为经过10次迭代后,随着滑动平均的过程,偏移情况会逐渐消失。
- RMSprop
- 算法
为了避免RMSprop算法中分母为零,通常可以在分母增加一个极小的常数ε
- Adam
Adam(Adaptive Moment Estimation)算法结合了动量梯度下降算法和RMSprop算法
- 算法
- 学习率衰减
使用恒定的学习因子αα,由于每次训练αα相同,步进长度不变,在接近最优值处的振荡也大,在最优值附近较大范围内振荡,与最优值距离就比较远。绿色折线表示使用不断减小的αα,随着训练次数增加,αα逐渐减小,步进长度减小,使得能够在最优值处较小范围内微弱振荡,不断逼近最优值。
- 局部最优&saddle point
在使用梯度下降算法不断减小cost function时,可能会得到局部最优解(local optima)而不是全局最优解(global optima)。之前我们对局部最优解的理解是形如碗状的凹槽,如下图左边所示。但是在神经网络中,local optima的概念发生了变化。准确地来说,大部分梯度为零的“最优点”并不是这些凹槽处,而是形如右边所示的马鞍状,称为saddle point。也就是说,梯度为零并不能保证都是convex(极小值),也有可能是concave(极大值)。特别是在神经网络中参数很多的情况下,所有参数梯度为零的点很可能都是右边所示的马鞍状的saddle point,而不是左边那样的local optimum。
类似马鞍状的plateaus会降低神经网络学习速度。Plateaus是梯度接近于零的平缓区域,如下图所示。在plateaus上梯度很小,前进缓慢,到达saddle point需要很长时间。到达saddle point后,由于随机扰动,梯度一般能够沿着图中绿色箭头,离开saddle point,继续前进,只是在plateaus上花费了太多时间。
总的来说,关于local optima,有两点总结:
- 只要选择合理的强大的神经网络,一般不太可能陷入local optima
- Plateaus可能会使梯度下降变慢,降低学习速度
上文介绍的动量梯度下降,RMSprop,Adam算法都能有效解决plateaus下降过慢的问题,大大提高神经网络的学习速度。