#4 勾配降下法

|

【機械学習を学ぼう】#4 勾配降下法

 仕事がちょっと爆発しており、本当に週末にしか部活動ができなくなってます。。。

 さて、引き続き涌井 良幸著「Excelでわかる機械学習 超入門 ―AIのモデルとアルゴリズムがわかる 」で勉強しています。

 前回は、モデルの最適化のために目的関数を最小化するための手法として最小二乗法を学びましたが、今回は別のアプローチである勾配降下法と呼ばれる手法を学びます。

 勾配降下法では、グラフ上の点を少しずつ動かしながら、手探りで関数の最小点を探し出すことをしていきます。

 イメージとしてはグラフを斜面と見立て、その斜面にピンポン玉置いて手を離したとすると、ピンポン玉は最も急な斜面を選んで転がり始めます。少し進んだら、玉を止め、その位置からピンポン玉を離すとその点から最も急な斜面を選んで転がり始めます。

 この操作を繰り返すと、ピンポン玉は最短経路を辿ってグラフの底に着くはずで、この玉の動きを真似たのが勾配降下法と、本書では説明しています。

 本書で扱っているのは最急降下法(バッチ勾配降下法)という手法ですが、学習データが大量にある場合は、計算に時間がかかってしまいますので、ランダムに1セットのデータを使って最小値を探索する確率的勾配降下法や、複数のランダムに選択したデータを使って最小値を探索するミニバッチ降下法という手法もあります。

 ざっくりした説明はこちら。

 https://aizine.ai/glossary-gradient-descent/

 https://shironeko.hateblo.jp/entry/2016/10/29/173634

 エクセルでの計算方法を画像で添付します。

 関数z=x^2+y^2について、その最小値を与えるx、yの値を勾配降下法で求めよという問です。

 x、yの値が0のときに関数が最小になります。ここでは初期位置x=3、y=2から、一定の歩幅(η(イータ)=0.1)に従って、x、yの値が0に至るまでの計算をしています。

 一定の歩幅(η(イータ))の決め方としては試行錯誤で決めるしかないのですが、小さい値にしてしまうと、極小値にハマってしまったり、逆に大きな値にしてしまうと、最小値を飛び越してしまう可能性もあることに留意が必要です。

 勾配(∂z/∂x,∂z/∂y)は、関数z=x^2+y^2をそれぞれx、yで偏微分することで求まります。

 画像にある「変位ベクトル」ですが、本書では単語そのものの説明は何も記載がないのですが、移動前の位置から移動後の位置に引いたベクトルを指すと思われます。

 関数zが最も減少するのは、2つのベクトル(∂z/∂x、∂z/∂y)が反対向き、すなわち(⊿x,⊿y)= -η(∂z/∂x,∂z/∂y)になるときですので、その計算をエクセルで行っています。

 エクセルのNo.0の行の計算が終わると、No.1の「位置」が(x1,y1)=(3-0.60,2-0.40)=(2.40,1.60)と定まり、以降この操作を30回繰り返すと、x、yの値が0になり、関数zが最小値となります。



コメント1

お気に入りに追加しました お気に入りから削除しました