动手学习深度学习(26)优化算法

茴香豆 Lv5

优化算法使我们能够继续更新模型参数,并使损失函数的值最小化。优化算法对于深度学习非常重要。一方面,训练复杂的深度学习模型可能需要数小时、几天甚至数周。优化算法的性能直接影响模型的训练效率。另一方面,了解不同优化算法的原则及其超参数的作用将使我们能够以有针对性的方式调整超参数,以提高深度学习模型的性能。

优化问题

  • 一般形式 minimize f(x) subject to x \in C

  • 局部最优与全局最优。凸优化问题局部最小一定是全局最小。

    • 凸:线性回归、softmax回归
    • 非凸:其他、MLP,CNN,RNN,attention,…
  • 梯度下降、随机梯度下降(求导很贵的时候)、小批量随机梯度下降

冲量法(moment)

  • 冲量法使用平滑过的梯度对权重更新

    g_t = \frac{1}{b}\sum_{i\in I_t}\nabla l_i(x_{t-1})

    v_t = \beta v_{t-1} + g_t w_t = w_{t-1} - \mu v_t

    梯度平滑: v_t = g_t + \beta g_{t-1} + \beta^2g_{t-2}+\beta^3g_{t-3}+...

  • \beta 常见取值 [0.5,0.9,0.95,0.99]

Adam(比冲量法更平滑)

  • 记录 v_t = \beta_1v_{t-1}+(1-\beta_1)g_t ,通常 \beta_1=0.9

  • 展开 v_t = (1-\beta_1)(g_t + \beta g_{t-1} + \beta^2g_{t-2}+\beta^3g_{t-3}+...)

  • 因为 \sum_{i=0}^{\infty}\beta_{1}^{i}=\frac{1}{1-\beta_1} ,所以权重和为1

  • 由于 v_0=0 ,且 \sum_{i=0}^{t}\beta_1^i=\frac{1-\beta_1^t}{1-\beta_1} ,修正 \hat{v}_t=\frac{v_t}{1-\beta_1^t} (修正针对t较小的情况)

  • 类似记录 s_t = \beta_2s_{t-1}+(1-\beta_2)g_t^2 ,通常 \beta_2=0.999 ,且修正 \hat{s}_t=\frac{s_t}{1-\beta_2^t}

  • 计算重新调整后的梯度 g'_t=\frac{\hat{v}_t}{\sqrt{\hat{s}_t}+\epsilon}

  • 最后更新 w_t=w_{t-1}-\eta g'_t

  • Title: 动手学习深度学习(26)优化算法
  • Author: 茴香豆
  • Created at : 2023-02-14 09:34:11
  • Updated at : 2023-02-14 10:11:12
  • Link: https://hxiangdou.github.io/2023/02/14/DL_26/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
动手学习深度学习(26)优化算法