梯度下降法改进过程:从 SGD 到 Adam算法

1. SGD 梯度下降法

1.1 梯度下降(Gradient Descent)

梯度g指函数的某处的偏导数,指向函数上升方向。因此梯度下降法是指用梯度的负数-g更新参数,从而使下一次计算的结果向函数下降方向逼近,从而得到最小值。其中更新时乘的系数称为学习率
w ∗ = w − α Δ w = w − α ∂ ∂ w L w^*=w-\alpha \Delta w = w-\alpha \frac{\partial}{\partial w}L w=wαΔw=wαwL

1.2 批次梯度下降(Batch Gradient Descent)

以所有m个数据作为一个批次,每次计算损失loss值和梯度g(偏导)时为所有数据的累加和,更新每个参数时也都是以所有数据的梯度累加和进行计算更新。
**优点:**下降方向为全局最优值 **缺点:**计算所有数据的梯度非常耗时

1.3 随机梯度下降(Stochastic Gradient Desent, SGD)

虽然m个数据为一个批次,但是更新参数时仅使用随机一个数据的梯度进行更新。
**优点:**很快 **缺点:**随机性高,噪声影响严重,不一定向整体最优点下降。

1.4 小批次梯度下降 Mini-batch GD(MBGD)

把所有样本分为n个batch(一般是随机的),每次计算损失和梯度时用一个batch的数据进行计算,并更新参数,从而避免了唯一随机性和全局计算的耗时性。
**优点:**得到的梯度下降方向是局部最优的,整体速度快。

1.6 一般说的 SGD 其实就指的是 Mini-batch GD

参考:知乎专栏-SGD

2. 动量梯度下降 Gradient Dscent with Momentum

梯度下降法可能会停滞到 平原、鞍点和局部最优点(在这三个点梯度均为0),因此带动量的梯度下降法能依靠之前的梯度值,“冲过平原、鞍点和局部最优点”,提高泛化性。
在这里插入图片描述
v v v 表示历史参数的更新值的大小,相当于现在和过去的梯度的一个加权,可以视为当前的一个动量(势能),每次计算新一次的更新值时考虑当前梯度和历史更新值,其实就是用一阶梯度的指数移动平均代替梯度值进行参数更新如下:

在这里插入图片描述

参考:知乎专栏-动量简述动量csdn

3. 自适应梯度算法 Adagard(Adaptive gradient)

Adagard 针对不同的变量提供不同的学习率。 当一些变量被优化到最优点,但另外一些变量没到最优点,使用统一的学习率就会影响优化过程,太大或太小都不合适。太大不容易收敛,太小收敛缓慢。
解决方式:为每一参数建立历史累计梯度值,利用历史累计梯度作为分母,从而使各个参数在训练后期被给予不同的除数,得到自适应参数值
在这里插入图片描述
在这里插入图片描述

参考:知乎专栏

4. RMSprop自适应学习率算法(root mean square propagation)

Adagard 暴力累加参数之前的所有梯度平方作为分母进行自适应(二阶梯度的梯度下降?),而RMSprop进行历史梯度平方和的加权;
γ \gamma γ来控制衰减程度(通常为0.9),每次不再直接累加,而是一个指数移动平均,即是用二阶梯度的移动平均代替当前梯度进行更新参数
在这里插入图片描述
在这里插入图片描述

参考:知乎专栏-RMSprop

5. Adam优化器 (Adaptive moment estimation)

Adam 可以看做 RMSprop 与 Momentum 的结合,使用了一阶梯度的指数移动平均(Momentum)和二阶梯度的指数移动平均(RMSprop)。
优点:每一次迭代学习率都有一个明确的范围,使得参数变化很平稳.
注意到,在迭代初始阶段, m t m_t mt v t v_t vt 有一个向初值的偏移(过多的偏向了 0)。因此,可以对一阶和二阶动量做偏置校正 (bias correction),
在这里插入图片描述

参考:博客-常见的优化器从SGD到Adam优化器

猜你喜欢

转载自blog.csdn.net/qq_40491305/article/details/117407028
今日推荐