下記参考文献に基づきやってみました。ただし、ここでは、新たに可視化を重点に置きました。すなわち、学習がどのように進むのかを、入力層と出力層のノード間の重みをビジュアルに見られるようにしてみました。
入力パタンデータは、以下の4種類です。10x10のビット列で表現します。
学習用パタンデータ4種(10x10のサイズ |
つまり、入力層のノード数は100個(10x10)です。"1"か"2"か"3"か"4"かを以下で推定するのですから、出力層のノード数は4個にします。初期状態では、全結合辺に対して、小さな重みを乱数で与えます。また、左下方にあるバイアスの辺の重みは0.0として出発します。
入力層100ノード、出力層4ノードのパーセプトロンの初期状態 |
学習を進めます。すなわち、ここでは、「標準デルタ則」によって、重みを少しづつ更新し、出力ノードの出力の正解(教師信号)との差をできるだけ小さくして行きます。以下の図は、まだ学習回数2回目ですが、早くも、辺の重みが良い方向に向かって更新されているようです。(辺の青、赤は、それぞれ、重みの値の正負を表します。また、重みの値の絶対値の大きさを辺の太さで表現しています。)
学習2回目の状態 |
さらに、学習回数= 1,000まで進めた結果は以下のとおりです。重みがかなりはっきりしてきました。これ以上学習回数を増やすと、徐々にさらに良い方向に行くようですが、ここで止めます。
学習回数1,000回目の状態 |
学習が一応済んだ段階で、今度は、学習時に与えたパタンデータとは少し異なる以下のパタンを与えて、その認識の度合いを調べます。
認識テスト用のパタンデータ |
テストパタンの認識結果 |
以上は、Deep Learningの入り口に過ぎませんが、その可能性を具体的に知る、見ることになると思います。
【参考文献】
深井裕二「Java人工知能プログラミング」、三恵社、2016
0 件のコメント:
コメントを投稿