logo

勾配降下における運動量法 📂機械学習

勾配降下における運動量法

概要1 2

勾配降下法におけるモーメンタム技術は、パラメーターを更新する際に以前の勾配もすべて使用することである。これが本質であり、これに尽きる。しかし、奇妙な更新式や物理学の運動量が動機となったとか、質量を$1$に設定し初期速度を$0$にするといった説明は理解を難しくするだけである。本稿では、モーメンタム技術をできるだけシンプルに説明する。

ビルドアップ

パラメーターを$\boldsymbol{\theta}$、損失関数を$L$とするとき、標準的な勾配降下法は、以下のように反復的にパラメーターを更新する方法である。

$$ \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \alpha \nabla L_{i} $$

ここで$L_{i} = L(\boldsymbol{\theta}_{i})$は、$i$番目の反復で計算された損失関数を意味する。モーメンタム技術とは、これに単に前の反復で計算された損失関数の勾配$\nabla L_{i-1}$を加えることに過ぎない。

$$ \boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \alpha \nabla L_{i} - \alpha \nabla L_{i-1} - \cdots - \alpha \nabla L_{0} $$

ここで、反復が進むにつれて勾配の影響を減らし、勾配の合計が発散するのを防ぐために係数$\beta \in (0,1)$を追加すると、次のようになる。

$$ \begin{align} \boldsymbol{\theta}_{i+1} &= \boldsymbol{\theta}_{i} - \alpha \nabla L_{i} - \beta \alpha \nabla L_{i-1} - \cdots - \beta^{i}\alpha \nabla L_{0} \nonumber \\ &= \boldsymbol{\theta}_{i} - \alpha\sum_{j=0}^{i} \beta^{j} \nabla L_{i-j} \end{align} $$

定義

$(1)$のようにパラメーターを更新することをモーメンタム技術momentum methodと呼び、追加される項$\alpha\sum\limits_{j=0}^{i} \beta^{j} \nabla L_{i-j}$をモーメンタムmomentumと呼ぶ。

説明

上記の定義によれば、モーメンタム技術は一般化された勾配降下法であり、むしろ勾配降下法はモーメンタム技術の$\beta = 0$の特別なケースに過ぎないと見ることができる。$\beta$が$1$に近いほど以前の勾配を多く反映し、$0$に近いほど少なく反映する。

勾配降下法は、現在の傾きが最も大きい方向へパラメーターを更新するために貪欲アルゴリズムである。モーメンタム技術は勾配降下法の貪欲な部分を少し和らげ、現在最善の選択ではないが長期的にはより有効な選択をすることができるようにする。また、勾配の方向が急激に変わるのを防ぐことができる。

当然ながら、パラメーターを更新する際の勾配の大きさが勾配降下法より大きいため、収束速度が速いという利点がある。また、経験的に局所的最小値local minimaから比較的脱出しやすいことが知られており、坂を転がり下るボールが十分な速さであれば、下り坂の途中にある小さな坂も越えて通り過ぎることができると説明される。

ここで重要な事実は、適応的学習率技術を含むこれらのオプティマイザー間に絶対的な優位性はないということである。分野や作業によって最適なオプティマイザーが異なるため、「何が最も良いか」という判断や質問は適切ではない。自分が所属する分野で主に使用されているものが何かを知ることが役立ち、それがないか分からなければSGD+モーメンタムまたはAdamを使用するのが無難である。

ネステロフのモーメンタム

モーメンタム技術を再検討すると、次のパラメーター$\boldsymbol{\theta}_{i+1}$を得るために、現在のパラメーター$\boldsymbol{\theta}_{i}$に現在のパラメーターで計算された勾配$\alpha \nabla L(\boldsymbol{\theta}_{i})$を蓄積しながら加えていく。

ネステロフのモーメンタムNesterov momentumまたはネステロフ加速勾配Nesterov accelerated gradient, NAGと呼ばれる技術は、「現在のパラメーターに前の勾配を加えた値」で勾配を求め、これを現在のパラメーターに加えて次のパラメーターを求める。言葉ではやや複雑だが、モーメンタム技術を理解していれば、以下のアルゴリズムを見ることでネステロフのモーメンタムを理解するのが簡単になるかもしれない。

アルゴリズム

モーメンタム項を$\mathbf{p}$と表す。

アルゴリズム: モーメンタム技術
入力学習率 $\alpha$, モーメンタムパラメーター $\beta$, エポック $N$
1.パラメーター $\boldsymbol{\theta}$を任意の値で初期化する。
2.モーメンタムを $\mathbf{p} = \mathbf{0}$で初期化する。
3.for $k = 1, \cdots, N$ do
4.   $\mathbf{p} \leftarrow \beta \mathbf{p} - \alpha \nabla L(\boldsymbol{\theta})$# 勾配を計算しモーメンタムを更新
5.   $\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} + \mathbf{p}$# パラメーターを更新
6.end for
アルゴリズム: ネステロフのモーメンタム
入力学習率 $\alpha$, モーメンタムパラメーター $\beta$, エポック $N$
1.パラメーター $\boldsymbol{\theta}$を任意の値で初期化する。
2.モーメンタムを $\mathbf{p} = \mathbf{0}$で初期化する。
3.for $k = 1, \cdots, N$ do
4.   $\mathbf{p} \leftarrow \beta \mathbf{p} - \alpha \nabla L(\boldsymbol{\theta} + \beta \mathbf{p})$# 勾配を計算しモーメンタムを更新
5.   $\boldsymbol{\theta} \leftarrow \boldsymbol{\theta} + \mathbf{p}$# パラメーターを更新
6.end for

両方の方法について初めの数回の計算を見ると、以下のようになる。簡単に$\mathbf{p}_i = \alpha \nabla L_i$、および$\mathbf{p}^i = \alpha \nabla L(\boldsymbol{\theta}_i - \beta^{1}\mathbf{p}^{i-1} - \beta^{2}\mathbf{p}^{i-2} - \cdots - \beta^{i}\mathbf{p}^{0})$(このとき$\mathbf{p}^{0} = \mathbf{p}_0$)と表記すると、

モーメンタムネステロフのモーメンタム
$\boldsymbol{\theta}\_{0} =$ 初期値$\boldsymbol{\theta}\_{0} =$ 初期値
$\boldsymbol{\theta}_{1} = \boldsymbol{\theta}_{0} - \alpha \nabla L_{0} \\ \quad\ = \boldsymbol{\theta}_{0} - \mathbf{p}_{0}$$\boldsymbol{\theta}_{1} = \boldsymbol{\theta}_{0} - \alpha \nabla L_{0} \\ \quad\ = \boldsymbol{\theta}_{0} - \mathbf{p}^{0}$
$\boldsymbol{\theta}_{2} = \boldsymbol{\theta}_{1} - \alpha\nabla L_{1} - \beta \mathbf{p}_{0} \\ \quad\ = \boldsymbol{\theta}_{1} - \mathbf{p}_{1} - \beta \mathbf{p}_{0}$$\boldsymbol{\theta}_{2} = \boldsymbol{\theta}_{1} - \alpha \nabla L(\boldsymbol{\theta}_{1} - \beta \mathbf{p}^{0}) - \beta \mathbf{p}^{0} \\ \quad\ = \boldsymbol{\theta}_{1} - \mathbf{p}^{1} - \beta \mathbf{p}^{0}$
$\boldsymbol{\theta}_{3} = \boldsymbol{\theta}_{2} - \mathbf{p}_{2} - \beta \mathbf{p}_{1} - \beta^{2} \mathbf{p}_{0} \\ \quad\ = \boldsymbol{\theta}_{2} - \sum\limits_{j=0}^{2}\beta^{j}\mathbf{p}_{2-j}$$\boldsymbol{\theta}_{3} = \boldsymbol{\theta}_{2} - \alpha \nabla L(\boldsymbol{\theta}_{2} - \beta \mathbf{p}^{1} - \beta^{2}\mathbf{p}^{0}) - \beta \mathbf{p}^{1} - \beta^{2}\mathbf{p}^{0} \\ \quad\ = \boldsymbol{\theta}_{2} - \mathbf{p}^{2} - \beta \mathbf{p}^{1} - \beta^{2} \mathbf{p}^{0}$
$$\vdots$$$$\vdots$$
$\boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \sum\limits_{j=0}^{i}\beta^{j}\mathbf{p}_{i-j}$$\boldsymbol{\theta}_{i+1} = \boldsymbol{\theta}_{i} - \sum\limits_{j=0}^{i}\beta^{j}\mathbf{p}^{i-j}$

  1. イアン・グッドフェロー, ディープラーニング, 第8.3.2節 モーメンタム, 第8.3.3節 ネステロフのモーメンタム ↩︎

  2. オ・イルソク, 機械学習(MACHINE LEARNING) (2017), 第5.3節 モーメンタム ↩︎