CS231N Lecture4 优化

Rongying Liu 课程

2️⃣ follow the slope

直接计算导数、使用导数(deltaloss/delta-h)

缺点:对求导计算缓慢,如果矩阵/维度过大

===用一个方程表示梯度(反向传播 第六节中讲述)

Computing Gradients(计算梯度)

numeric/analytic (计算出值/分析)

一般使用数字梯度来检验对解析梯度的推导

(pytorch提供了一个函数gradcheck、实现相似的功能)

image

gradient descent梯度下降

包含的超参:

1️⃣初始化权重的方法

2️⃣循环次数:受计算预算和时间限制

3️⃣学习率learning rate:

较大:收敛较快

较小:不容易数字爆炸、但时间较长

梯度下降的feature:使用全部数据,当数据集较大时,不适用

image

batch gradient descent(批量梯度下降)

选择批量,进行求loss和计算梯度

SGD随机梯度下降

stochastic gradient descentSGD随机梯度下降

image

存在的问题:

局部最小、鞍点/收敛速度一方过大一方过小

更智能的方法:

1.sgd+动量更新

初始化相同、用梯度算出”dw”的值,用来更新速度向量,(想象球滚落)(类似于对梯度计算历史平均值)

超参数:rho– decay rate

(当抵达局部最小/鞍点,仍有残余速度去跳出局部,更平滑地处理高纬度问题)

image

2.Nesterov 动量更新

如图

“Look ahead”会对下一时刻的梯度进行预测

image

两者对比:

image

sgd特征:1.可能会overshoot(到达底端后,会有反向动量存在,往回走一段距离,如下图)

image

Adaptive learning rates自适应学习率

1.AdaGrad算法

(通过除以梯度,抑制/提高运动速度)

问题:grad—squared不断增加(趋于无限大),学习率不断下降,可能在达到结果前停止

image

2.RMSprop(对AdaGrad的改善)

添加参数decay_rate 来降低grad_squared, 类似加入摩擦系数

image

Adam(RMSProp+动量)

——非常强大的优化算法,适用于不同的任务,超参的调整范围也较小

将两种算法结合,存在问题:如果beta2趋于1,那么优化第一步可能走出很大一步(除以近似0的数)

image

对其进行改善:添加Bias Corection(偏差校正),让其更稳健。

image

AdamW:Adam Variant with Weight Decay

Source:https://www.fast.ai/posts/2018-07-02-adam-weight-decay.html

在每次epoch中,对权重进行衰减:

1
2
3
moving_avg = alpha * moving_avg + (1-alpha) * w.grad 

w = w - lr * moving_avg - lr * wd * w

image

Learning Rate Decay 减少学习率

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

image

二阶优化方法:L-BFGS(准确但不实际)/BGFS(最常用)

使用Hessian矩阵,可以使对学习率/步长的选择更加合理。但数据量巨大,只适合低维优化问题

image

总结(对优化算法的比较)

image

  • 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.
Comments