ディープラーニングってどういう仕組みで動いているんだろうという疑問から、その学習過程を数学的な部分まで調べてみました。
私なりに理解したところまでを本記事で公開したいと思います。
そもそもディープラーニングはどういうものかというと。
たとえば手書きの文字があったとしましょう。コンピュータに画像を読み込ませることはできますが、全く同じ画像でなければ「同じ」と認識することはできません。
手書き文字のように、表記が逐一揺らぐようなものだと途端に判定することができなくなってしまいます。
大量の画像データを学習させることで未知の画像がきても判定するようにできるのがディープラーニングです。
将来的には、レントゲン画像から人間の目視では確認できない病状を検知するなど人間の能力を超えた判定が期待されています。囲碁の世界ではすでに人工知能が人間に勝利していますよね!
ディープラーニングはニューラルネットワークと呼ばれる計算過程を辿ります。このニューラルネットは行列計算で表すことができます。
ニューラルネットワークにより出力された結果はソフトマックス関数を使うことにより確率として解釈されるように変換することができます。この出力確率を正解データと比較することで、間違いを正しながら学習していくことができるのです。
正解データとの比較は"誤差"の評価で行われます。誤差が大きければ間違い、誤差が小さければ正解に近づいているということです。
この誤差判定にもちいられるのがcross entropy errorと呼ばれる関数です。
ディープラーニングの学習過程は、"誤差"を最小化することを目指して行われます。
最小化を目指す際に用いられるのが「微分」です。微分をすることで勾配(傾き)を確認し、その勾配方向にパラメーターを移動させるということを繰り返すことで誤差の最小値に少しずつ近づけていくのです。
具体的には、重み係数を偏微分することでニューラルネットワークの最適化を図ります。
重み係数の偏微分により勾配を算出し、勾配の減少方向にパラメータをずらしていくという操作を繰り返していきます。
今回はニューラルネットワークの微分による学習過程を眺めてみました。
ニューラルネットワークでは、誤差逆伝播法を用いて学習していくことも可能であり、こちらの方がより効率的な計算方法として採用されることが多いです。
誤差逆伝播についても勉強していこうと思っております。
参考
「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」
斎藤 康毅(著) 出版社:オライリージャパン