モーメンタム法のアルゴリズムをExcelに実装して具体例を解いてみた。

2023年10月7日

前回は最小二乗法を解くために、確率的勾配降下法のアルゴリズムをExcelで試してみました。

>> 【Excelでアルゴリズムを実装】確率的勾配降下法を使って最小二乗法を解いてみる

 

当ページのリンクには広告やプロモーションが含まれています。

収束時の振動を抑えるモーメンタム法

最終的には全サンプルデータでパラメータを更新する最急降下法と同じ値に収束しましたが、その過程でパラメータが激しく振動していました。

例えばこのような感じです。

 

でも、こんなに振動してモタモタしていると収束に時間がかかるので、次のようになってもらいたいのです。

つまり振幅を抑えたいのです。

 

そのための改良方法がモーメンタム法です。

確率的勾配降下法ではランダムにデータを選んできて、そのデータと直線との差(勾配)に応じて直線のパラメータを変更するというやり方でしたね。

この勾配が毎回大きく変わると振幅が大きくなります。

でも、ランダムに選んでくるデータによって勾配は決まるため、自分ではコントロールできません。

ランダムに選ばれるデータを選り好みはできませんからね。

 

そこで、毎回計算される勾配をそのまま100%使ってパラメータを変えるのではなくて、10%くらいしか使わないようにして、代わりに90%くらいは前回の勾配を使ってパラメータを更新しようというのがモーメンタム法の考え方です。

 

モーメンタム法のアルゴリズム

確率的勾配降下法では次式でパラメータを更新しました。

an+1=an-η∂Qn+1(a,b)/∂a

bn+1=bn-η∂Qn+1(a,b)/∂b

 

これがモーメンタム法では次式になります。

an+1=an-η{前回の∂Qn(a,b)/∂a×β+今回の∂Qn+1(a,b)/∂a×(1-β)}

bn+1=bn-η{前回の∂Qn(a,b)/∂a×β+今回の∂Qn+1(a,b)/∂a×(1-β)}

 

簡単ですね。

例えばβを0.9とすれば、今回の勾配は10%しか反映させず、前回の勾配を90%反映させることになります。

 

ではなぜこれをモーメンタム法と言うのか?

 

モーメンタムとは英語で勢いのことで、物体が動き続けようとする見かけの力のことです。

例えば、バスに乗っている時に急ブレーキを掛けられると前につんのめりますね。

これは自分の体はバスの速度で動いていたのに、急ブレーキによって床についている足の裏だけ止まってしまったけれど、体の上の方はそのまま動こうとするためです。

このように動いている物体は何もなければ、そのまま動こうとします。

この力がモーメンタムです。

確率的勾配降下法では、計算された勾配に従ってパラメータを動かしますが、前の勾配がプラスだったのに今回の勾配がマイナスだと凄いモーメンタムを感じます。

それがパラメータの大きな振動となって観察されるわけです。

このようなモーメンタムには逆らわずに、例えばモーメンタムは90%生かして、10%だけ今回の勾配を使おうというのがモーメンタム法の考え方です。

 

モーメンタム法をExcelに実装する

それではモーメンタム法をExcelに実装して試してみましょう。

今回も単回帰で、xとyのサンプルデータは次のように100組あるとします。

 

これらのデータの中からランダムに一組ずつ選んで勾配を計算するのは確率的勾配降下法と同様です。

モーメンタム法の場合は次のようにExcelに入力します。

自分で決めるハイパーパラメータ学習率ηモーメンタム率βで、それぞれ0.002と0.9に設定しました。

クリックすると拡大します

 

確率的勾配降下法から追加されているのは、「修正勾配a」と「修正勾配b」だけです。

an+1=an-η{前回の∂Qn(a,b)/∂a×β+今回の∂Qn+1(a,b)/∂a×(1-β)}

bn+1=bn-η{前回の∂Qn(a,b)/∂a×β+今回の∂Qn+1(a,b)/∂a×(1-β)}

の式における青字部分を計算しています。

 

初期値はa=b=30としていますが、8,242回目で収束しました。

 

グラフで振動が抑えられていることを確認する

グラフにすると次の通りです。

 

それでは同じことを確率的勾配降下法でやったらどうなるでしょうか?

果たして振幅は小さくなっているのでしょうか?

 

初期値を同じa=b=30で確率的勾配降下法で行うと、10,762回目でほぼ同じ値に収束しました。

つまりモーメンタム法の方が早く収束しました。

振幅はどうでしょうか?

確率的勾配降下法の収束の様子をグラフにすると次の通りです。

 

これだとスケールが小さすぎて振幅の差が分かりませんね。

そこで、aだけ抜き出して比べてみましょう。

モーメンタム法

 

確率的勾配降下法

 

モーメンタム法の方が振幅が小さくなっているように見えます。

 

もう少し拡大してみましょう。

最初の50回の更新の様子をグラフにすると次のようになります。

モーメンタム法

 

確率的勾配降下法

 

やはり振幅が抑えられている様子が分かります。

モーメンタム法の方が確率的勾配降下法より振幅が抑えられ、その結果収束も早くなることが確認できました。

 

振幅を抑えるための改良版として、RMSProp法というのもあります。

こちらは学習率を調整して振幅を抑えにかかります。

詳しくはこちらをどうぞ。

>> 【Excelでアルゴリズムを実装】RMSProp法を使って最小二乗法を解いてみる

 

Udemyの関連講座

データ分析シリーズ① AI数学-文系でも理解できる!高校から始めるデータ分析、AIのための数学-

データ分析、機械学習に関わる数学に絞り、効率的に学習できるようカリキュラムを構成しました。文系でも理解できるよう丁寧な説明をしています。Pythonエンジニア育成推進協会認定スクールによる高品質な数学コースです。

 

本当にわかる、AI時代の数学【超初心者からの数学入門】

数学アレルギーでも大丈夫/やさしく丁寧な解説/コード無し キーワード:基礎/数学/行列/線形代数/ベクトル/微分/データサイエンス/AI/機械学習/ディープラーニング/データドリブン/人工知能

 

【キカガク流】人工知能・機械学習 脱ブラックボックス講座 – 初級編 –

1000人以上が受講している(株)キカガクの『脱ブラックボックスセミナー』が遂に登場!機械学習の参考書を「閉じてしまった人」への再入門に最適な講座です。微分・線形代数といった数学の基礎からPythonでの実装まで短時間で習得しましょう。