プログラム実行環境構築と tensorflowプログラム実行 - hosei•...
TRANSCRIPT
プログラム実行環境構築と Tensorflowプログラム実行
2016年9月30日
今回の内容
• 1年生、春未受講の2年生 まずは、pythonプログラムの起動がおかしくなった問題の解決とnumpy等の導入。 各アルゴリズムの概要説明。
• 春受講した2年生、3年生 本のコピーや、スライドのリンク先等を参考に、Tensorflowのプログラム実行をしてみる。また、使い方も確認する。 自習に近い形になる。
プログラム実行環境構築 (1年生、春未受講の2年生向け)
環境構築
• numpyとmatplotlibは、コマンドプロンプトを管理者として実行してからpipでインストールできる。 pip install numpy pip install matplotlib
Pythonプログラム起動応急処置(1/2)
• IDLEのショートカットから起動。 • 場所が分からない人は、 画面左下のスタートを右クリック→検索をクリック→IDLEで検索→出てきたIDLEを右クリック→ ファイルの場所を開く
Pythonプログラム起動応急処置(2/2)
• File→Openで起動するプログラムを選択することでいつも通りの画面が出る。
ニューラルネットのアルゴリズム
誤差逆伝播法
ヘッブの法則 ホップフィールド
• 人間の脳活動
• 自動分類 • 多層ネットワーク
• 連想記憶
自己組織化写像 様々なものが存在するが、4つを紹介予定
http://enakai00.hatenablog.com/entry/20150108/1420719651
http://d.hatena.ne.jp/nowokay/20080701/1214915017
http://gaya.jp/spiking_neuron/matrix.htm
プログラムの紹介
• ヘッブの法則(hebb.py) • ホップフィールドネットワーク(hopfield.py) • 自己組織化写像(som.py) • 誤差逆伝播法(neural-network.py)
ヘッブの法則(hebb.py)
• 人間の脳の動きに近い。 何度も同じことを反復学習することで、定着する。望んでいるか望んでいないかにも関わらず、繰り返した行動が習慣化する。 という脳の働きをモデル化したプログラム。
ヘッブの法則(hebb.py)
• 実行結果
ヘッブの法則(hebb.py)
[1, 1, -1]を、まず3回覚える。そうすると、 [1,1,-1] を見ると、[1,1,-1]をすぐに思い出すことができる。次に、この状態のまま[1,1,0]を見ると、これまでに学習したものは[1,1,-1]だけのため、これが思い出されてしまう。 この後に、新たに[1,-1,1]を2回覚える。その状態で、また[1,1,-1]を見ると、[1,1,-1]を思い出すことができた。これは、[1,1,-1]を3回覚えて習慣化したため。 さらに、[1,-1,1]を見せると2回覚えているはずだが思い出せない。学習が足りないのかもしれない・・・というプログラム。
ホップフィールドネットワーク(hopfield.py)
• John Hopfieldが提案した相互結合型ネットワーク 相互結合型ネットワークは入力層、出力層がなく、それぞれのユニットは自分以外の全てのユニットと結合している。
• ニューロン4個の場合
-1 -1
-1 -1
ニューロン1
ニューロン3
ニューロン2
ニューロン4
ホップフィールドネットワーク(hopfield.py)
• このプログラムでは、「リンゴ」、「バナナ」、「赤」、「黄色」に反応するニューロンを例としての学習を行う。各ニューロンの初期状態は無刺激で-1となっていて、ニューロン間の結びつきは全て0である。
ホップフィールドネットワーク(hopfield.py)
• 「赤いリンゴ」、「黄色いバナナ」の順に見た後のニューロン間の結合具合。「リンゴ」と「赤い」のニューロンの結びつき、「バナナ」と「黄色い」のニューロンの結びつきが強くなる。逆に、「赤」と「バナナ」や「黄色」と「リンゴ」は結びつきが弱まる。
ホップフィールドネットワーク(hopfield.py)
• この学習状態で「赤い」のニューロンを刺激する(-1から1にする)と、それに反応して「リンゴ」が1になって反応していることがわかる。 つまり、「赤」から「リンゴ」を連想することができた。
ホップフィールドネットワーク(hopfield.py)
• 次に、存在するかは分からないが、引き続き「黄色いリンゴ」を見せた場合の学習状態はこのようになる。
(赤いリンゴ、黄色いバナナ を見た時の状態)
ホップフィールドネットワーク(hopfield.py)
• 「リンゴ」が刺激された状態になっているため、無刺激状態にした上で、また「赤」のみ刺激状態にすると、先ほど「黄色いリンゴ」を見たが、それでも「リンゴ」を連想する結果となる。
自己組織化写像(som.py)
• R、G、Bの3次元で表される「色」等、ベクトル表記される多次元のデータを、マップ上の座標に近いもの同士で集めることが可能。
• 勝手に学習して分類してくれる。 • 色の場合の学習をサンプルプログラムとして紹介。
自己組織化写像(som.py)
• 実行終了まで少しかかる(final.pngが作られるまで待つ)。 • 最初はランダムだった配色が、回数を重ねるごとに少しずつランダム性が失われ、マス目がくっきりする。
• 似たような色が近くに並ぶが、これはコンピュータが元々類似色を知っていたわけではない
自己組織化写像(som.py)
• ある色を選択し、その色と一番近いものを図の中から探す。 一番近かった色のマスとその周囲1マスに選択した色を混ぜる。 この工程を繰り返すことで、図中の色の分布が似たような色で固まるようになる。
• デモ http://gaya.jp/spiking_neuron/som.htm
誤差逆伝播法(バックプロパゲーション)
• 誤差逆伝播法(BP)は多層パーセプトロンの学習に使われる学習アルゴリズム。ある学習データが与えられたとき、多層パーセプトロンの出力が学習データと一致するように各層の間の結合荷重を修正するという学習法である。
• 多層パーセプトロンは誤差逆伝播法によって教師あり学習をおこない、パターン識別や関数の近似などに用いられる。
• 多層パーセプトロン:ユニットが複数の層を構成するように並び、入力から出力への一方向へのみ信号の伝達がおこなわれるネットワーク。
http://www.brain.kyutech.ac.jp/~furukawa/data/bp.html
誤差逆伝播法のアルゴリズム
1. ニューラルネットワークに学習のためのサンプルを与える。 2. ネットワークの出力とそのサンプルの最適解を比較する。
各出力ニューロンについて誤差を計算する。 3. 個々のニューロンの期待される出力値と倍率(scaling
factor)、要求された出力と実際の出力の差を計算する。これを局所誤差と言う。
4. 各ニューロンの重みを局所誤差が小さくなるよう調整する。
5. より大きな重みで接続された前段のニューロンに対して、局所誤差の責任があると判定する。
6. そのように判定された前段のニューロンのさらに前段のニューロン群について同様の処理を行う。
https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%82%AF%E3%83%97%E3%83%AD%E3%83%91%E3%82%B2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3
Tensorflowプログラム実行 (春受講した2年生、3年生向け)
Dockerの環境
Dockerの環境ならば、Tensorflowが使用できることは確認している。しかし、実行が不便だと感じるかもしれない。 (コードを貼り付ける形でないと起動できない?他の方法が分かる方いれば教えてください。)
Tensorflowモード起動
① Docker起動 ② docker run -it b.gcr.io/tensorflow/tensorflow:latest-devel ③ python ④ コード貼り付け の流れ。
Tensorflowモード起動
DockerでのTensorflow
① コードを張り付けないと起動できない? ② コメントアウトの文章があると実行が止まる?
→メモ張等に一回コードを張り付けて編集してから、もう一度Dockerに張り付ける。
Tensorflowサンプル
以下のリンクのコードを動かせるか実験してみる。 また、コードの解説を読んで理解し、応用法などを考えてみる。 http://developers.gnavi.co.jp/entry/tensorflow-deeplearning-2_1 http://qiita.com/akiraak/items/b27a5616a94cd64a8653 http://domkade.hatenablog.jp/entry/2016/04/07/011016 http://7rpn.hatenablog.com/entry/2015/11/29/131601 http://tensorflow.classcat.com/2016/03/09/tensorflow-cc-mnist-for-ml-beginners/
今後
• アルゴリズムの解説(おそらくヘッブの法則)。プログラムのコードに関しても触れる。
• Tensorflowをやる方は、来週にはTensorflowの本のコピーを用意できる予定なので、それに従ったことをやる予定。