最急降下法(Gradient Descent)とは
きちんとした定義は色々な文献で散見されるので、ここでは自分なりの理解を述べます。
最急降下法とは、①最適な位置(最小値)を探すために、②勾配に従って降下する方法 です。
以下、詳しく見ていきます。
①最適な位置を探す
最急降下法は「最適化問題」と呼ばれる分野でも、特に関数の最小値を求める場合に使われます。
たとえば、誤差関数や消費エネルギーを表す関数があるとき、その最小値を見つけたい場合に活躍します。
②勾配に従って降下する
「勾配に従う」というのは、関数を微分して得られる傾きを利用することを意味します。
傾きが大きい(急)ほど大きく進み、傾きが小さいほどゆっくり進むというのが直感的なイメージです。
最小値付近では、勾配が 0 に近いので、ごく小さなステップで近づいていきます。
アルゴリズムを見ていきます。現在の値 $x^{(k)}$を次の値 $x^{(k+1)}$に更新するとき、以下の式を用います:
\mathbf{x}^{(k+1)} = \mathbf{x}^{(k)}
- \alpha \frac{d}{d \mathbf{x}} f\!\bigl(\mathbf{x}^{(k)}\bigr)
※$\alpha$は学習率などと呼ばれ、更新量を調整するパラメータです
この更新式を繰り返すことで、目的の最小値へ近づいていくのが最急降下法です。
まさに英語名の通りで、 “Gradient(勾配)” に “Descent(降下)” することになります。
具体例
具体例として、二次関数$f(x)=\frac{1}{2}x^2$の最小値を考えてみましょう。
いま、
\frac{d}{dx}f(x)=x
なので$x_0=4$, $\alpha=0.5$とすると、
x_1= x_0-\alpha\frac{d}{dx}f(x_0)= 4 - \frac{1}{2}\times4=2
以上より、$x_0$から$x_1$は2進みます。
$f(x)=\frac{1}{2}x^2$ の最急降下法 |
計算を繰り返すと、
2 -> 1 -> 0.5 -> 0.25 -> 0.125 -> ...
のように移動し、最終的には 0 に向かって収束していきます。
以下は簡単な MATLAB のコード例です。
x_k = 0;
alpha = 0.5;
maxIter =
for k = 1:maxIter
x_old = x_k;
grad_f = x_old;
x_k = x_k - alpha * grad_f;
end
終わり