返回博客列表

Untitled

选择优化器

总结从针对手头问题类型的最常用的优化器开始。

  • 没有一个优化器是适用于所有类型的机器学习问题和模型架构的‘最佳’优化器。即使只是 比较优化器的性能也是一项艰巨的任务。

  • 我们建议坚持使用成熟、流行的优化器,尤其是在开始新项目时。

  • 理想情况下,选择用于同类问题的最常用优化器。

  • 做好关注选择的优化器的 *所有* 超参数的准备。

  • 具有更多超参数的优化器可能需要更多的调优工作才能找到最佳配置。

  • 当我们试图找到各种其他超参数(例如架构超参数)的最佳值时,将优化器超参数视为冗余参数是有意义的,这在项目的初始阶段尤其重要。

  • 在项目的初始阶段,从更简单的优化器开始会更可取(例如,具有固定动量的 SGD 或具有固定 \epsilon\beta_{1}\beta_{2} 的 Adam ) ,之后可以切换到更通用的优化器。

  • 常用且较为完善的优化器包括(但不限于):

  • SGD with momentum(Nesterov 变体)
  • Adam and NAdam,它们比具有动量的 SGD 更通用。请注意,Adam 有 4 个可调超参数,他们都很重要

Adam 的超参数应该如何调整?

  • 正如之前讨论的那样, 对搜索空间以及应该从搜索空间中采样数量做出概括性陈述是非常困难的。 请注意,并非 Adam 中的所有超参数都一样重要。 以下经验法则对应于研究中试验次数的不同“预算”。
    • 如果在一次研究中,训练次数试验次数小于10,那么只需要对基本学习率进行调整。
    • 如果试验次数在10到25次之间, 那么需要对学习率以及 \beta_1 进行调整。
    • 如果试验次数在25次以上,那么需要对学习率、 \beta_1 以及 \epsilon 进行调整。
    • 如果可以运行的试验次数大于25次,还需要额外调整\beta_2

优化算法的更新规则是什么?

Stochastic gradient descent (SGD)

\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)

Momentum

v_0 = 0

v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)

\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}

Nesterov

v_0 = 0

v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)

\theta_{t+1} = \theta_{t} - \eta_t( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t})

RMSProp

v_0 = 1 \text{,} m_0 = 0

v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2

m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)

\theta_{t+1} = \theta_{t} - m_{t+1}

ADAM

m_0 = 0 \text{,} v_0 = 0

m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)

v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2

b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}

\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}

NADAM

m_0 = 0 \text{,} v_0 = 0

m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)

v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2

b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}

\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}

评论