logo

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

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

概要1 2

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

説明

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

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

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

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

$$ \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} $$

したがって、学習率を $\boldsymbol{\alpha} = (\alpha_{1}, \alpha_{2}, \dots, \alpha_{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}$ は以下のような関数と見なすことができる。

$$ \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では、各パラメータに対する学習率を勾配に反比例するように設定します。ベクトル $\mathbf{r}$ を次のように定義します。

$$ \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}$ は次のようになります。

$$ \boldsymbol{\alpha} = \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}} $$

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

$$ \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$、エポック $N$
1.パラメータ $\boldsymbol{\theta}$ を任意の値で初期化する。
2.学習率を $\boldsymbol{\alpha} = \mathbf{0}$ で初期化する。
3.for $i = 1, \cdots, N$ do
4.   $\mathbf{r} \leftarrow \nabla L(\boldsymbol{\theta}) \odot \nabla L(\boldsymbol{\theta})$# 勾配を計算し、各成分を二乗する
5.   $\boldsymbol{\alpha} \leftarrow \boldsymbol{\alpha} + \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}}$# アダプティブ学習率更新
6.   $\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)$の加算を加重和に変えただけです。$\rho \in (0,1)$に対して、

$$ \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}}} $$

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

アルゴリズム: RMSProp
入力全体の学習率 $\epsilon$、小さな正数 $\delta$、減衰率 $\rho$、エポック $N$
1.パラメータ $\boldsymbol{\theta}$ を任意の値で初期化する。
2.学習率を $\boldsymbol{\alpha} = \mathbf{0}$ で初期化する。
3.for $i = 1, \dots, N$ do
4.   $\mathbf{r} \leftarrow \nabla L(\boldsymbol{\theta}) \odot \nabla L(\boldsymbol{\theta})$# 勾配を計算し、各成分を二乗する
5.   $\boldsymbol{\alpha} \leftarrow \rho \boldsymbol{\alpha} + (1-\rho) \dfrac{\epsilon}{\delta + \sqrt{\mathbf{r}}}$# アダプティブ学習率更新
6.   $\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をそれぞれ比較すると、以下のようになります。$\nabla L_{i} = \nabla L(\boldsymbol{\theta}_{i})$とすると、

Momentum$\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}$
RMSProp$\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}$
Adam$\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}} $

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

アルゴリズム: Adam
入力全体の学習率 $\epsilon$ (推奨値は $0.001$), エポック $N$
小さな定数 $\delta$ (推奨値は $10^{-8}$)
減衰率 $\beta\_{1}, \beta\_{2}$ (推奨値はそれぞれ $0.9$ と $0.999$)
1.パラメータ $\boldsymbol{\theta}$ を任意の値で初期化する。
2.学習率を $\boldsymbol{\alpha} = \mathbf{0}$ で初期化する。
3.モーメンタムを $\mathbf{p} = \mathbf{0}$ で初期化する。
4.for $i = 1, \dots, N$ do
5.   $\mathbf{p} \leftarrow \beta\_{1}\mathbf{p} + (1-\beta\_{1}) \nabla L$# 加重和でモーメンタム更新
6.   $\hat{\mathbf{p}} \leftarrow \dfrac{\mathbf{p}}{1-(\beta\_{1})^{i}}$# 和を加重平均に補正
7.   $\mathbf{r} \leftarrow \beta\_{2} \mathbf{r} + (1-\beta\_{2}) \nabla L \odot \nabla L$# 加重和で勾配の二乗ベクトル更新
8.   $\hat{\mathbf{r}} \leftarrow \dfrac{\mathbf{r}}{1-(\beta\_{2})^{i}}$# 和を加重平均に補正
9.   $\hat{\boldsymbol{\alpha}} \leftarrow \dfrac{\epsilon}{\delta + \sqrt{\hat{\mathbf{r}}}}$# アダプティブ学習率更新
10.   $\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 アダプティブラーニングレート ↩︎