权重更新优化器总结

权重更新优化器总结

在上吴恩达的深度学习课程时,学习了很多权重更新的方式,但当时学习的时候比较蒙,可能当时理解了,后面又忘了为什么这么用。这两天又看到一些资料,正好整理总结一下。

在这里插入图片描述
我们先计算一下反向传播的公式,具体详细过程就不再讲解了/
以上图为例,现在我们更新权重 w 11 ( 2 ) w_{11}^{(2)} w11(2),更新公式如下所示:
w 11 ( 2 ) ( n e w ) = w 11 ( 2 ) ( o l d ) − l e a r n i n g _ r a t e × g r a d i e n t w_{11}^{(2)}(new) = w_{11}^{(2)}(old) - learning\_rate\times gradient w11(2)(new)=w11(2)(old)learning_rate×gradient

在实际训练时数据集的量是非常庞大的,我们不能保证数据一次性全部载入内存,因此只能分批次训练。

如果使用整个样本集进行训练,损失梯度会指向全局最优的方向,如下图所示。
在这里插入图片描述
因此在进行梯度传播时我们不能总是保证梯度朝着最优的方向前进。如果使用分批次样本进行求解损失梯度则会指向当前批次最优的方向,但是这个方向从全局来说不一定是最优的方向。如下图所示:
在这里插入图片描述
为了解决这个问题我们就要使用到优化器(optimizer),常见的优化器主要有一下几个:

  • SGD
  • SGD + Momentum
  • Adagrad
  • RMSProp
  • Adam
    它们的目的就是为了使网络收敛的更快。
1. SGD优化器(Stochastic Gradient Descent)

SGD也就是我们常说的随机梯度下降方法。
W t + 1 = W t − α ⋅ g ( W t ) W_{t+1} = W_t - \alpha· g(W_t) Wt+1=Wtαg(Wt)
缺点:

  • 易受样本噪声影响,比如说样本集中有样本的标签标注错误,那么这就会影响梯度下降的方向,可能会使下降方向很大程度上偏离最优方向。
  • 可能陷入局部最优解。每一批数据都是随机进行分批次训练,因此在可能存在在某一个批次下其方向与最优方向相背,去了另一个较低点,如下图红线部分所示:
    在这里插入图片描述
    为了解决这个问题,我们就要用到另一个优化方法:SGD + Momentum
2. SGD + Momentum

v t = η ⋅ v t − 1 + α ⋅ g ( w t ) v_t = \eta ·v_{t-1}+\alpha ·g(w_t) vt=ηvt1+αg(wt) w t + 1 = w t − v t w_{t+1} = w_t - v_t wt+1=wtvt其中 α \alpha α为学习率, g ( w t ) g(w_t) g(wt)为时刻t对参数 w t w_t wt的损失梯度, η ( 0.9 ) \eta(0.9) η(0.9)为动量系数。
这么做的意义:
在这里插入图片描述
这个方法可以有效抑制样本噪声的干扰。

3. Adagrad

计算公式:
s t = s t − 1 + g ( w t ) ⋅ g ( w t ) s_t = s_{t-1} + g(w_t)·g(w_t) st=st1+g(wt)g(wt) w t + 1 = w t − α s t + ε ⋅ g ( w t ) w_{t+1} = w_t - \frac{\alpha}{\sqrt{s_t+\varepsilon}}·g(w_t) wt+1=wtst+ε αg(wt)其中 α \alpha α为学习率, g ( w t ) 为 t g(w_t)为t g(wt)t时刻对参数 w t w_t wt的损失梯度, ε ( 1 0 − 7 ) \varepsilon(10^{-7}) ε(107)为防止分母为0的小数。

从公式我们可以看出 s t s_{t} st实际上是对前面的梯度求和,这就会使得 s t s_{t} st的值不断增大,在第二个式子中 α s t + ε \frac{\alpha}{\sqrt{s_t+\varepsilon}} st+ε α的值会不断减小,就会达到一种学习率自己调节的效果。
但是这样也会出现另一个缺点:刚开始的时候学习率下降的太快,可能还没有收敛就停止了训练。
为了解决这个问题我们可以使用RMSProp优化器(自适应学习率)。

4. RMSProp优化器(自适应学习率)

其实这个优化器就是在Adagrad第一个式子的基础上添加了两个控制因子。
s t = η ⋅ s t − 1 + ( 1 − η ) ⋅ g ( w t ) ⋅ g ( w t ) s_t = \eta·s_{t-1} + (1-\eta)·g(w_t)·g(w_t) st=ηst1+(1η)g(wt)g(wt) w t + 1 = w t − α s t + ε ⋅ g ( w t ) w_{t+1} = w_t - \frac{\alpha}{\sqrt{s_t+\varepsilon}}·g(w_t) wt+1=wtst+ε αg(wt)其中 α \alpha α为学习率, g ( w t ) 为 t g(w_t)为t g(wt)t时刻对参数 w t w_t wt的损失梯度, ε ( 1 0 − 7 ) \varepsilon(10^{-7}) ε(107)为防止分母为0的小数, η ( 0.9 ) \eta(0.9) η(0.9)控制衰减速度。

5.Adam优化器(自适应学习率)

计算公式:
m t = β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g ( w t )               一 阶 动 量 m_t = \beta_1·m_{t-1} + (1-\beta_1)·g(w_t) \space\space\space\space\space\space\space\space\space\space\space\space\space 一阶动量 mt=β1mt1+(1β1)g(wt)              v t = β 2 ⋅ v t − 1 + ( 1 − β 2 ) ⋅ g ( w t ) ⋅ g ( w t )               二 阶 动 量 v_t = \beta_2·v_{t-1} + (1-\beta_2)·g(w_t)·g(w_t) \space\space\space\space\space\space\space\space\space\space\space\space\space 二阶动量 vt=β2vt1+(1β2)g(wt)g(wt)              m t ^ = m t 1 − β 1 t \hat{m_t} = \frac{m_t}{1-\beta_1^t} mt^=1β1tmt v t ^ = v t 1 − β 2 t \hat{v_t} = \frac{v_t}{1-\beta_2^t} vt^=1β2tvt w t + 1 = w t − α v t ^ + ε m t ^ w_{t+1} = w_t - \frac{\alpha}{\hat{v_t}+\varepsilon}\hat{m_t} wt+1=wtvt^+εαmt^其中 α \alpha α为学习率, g ( w t ) 为 t g(w_t)为t g(wt)t时刻对参数 w t w_t wt的损失梯度, ε ( 1 0 − 7 ) \varepsilon(10^{-7}) ε(107)为防止分母为0的小数, β 1 ( 0.9 ) , β 2 ( 0.999 ) \beta_1(0.9),\beta_2(0.999) β1(0.9)β2(0.999)控制衰减速度。

在实际应用中一般会选择SGD、SGD+Momentum、Adam这几个优化器。
最后附上几个优化器的优化效果。:
在这里插入图片描述
我们可以看出这几个优化器的优化路径和速度,大家可以比较一下。

### 优化器机器学习深度学习中的作用 优化器机器学习深度学习的核心组件之一,在训练过程中用于最小化损失函数,从而提高模型的性能。以下是关于优化器的一些关键概念及其分类: #### 1. 什么是优化器优化器是一种算法工具,其主要目标是最小化或最大化某个目标函数(通常是损失函数)。通过调整模型参数,使得模型能够更好地拟合数据并提升泛化能力[^2]。 #### 2. 常见的优化器类型 以下是一些常用的优化器及其特点: - **梯度下降 (Gradient Descent)** 梯度下降是最基础的优化方法,它基于计算损失函数相对于模型权重的梯度,并沿着负梯度方向更新权重以降低误差。常见的变体有批量梯度下降、随机梯度下降(SGD) 和迷你批处理梯度下降(Mini-batch Gradient Descent)。 - **动量法 (Momentum)** 动量法改进了标准梯度下降,引入了一个累积历史梯度的方向项,帮助加速收敛速度并减少震荡现象。这尤其适用于具有高曲率或狭窄山谷形状的目标函数表面。 - **Adagrad** Adagrad 是一种自适应学习率的方法,针对不同特征分配不同的学习速率。这种方法特别适合于稀疏数据场景下的训练过程[^1]。 - **RMSprop** RMSprop 对 AdaGrad 的缺点进行了修正,解决了由于分母累加平方梯度过大而导致的学习率过早衰减问题。它的核心思想是对过去梯度做指数移动平均操作。 - **Adam Optimizer** Adam 结合了 Momentum 和 RMSProp 的优点,既保留了一阶矩估计又考虑到了二阶矩的影响,因此成为目前最广泛使用的优化器之一。相比其他方法,Adam 能够更快速地找到全局最优解或者局部极值点附近区域。 #### 3. 如何选择合适的优化器? 选择哪种具体的优化技术取决于具体应用场景的需求以及实际效果测试的结果。一般来说,对于小型到中型的数据集可以尝试使用 SGD 或者带有 momentum 的版本;而对于更大规模的任务,则建议采用更加先进的自适应策略如 Adam 等。 ```python import torch.optim as optim # 定义一个简单的神经网络模型 model = ... # 使用SGD作为优化器 optimizer_sgd = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) # 使用Adam作为优化器 optimizer_adam = optim.Adam(model.parameters(), lr=0.001) ``` #### 4. 超参数调节的重要性 无论是哪一类优化器都需要设置相应的超参数,例如初始步长(learning rate),momentum系数等等。这些数值的选择直接影响最终收敛的速度与质量,所以往往需要经过多次试验才能得到较优配置方案。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值