勾配法の仕組みをわかりやすく解説

ニューラルネットワークで認識精度を高めるためには、適切な重みを設定することが重要です。

このページでは、適切な重みを求めるために用いる「勾配法」というアルゴリズムを解説します。

勾配法とは

ニューラルネットワークの精度を高めるには、損失関数を最小(予測誤差を最小)にする「最適な重み」を見つける必要があります。

重みの探索には勾配法を用いるのが一般的です。

配法は最小値や最大値を求めるためのアルゴリズムで、解析的に解くことが困難な問題に用いられます。「解析的に解けない」とは、ある関数に対してうまく微分ができない状態を指します。

勾配法の仕組み

勾配法は、関数f(x) f(x) を最小にするx x の値、関数g(x,y,z) g(x,y,z) を最小にするx,y,z x, y, z の値の組み合わせといったように、関数を最小にするような変数の値を求めます。

勾配法は傾きが0となる地点x x が関数の最小、最大値を与えるという考え方に基づいた手法です。これは、傾きが0となる地点で最小、最大値、極小、極大値をとる微分法の考え方に似ています。

勾配法では、数値微分を用いて、傾きが0となる最適なx x を求めます。具体的な手順は以下の通りです。

  1. 初期探索地点x x を定める。
  2. ある地点x x での傾きを求める。
  3. 傾きと学習率をもとに次の探索地点x x' を求める。
  4. 2~3の更新を傾きが0となるx x が見つかるまで繰り返す。

勾配法と学習率

一変数関数の最小値問題を例に考えてみましょう。

例題

y=x2+1 y = x^2 + 1 という関数について勾配法を用いて最小値を与えるx x を求めましょう。

y=x2+1 y = x^2 + 1 のグラフは以下のようになります。

2次関数のグラフ

微分法を用いるとy=2x y' = 2x よりx=0 x = 0 の時に最小値をとります。

今回はy=x2+1 y = x^2 + 1 について勾配法を用いて、y y を最小とするようなx x を求めます。

x0=2 x_0 = 2 から更新してみましょう。学習率η \eta は0.25、f(x)=2x f'(x) = 2x です。

 x1=x0 ηf(x0)=1 x_1 = x_0 - \eta f'(x_0) = 1

x2=x1 ηf(x1)=0.5 x_2 = x_1 - \eta f'(x_1) = 0.5

x3=x2 ηf(x2)=0.25 x_3 = x_2 - \eta f'(x_2) = 0.25

x4=x3 ηf(x3)=0.125 x_4 = x_3 - \eta f'(x_3) = 0.125

勾配法による更新を続けるとゆっくりx=0 x = 0 に近づき、更新を続けるとx=0 x = 0 と求めることができます。

初期値x0=2 x_0 = 2 としましたが、この初期値は自由に設定することができます。

学習率を0.25としました。これも自由に設定することができ、この学習率の値によって学習速度が変化します。

学習率η \eta が学習速度にどう影響するかを以下のグラフを見て観察してみましょう。

上から順にη=0.01,η=0.1,η=0.2 \eta = 0.01,\eta = 0.1,\eta = 0.2とします。

学習率0.01の様子
学習率:0.01
学習率0.1の様子
学習率:0.1
学習率0.2の様子
学習率:0.2

学習率が小さすぎると学習に時間がかかります。また、学習率が大きすぎると最適な値を求めるのにかえって時間がかかっています。

勾配法の一般化

今までは一変数関数について勾配法を用いていました。

変数が増えても勾配法を使うことができます。n n 個の変数を持つ関数についても勾配法を用いることができます。

 

n n 個の変数をx1, ,xn x_1, \ldots, x_n とする。

1 初期探索地点x=(x1,,xn) x = (x_1,\ldots, x_n) を定める。

2 x=(x1,,xn) x = (x_1,\ldots, x_n) における勾配を求める。

3 新たに探索するx= (x1,,xn) x' = (x'_1,\ldots, x'_n) を傾きと学習率η \eta を用いて求める。更新は以下のように表されます。

(x1,,xn)=x1 ηfx1,,xn ηfxn(x'_1, \ldots , x'_n )=x_1 - \eta \frac{ \partial f }{ \partial x_1 } , \ldots , x_n - \eta \frac{ \partial f }{ \partial x_n }

4 勾配が0となるx x を見つけるまで2~3の更新を繰り返す。

 勾配の要素がすべて0となるまで更新を続けます。最終的にxfinal=(x1,,xn) x_{final} = (x_1, \ldots, x_n) が最適な値となります。

関連サービス

講座一覧ページ

記事一覧はこちら

無料で統計学を学ぶ