読書録

シリアル番号 1297

書名

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

著者

斎藤康毅

出版社

オーム社 O'Reilly

ジャンル

コンピュータ

発行日

2016/9/28第1刷
2016/11/9第5刷

購入日

2016/11/18

評価



AIがブームになってもはや人間は碁においてAIにはかなわない。車の自動運転も可能だ。これに適したプロセッサーは平行処理のできるGPUだと知っている。ではどうやってDeep Learningをするのか、それもコーディングレベルで知りたいと少々高価だが入門教科書を購入した。

オランダの研究者グイド・ヴァンロッサムが設計した汎用のプログラミング言語であるPythonでニューラルネットワークのDeep Learningを実装する。Pythonはコードがシンプルで扱いやすく設計され、C言 語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある。いつでもダウンロードできるらしい。これをつかって実際にプログラミングしながら学べる。Pythonという 名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』である。といっても自分で作ったソフトが暴走して、ハードディスク全部消してしまうなんてことないようにしないと。Anacondaからダウンロードするプログラミング言語はPython3系、ライブラリーはNumPyと Matplotlib。

実装テストサンプルは手書きアラビア数字と美女の写真。

まずニューラルネットワークの元祖であるパーセプトロンについて解説が出てくる。一番簡単なパーセプトロンは2入力のパーセプトロンである。2つの入力信号 x1,x2の重み係数w1, w2とその合計が閾値θを超えればyが発火するというメカニズム。そしてこのパーセプトロンをつかってAND, OR, NAND,  XOR(排他的論理和)ゲートの記述法を教えてくれる。そしてXORは2層にしないと記述できないという。多層のパーセプトロンは非線形領域を表現でき るし、またNANDゲートの組み合わせだけでコンピュータも作れる。

ニューラルネットワークは重み計数やバイアスなどから作る活性化関数の導入で表現される。パーセプトロンは活性化関数にステップ関数を使ったが、 ニューラルネットワークはS字型になるシグモイド関数、またはReLU関数(Rectified Lenear Unit)を使う。いずれも非線形関数だ。

重み計数w、閾値θと等価のバイアスbなどの各層間の信号の伝達は行列の内積計算で求める。これはPythonの外部ライブラリのNumPyを使う。

A=XW+B

ここでAは一層目の信号を受信するニューロン、Xは全層からの入力信号、Wは重み係数、Bはバイアスニューロンからの入力。

最後に出力層の設計がでてくる。ニューラルネットワークは分類問題と回帰問題のどちらかで出力層の活性化関数を変える。分類問題ではソフトマックス関数、 回帰問題では恒等関数を使う。恒等関数は入力=出力。ソフトマックス関数=入力信号の指数関数/全ての入力信号の指数関数の合計。

ニューラルネットワーク学習とはw、b、θ等のパラメーターを損失関数(loss function)が最小になるように決める最適計算となる。損失関数としては2乗和誤差がある。ニューラルネットワーク出力と教師データとの差の二乗の合計である。交差エントロピー 誤差(cross entropy error)もある。教師データとは例えば手書き文字の分類問題の場合は正解の文字となる。

通常のプラント設計でも化学平衡計算でも最適化計算が必要になるがほとんど数値微分して勾配のキツイ方向に移動して最低値にたどり着くという手法をとる。 この場合、変数が多くなると最寄りのタコツボに落ち込んで止ってしまうため初期値を変えて何度もトライすることが大切となる。EXCELの最適化機能にソルバーが あるが、初期値によっては正しい解のセットが得られないのがその例である。この難しさはディープラーニングでも同じだろう。むしろパラメーターの数が多すぎて大変である。ディープ ラーニングでは確率的勾配降下法(SGD:stochastic gradient descent)をつかうという。勾配に沿って動く距離の係数を学習係数というが最初は大きく、次第に小さくするなどの方法を採用。これを学習係数の減衰 (learning rate decay)という。パラメーターの要素ごとに適応的に学習係数を調整するのをAdaGrad:Adaptive Gradientという。勾配の代わりに運動量(momentaum)を移動の指標に使うこともできる。MomentumとAdaGradを組み合 わせる方法をAdamという。

畳み込みニューラルネットワーク(CNN: Convolutional neural network)はフラットな全結合のニューラルネットワークにConvolution layerとPoolin layerを加えたもので、画像など形状の情報を扱えるようになる。

現在のDeep Learningブームはトロント大学のKrizhevskyのグループが2012年の大規模画像認識コンペ(ILSVRC)でCNNの一つAlexNetで優勝して以降である。 AlexNetは活性化関数にReLUを使う。

層を深くするとパラメーターの数が少なくなり計算を高速化できるわけ。

Deep Learningの高速化は積和計算をどう高速化するかに尽きる。そのためにはGPUが適している。分散学習という手もある。こうして一旦パラメーターが 決まればそのパラメーターを使った自動運転が可能となる。車載GPUとして米Nvidia(エヌビディア)のチップがありAudiが採用している。

Googleはどういうロジックを使っているか不明だが、2010年10月にカメラやLiDAR(Light Detection and Ranging:レーザーレーダー)、レーダーなどを装着した自動運転の開発を既に開始していることを発表。2012年3月には、視覚に障害がある人を乗 せたテスト走行をYouTubeで公開した。Tesla Motors社は2015年には、販売後のクルマに対して「AutoPilot」という走行系ソフトウエアに対する通信を介したアップデートを行った。

フォン・ノイマンは「ギリシャ語やサンスクリット語が歴史の産物であり絶対の必然性がないように論理学や数学も歴史の産物であり、たまたま出来た産物と見 るのがたぶん正しい見方である。数学はいわば二次言語である。脳の中枢神経系には根源の一次言語があり、数学もそのうえに構築された言語のひとつに過ぎな い」といったが、AIが最適化でパラメーターを決めるというメカニズムが脳が歴史の産物というメカニズムに対応しているのだろう。

January 17, 2017
Rev. February 23, 2017

トップ ページヘ