Posted at

自力でNeural Networkを作ろうとして失敗した


この記事、何?

失敗作。

作ってみようとした記録。

人工知能の本をちょっと読んで、あれっ?自分で作ってみたら早いんじゃないの?

と思って作ってみた。

違う、作ってみようとした。

で、記事を書いて思考整理をしようということと、経験を通じて何を得たかをまとめておこうかと。


どういう人向け?

すみません、誰のためにも・・・

もしかしたら、将来リベンジしようとした時の自分あて。

何考えてなぜ駄目だったのかに気づければ。


やりたいこと

まずは3ニューロンを3層くらいで極めて簡単な予測をするモデルを作る。

この時点では answer = f(x, y, z) = 2x - y (※zは不使用)くらいで。

で、それが高精度出せるようになったらx^3とか、x^4-3y^2+xとか。もっと言うと、

3x^2-5y+2xyとか、やれるなら超越関数とか。

あっ、もちろん、途中からニューロン数とか層をかなり増やす予定で。


方針

まず、オブジェクトの形を考えた。

・・・いや、もっとはじめはもっと単純に考えていたので「まず」じゃないけど。

各ニューロンを、こんな。型は全部double。

入力用 paraIn[3];

出力用 paraOut;

係数 paraK[3];

で、「予測」として、こんな。

for (int i = 0; i < 3; i++)

{

paraOut += paraK[i] * paraIn[i];

}

でこれを配列で[3,3]として持って、1層目には予測対象の値を入れ、

順次次の層に入れて・・・ってやつ。

で、トレーニングデータを乱数で1000個用意して、予測値を出していった。


どう失敗?

1回目の予測とかは当然意味不明な勘違いな値が出た。

そのあと10回目くらいまでは収束していっている感じだったけど、全然収束っていう感じじゃなく、なんか近いといえば近い、けどあまり近くもない値が出るばかりで・・・

結局断念。


得たもの

やっぱり設計って大切だな、と。(をぃ!)

単純な形だからまず書いて形が見えてから詳細を詰めようと思っていたんだけど、

多数の変数が相当下位ループして順次変化してゆくことを追いきれなくなった。

結局問題点は設計力って気がしてきたので、本読んでからやり直そうと。

あと、NN組むのにオブジェクトをどこで束ねるかということも迷った。

最後はイメージした通りのコーディングができていたように思うけど、結果が・・・


感想

見よう見まねでもやってみたのおかげで、本読みの理解が深まるかな、と。

逆伝播が具体的にどう干渉すべきなのか、その率をどう扱うべきなのか。

そのあたりを多少イメージできるようになったので良しとしようかと。


蛇足

失敗続きだ・・・

次はもちっとまともなものを。