LoginSignup
0

More than 5 years have passed since last update.

Pythonでニューラルネット(AutoEncoderで「要約/次元圧縮」してみる)その2

Posted at

前回記事
を、若干、修正する。

私が思うに、
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 + 

問題なし。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0