機械学習

ニューラルネットワークのバックプロパゲーションを実装してみた

以下の記事で、バックプロパゲーション(最急降下法を用いて、ニューラルネットワークの誤差を効率的に逆伝播させる手法)により、重み\(\boldsymbol w\)の最適解を求めることを考え、誤差関数\(E=(x_3 – y)^2\)を重みの各変数について偏微分した式を計算してきた。

ニューラルネットワークの誤差関数の微分を計算してみた 以下の記事で、ニューラルネットワークのフォワードプロパゲーションによる出力値\(y\)を算出してきたが、その際、重み\(\bolds...

今回は、上記記事の偏微分を利用して、重みwの最適解を求めるバックプロパゲーションを実装してみたので、そのサンプルプログラムを共有する。

なお、バックプロパゲーションについては、以下のサイトを参照のこと。
https://reinforz.co.jp/bizmedia/5656/

前提条件

以下の記事の実装が完了していること。

ニューラルネットワークのフォワードプロパゲーションを実装してみた ニューラルネットワークは、人間の脳の神経細胞(ニューロン)の仕組みをプログラム上で模したモデルで、機械学習の1手法であるディープラー...

今回実装するニューラルネットワークの全体構成は、以下のようになる。
ニューラルネットワーク

また、重み\(\boldsymbol w\)の最適解は、下図における誤差関数\(E=(x_3 – y)^2\)が最小となる箇所で、これは誤差関数を(桃枠の)各変数について偏微分した結果が\(0\)になる値となる。
ニューラルネットワークの誤差関数

このうち、単一ニューロンを実装した内容は以下の通りで、前提条件の記事に、バックプロパゲーションを行うメソッド(back)と、重みwを返却するメソッド(get_w)を追加している。

なお、上記クラスの「back」メソッドでは、以下の更新式を繰り返している。

最急降下法
出所:最急降下法の仕組みをイラストでわかりやすく解説

また、ニューラルネットワークを実装した内容は以下の通りで、前提条件の記事に、バックプロパゲーションを行うメソッド(back)と、フォワードプロパゲーションとバックプロパゲーションを繰り返すメソッド(repeat_forward_back)を追加している。

なお、backメソッドで利用している重みwの各変数の偏微分については、以下の記事を参照のこと。

ニューラルネットワークの誤差関数の微分を計算してみた 以下の記事で、ニューラルネットワークのフォワードプロパゲーションによる出力値\(y\)を算出してきたが、その際、重み\(\bolds...



さらに、先ほどのニューラルネットワークを呼び出した結果は以下の通りで、出力結果\(y\)は、入力値\(x_0=x_1=0\)または\(x_0=x_1=1\)の場合に\(0\)に近く、そうでない場合は\(1\)に近いことが確認できる。

ニューラルネットワークの呼び出し

また、先ほどのニューラルネットワークを呼び出した際の\(dw\)の最終結果は以下の通りで、それぞれ\(0\)に近づいていることが確認できる。

ニューラルネットワーク呼出後のdw

要点まとめ

  • ニューラルネットワークのフォワードプロパゲーションとバックプロパゲーションを繰り返すことで、重み\(\boldsymbol w\)の最適解を求め、正解に近い出力値を求めることができる。