前回記事
を、若干、修正する。
私が思うに、
AutoEncoderの醍醐味は、「隠れ層に無理させてみる」こと。
前回は、00000001,00000010,・・・,10000000という、
「8パターン」を学習させ、
隠れ層として、000,001,010,011,・・・,111という表現を学習できたが、
「8パターン」が「2の3乗個」で、
「表現」出来るのは「当たり前」である。
8パターンより多くの学習をさせたとき、どういう表現(representation)を獲得するかに、面白みが出て来る。
(ちなみに、もちろん、ニューラルネットの各層各ノードの重み付けは
実際にはゼロイチの2値ではない。
数値の大小によるパターン出し分けという表現を得るのも「普通」。)
●実験その1 (パターンに無関係な ノイズを混ぜてみる)
5列目(全て1)と6列目(全て0)が、
パターンに無関係な要素(学習上は無視できるもの)
[input] [hidden] [output]
0000100001- 0.7 0.5 0.0 - 0000100001 +
0000100010- 1.0 1.0 0.6 - 0000100010 +
0000100100- 0.5 0.0 1.0 - 0000100100 +
0000101000- 0.0 1.0 0.0 - 0000101000 +
0001100000- 1.0 0.1 0.6 - 0001100000 +
0010100000- 0.4 0.0 0.2 - 0010100000 +
0100100000- 0.0 0.3 0.6 - 0100100000 +
1000100000- 0.2 1.0 1.0 - 1000100000 +
四捨五入すると、だいたい二進法(000,001,010,011,・・・,111)通りで、
8パターンを出し分け。順当。
●実験その2 (10パターンを試す)
[input] [hidden] [output]
0000000001- 0.6 0.5 0.0 - 0000000001 +
0000000010- 0.3 1.0 1.0 - 0000000010 +
0000000100- 0.3 1.0 0.2 - 0000000100 +
0000001000- 0.4 0.0 0.3 - 0000001000 +
0000010000- 0.0 0.4 0.2 - 0000010000 +
0000100000- 1.0 0.2 0.4 - 0000100000 +
0001000000- 0.4 0.0 1.0 - 0001000000 +
0010000000- 1.0 0.4 1.0 - 0010000000 +
0100000000- 0.0 0.4 0.8 - 0100000000 +
1000000000- 1.0 1.0 0.3 - 1000000000 +
難なく、クリアー。
●実験その3(8パターンを、隠れ層2つで学習させてみる)
[input] [hidden] [output]
00000001- 0.6 0.0 - 00000001 +
00000010- 0.0 0.3 - 00000010 +
00000100- 1.0 0.7 - 00000100 +
00001000- 0.9 0.2 - 00001000 +
00010000- 0.0 0.7 - 00010000 +
00100000- 0.2 0.0 - 00100000 +
01000000- 0.7 1.0 - 01000000 +
10000000- 0.2 1.0 - 10000000 +
問題なし。