勾配法(最急降下法)



機械学習

分類(classification)

ニューラルネットワーク(NN)

クラスタリング

強化学習

敵対的生成ネットワーク

公開日:2018/5/8 , 最終更新日:2019/10/25         

前提知識
数値微分


■勾配法(最急降下法)とは
例えば以下の形の関数があったとします。この関数の最小値を求める場合、微分してその時の解(微分方程式の解)が0になる時に最小値となりますが、式が複雑で微分はできてもf'(x)=0となるxを求める事ができなかったり、 そもそも関数の形が解らない時にでも、その関数の最小値を求める手法の一つが勾配法(再急降下法)となります。これはニューラルネットワークで広く使われる手法です。

 

勾配法の考え方は、まず関数の微分値を求めます。微分は関数の接線の傾きとなり、接線の傾きが正であれば最小値は左側にあり、接線の傾きが負であれば最小値は右側にあるので、 何回か計測点を移動させて接線の傾きが充分に小さくなったところが最小値である。というものです。

なお、微分方程式解が求まらない時に勾配法を用いると説明しましたが、ここで微分をしています。 どういう事かというと、微分方程式の解を求める事と微分する事は別で、微分自体はする事が出来る場合があります。 また仮に微分すらできなくても、関数に2つのxを入れた時のそれぞれの解の差分が微分値となるので、そうやって求めます。

 

これまで説明したことを一般式として表現すると以下となります。

 

αは反映率といい、xを移動させる大きさを決めます。接線の傾きからどちら側に最小値があるかが解ったとして、そこからどれくらいの距離に最小値があるか解らないので、 何回か計測点を移動させるしかないのですが、なるべく計測回数を減らしたいので、反映率を接線の傾きの大きさによって調整する方法等があります。 (接線の傾きが大きければ反映率を大きくする)

■勾配法の注意点
① 計測点を移動させる際に、移動距離を大きくしすぎてしまうと最小値を超えてしまい、収束しない場合があります。
② また一見最小値に収束したと思われますが、下記の様に全体を見たら最小値でない場合があります。この様な解を局所解といいます。
 

これらの問題に対する完全な解決策は無いようですが、それでも答えが出ないよりはましという事で、勾配法は広く使われています。

■具体例
以下関数における最小点を勾配法で求めます。この関数は微分してその解が0になるxを求める事ができるのですが、今回はその解を求める事ができない仮定で考えます。(ただし微分まではできる事とします)



次に計算を開始する位置として、適当にx=1と決めます。(1)式の計算結果は以下。ここで反映率は0.1とします。

 

これで最小値に近づくxの値を求めることが出来ました。これを更に最小値に近づけるためにはx=0.8として同様の計算を行います。以下のとおり。

 

この様に繰り返し計算を行う事で、最終的には最小値に近いxの値(この場合はx=0)を求めることが出来ます。

<微分が困難、もしくは式の形が解らない場合>
式は解るが微分が難しい場合、もしくは式が解らなく値を入力したら答えだけが解る場合、以下の様に実際に値を代入することで微分値を求めます。この様な手法を数値微分といいます。



(2)式を例に数値微分用いて勾配法による最小値を求めます。(2)式は微分は容易ですが、微分できないと仮定します。 先ず適当な値を決め、x=1, h=0.1としたときの微分値を求めます。

 

上記結果を(1)式に代入します。反映率α=0.1とします。

 

次にx=0.79 , h=0.1としたときの微分値を求めます。

 

上記結果を(1)式に代入します。同じく反映率α=0.1とします。

 

この様に繰り返していく事で、先と同様、最小値となる時のxを求めていく事ができます。









サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



機械学習

分類(classification)

ニューラルネットワーク(NN)

クラスタリング

強化学習

敵対的生成ネットワーク