学生実験2 : 探索アルゴリズムその2・ニューラルネットワーク






更新情報
  • [2005-11-21] 作成中・・・.
  • [2005-11-26] ver 1.0.0 公開.
  • [2005-11-28] ver 1.0.1: 課題,サンプルソースの修正.




進め方

内容と目標
  • 計算機実験を通して探索や最適化のイメージを掴むとともに,計算機実験を効率良く実施するために何を考慮すべきかを理解する.
課題と提出方法
  • 全ての Level にトライし,レポートとしてまとめよ.
  • 1グループ1レポート提出.
  • メンバ(氏名・学籍番号)と担当内容を記載すること.
  • レポートは LaTeX で作成し,印刷物を提出すると共に PDF ファイルをメールで提出すること.ただし,プログラムのソースファイル一式は圧縮してメール添付で提出する事.メールのサブジェクトは下記参照.

    「Subject: [2005_slab2 search2] j040xx,j040xx,j040xx,j040xx」

  • 表紙に曜日を含める事.
  • 提出期限:実験日の10日後までに 705 室へ(11/28のクラスの期限は12/8,12/2のクラスは12/12).
コンテンツ
  1. ニューラルネットワークとは?: Level 1 〜 Level 3

1. ニューラルネットワークとは?

人の脳を情報処理モデルとして単純化したシステムで,ニューロンと呼ばれる脳細胞を結合したネットワークの総称がニューラルネットワークである. 様々なモデルがあるが,目標の一つは「人間の脳そのものの処理をコンピュータで表現する事で,それまでコンピュータが不得手としていた/解けない問題を解決する」ことである.

各ニューロンは,入力信号 xi に重要度(重み) wi を掛け合わせた値の総和を算出し,その値に応じて自身が興奮(発火)するか否かを決定するシンプルな機械として定義される.

学習・探索のイメージ
単一のニューロン(単純パーセプトロン)のみで構成される2入力1出力の例を示す. 入力と出力は 0 or 1 を取るとした時,入力 x1, x2 の AND を出力させるように学習させる事は,「w1, w2, θをどのように設定するのが最適か(最も適切に分類する線引きをするためのパラメータ値の組み合わせは何か)?」という探索問題として定式化することができる.

Level 1: 線形分離可.

実験内容

  1. サンプルソース(bp_mo.c)は「OR問題」を設定している.この問題においてシード値を変更して適当回数実行し,大抵の場合簡単に解けている事を確認せよ.

    コメント:初期重みを設定している乱数シード値を 10000,20000,...,50000 と変更し,実行し,重みが変わったとしても数100回程度の学習で誤差がほぼゼロになる事を確認する.

    使い方:
      prompt> gcc bp_mo.c -lm
      prompt> ./a.out $random_seed
    

  2. 「OR問題」を学習させた際の学習結果をグラフ化せよ.ただし,横軸は学習回数,縦軸は誤差とする.

    コメント:学習に成功(収束)した回数を Epoch(エポック)数と呼ぶ.学習結果をグラフ化する際にはエポック数を5とし,平均化したグラフを作成する事.shell/perl等のスクリプト言語/表計算ソフト/gnuplot等を利用すると楽になるでしょう.ソースファイルそのものを改変するのもOK.

Level 2: 線形分離不可

実験内容

  1. Level 1 でダウンロードしたサンプルソースを修正して「ExOR問題」へ変更し,シード値を変更して複数回実行せよ.OR問題と異なり,学習が適切に収束しない事を確認し,何故 ExOR 問題が OR より困難なのかを説明せよ.
  2. 「ExOR問題」をうまく学習する為に,以下に示す各パラメータを変更して実験せよ.最も効率良く学習が収束する組み合わせを検討せよ.

    パラメータ変更目安
    学習係数 ETA0以上〜2.0未満
    慣性項 ALPHA0以上〜1.0未満
    中間層のユニット数 HIDDEN1以上

    注記:1つの組み合わせで収束するかどうかを確認する為に,エポック数はシード値を変更して実行した結果5回中3回以上(エポック数3以上)となること.これは,たまたま初期重みが適切な値に設定されたことにより学習が収束したのでは無い事を確認する為である.

  3. (オプション)どうやれば効率良く最適な組み合わせを探すことができるか?可能な限り人の手間を省いて自動化する方法を検討し,実験せよ.
特徴
(通常の)コンピュータの持つ特徴と異なり,曖昧な処理が得意である一方,厳密な処理は苦手である.
  • 得意:曖昧な処理(認識・予測・類推・連想・分析・解析・・・)
  • 苦手:厳密な処理(数式計算)
Level 3: 文字認識サンプル

実験内容

  1. サンプルソース(nn_num2.tar.gz)をダウンロードし,0〜9の文字を認識するように重みを学習させよ.本プログラムでは,学習用には learn0.txt ... learn9.txt を用いているが,類似した文字 eva1-1.txt, eva1-2.txt を適切に1として認識するか,確認せよ.

    コメント:eva1-1.txt, eva1-2.txt で確認する前に,0〜9を認識出来るように学習を収束させる必要があります.そのためには,中間層(デフォルトでは1)を増やした上で,数千〜数万回程度学習させてみてください.

    動かし方は 0README_ja.txt を参照.
    
  2. Level 3.1 において,2.2 と同様にパラメータを調整し,学習後の誤差が最も小さくなる組み合わせを検討せよ.
  3. Level 3.2 で得られたパラメータによる学習曲線を出力し,パラメータと収束能力の関連性について考察せよ.
  4. 各自で任意の評価用データを複数作成し,学習時のデータとの違いが少ないほど認識率が高い事を示せ.
  5. 下図のように入力されたデータが想定していた入力と比べてサイズが異なったり,位置がずれている等,文字の一部が欠けている以外にも様々なデータ(情報)の欠落が考えられる.認識率を高めるにはどのような点を工夫すれば良いか?どのような方法でも構わないので,検討せよ.





参考文献・サイト