#NeurlNetworkでXORを学習させたい!
入力、隠れ層、出力層
この3つを単純に作っただけではXORを実現できるときもあれば、層じゃないときもあったので、なんとか精度を高くしようと、試してみたこと書きです。
ちなみに、うまくいかないときの出力は
#入力 [ (0,0) , (0,1) , (1,0) , (1,1) ]
#出力 [0.01... , 0.63... , 0.62... , 0.66...]
#答え [0 , 1 , 1 , 0 ]
っていう感じで、(1,1)を入力したときの値が大きくずれてしまいます。これをなんとかしようっていうもが目標です。
##目次
- 隠れ層のノードを2つから3つに増やす
- 学習するにつれて、学習率を下げる
- 学習させるやつを増やす
###隠れ層のノードを増やす
これは単純な式の追加でできました。
10回程度の試行ですが、あまり変わりませんでした。
もう少し試行回数を増やしたら結果が変わるかもしれません。
ただ、数値の変動の仕方にあまり変化がなかったため、10回程度で打ち切りました。
###学習率をだんだん下げる
これは、最後の精度の問題だと後から気づいたのですが、当然あまり変化はありませんでした。
なぜなら、ずれるときは初めから大きくずれています。
なので、初動がどんなふうに動くかを調整できないと、あまり意味がないのです。
###学習させるやつを増やす
なんと表現したらよいかわからなくて、こんな表現になっているのですが、イメージ的には、スタートが悪いなら、試行回数をepochs少なくして増やして、優秀な奴だけまた学習させていこうっていう感じです。
つまり、優秀な奴の中で、何個か作って学習させて、また、優秀な奴の中で学習させて、っていう風にしてみました。
#####これはめっちゃ変わりました。
これまで1/5くらいの確率で正解に近いって感じでしたが、変えてみて、1/2くらいの確率で正解に近づきました!
試行回数を増やしたときにはもっと差が開きました。
##結論
なんてよんだらいいかわかりませんが、学習させる人を何人か用意して、優秀な奴の中で学習させて...っていうのが一番いい感じでした!
やっぱり優秀な奴だけが生き残る世界なのか...怖い...
AIも人間も変わらないですね!