AI VBA プログラミング

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

thumb nail

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

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


本記事はこんな方におすすめです。

hituji
AIの学習って一体どうなっているんだろう?開発し始めで、学習率とかがわからない

 

  本記事の内容

  • AIの学習アルゴリズム
  • 勾配効果について
  • VBAで実装

 

スポンサーリンク

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にしているのが、αの学習率です。

    Dim w0 As Double
    Dim w1 As Double
    Dim lr As Double
    Randomize
    w0 = Rnd  'w0 の初期値はランダム
    w1 = Rnd  'w1 の初期値はランダム
    lr = 0.0001 ' 学習率
    
     '学習回数
    For i = 0 To 1000 - 1
        Dim dw0 As Double
        Dim dw1 As Double
        Dim dx As Double
        dw0 = 0
        dw1 = 0
        dx = 0
        loss = 0
        
        'データ数分繰り返す
        For j = 0 To m - 1
            Dim yhat As Double
            yhat = w0 + w1 * x(j)
            dx = yhat - y(j)
            'ロスの計算
            loss = loss + Math.Sqr(dx * dx)
            'J(w0,w1) の偏微分結果
            dw0 = dw0 + dx
            dw1 = dw1 + dx * x(j)
        Next
        
        'w0,w1 の更新
        loss = loss / m
        dw0 = dw0 / m
        dw1 = dw1 / m
        w0 = w0 - lr * dw0
        w1 = w1 - lr * dw1
        
    Next

画像AIの場合

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

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

最後に

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

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

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

 

 

-AI, VBA, プログラミング
-,