[AI基礎] 勾配降下法(Gradient Decent)の考え方とプログラム

thumb nail AI

勾配降下法とは、AIが学習するための基本的なアルゴリズムです。

その考え方とサンプルプログラムを紹介します。

スポンサーリンク

シチュエーション

家を買うんじゃが、その家の価格が

高いか安いかわからんのじゃ

それならAIに家の価格を予測してもらおう!

偶然にも、手元に過去の家の売買データ(「家の面積」「家の価格」)があり、そのデータをAIに学習させて、次に買う家が安いのか高いのかAIに判断してもらいます。

AIの学習アルゴリズム

AIのアルゴリズムを考えるとき、以下のステップを踏みます

  1. データに合いそうなAIモデル式(線形回帰式など)を考える
  2. AIモデルの予測価格 と 実際の価格 の差を表すロスの式(二乗誤差など)を考える
  3. ロスが一番小さくなる(AIの予測精度がよくなる)ように回帰式のw0,w1を調整する

ロスを小さくする考え方を最適化アルゴリズムといい、その基本的なものが勾配降下法

AIというのは大げさですが、AIはこの考えを発展させていったものです。

勾配降下法の概念

まず、loss値はw1とw0を変化させることで変わるので、lossの式をJ(w0,w1)とした時、

勾配降下法の式は、以下で表されます。

この式で、どのようにlossが最小になっていくかというと、

下記図の緑色の箇所は、w1がある値の時の傾きを表しています。

w1の位置によって、プラスかマイナスの値になります。

プラスであれば、w1を小さくして、lossを減らそうとします。

逆に、マイナスであれば、w1を大きくして、lossを減らそうとします。

こうやって、lossを減らそうとコンピュータがw1を調整してくれます。

同時に、精度もUPします。

この時、w1を少しずつ変化させるのか、大きく変化させるのかを調整する役割なのが「α」で「学習率(Learning Rate)」と呼ばれるものです、これは画像AIなどを作るときにも必ず出てきて調整する必要があります。

学習率は大きすぎても、小さすぎてもダメです。

どれくらいがいいのか?経験と勘と総当たりで良さそうなところを決めます。

勾配降下法のプログラム VBA

こんな感じで、サンプルデータに回帰式がフィットするようにします。

データは家の面積、価格としたいところですが、1-30の数字に、適当にノイズを足した、m=30個分のデータ。

アルゴリズム

lossの式を詳細に記載するとm個のデータがあり、1〜m個全ての2乗誤差を足し合わせます。

1/2mの定数が付いていますが、計算都合上ついています。lossを小さくするという点では、1/2mを掛けようが、100000000を掛けようが影響はありません。

この式を変形(微分)したものが下の式になります。

プログラムでは、下の式を使います。

VBAプログラム抜粋

x,yに値がm個入っている場合、勾配降下法のサンプルプログラムです。

lrにしているのが、αの学習率です。

画像AIの場合

DeepLearningで画像AIを検討した場合、AIのモデルは基本的に、誰かが考えたものを持ってきます。あとは、いくつかある最適化アルゴリズムを学習率などを調整しながら、AIの精度Upを目指します。

最適化アルゴリズムは自分でコードを書くことはなく、使いたいものを選んで1行コードに足すだけです。このときは、学習率を調整する必要があるので、この最適化アルゴリズムの考え方は知っておくと良いです。

最後に

この計算は大抵は自分でコードを書くことはせず、主に概念を理解するためです。

AIの学習過程の基礎的なところですので、うる覚えでもよいので、覚えておくことをお勧めします。

将来、画像AIを作ったときに学習率を調整すると良いことがわかって、より精度のよいAIが作れます。

スポンサーリンク

タイトルとURLをコピーしました