マトリョーシカ的日常

ワクワクばらまく明日のブログ。

はじめてのpython体験と夏のディープラーニング

f:id:kyokucho1989:20180815054829j:plain
photo url

 夏の暑さがやっと例年並みになってきて、早朝の作業が行えるようになった。これからはアサガオの水やりのごとく、pythonの学習をやろうと思う。当面の目標はディープラーニングをつかってなんか面白いものをつくって、aidemy noteのコンテストに応募することである。とりあえずやったことのまとめを書く。

 とりあえず環境というものを構築した。PCは古いmacbookを使っている。入門書に倣って、python3とanacondaというのをダウンロードした。ターミナルと呼ばれる黒いアイコンに文字をひかりあれ、と打つとそのようになった。よかった。単純な文法の勉強などはaidemyの「python入門」という無料講座を利用した。いろいろ書いてあったし、ブラウザさえあればコードがかけるので楽しかった。

aidemy.net

 そのあといろいろあって手がとれなかったが、今日になってようやく勉強を進めた。魚の本(ディープラーニングの赤い本)のp65にある3層ニューラルネットワークの実装をやってみた。その通りに書き写して実行したがエラーが出た。原因はいろいろあった。numpyという多次元配列をインポートしてなかった。networkの綴りがところどころで"netwrok"になってた。sigmoid関数を定義していなかった。identity_function関数を定義していなかった。それらをやってみるとちゃんとプログラムは動いた。

 ターミナルにこのように表示された。

[0.31682708 0.69627909]

 ちょっと意味がわからなかった。なにこれ。この数字が出たら世界がどう変わるのだろうか。知らない。知らないなりに少しずつ勉強していくしかない。

 そもそも3層ニューラルネットワークとはなんなのか。ニューラルネットワークというのはいつかの記事で説明したが、人間の神経回路を模した情報のネットワークのことだ。丸と矢印で構成されていて、丸は数値を演算し、矢印が運ぶ役割を持っている。3層というのは、数値の演算が3回行われるということだろう。

 それぞれの層にはたくさんの丸がいるが、それらは一回の行列計算でいい感じに計算することができる。たとえば一層目の計算は以下のようになる(p61の式(3.9)参照)

 A^{(1)} =  X W^{(1)} + B^{(1)}
さらにこの計算結果をシグモイド関数に入れる。
 Z^{(1)} (A^{(1)}) = \frac{1}{1+exp(-A^{(1)})}

 上つきもじは「何層目の行列ですよ」ということを示している。

 ここで得られた出力Zを次の行列Aに使う。
 A^{(2)} =  Z^{(1)}  W^{(2)} + B^{(2)}


 
 こうやっていい感じに計算するらしい。この計算で本当に人工知能が生まれてくるのだろうか。脳のデータはこうしてやりとりされるのだろうか。やっぱり意味がわからん。

 本日はここまで。

詳細!Python 3 入門ノート

詳細!Python 3 入門ノート

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装