深度学习中常见的优化方法
基本算法
随机梯度下降SGD
随机梯度下降及其变种是及其学习中应用最多的优化算法,特别是在深度学习中。SGD按照数据分布抽取m个小批量(独立同分布的)样本,通过计算它们的梯度均值,可以得到梯度的无偏估计。
SGD的关键参数是学习率,在实践中,有必要随着时间的推移逐渐降低学习率。实践中,学习率的更新如下式。
式中,e0为 初始学习率,et为最终学习率
学习率可通过实验和误差来选取,若太大,学习曲线将会剧烈振荡,若太小,学习过程很缓慢,那么学习可能会卡在一个相当高的代价值。对于足够大的数据集,SGD可能在处理整个训练集之前就收敛到最终测试集误差的某个固定容差范围内。
带动量的SGD
虽然随机梯度下降仍然是非常受欢迎的优化方法,但其学习过程有时会很慢。动量的方法旨在加速学习,特别是处理高曲率、小但一直的梯度,或是带噪声的梯度。动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿着该方向移动。更新规则如下:
带动量的SGD算法如下所示:
之前,步长只是梯度乘以学习率,现在,步长取决于梯度序列的大小和排列。当许多连续的梯度指向相同的方向时,步长最大,达到了加速的效果。
其中步长的大小为。当α越小,步长越大。另外,当梯度方向不一致时,动量还有抑制振荡的作用。
Nesterov动量
Nesterov动量与普通动量的区别是梯度计算在施加当前