SGD,Momentum,AdaGrad,RMSProp,Adam

date
Apr 29, 2022
Last edited time
May 1, 2022 03:33 PM
status
Published
slug
optim
tags
DL
summary
type
Post
origin
Field
Plat

1.1. SGD

1.1.1 Batch Gradient Descent

在每一轮的训练过程中,Batch Gradient Descent 算法用整个训练集的数据计算 cost fuction 的梯度,并用该梯度对模型参数进行更新:
优点:
  1. cost fuction 若为凸函数,能够保证收敛到全局最优值;若为非凸函数,能够收敛到局部最优值。
缺点:
  1. 由于每轮迭代都需要在整个数据集上计算一次,所以批量梯度下降可能非常慢
  1. 训练数较多时,需要较大内存
  1. 批量梯度下降不允许在线更新模型,例如新增实例。

1.1.2 Stochastic Gradient Descent

和批梯度下降算法相反,Stochastic gradient descent 算法每读入一个数据,便立刻计算 cost fuction 的梯度来更新参数:
优点:
  1. 算法收敛速度快 (在 Batch Gradient Descent 算法中, 每轮会计算很多相似样本的梯度, 这部分是冗余的)
  1. 可以在线更新
  1. 有几率跳出一个比较差的局部最优而收敛到一个更好的局部最优甚至是全局最优
缺点:
  1. 容易收敛到局部最优,并且容易被困在鞍点

1.1.3 Mini-batch Gradient Descent

mini-batch Gradient Descent 的方法是在上述两个方法中取折衷, 每次从所有训练数据中取一个子集(mini-batch) 用于计算梯度:
Mini-batch Gradient Descent 在每轮迭代中仅仅计算一个 mini-batch 的梯度,不仅计算效率高,而且收敛较为稳定。该方法是目前深度学训练中的主流方法 上述三个方法面临的主要挑战如下:
  1. 选择适当的学习率α较为困难。太小的学习率会导致收敛缓慢,而学习速度太块会造成较大波动,妨碍收敛。
  1. 目前可采用的方法是在训练过程中调整学习率大小,例如模拟退火算法:预先定义一个迭代次数 m,每执行完 m 次训练便减小学习率,或者当 cost function 的值低于一个阈值时减小学习率。然而迭代次数和阈值必须事先定义,因此无法适应数据集的特点。
  1. 上述方法中, 每个参数的 learning rate 都是相同的,这种做法是不合理的:如果训练数据是稀疏的,并且不同特征的出现频率差异较大,那么比较合理的做法是对于出现频率低的特征设置较大的学习速率,对于出现频率较大的特征数据设置较小的学习速率。
  1. 近期的的研究表明,深层神经网络之所以比较难训练,并不是因为容易进入 local minimum。相反,由于网络结构非常复杂,在绝大多数情况下即使是 local minimum 也可以得到非常好的结果。而之所以难训练是因为学习过程容易陷入到马鞍面中,即在坡面上,一部分点是上升的,一部分点是下降的。而这种情况比较容易出现在平坦区域,在这种区域中,所有方向的梯度值都几乎是 0。

1.2. Momentum

SGD 方法的一个缺点是其更新方向完全依赖于当前 batch 计算出的梯度,因而十分不稳定。Momentum 算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前 batch 的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力:
Momentum 算法会观察历史梯度 ,若当前梯度的方向与历史梯度一致(表明当前样本不太可能为异常点),则会增强这个方向的梯度,若当前梯度与历史梯方向不一致,则梯度会衰减。

1.3. Nesterov Momentum

在小球向下滚动的过程中,我们希望小球能够提前知道在哪些地方坡面会上升,这样在遇到上升坡面之前,小球就开始减速。这方法就是 Nesterov Momentum,其在凸优化中有较强的理论保证收敛。并且,在实践中 Nesterov Momentum 也比单纯的 Momentum 的效果好:
这里对 求梯度,就是对未来进行一次展望,如果未来的梯度方向相反,则本次更新步伐降低。

1.4. Adagrad

上述方法中,对于每一个参数的训练都使用了相同的学习率α。Adagrad 算法能够在训练中自动的对 learning rate 进行调整,对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。因此,Adagrad 非常适合处理稀疏数据。 设 为第 轮第 个参数的梯度,即
。因此,SGD 中参数更新的过程可写为:
Adagrad 在每轮训练中对每个参数的学习率进行更新,参数更新公式如下:
其中, 为对角矩阵,每个对角线位置 为对应参数 从第 轮到第 轮梯度的平方和。ϵ是平滑项,用于避免分母为 0,一般取值 1e−8。Adagrad 的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于 0,使得训练提前结束。方差表示的意思时,越少更新的,方差越小,更新幅度越大。

1.5. RMSprop

RMSprop 是 Geoff Hinton 提出的一种自适应学习率方法。Adagrad 会累加之前所有的梯度平方,而 RMSprop 仅仅是计算对应的平均值,因此可缓解 Adagrad 算法学习率下降较快的问题。
notion image
在图中这样的情况时,梯度下降在横轴方向前进,在纵轴方向却会有大幅度的抖动。

1.6. Adam

Adam(Adaptive Moment Estimation) 是另一种自适应学习率的方法,是 Momentum 算法与 RMSprop 算法的结合。它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam 的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

© Lazurite 2021 - 2024