CS231N Lecture4 优化
2️⃣ follow the slope
直接计算导数、使用导数(deltaloss/delta-h)
缺点:对求导计算缓慢,如果矩阵/维度过大
===用一个方程表示梯度(反向传播 第六节中讲述)
Computing Gradients(计算梯度)
numeric/analytic (计算出值/分析)
一般使用数字梯度来检验对解析梯度的推导
(pytorch提供了一个函数gradcheck、实现相似的功能)
gradient descent梯度下降
包含的超参:
1️⃣初始化权重的方法
2️⃣循环次数:受计算预算和时间限制
3️⃣学习率learning rate:
较大:收敛较快
较小:不容易数字爆炸、但时间较长
梯度下降的feature:使用全部数据,当数据集较大时,不适用
batch gradient descent(批量梯度下降)
选择批量,进行求loss和计算梯度
SGD随机梯度下降
stochastic gradient descentSGD随机梯度下降
存在的问题:
局部最小、鞍点/收敛速度一方过大一方过小
更智能的方法:
1.sgd+动量更新
初始化相同、用梯度算出”dw”的值,用来更新速度向量,(想象球滚落)(类似于对梯度计算历史平均值)
超参数:rho– decay rate
(当抵达局部最小/鞍点,仍有残余速度去跳出局部,更平滑地处理高纬度问题)
2.Nesterov 动量更新
如图
“Look ahead”会对下一时刻的梯度进行预测
两者对比:
sgd特征:1.可能会overshoot(到达底端后,会有反向动量存在,往回走一段距离,如下图)
Adaptive learning rates自适应学习率
1.AdaGrad算法
(通过除以梯度,抑制/提高运动速度)
问题:grad—squared不断增加(趋于无限大),学习率不断下降,可能在达到结果前停止
2.RMSprop(对AdaGrad的改善)
添加参数decay_rate 来降低grad_squared, 类似加入摩擦系数
Adam(RMSProp+动量)
——非常强大的优化算法,适用于不同的任务,超参的调整范围也较小
将两种算法结合,存在问题:如果beta2趋于1,那么优化第一步可能走出很大一步(除以近似0的数)
对其进行改善:添加Bias Corection(偏差校正),让其更稳健。
AdamW:Adam Variant with Weight Decay
Source:https://www.fast.ai/posts/2018-07-02-adam-weight-decay.html
在每次epoch中,对权重进行衰减:
1 | moving_avg = alpha * moving_avg + (1-alpha) * w.grad |

Learning Rate Decay 减少学习率
在某些固定点减少学习率。常见的方法如下:

二阶优化方法:L-BFGS(准确但不实际)/BGFS(最常用)
使用Hessian矩阵,可以使对学习率/步长的选择更加合理。但数据量巨大,只适合低维优化问题
总结(对优化算法的比较)
- Title: CS231N Lecture4 优化
- Author: Rongying Liu
- Created at : 2024-12-07 19:14:49
- Updated at : 2025-01-20 23:30:42
- Link: https://github.com/Roinnnn11/Roinnnn11.github.io/2024/12/07/CS231N/优化/
- License: This work is licensed under CC BY-NC-SA 4.0.