优化器:SGD with Momentum

本文介绍了指数加权平均的概念及其在近似求平均中的应用,并详细解释了如何利用该方法来改进随机梯度下降算法(SGD),形成SGDwithMomentum,以实现更平滑的梯度下降过程。

(1)指数加权平均:一种近似求平均的方法,公式如下:

v_{t}=\beta \ast v_{t-1}+(1-\beta )\theta _{t}

v_{t}代表局部的平均值。\theta _{t}代表第t个数据的值。\beta是可调节超参。可近似为前\frac{1}{1-\beta }个数据的的平均值。

举例说明,设\beta=0.9,则近似代表近10个数据的平均值:

v_{4}=0.9v_{3}+0.1\theta _{4}=0.9(0.9v_{2}+0.1\theta _{3})+0.1\theta _{4}=0.81v_{2}+0.09\theta _{3}+0.1\theta _{4}=0.81(0.9v_{1}+0.1\theta _{2})+0.09\theta _{3}+0.1\theta _{4}=0.729v_{1}+0.081\theta _{1}+0.09\theta _{3}+0.1\theta _{4}=0.1\times 0.9^{3}\times \theta _{1}+0.1\times 0.9^{2}\times \theta _{2}+0.1\times 0.9^{1}\times \theta _{3}+0.1\theta _{4}

指数递减的加权的移动平均,越近期的数据加权越大。v_{t}对原始数据做了平滑,降低了原始数据的震荡程度,怎么看是前多少个数据的平均值呢,n通过\beta ^{n}\approx \frac{1}{e}得到。

(2)SGD with Momentum

采用上述指数加权平均的思路,在SGD中增加动量的概念,使得前几轮的梯度也会加入到当前的计算中(会有一定衰减),通过对前面一部分梯度的指数加权平均使得梯度下降过程更加平滑,减少动荡,收敛也比普通的SGD快。当前梯度方向与累计梯度方向一致时,梯度会被加强,从而这一步下降幅度增大,若方向不一致,则会减弱当前下降的梯度幅度。

v_{t}=\beta \ast v_{t-1}+(1-\beta )\Delta J(\theta )

\Delta J(\theta )是当前梯度值,\beta常设为0.9,也就是前10个梯度的平均值。参数\theta的更新公式如下:

\theta =\theta -\alpha v_{t}

### SGD with Momentum 优化器的定义和工作原理 #### 定义 SGD with Momentum 是一种改进的随机梯度下降(Stochastic Gradient Descent, SGD算法,它通过引入动量项(Momentum)来加速收敛并减少震荡。动量项的作用是累积历史梯度的方向信息,使得优化过程在梯度变化平滑的方向上能够更快地前进,而在震荡方向上则能有效抑制波动[^3]。 #### 工作原理 SGD with Momentum 的核心思想是在参数更新时不仅考虑当前的梯度方向,还结合之前累积的梯度方向。具体来说,优化过程中会维护一个速度变量 \( v \),该变量由两部分组成:一部分是上一时刻的速度乘以动量系数 \( \beta \),另一部分是当前梯度乘以学习率 \( \eta \)。参数更新公式如下: \[ v_t = \beta v_{t-1} + \eta \nabla J(\theta) \] \[ \theta_t = \theta_{t-1} - v_t \] 其中: - \( v_t \) 表示第 \( t \) 次迭代的速度。 - \( \beta \) 是动量系数,通常取值为 0.9 或 0.99。 - \( \eta \) 是学习率。 - \( \nabla J(\theta) \) 是损失函数 \( J(\theta) \) 对参数 \( \theta \) 的梯度。 动量项 \( \beta v_{t-1} \) 允许优化器“记住”过去梯度的方向,从而帮助算法更快地穿越平坦区域,并在震荡区域中保持稳定[^2]。 #### 数学推导 假设模型参数为 \( \theta \),损失函数为 \( J(\theta) \),则标准 SGD 的更新规则为: \[ \theta_t = \theta_{t-1} - \eta \nabla J(\theta_{t-1}) \] 而 SGD with Momentum 的更新规则引入了速度变量 \( v_t \),其递归定义为: \[ v_t = \beta v_{t-1} + \eta \nabla J(\theta_{t-1}) \] \[ \theta_t = \theta_{t-1} - v_t \] 这种递归形式使得速度 \( v_t \) 累积了所有过去的梯度信息,权重越大,越接近当前梯度;权重越小,越接近历史梯度[^4]。 #### 实现代码 以下是一个简单的 Python 实现示例: ```python # 初始化参数 theta = 0.0 v = 0.0 learning_rate = 0.01 momentum = 0.9 # 假设计算梯度的函数 def compute_gradient(theta): return 2 * theta # 示例:最小化 f(theta) = theta^2 # 更新规则 for t in range(100): # 迭代 100 次 grad = compute_gradient(theta) v = momentum * v + learning_rate * grad theta = theta - v print(f"Iteration {t+1}: theta = {theta}, gradient = {grad}") ``` #### 优势与局限性 SGD with Momentum 的主要优势在于其能够加速收敛并减少震荡,尤其在高维空间或复杂损失曲面中表现优异[^1]。然而,它也存在一些局限性,例如对超参数(如学习率和动量系数)的选择较为敏感,不当的设置可能导致发散或过慢收敛。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值