CS231n(叁)——正则化与优化
$\large\star$ 梯度下降 gradient descent
重复计算损失函数的梯度然后对参数进行更新,这一过程称为梯度下降,如代码:
1 | # 普通的梯度下降 |
可见简写公式:
$$\large\ W _ { t + 1 } = W _ { t } - \eta \nabla L ( W _ { t } )$$
其中: - Wt:当前参数; - ∇L(Wt):当前梯度; - η:学习率; - Wt + 1:更新后的参数。
梯度决定往哪里走,学习率决定一步走多远
随机梯度下降 stochastic gradient descent (SGD)
小批量数据梯度下降(Mini-batch gradient descent):大规模应用中,训练数据是大量的,如果计算整个训练集,来获得仅仅一个参数的更新,过于浪费。一个常用的方法是计算训练集中的小批量(batches)数据。如代码:
1 | # 普通的小批量数据梯度下降 |
小批量数据策略有个极端情况,当每个批量中只有 1 个数据样本,这种策略被称为 SGD,有时候也被称为在线梯度下降。以后均以 SGD 作最宽泛的描述!
SGD 的三个问题
一、不同方向的曲率差异大
陡峭方向震荡;平缓方向前进慢
二、梯度为 0,SGD 卡死
遇到局部极小或鞍点,不能继续移动
三、梯度存在噪声
小批量采样时每个 mini-batch 包含数据不同,计算出梯度不同,导致梯度不准,更新方向抖动
Momentum (动量法)
普通 SGD 只使用当前梯度:
Wt + 1 = Wt − ηgt
Momentum 会保留过去的运动趋势:
vt + 1 = βvt + gt
Wt + 1 = Wt − η vt + 1
其中: - vt:当前速度; - β:动量系数; - η:学习率; - gt:当前梯度。
常用:
β = 0.9
(此方法不利于收敛)
RMSProp
RMSProp 用梯度平方的指数加权平均来逐参数自适应地缩放学习率,从而缓解”不同方向曲率差异大”的问题:
st + 1 = βst + (1 − β)gt2
$$W_{t+1} = W_t - \frac{\eta}{\sqrt{s_{t+1}} + \epsilon} g_t$$
其中: - st:梯度平方的指数加权平均(梯度二阶矩); - β:衰减系数,常用 0.9; - ϵ:防止除零的小常数,常用 10−7; - η:学习率。
陡峭方向梯度平方大 → 有效学习率被自动压小;平缓方向梯度平方小 → 有效学习率被自动放大。
$\large\star$ 总结
| 方法 | 更新思想 | 主要缓解的问题 |
|---|---|---|
| 梯度下降 / SGD | 沿当前梯度反方向更新,用 mini-batch 近似全量梯度 | 全量梯度计算代价过高 |
| Momentum | 累积历史梯度形成”速度”,抑制震荡 | 曲率差异大导致的震荡 |
| RMSProp | 用梯度平方的指数加权平均逐参数缩放学习率 | 不同方向曲率差异大 |
一句话总结:梯度决定往哪里走,学习率决定一步走多远;动量让方向更稳,自适应方法让步长更合理。
