プロフィール
 

morimori.ynct

Author:morimori.ynct
森下功啓製作所のブログです。
電子工作のことや日々思ったことを時々気まぐれに更新しています。
趣味で作っているサイトはこちら

 
最新記事
最新コメント
最新トラックバック
 
 
月別アーカイブ
カテゴリ
 
 

スポンサーサイト

 
--/--/--(--) Category : スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
 
Comment  |  Trackback
 
 

多層ニューラルネットワークでXOR学習が進まない理由

 
2011/12/17(Sat) Category : プログラミング
多層のニューラルネットワークでXORの学習が進まない理由を探していたのですが、見つからなかったので自分なりの考察をメモっておきます。


XORという単純な課題です。
入力は2つの要素を持つベクトルで、出力は1つ(0か1)です。
学習は、4つの教師ベクトルを順繰りで入力しながら行いました。

結果からいうと、自作のプログラムでは中間層を4層にすると学習が困難になってしまいました。
これは中間層のユニット数を6から19などと増やすと若干改善されました。
この原因については、死ぬニューロンがあれば残るニューロンもある・・・ということだろうと思います。

5層になると一層困難になってきます。
出力が同値になったり、1つか2つの入力ベクトルにしか正しく答えなくなってしまいました。
これは全ユニットの重み係数の初期化を絶対値が0.1以上となるように-2.0~2.0の範囲にすることで若干改善されました。
これも生き残るニューロンが増えたのだと思いました。


更に多層になるといよいよ困難になり、結局安定して学習できるのは6層までとなりました。
7層では半々です。
8層だと無理でした。
なお、この時点で学習係数はかなり小さくしています。



で、多層になると学習が困難になる理由について考えてみます。

 ニューラルネットでは、中間層が多層になると誤差逆伝搬により出力層の持つ結合係数の修正量をはるかに上回る量が前段の中間層に伝搬されます。学習係数がある一定以上だと係数の修正量が振動するようになって学習が進まないものと考えられます。

 では、学習係数が小さ過ぎたらどうなるのか?今度は誤差の修正が十分に行われなくなります。特に出力層と中間層を結ぶ結合係数の修正量は極小となります。そんな状況下において、入力ベクトルがコロコロ入れ替われば、そりゃ出力は取るべき値の真ん中付近を示したとしても不思議ではありません。

試してはいませんが、この様な場合の解決策は教師ベクトルによる学習を1つのクラスにつき多数回に渡って学習が十分に行われるまで実施することだと思います。一定以上の学習が進めば、次のクラスへ・・・というサイクルなら学習も可能なのではないでしょうか?

これで学習回数が多すぎる場合は、各層の結合係数修正量の総量に上限値を設けてそれを超えないように調整するというのも手かもしれません。
関連記事
スポンサーサイト
 
コメントアイコン Comment0  |  Trackback0
 
 

Trackback

 

Trackback URL :
この記事にトラックバックする(FC2ブログユーザー)

 
 

Comment

 

    
 
Home | Top ▲
 
検索フォーム
 
 
RSSリンクの表示
リンク
ブロとも申請フォーム
QRコード
 
QR
 
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。