logo

適応的な学習率: AdaGrad, RMSProp, Adam 📂機械学習

適応的な学習率: AdaGrad, RMSProp, Adam

概要1 2

勾配降下法で使用されるアダプティブラーニングレートと、これを適用したモデルであるAdaGrad、RMSProp、Adamについて説明する。

説明

勾配降下法で学習率learning rateは、パラメータが収束する速度、メソッドの成功の有無などを決定する重要なパラメータである。通常 α\alphaη\etaと表記され、パラメータをアップデートする際、どれだけ勾配を反映するかを決める因子である。

学習率による最適化の様子:大きな学習率(左)、小さな学習率(右)

θi+1=θiαL(θi) \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \alpha \nabla L (\boldsymbol{\theta}_{i})

基本的な勾配降下法では α\alpha は定数として説明されているが、この場合 勾配はベクトルなので、全ての変数(パラメータ)に対して同じ学習率が適用される。

αL(θ)=α[Lθ1Lθ2Lθk]=[αLθ1αLθ2αLθk] \alpha \nabla L (\boldsymbol{\theta}) = \alpha \begin{bmatrix} \dfrac{\partial L}{\partial \theta_{1}} & \dfrac{\partial L}{\partial \theta_{2}} & \cdots & \dfrac{\partial L}{\partial \theta_{k}} \end{bmatrix} = \begin{bmatrix} \alpha\dfrac{\partial L}{\partial \theta_{1}} & \alpha\dfrac{\partial L}{\partial \theta_{2}} & \cdots & \alpha\dfrac{\partial L}{\partial \theta_{k}} \end{bmatrix}

したがって、学習率を α=(α1,α2,,αk)\boldsymbol{\alpha} = (\alpha_{1}, \alpha_{2}, \dots, \alpha_{k}) のようなベクトルとして考え、勾配項を以下の式のように一般化することができる。

αL(θ)=[α1Lθ1α2Lθ2αkLθk] \boldsymbol{\alpha} \odot \nabla L (\boldsymbol{\theta}) = \begin{bmatrix} \alpha_{1}\dfrac{\partial L}{\partial \theta_{1}} & \alpha_{2}\dfrac{\partial L}{\partial \theta_{2}} & \cdots & \alpha_{k}\dfrac{\partial L}{\partial \theta_{k}} \end{bmatrix}

ここで \odot は行列のアダマール積(要素毎の積)を表す。このようにパラメータ毎に異なる適用される学習率 α\boldsymbol{\alpha}アダプティブラーニングレートadaptive learning rateと呼ぶ。以下の技術はアダプティブラーニングレートを勾配に依存して決定するため、α\boldsymbol{\alpha} は以下のような関数と見なすことができる。

α(L(θ))=[α1(L(θ))α2(L(θ))αk(L(θ))] \boldsymbol{\alpha} (\nabla L(\boldsymbol{\theta})) = \begin{bmatrix} \alpha_{1}(\nabla L(\boldsymbol{\theta})) & \alpha_{2}(\nabla L(\boldsymbol{\theta})) & \dots & \alpha_{k}(\nabla L(\boldsymbol{\theta})) \end{bmatrix}

以下ではAdaGrad、RMSProp、Adamを紹介する。ここで重要な事実は、モーメンタム技術を含むこれらのオプティマイザー間に絶対的優位性はないということである。分野によって、作業によって最適なオプティマイザーは異なるので、単純に「何が最も良いか」についての判断や質問は良くない。自分が属する分野で主に使用されているものが何かを把握することが役に立ち、それがない場合やよくわからない場合は、SGD+モーメンタムまたはAdamを使用することが無難である。

AdaGrad

AdaGradは論文"(Duchi et al., 2011)Adaptive subgradient methods for online learning and stochastic optimization"で紹介されたアダプティブラーニングレート技術です。この名前はadaptive gradientの略で、[エイダグラード]または[アダグラード]と読みます。AdaGradでは、各パラメータに対する学習率を勾配に反比例するように設定します。ベクトル r\mathbf{r} を次のように定義します。

r=(L)(L)=[(Lθ1)2(Lθ2)2(Lθk)2] \mathbf{r} = (\nabla L) \odot (\nabla L) = \begin{bmatrix} \left( \dfrac{\partial L}{\partial \theta_{1}} \right)^{2} & \left( \dfrac{\partial L}{\partial \theta_{2}} \right)^{2} & \cdots & \left( \dfrac{\partial L}{\partial \theta_{k}} \right)^{2} \end{bmatrix}

全体の学習率global learning rate ϵ\epsilon、任意の小さい数 δ\delta に対して、アダプティブラーニングレート α\boldsymbol{\alpha} は次のようになります。

α=ϵδ+r \boldsymbol{\alpha} = \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}}

式からわかるように、勾配の成分が大きい変数には学習率を小さくし、勾配の成分が小さい変数には学習率を大きく適用します。δ\delta は分母が 00 や非常に小さい数になるのを防ぐためのもので、通常は 10510710^{-5} \sim 10^{-7} の値を使用することが多いです。また、学習率は反復ごとに累積されます。ii 番目の反復での勾配を Li=L(θi)\nabla L _{i} = \nabla L (\boldsymbol{\theta}_{i}) とすると、

ri=(Li)(Li)αi=αi1+ϵδ+ri=j=1iϵδ+rjθi+1=θiαiLi \begin{align} \mathbf{r}_{i} &= (\nabla L_{i}) \odot (\nabla L_{i}) \nonumber \\ \boldsymbol{\alpha}_{i} &= \boldsymbol{\alpha}_{i-1} + \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{i}}} = \sum_{j=1}^{i} \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{j}}} \\ \boldsymbol{\theta}_{i+1} &= \boldsymbol{\theta}_{i} - \boldsymbol{\alpha}_{i} \odot \nabla L_{i} \nonumber \end{align}

アルゴリズム: AdaGrad
入力全体の学習率 ϵ\epsilon、小さな正数 δ\delta、エポック NN
1.パラメータ θ\boldsymbol{\theta} を任意の値で初期化する。
2.学習率を α=0\boldsymbol{\alpha} = \mathbf{0} で初期化する。
3.for i=1,,Ni = 1, \cdots, N do
4.   rL(θ)L(θ)\mathbf{r} \leftarrow \nabla L(\boldsymbol{\theta}) \odot \nabla L(\boldsymbol{\theta})# 勾配を計算し、各成分を二乗する
5.   αα+ϵδ+r\boldsymbol{\alpha} \leftarrow \boldsymbol{\alpha} + \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}}# アダプティブ学習率更新
6.   θθαL(θ)\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \boldsymbol{\alpha} \odot \nabla L(\boldsymbol{\theta})# パラメータ更新
7.end for

RMSProp

RMSPropは Root Mean Square Propagationの略で、ジェフリー・ヒントンGeoffrey Hintonの講義 Neural networks for machine learningで提案されたアダプティブラーニングレート技術です。基本的にAdaGradの変形であり、追加される項が指数的に減少するように(1)(1)の加算を加重和に変えただけです。ρ(0,1)\rho \in (0,1)に対して、

αi=ραi1+(1ρ)ϵδ+ri=(1ρ)j=1iρijϵδ+rj \boldsymbol{\alpha}_{i} = \rho \boldsymbol{\alpha}_{i-1} + (1-\rho) \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{i}}} = (1-\rho) \sum_{j=1}^{i} \rho^{i-j} \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{j}}}

通常は ρ=0.9,0.99\rho = 0.9, 0.99 のような大きな値が使用されます。

アルゴリズム: RMSProp
入力全体の学習率 ϵ\epsilon、小さな正数 δ\delta、減衰率 ρ\rho、エポック NN
1.パラメータ θ\boldsymbol{\theta} を任意の値で初期化する。
2.学習率を α=0\boldsymbol{\alpha} = \mathbf{0} で初期化する。
3.for i=1,,Ni = 1, \dots, N do
4.   rL(θ)L(θ)\mathbf{r} \leftarrow \nabla L(\boldsymbol{\theta}) \odot \nabla L(\boldsymbol{\theta})# 勾配を計算し、各成分を二乗する
5.   αρα+(1ρ)ϵδ+r\boldsymbol{\alpha} \leftarrow \rho \boldsymbol{\alpha} + (1-\rho) \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}}# アダプティブ学習率更新
6.   θθαL(θ)\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} - \boldsymbol{\alpha} \odot \nabla L(\boldsymbol{\theta})# パラメータ更新
7.end for

Adam

Adam“adaptive moments"から派生は論文”(Kingma and Ba, 2014)Adam: A method for stochastic optimization"で紹介されたオプティマイザです。アダプティブラーニングレートとモーメンタム技術を組み合わせたもので、RMSProp + モーメンタムと見ることができます。RMSPropとモーメンタムを理解していれば、Adamを理解するのは難しくありません。RMSProp、モーメンタム、Adamをそれぞれ比較すると、以下のようになります。Li=L(θi)\nabla L_{i} = \nabla L(\boldsymbol{\theta}_{i})とすると、

Momentumpi=β1pi1+Li(p0=0)θi+1=θiαpi\mathbf{p}_{i} = \beta_{1}\mathbf{p}_{i-1} + \nabla L_{i} \quad (\mathbf{p}_{0}=\mathbf{0}) \\ \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \alpha \mathbf{p}_{i}
RMSPropri=LiLiαi=β2αi1+(1β2)ϵδ+ri(α0=0)θi+1=θiαiLi\mathbf{r}_{i} = \nabla L_{i} \odot \nabla L_{i} \\ \boldsymbol{\alpha}_{i} = \beta_{2} \boldsymbol{\alpha}_{i-1} + (1-\beta_{2})\dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}_{i}}} \quad (\boldsymbol{\alpha}_{0}=\mathbf{0})\\ \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \boldsymbol{\alpha}_{i} \odot \nabla L_{i}
Adampi=β1pi1+(1β1)Li1(p0=0)p^i=pi1(β1)iri=β2ri1+(1β2)LiLir^i=r1(β2)iα^i=ϵδ+r^iθi+1=θiαi^pi^\mathbf{p}_{i} = \beta_{1}\mathbf{p}_{i-1} + (1-\beta_{1}) \nabla L_{i-1} \quad (\mathbf{p}_{0}=\mathbf{0}) \\\\[0.5em] \hat{\mathbf{p}}_{i} = \dfrac{\mathbf{p}_{i}}{1-(\beta_{1})^{i}} \\\\[0.5em] \mathbf{r}_{i} = \beta_{2} \mathbf{r}_{i-1} + (1-\beta_{2}) \nabla L_{i} \odot \nabla L_{i} \\\\[0.5em] \hat{\mathbf{r}}_{i} = \dfrac{\mathbf{r}}{1-(\beta_{2})^{i}} \\\\[0.5em] \hat{\boldsymbol{\alpha}}_{i} = \dfrac{\epsilon}{\delta + \sqrt{\hat{\mathbf{r}}_{i}}} \\\\[0.5em] \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \hat{\boldsymbol{\alpha}_{i}} \odot \hat{\mathbf{p}_{i}}

p^i\hat{\mathbf{p}}_{i}およびr^i\hat{\mathbf{r}}_{i}を計算する際に1βi1 - \beta^{i}で割る理由は、pi\mathbf{p}_{i}およびri\mathbf{r}_{i}が加重和であるため、これを加重平均に変換するためです。

アルゴリズム: Adam
入力全体の学習率 ϵ\epsilon (推奨値は 0.0010.001), エポック NN
小さな定数 δ\delta (推奨値は 10810^{-8})
減衰率 β_1,β_2\beta\_{1}, \beta\_{2} (推奨値はそれぞれ 0.90.90.9990.999)
1.パラメータ θ\boldsymbol{\theta} を任意の値で初期化する。
2.学習率を α=0\boldsymbol{\alpha} = \mathbf{0} で初期化する。
3.モーメンタムを p=0\mathbf{p} = \mathbf{0} で初期化する。
4.for i=1,,Ni = 1, \dots, N do
5.   pβ_1p+(1β_1)L\mathbf{p} \leftarrow \beta\_{1}\mathbf{p} + (1-\beta\_{1}) \nabla L# 加重和でモーメンタム更新
6.   p^p1(β_1)i\hat{\mathbf{p}} \leftarrow \dfrac{\mathbf{p}}{1-(\beta\_{1})^{i}}# 和を加重平均に補正
7.   rβ_2r+(1β_2)LL\mathbf{r} \leftarrow \beta\_{2} \mathbf{r} + (1-\beta\_{2}) \nabla L \odot \nabla L# 加重和で勾配の二乗ベクトル更新
8.   r^r1(β_2)i\hat{\mathbf{r}} \leftarrow \dfrac{\mathbf{r}}{1-(\beta\_{2})^{i}}# 和を加重平均に補正
9.   α^ϵδ+r^\hat{\boldsymbol{\alpha}} \leftarrow \dfrac{\epsilon}{\delta + \sqrt{\hat{\mathbf{r}}}}# アダプティブ学習率更新
10.   θ=θα^p^\boldsymbol{\theta} = \boldsymbol{\theta} - \hat{\boldsymbol{\alpha}} \odot \hat{\mathbf{p}}# パラメータ更新
11.end for

  1. Ian Goodfellow, Deep Learning, 8.5 アダプティブラーニングレートを用いたアルゴリズム ↩︎

  2. オ・イルソク, 機械学習(MACHINE LEARNING) (2017), ch 5.4 アダプティブラーニングレート ↩︎