优化方法,一些重要参数learning rate,weight decay,momentum,learing rate decay

http://blog.youkuaiyun.com/lien0906/article/details/47399823


http://blog.youkuaiyun.com/u014114990/article/details/47779111


Stochastic Gradient Descent (SGD)

SGD的参数

在使用随机梯度下降(SGD)的学习方法时,一般来说有以下几个可供调节的参数:

  • Learning Rate 学习率
  • Weight Decay 权值衰减
  • Momentum 动量
  • Learning Rate Decay 学习率衰减

再此之中只有第一的参数(Learning Rate)是必须的,其余部分都是为了提高自适应性的参数,也就是说后3个参数不需要时可以设为0。

Learning Rate

学习率决定了权值更新的速度,设置得太大会使结果越过最优值,太小会使下降速度过慢。仅靠人为干预调整参数需要不断修改学习率,因此后面3种参数都是基于自适应的思路提出的解决方案。





SGD优缺点

  • 实现简单,当训练样本足够多时优化速度非常快
  • 需要人为调整很多参数,比如学习率,收敛准则等

Averaged Stochastic Gradient Descent (ASGD)

在SGD的基础上计算了权值的平均值。
$$\bar{w}t=\frac{1}{t-t_0}\sum^t{i=t_0+1} w_t$$

ASGD的参数

在SGD的基础上增加参数$t_0$

  • 学习率 $\eta$
  • 参数 $t_0$

ASGD优缺点

  • 运算花费和second order stochastic gradient descent (2SGD)一样小。
  • 比SGD的训练速度更为缓慢。
  • $t_0$的设置十分困难

3. Conjugate Gradient(共轭梯度法)

介于最速下降法与牛顿法之间的一个方法,它仅仅需要利用一阶导数的信息,克服了GD方法收敛慢的特点。

Link 1

Limited-memory Broyden-Fletcher-Goldfarb-Shanno (LBFGS) (一种拟牛顿算法)

L-BFGS算法比较适合在大规模的数值计算中,具备牛顿法收敛速度快的特点,但不需要牛顿法那样存储Hesse矩阵,因此节省了大量的空间以及计算资源。

Link 1
Link 2
Link 3

应用分析

不同的优化算法有不同的优缺点,适合不同的场合:

  • LBFGS算法在参数的维度比较低(一般指小于10000维)时的效果要比SGD(随机梯度下降)和CG(共轭梯度下降)效果好,特别是带有convolution的模型。
  • 针对高维的参数问题,CG的效果要比另2种好。也就是说一般情况下,SGD的效果要差一些,这种情况在使用GPU加速时情况一样,即在GPU上使用LBFGS和CG时,优化速度明显加快,而SGD算法优化速度提高很小。
  • 在单核处理器上,LBFGS的优势主要是利用参数之间的2阶近视特性来加速优化,而CG则得得益于参数之间的共轭信息,需要计算器Hessian矩阵。


<think> 嗯,用户想了解权重衰减(Weight Decay)和动量(Momentum)这两个超参数的相关信息。从引用内容来看,用户已经接触过一些基础概念,但需要更系统的解释和对比。 用户可能正在学习深度学习优化器相关的内容。从引用的资料看,ta对SGD优化器中的这两个参数特别关注,尤其是它们的作用机制和实际影响。用户引用的资料质量参差不齐,有些描述存在混淆(比如将weight decay完全等同于L2正则化),需要帮ta澄清。 关于权重衰减: - 核心作用是控制模型复杂度,本质上是通过L2正则化惩罚大权重。引用[2]和[3]都提到了λ系数的重要性,但需要强调λ过大反而会导致欠拟合 - 需要区分weight decay和L2正则化的细微差别:原始SGD中两者数学等价,但自适应优化器里不同(如AdamW) - 典型值范围在1e-5到1e-3之间,引用[4]提到权重衰减其实是"惩罚系数" 关于动量: - 物理类比很关键,引用[3]的力学解释很形象,可以沿用"惯性"这个比喻 - 要强调动量项对震荡方向的抑制效果(峡谷地形优化场景) - 需要补充动量系数设置经验:0.9是常见初始值,0.99用于精细调优 用户可能存在的潜在疑问: 1. 为什么有些框架把weight decay参数命名为lambda? 2. 动量和Nesterov动量有何区别? 3. 这两个参数如何配合使用效果最佳? 在回答时需要特别注意: - 避免混淆weight decay和L2正则化(虽然相关但有区别) - 动量公式要明确展示指数加权平均的特性 - 给出具体数值参考范围比抽象描述更有帮助 - 需要提醒超参数需要联合调试 从引用[4]看,用户可能对正则化原理理解不深,可以简单带过"高频跳跃成分导致过拟合"的数学直觉,但不宜展开弗罗贝尼乌斯范数等复杂概念。 </think>### 权重衰减(Weight Decay)与动量(Momentum)超参数详解 #### **一、权重衰减(Weight Decay)** 1. **核心作用** 通过向损失函数添加 **L2正则化项** $\lambda \|\theta\|^2$ 抑制模型过拟合: $$ J_{new}(\theta) = J(\theta) + \lambda \|\theta\|^2 $$ 其中 $\lambda$ 即权重衰减系数,$\theta$ 为模型参数[^2][^3]。 2. **工作原理** - 在参数更新时额外减去 $\lambda \theta$: $$ \theta_{t+1} = \theta_t - \eta \nabla J(\theta_t) - \eta \lambda \theta_t $$ - $\lambda$ 越大,参数值衰减越快,模型复杂度越低;但过大易导致欠拟合[^2][^4]。 3. **典型值范围** $\lambda$ 通常取 $10^{-5}$ 至 $10^{-3}$,需根据任务调整。例如: ```python optimizer = torch.optim.SGD(model.parameters(), lr=0.01, weight_decay=1e-4) ``` #### **二、动量(Momentum)** 1. **物理意义** 类比物体运动惯性:当前更新方向受历史更新方向影响,加速收敛并减小震荡[^3][^4]。 2. **更新公式** $$ v_t = \beta v_{t-1} + \eta \nabla J(\theta_t) $$ $$ \theta_{t+1} = \theta_t - v_t $$ 其中 $\beta$ 为动量系数(通常 $\in [0, 0.99]$),$v_t$ 是累积梯度[^3][^4]。 3. **效果** - $\beta$ 接近 1 时,历史方向主导更新,抑制梯度震荡 - $\beta$ 接近 0 时,退化为普通 SGD - 提升峡谷地形(梯度方向剧烈变化)的优化效率[^3][^4] --- #### **三、关键区别** | **特性** | 权重衰减 ($\lambda$) | 动量 ($\beta$) | |------------------|------------------------------|-----------------------------| | **目标** | 控制模型复杂度,防止过拟合 | 加速收敛,减少震荡 | | **影响参数** | 直接惩罚参数值大小 | 调整梯度更新方向的历史累积 | | **超参数范围** | $10^{-5} \text{~} 10^{-2}$ | $0.5 \text{~} 0.99$ | | **失效风险** | $\lambda$ 过大导致欠拟合 | $\beta$ 过大可能越过最优解 | --- #### **四、联合调参建议** 1. 优先设置动量 $\beta = 0.9$(经验值),再调整 $\lambda$ 2. 学习率 $\eta$ 需与 $\lambda$ 协同:大 $\eta$ 需配小 $\lambda$ 3. 自适应优化器(如 Adam)中,权重衰减需用 AdamW 变体[^3][^4] > **示例场景**:训练 ResNet 时常用组合 > ```python > optimizer = SGD(model.parameters(), > lr=0.1, > momentum=0.9, # 动量系数 > weight_decay=5e-4) # 权重衰减系数 > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值