ゼロからAI理論を再構築する

ー 文系エンジニアがAIの内部構造をゼロから理解する記録 ー

学習という名の山下り:最適化と微分

前回、機械学習は「データ」「モデル」「損失関数」の3つでできているという話を書きました。ただ、この3つが揃っても、それだけではモデルは何も学びません。損失関数が「今の予測はこれだけズレている」と教えてくれても、パラメータをどう直せばいいかがわからなければ意味がない。

その「直し方」を担うのが最適化です。

損失の地形を下る

損失関数 \( L(f(x), y) \) を定義すると、モデルのパラメータ(たとえば重み \( w \))の値に応じて損失が上下する「地形」ができます。学習の目的は、この地形の一番低い点を見つけること。数式で書くとこうなります。

\[ w^* = \arg\min_{w} \hat{R}(w) \]

\( \hat{R}(w) \) は学習データ全体に対する平均損失(経験リスク)です。

ただし、現実のモデルは複雑なので、この最小値を一発で解析的に求めることはまずできません。代わりに使うのが勾配降下法(Gradient Descent)で、「今いる場所から少しずつ坂を下る」ことを繰り返す方法です。

勾配は「どっちに下るか」を教えてくれる

勾配 \( \nabla \hat{R}(w) \) は、損失が最も急に増える方向を指すベクトルです。なので、その逆方向にパラメータを動かせば損失は減ります。

\[ w_{t+1} = w_t - \eta \nabla \hat{R}(w_t) \]

\( \eta \)(学習率)は一歩の大きさです。大きすぎると谷を飛び越えるし、小さすぎると収束が遅い。実際にモデルを動かしてみると、この値の調整が想像以上に面倒で、学習率を少し変えただけで結果がまるで違うことも珍しくありません。

微分は「ちょっと動かしたらどうなるか」の計算

自分は文系出身なので、微分にはずっと苦手意識がありました。公式を暗記して計算するもの、くらいの認識だった。ただ、機械学習の文脈で捉え直すと、やっていることはシンプルです。「あるパラメータを少しだけ動かしたとき、損失がどれくらい変わるか」を計算しているだけ。

たとえば重み \( w_i \) を \( 0.001 \) 増やして損失が大きく減るなら、その方向にもっと動かすべきだとわかります。ほとんど変わらないなら、その重みは今の予測にあまり影響していないということです。パラメータが何百万あっても、一つ一つについてこの感度を求められるのが微分の便利なところです。

ニューラルネットワークのように層が深いモデルでは、合成関数の微分(連鎖律)を使って、出力側の誤差を入力側のパラメータまで遡って伝えます。これが誤差逆伝播法(Backpropagation)で、やっていること自体は連鎖律の繰り返し適用です。仕組みを知ると、そこまで魔法じみた話ではないことがわかります。

まとめ

前回の3要素に最適化を加えると、機械学習の流れが一通り見えてきます。データから学んで、仮説を修正して、損失を減らす。最適化はその修正を実際に計算で回す部分です。

AdamやRMSpropといった最適化手法は、どれも「いかに効率よく、局所解に引っかからずに坂を下るか」を工夫したものです。次回は、そのなかでも基本となる確率的勾配降下法(SGD)とミニバッチの仕組みについて書きます。


参考文献