PPAP BOXをつくる / ディープラーニングの学習

キュウリコンピュータの記事をお手本にPPAP BOXを作ろうと考えているが、もう少しディープラーニングを理解しておきたい。ペンとパイナップルとリンゴを判別するお馬鹿な機械を作ることが目的だが、テクノロジーを深く理解したほうがきっと楽しい。ディープラーニングブラックボックスと言われるけど、全くのブラックより灰色くらいまでは知っておきたい。

まずは評判の良いオライリーの「ゼロから作るDeep learning」を読むことにした。オライリーの本はMakeの会場で売っているのを見たけど、表紙が難しそうなので手を出したことはなかった。今回はPPAP BOXを作るために、覚悟を決めて購入した。

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

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

 

恐る恐る開いてみたが、予想に反してとても読みやすく面白い。前半部分で最も興奮した内容は、パーセプトロンを使えば、重みと閾値を変えるだけで、AND、NAND、ORの論理回路を表現できるということだ。自分の学生時代にNANDゲートの組み合わせだけでコンピュータが作れるということを知ったときも大変驚いたが、今回は思わず声を上げてしまった。勉強って楽しい。

後半部分では誤差逆伝播法が丸と矢印を使った計算グラフでわかりやすく説明されている。もし数式だけだったら挫折していたかもしれない。りんごとみかんの値段を計算するなんて小学生以来だが、この方法はとても役に立つ。

重みの初期設定が重要であることもグラフから視覚的にイメージすることができた。ReLUでは「Heの初期値」がよく学習できるとあった。これは提案者のKaiming Heさんが由来なのだが、どうしてもヘリウムが思い浮かんでしまう。

畳み込みニューラルネットワークについてはkaekenさんの記事にアニメーションが載っていたので参考にさせてもらった。特徴量を抽出する 事はフィルターの重みを求めるということが分かった。

PPAP BOXでは画像データだけでなく、重量や音、温度や匂いなど出来る限り多くの情報を入力させたいので、これらのデータ構造をどう学習させるかが鍵になりそうだ。全て画像データのように処理するのもありかもしれない。床に圧力センサを4×4配置して画像と同じ0-255の値に変換するとか・・もしくは画像データを64×63として、1×64個のセンサ情報を付け足して64×64の画像として処理するか・・ペンとパイナップルとリンゴを識別するのに必要な解像度とセンサの数を考えて決めていこうと思う。カラーにすれば少ない解像度でも十分認識できそうな気がする。

人工知能は人間を超えるか」では自己符号化器(オートエンコーダ)が重要なトピックとして書かれていたが、「ゼロからつくるDeep learning」では触れられていなかった。調べてみると、ディープラーニングアルゴリズムが改良されたので、オートエンコーダを使って事前学習しなくても、十分な精度が出せるようになっているらしい。この業界が日進月歩であることを感じさせる。*1

この本の中で、理解につまずいてWEBで調べた事を下に示す。自分はプログラミングの経験が無いので基本的なところが引っかかってしまった。初心者はこんなところにひっかかるということを知ってもらえたらよい。

 

タプルの意味

要素が1つのタプルがシングル、要素が2つのタプルがダブル、要素が3つのタプルがトリプル・・・

 

Numpyのshapeとndim の違い

Shapeは、たて3cm、よこ4cm、高さ5cmだよって教えてくれる。ndimはたて、よこ、たかさの3次元あるよって教えてくれる。

 

ドット積

内積のこと A・Bの「・」が点、ドットだから dot product

 

Pythonでのreturnの意味

数字を入れ終わったということ。関数の戻り値を指定する、と言われても戻り値の意味が分からなかった。教えてgooに載っていた、花子の飴と太郎のチョコの例え話で理解することができた。戻り値(Return value)とReturnがつながった。

 

恒等関数

f(x) = x のこと。英語だとidentity function 。identityから恒等と訳されたのか、恒等という言葉は日本に昔からあったのか・・後で調べてみよう。

 

フォルダとディレクトリの違い

だいたい同じ、厳密には違う。ディレクトリという言葉に慣れていない。

 

Pythonでのバックスラッシュの意味

長い行を折り返す。本当は1行で書きたいが、横幅が広くなりすぎるとき、段を分けるために使う。

 

インスタンス変数

調べてもよく分からなかった。 きっとコードを打っていくうちにわかるだろう・・

 

確率的勾配降下法(stochastic gradient descent)の"stochastic"の意味

ギリシャ語の「ねらう」から来ているらしい。Probability と stochasticで調べたら痛風財団さんのコラムがヒットした。「痛風財団」という文字力に圧倒されて、はじめはネタサイトかと思ったが、厚生省の認可を受けた痛風研究に関する団体のようだ。まだProbability、stochastic, randomの違いがしっかりと理解できていないが、理事長通信がとても興味深かった。

第112号 深い学習、深い思考、深い理解 | 公益財団法人 痛風財団

 

Pythonはまだインストールしていないので、一旦最後まで読み終わったらコードを叩きながら復習していこうと思う。それにしても表紙の魚は何という種類だろうか。魚のうろこがニューラルネットワークに見えてくる。

f:id:eunoi11:20170223230843j:image

 

 

*1:人工知能は人間を超えるか」は2015年3月10日初版、「ゼロから作るDeep learning」は2016年9月28日初版。