ホップフィールドネットワーク演習 2018年12月14日
最終発表概要 発表日 1/11(第13回)、1/18(第14回) 発表者 全員(第13回に1、2年生の発表を設け、第14回に3年生の発表 を設ける予定) 発表時間 1,2年生は1グループ(2人まで)あたり4~5分。3年生はグルー プ発表不可で、一人あたり5分を予定 1,2年生は最大二人グループ スライドに どの部分を担当したか等を記載 例: このプログラムを担当 主にスライド作成、発表を担当等 演習を3つぐらい設けて、時間を区切って演習を行う。 15~20分区切り
最終発表概要 発表内容 (1、2年):ホップフィールド演習についてまとめる+(option:拡張、応 用) (3年):中間発表の内容の拡張+(研究テーマについて1,2ページ) 備考 ホップフィールド演習についてまとめる:配列の要素数を増やしたり、 刺激を増やしたり(neurons[]の変更)、見せるものを変えたり増やし たりする(learn_event()) グループで発表を行う場合は、グループ内で自分は発表のどの部 分に貢献したのかをスライドに記載すること。 例)このプログラムを作成、主にスライド作成を担当、発表を担当等
本日の内容 ホップフィールドネットワーク(hopfield.py)について、解説、 演習。 http://enakai00.hatenablog.com/entry/20150108/14207196 51 上記のページを参照。 1,2年生の発表グループ決め。
解説に入る前に… 実行できる環境が整っていない方がいればこの時 間に対応したいと思います! (例:実行したらインポート系のエラーが起きた、等)
インポートに関するあれこれ まず、左下の虫眼鏡↓から、「コマンドプロンプト」を検索、カーソルを合わせて右クリックで、 「管理者権限で実行」をクリック。その後、pip と打ち込み、enterを押す。エラー①発生の可能性。 その後、pythonと打ち込み、enterを押し、>>が表示されたら、import pandasと打ち込み、enter を押す。エラー②発生の可能性あり。これらをクリアしたら、プログラムが動作可能になる。 ① pipがコマンドとして認識されていない https://qiita.com/suzuki_y/items/3261ffa9b67410803443 (pipをインストールするための手順) ②pipがインストールされているが、pandasのインポートでエラーが発生する 左下の虫眼鏡から、コマンドプロンプトを検索、右クリックで、 「管理者権限で実行」をクリック。 その後、pip install pandas と打ち込み、enterを押す。
ホップフィールドネットワーク(hopfield.py) John Hopfieldが提案した相互結合型ネットワーク。 相互結合型ネットワークは入力層、出力層がなく、それぞ れのユニットは自分以外の全てのユニットと結合している。 ニューロン4個の場合 -1 ニューロン2 -1 ニューロン1 -1 ニューロン4 -1 ニューロン3
ホップフィールドネットワーク(hopfield.py) 何かを見た時等に、活動している神経同士、活動していな い神経同士の結びつきを強め(+1)、活動している神経と活 動していない神経の間の結びつきを弱める(-1)。 何か入力を与えた時に、近いパターンに収束する。 一部の入力情報から、記憶したパターンの全体を呼び出す 過程(連想記憶)。
ホップフィールドネットワーク hopfield.pyは、 ニューロン1:リンゴ ニューロン2:バナナ ニューロン3:赤 ニューロン4:黄色 となっている。 -1 ニューロン2 -1 ニューロン1 -1 ニューロン4 -1 ニューロン3
hopfield.pyコード解説 インポート部。sys、numpy、pandasをインポート。pandasは、 学習部。あるものを見せた時にlinks(ニューロン間のつながりの表のイメージ)を更新する。〇を見せる の部分で活躍。 刺激を提示した時のニューロンの様子neuronsを更新する部分。〇を刺激、〇といえば?の部分で活躍。
neurons,linksの初期状態の定義、表形式に成形する部分。 hopfield.pyコード解説 neurons,linksの初期状態の定義、表形式に成形する部分。 ① ②
learnさせ、各ニューロン間の 結びつきの強さを表形式で出力 Neurons(各ニューロン自身が持つ状態)に変更を加え(これが刺激を与えることである)、hopfieldをrunさせ、他に刺激されたニューロンを見る。
hopfield.pyコード解説 __name__は、モジュール(インポートされるもの)の名前が格納されて いる変数で、コマンドでスクリプトファイルを実行した場合には、 __name__には__main__という変数が格納される。 コマンドでこのプログラムが直接実行されたとき、以降の行(この場合 だとtest())を実行する。という意味。 このプログラムでは、main関数のようなイメージを持ってもらえればそ れでいい。
演習1 2p前のスライドを参考に、作成されているホップフィールドネットワー クに対して、青い下に伸びる矢印に相当する部分を、 ①黄色いバナナを見せる ②赤いリンゴを見せる ③黄色を刺激 ④黄色といえば? に変更した場合、挙動はどうなるかを確認する。
演習2 演習1の内容に、 ①赤いバナナを見せる ×3回分 ②黄色いリンゴを見せる ×2回分 ②赤色を刺激 ③赤といえば? ①赤いバナナを見せる ×3回分 ②黄色いリンゴを見せる ×2回分 ②赤色を刺激 ③赤といえば? を追加した場合、挙動はどうなるかを確認する。
演習3 元々コードで定義されているネットワークに対して、 「”Melon”、”Green”」を追加し、最低4回フルーツをネットワークに見 せ、その際に”Red”、”Yellow”、”Green”の中から1色刺激を与え、そ の色から連想されるフルーツは何かを調べる。 (Option)さらに色、フルーツ、野菜をネットワークに追加して、それら を見せ、刺激を与えた際の挙動についても確認する。複数回の刺 激から得られる結果を考察してみよう。
次回 ホップフィールドネットワーク演習(後半) ドット絵文字のネットワーク実装、ネットワークを使った文字認識に ついての解説。 発表グループ決定(次週までに2人ペアを組みたい人はパートナー を探しておいてください)
最後に 授業評価アンケートにご協力お願いします!!
提出物について 提出日:各々の発表日のプロジェクト開始時まで ppt(グループ代表者)、プログラム(グループ代表者)、レ ポート(wordファイル、全員)。 レポートの内容は、発表題材に関して学んだこと、プロジェ クトの感想、これから発展してやってみたいこと・課題など。
質問 年末年始でもメール対応するので、スクリーンショットなどを 添付しつつ、どのような問題に直面しているか分かるように 教えてください。