深度学习6——优化器
·
1. 梯度下降与优化器
优化器根据损失函数计算出的梯度更新模型参数。
基础更新公式:
w_new = w - lr * gradient
其中:
- w:当前参数
- lr:学习率
- gradient:损失函数关于参数的梯度
批量梯度下降
每次使用全部训练数据计算平均损失,然后更新一次参数。
优点:
- 梯度比较稳定
缺点:
- 数据量大时计算成本高
- 每轮只能更新一次
随机梯度下降
每次随机选择一条样本计算损失并更新参数。
优点:
- 更新频繁
- 单次计算快
缺点:
- 梯度波动很大
- 训练过程不稳定
小批量随机梯度下降
实际深度学习最常用的方式。
每次随机取一个 batch:
一个 batch
→ 前向传播
→ 计算平均损失
→ 反向传播
→ 更新一次参数
一个 epoch 内参数会更新多次:
每个 epoch 的更新次数
≈ 训练样本数 / batch_size
例如训练集有1000条数据,batch size为100,则一个epoch大约更新10次参数。
2. SGD与Momentum
深度学习中通常所说的 SGD,实际一般指小批量 SGD。
优点:
- 原理简单
- 显存需求相对较低
- 有时泛化效果较好
- 梯度噪声可能帮助模型离开鞍点或较差区域
缺点:
- 容易震荡
- 对学习率敏感
- 收敛速度可能较慢
- 通常需要配合动量和学习率调度
Momentum
Momentum就是动量,会参考过去一段时间的梯度方向:
v = β*v + gradient
w_new = w - lr*v
其中:
- v:历史更新方向
- β:动量系数,常见值如0.9
作用:
- 减少来回震荡
- 在方向一致时加速前进
- 让参数更新更加稳定
3. Adam与AdamW
Adam
Adam结合了:
- Momentum:梯度的一阶滑动平均
- 自适应学习率:梯度平方的二阶滑动平均
可以简单理解为:
m = 梯度的滑动平均
v = 梯度平方的滑动平均
参数更新量
≈ lr * m / sqrt(v)
其中:
- m表示梯度长期的大致方向
- v表示梯度的波动和尺度
- 不同参数会获得不同的实际更新步长
特点:
- 通常收敛较快
- 对初始学习率相对不那么敏感
- 适合大多数深度学习任务作为起点
但Adam并不意味着不需要调学习率。
AdamW
AdamW将权重衰减与梯度更新分离:
先按照Adam计算梯度更新
再单独对权重进行衰减
相较于直接把L2项加入Adam的损失函数,AdamW的权重衰减行为更加明确。
大语言模型和Transformer训练中通常更常见 AdamW。
学习率的重要性
无论使用哪种优化器,学习率都是最重要的超参数之一:
- 学习率过大:Loss震荡甚至发散
- 学习率过小:训练速度慢,可能长时间不收敛
- 学习率合适:模型能够稳定下降并收敛
常见学习率策略:
- 固定学习率
- Step Decay
- Cosine Annealing
- Warmup
- ReduceLROnPlateau
更多推荐




所有评论(0)