banner
NEWS LETTER

优化算法总结

Scroll down

优化算法总结

认为优化算法可以分为三部分:

  1. 批量部分
  2. 更新部分
  3. 调整学习率部分

1 批量部分

优化算法_批量层面.drawio

GD: 最初的算法为梯度下降(GD),对所有样本损失的平均作反向更新

$\mathbf g_t=\dfrac1{|I|}\sum\limits_{i\in I}\nabla\mathcal l_i(x_{t-1})$

2 更新部分

优化算法_更新层面.drawio

主要调整步进的方式,方法之间的关系与更迭的逻辑如图,具体算法见下:

Momentum:

$\mathbf v_t=\beta\mathbf v_{t-1}+\mathbf g_t$
$\mathbf w_t = \mathbf w_{t-1}-\eta\mathbf v_t$

AdaGrad:

$\mathbf s_t=\mathbf s_{t-1}+\mathbf g_t^2$
$\mathbf w_t=\mathbf w_{t-1}-\dfrac\eta{\sqrt{\mathbf s_t+\epsilon}}\cdot \mathbf g_t$

RMSProp:

$\mathbf s_t=\gamma\mathbf s_{t-1}+(1-\gamma)\mathbf g_t^2$
$\mathbf w_t=\mathbf w_{t-1}-\dfrac\eta{\sqrt{\mathbf s_t+\epsilon}}\cdot \mathbf g_t$

Adadelta:

$\mathbf s_t=\gamma\mathbf s_{t-1}+(1-\gamma)\mathbf g_t^2$
$\mathbf w_t=\mathbf w_{t-1}-\mathbf g't$
$\mathbf g't=\dfrac{\sqrt{\Delta\mathbf x{t-1+}\epsilon}}{\sqrt{\mathbf s_t+\epsilon}}\cdot \mathbf g_t$
$\Delta \mathbf x
{t}=\lambda\Delta\mathbf x_{t-1}+(1-\lambda)\mathbf g'^{2}_{t}$

Adam:

估算动量和二阶矩:
$\mathbf v_t=\beta_1\mathbf v_{t-1}+(1-\beta_1)\mathbf g_t$
$\mathbf s_t=\beta_2\mathbf s_{t-1}+(1-\beta_2)\mathbf g_t^2$

无偏化处理:
$\hat{\mathbf{v}}_t = \dfrac{\mathbf v_t}{1-\beta_1^t}$
$\hat{\mathbf{s}}_t = \dfrac{\mathbf s_t}{1-\beta_2^t}$
更新:
$\mathbf g'_t=\dfrac{\eta\mathbf {\hat{\mathbf v}_t}}{\sqrt{\hat{\mathbf s}t}+\epsilon}$
$\mathbf x_t = \mathbf x
{t-1}-\mathbf g'_t$

3 学习率部分

优化算法_学习率方面.drawio

最简单的是固定学习率

  • 随迭代轮数减少学习率

    • 单因子调度器:$\eta_{t+1}=\eta_t\cdot\alpha$

      为了防止衰减过度,一般使用:$\eta_{t+1}=\max(\eta_{\min},\eta_t\cdot \alpha)$

    • 多因子调度器:$s={5,10,20},t\in s时,\eta_{t+1}=\eta_t\cdot\alpha$

    • 余弦调度器:$\eta_t=\eta_T+\dfrac{\eta_0-\eta_T}2(1+\cos(\pi t/T))$,$t>T$后不更新

  • 增加预热期

    • 线性增加
其他文章/Other Articles
cover
不燃的代价
  • 25/09/13
  • 00:19
  • 3.3k
  • 11
目录导航/Table of Contents 置顶/Sticky
  1. 1. 优化算法总结
    1. 1.1. 1 批量部分
    2. 1.2. 2 更新部分
    3. 1.3. 3 学习率部分