不確定な世界

科学の話題を中心に、勉強したことや考えたことを残していきたいと思います

「Pythonによる機械学習入門」;株式会社システム計画研究所編 読書感想 

本日紹介するのは、、株式会社システム計画研究所編、「Pythonによる機械学習入門」。
私は深層学習から入ってきたクチなので、ニューラルネットワーク以外の機械学習手法にはほとんどなじみがない。とりあえずscikit-learnの使い方でも覚えるかと手に取ったのが本書だ。本書は理論やアルゴリズムの実装は置いといてとにかくscikit-learnを使って機械学習を体験したい、という人をメインターゲットとしている。とはいえ、付録として理論的な部分の解説もあり、結構本質的なことが書いてある印象を受けた。

本書の前半の基礎編では、scikit-learnを使って決定木・ランダムフォレスト・サポートベクターマシン・線形回帰・k-means法などをどんどん試していく。名前だけはどこかで聞いて知っていたが、実際やってみるとやはり面白い。しかしながら良くも悪くもfitメソッドを呼ぶだけなので、正直身についている感はそれほどない。これだけの内容ならば、わざわざ書籍を購入しなくてもネット上でサンプルコードを探すだけで十分だろう。

本書の中で特徴的だと思ったのは後半の実践編、特に第6章の「画像による手形状分類」だ。この章では、著者であるシステム計画研究所が独自に用意したハンドジェスチャー画像を分類するモデルを学習する。オリジナルなデータセットを使い、データを増やしたりクレンジングしたりしながら、徐々に精度を上げていくことで、機械学習プロジェクトを追体験することができる。画像の撮影風景の様子も写真で載っており、機械学習のためのデータ準備の大変さが伝わってくる。mnistやirisを使っているだけではわからないことだ。
さらに、個人的に有益だったのは、HOG特徴量による特徴抽出が扱われていたことだ。別にHOG特徴量自体が詳しく解説されているわけではない。だが冒頭で述べた通り、私はほとんどニューラルネットワークしか扱ったことがなかったので、そもそも「人が頑張って設計した特徴量」というものを使ったことがなかったのだ。よく、「深層学習は自動で特徴量を見つけ出すのが凄い」といわれるが、当然ピンと来ていなかった。しかし、HOG特徴量を使うことで分類器の精度が向上することを目の当たりにすることで、何となく腑に落ちるものがあった。きっとCNNで畳み込むという操作も、本質的にはHOG特徴量を計算するという操作と同じなのだろう。HOG特徴量は人間が「こういう計算をして算出した値は画像の分類に役立つはずだ」という理論があって構築したものだが、CNNの場合は実際に正解を見ながら、こういう数値でフィルタ処理すれば(なぜか)精度が上がるよと、そういう計算方法を獲得するわけだ。この辺りの気づきが本書を読んだことでの最大の収穫だった。
なお、最後の第7章では四国電力のセンサデータを用いた回帰問題を扱うが、こちらは駆け足感が否めなかった。コードを載せずに結果だけ見せている部分も目立ち、消化不良で終わってしまった。こっちも第6章と同じように丁寧に進めてくれていれば、もう少し本書のおすすめ度が上がったのであるが…。

最後にまとめると、本書は主にscikit-learnを使って機械学習を体験してみたい初心者におすすめである。一方、理論やアルゴリズムの実装はほとんど扱っていない。ネット上にサンプルコードが無数に存在する中で、わざわざ本書で学ぶ必要があるかと言われると正直微妙なところではあるが、オリジナルデータセットを使った第6章は一読の価値があると思うので紹介させていただいた。

Pythonによる機械学習入門

Pythonによる機械学習入門

  • 作者:
  • 出版社/メーカー: オーム社
  • 発売日: 2016/12/01
  • メディア: 単行本(ソフトカバー)

「スッキリわかるJava入門 第2版」;中山清喬・国本大悟著 読書感想

本日紹介するのは、中山清喬・国本大悟著、「スッキリわかるJava入門 第2版」。
私は学校ではC言語を習い、仕事では主にPythonを使っている。今までJavaを学ぶ機会はなかったのだが、存在はもちろん知っていたし興味もあったので、軽く入門してみようと元旦から読み始めた。

main関数(正確にはmainメソッド)もクラスの中に書かなくてはいけないことに最初は面食らったが、まあプログラミング言語なんてどれも同じようなもので、for文だのif文だの配列だの、一通り書けるようになるのに時間はそれほどかからなかった。いちいち学習過程を書いたりはしないが、本書を読んで最も良かった点を一つ選ぶとすると、オブジェクト指向(特に多様性)について理解が深まったことだ。

Pythonを学ぶときに一応オブジェクト指向の勉強はした。もちろん多様性もその中に含まれていたが、正直「異なるクラスでも同名のメソッドを定義しておくと同じように使えて便利」というようなイメージしかもっていなかった。本書の表現を使うと、多様性の本質は「ザックリ捉える」ことなのだが、Pythonは元々型の扱いがザックリしているため、この「ザックリ」のメリットが理解しにくいのが原因だったのだろう。
Javaでは型を厳密に扱うため、例えば勇者*1がモンスターに攻撃するときには、attack(Slime s)やattack(Goblin g)のようにモンスターの種類ごとにメソッドを用意する必要がある。ここで、スライムやゴブリンのインスタンススーパークラスであるモンスター型の変数に格納することで、「スライムもゴブリンもザックリ言えばモンスター」とみなすことができ、モンスターに攻撃するメソッドattack(monster m)を1つだけ用意すればよくなる。
さらに、ザックリとモンスターと扱うことで、スライムやゴブリンをリストや配列に一緒に格納して、for文で同一のメソッドを連続して呼ぶようなこともできる。ここで重要なのが、抽象メソッドの仕組みにより、子クラスでのメソッドのオーバーライドを強制できることと、スーパークラス型の変数に格納されていても、実際に呼び出されるのは子クラスのメソッドである点だ。これにより、ザックリとモンスターと扱って同じように命令を出しても、各モンスターはスライムならスライム、ゴブリンならゴブリンのやり方で行動する。これこそが多様性なのだ。
このような説明は、私にとっては目から鱗だった。Pythonでは関数の仮引数に型を指定する必要はないし、リストにはあらゆるオブジェクトが格納できてしまう。だから多様性のメリットや思想に気付かなかったわけだ。この部分だけでも、本書を読んだ甲斐があった。こういう点で、本書はJavaの文法を勉強したい人だけでなく、オブジェクト指向という概念について勉強したい人にもおすすめできる。単なる文法解説ではなく、「現実を模倣する」というオブジェクト指向の思想を前面に押し出して解説しているため、文法部分を読み飛ばしたとしても得るものはあるだろう。

それにしても、自然言語にも言えることだが、異なる言語を学ぶということは異なる文化や思想を学ぶことだ。今回Javaを学ぶことで、Pythonを使っていては気づきにくいオブジェクト指向本来の思想に触れることができた。いつもついだらけてしまう正月休みだが、本書のおかげで今年は有意義に過ごせたと思う。

さて、本書には続編(実践編)がある。さらに踏み込んだ文法はもちろん、開発現場での仕事の仕方のようなことまで学べるようだ。私はJavaに関しては仕事で使うわけではないので今すぐ読む予定はないが、本書を読み終わって、さらに現場で本当に使える知識を身に着けたい方は続けて読んでみるといいだろう。


*1:本書ではサンプルプログラムとしてRPGを題材にしている箇所が多い。

「眼の誕生」;アンドリュー・パーカー著 読書感想

本日紹介するのは、アンドリュー・パーカー著「眼の誕生」。
日本におけるディープラーニングの第一人者である松尾豊先生が、著書や講演などでディープラーニングのことを「機械が眼を獲得した」と表現し、本書をよく参考文献として挙げている。そのため、本書のことを知っている方も多いだろう。私が本書を手に取ったのも松尾先生の影響だ。もっとも、本書はあくまでも古生物学の本であるため、これを読んだからと言ってAIや画像処理について学ぶことはできないが、純粋に自然科学の本として面白いのでお勧めである。

本書の目的は、カンブリア紀に起きた進化の大爆発がなぜ起こったのかを探ること。そして、著者であるパーカーがその疑問への解答としてたどり着いた「光スイッチ説」を読者に紹介することだ。そのため、本書はまずカンブリア爆発とは何かが解説されるのだが、私はここで驚いてしまった。
カンブリア爆発はよく、生物種が爆発的に増加したことだといわれるし、私もそう思っていた。進化の樹形図がすごいスピードで枝分かれしていくようなイメージだ。
しかしそれは誤解だったらしい。パーカーによれば、生物の内的体制の進化による動物門の増加はカンブリア紀より前から着々と進んでおり、カンブリア爆発とは「5億4300万年前から5億3800万年前に、現生するすべての動物門が、体を覆う硬い殻を突如として獲得した出来事」のことに過ぎない。樹形図の枝分かれはカンブリア紀より前にすでに終わっており、枝がもう1ステップ伸びるときに、突如としてすべての枝が硬質化し、殻を持った(それによって化石が残りやすくなった)ということらしいのだ。
つまり、「カンブリア爆発はなぜ起こったのか」という疑問は「なぜ枝分かれが起こったのか」ではなく、「なぜ殻を獲得したのか」という意味になる。そして、その疑問への解答としてパーカーがたどり着いた答えが、「眼を持った捕食者から身を守るため」だった。このように「眼の誕生」がすべての始まりだとするのが光スイッチ説であり、「ではいつ、どのように眼が進化したのか」を紐解いていくのが、本書の流れである。

本書では化石の分析だとか体色だとか、色々な話が出てくるが、一番印象に残ったのはニルソンとペンゲルの研究だ。
進化論に対する疑問の一つとして「眼のような奇跡的に複雑な器官が突然変異の積み重ねで生まれるのか?」というものがある。これに対する回答として、ニルソンとペンゲルの研究が、単なる感光細胞がカメラ眼まで進化しうることをシミュレーションで示している(文献[1])。しかも、この研究によると突然変異率を0.005%と控えめに見積もっても、(実時間換算で)50万年ほどで眼が生まれるらしい。
また、「中間段階の眼が何の役に立つのか」という疑問もよく見るが、シアノバクテリアやオウムガイのような現生生物は、原始的な眼でも実際に適応している。中途半端な眼でも、ないよりはマシというわけだ。
それにしても、この手の本を読むと、改めて生命の巧みさを思い知らされる。バイオインスピレーションという分野もあるが、人間はまだまだ他の生命から学ぶべきことがありそうだ。

ディープラーニングの成果は主に畳み込みニューラルネットワークによる画像認識の世界で著しい。松尾先生の言う「機械が眼を獲得した」というのはもちろん文字通りの意味でもあるのだろうが、わざわざ本書を推薦する意図を深読みするのであれば、「あなたも殻を進化させないと淘汰されるよ」ということではないだろうか。

参考文献

[1] Dan-E. Nilsson and Susanne Pelger, A pessimistic estimate of the time required for an eye to evolve, Proc. R. Soc. Lond. B 256, 53-58 (1994)

なお、本書を読むにあたり以下の書籍も参考にした。通読していないので個別には紹介しないが、興味のある方はぜひ。
[2] 土屋健著、「古生物たちのふしぎな世界」、講談社ブルーバックス出版社ページ)(Amazon
[3] 伊庭斉志著、「進化計算と深層学習」、オーム社出版社ページ)(Amazon


「世界を変えた書物」展@上野の森美術館

3連休の目玉イベントとして、金沢工業大学が主催する「世界を変えた書物」展(上野の森美術館)に行ってきた。
www.kanazawa-it.ac.jp

歴史上の天才科学者たちが後世に残した偉大な書物の数々。その実物をこの目で見ることができるという、科学ファンなら必見のイベント。しかも、入場は無料で会場内は写真撮影OK(ただしフラッシュ禁止)、SNSへの投稿もOK(他の来場者の映り込みに注意)なのである。なんとも太っ腹なことだ。2時間半ほど、じっくり鑑賞させていただいた。
というわけで、さっそく私の撮った本の写真をいくつか紹介しよう。

エウクレイデス(ユークリッド)「原論」、1482年、初版

f:id:quanta087:20180923205447j:plain

コペルニクス「天球の回転について」、1543年、初版

f:id:quanta087:20180923210035j:plain

ガリレオ・ガリレイ星界の報告」、1610年、初版

f:id:quanta087:20180923210450j:plain

ニュートン「自然哲学の数学的原理(プリンキピア)」、1687年、初版*1

f:id:quanta087:20180923211204j:plain

ネーピア「驚くべき対数法則の記述」、1614年、初版

f:id:quanta087:20180923211813j:plain

ライプニッツ「極大と極小に関する新しい方法」、1684年、初版

f:id:quanta087:20180923212434j:plain

オイラー「無限解析入門」、1748年、初版

f:id:quanta087:20180923215556j:plain

デカルト方法序説」、1637年、初版

f:id:quanta087:20180923215826j:plain

ホイヘンス「光についての論考」、1690年、初版

f:id:quanta087:20180923220101j:plain

ダニエル・ベルヌーイ「流体力学」、1738年、初版

f:id:quanta087:20180923220234j:plain

アグリコラ「金属について(デ・レ・メタリカ)」、1556年、初版

f:id:quanta087:20180923215103j:plain

ファラデー「電気の実験的研究 第Ⅰ、Ⅱ、Ⅲ巻」、1839-44、1855年、初版

f:id:quanta087:20180923213232j:plain

マイケルソン & モーリ「地球と発光性エーテルの相対運動について」、1887年、初版

f:id:quanta087:20180923214652j:plain

ダーウィン種の起源」、1859年、初版

f:id:quanta087:20180923214225j:plain

ここに載せたのは展示のほんの一例である。
この他にもウィトルウィウスアルキメデス、アポロニウス、ケプラーカルダーノ、フック、ヤング、ゲーテ、ボイル、ラヴォアジェ、クーロン、エジソンガルヴァーニ、ヴォルタ、アンペール、オーム、グラハム・ベル、ヘルツ、マルコーニ、ローレンツ、マクスウェル、レントゲン、キュリー、シュレディンガー、ラザフォード、湯川秀樹プランク、リーマン、ミンコフスキー、パスカルヘルムホルツ、メンデルなどなどなどなど。
およそ科学のあらゆる分野の偉人による書籍や論文が目白押しであった。古今東西の天才科学者が生み出した知性の結晶に囲まれるという、一生の思い出になった。

最後に、本企画展の関連書籍として、以下の本を紹介しよう*2

*1:本展示会で最も楽しみにしていた本の一つ。言うまでもなく、物理学を学んだ人間にとって聖書のような存在である。

*2:会場の物販に置いてあるだろうからそこで買おうと思っていたのだが、置いていなかったので帰宅後にポチった。

「nature 科学」シリーズ;竹内薫 監修 読書感想

今回紹介するのは、
nature 科学 系譜の知
nature 科学 未踏の知
nature 科学 深層の知
の3冊。
「nature」は有名な科学論文雑誌なので、ご存じの方も多いだろう。そのnature誌の一般向け解説コラム「News & Views」過去10年分の中からイチオシの内容が選定され、分野別に収録されているのが本書である。

本書は分野別に3冊に分かれているのだが、それぞれの巻の話をする前にまずは全体の感想を述べておこう。
本書の内容はかなり難しい。ブルーバックスのような本と違って特定の論文をダイレクトに解説しているため、細分化されたニッチな話が多いし、専門用語もバンバン出てくる。正直に言うと、自分の専門分野に比較的近い部分を除き、書いてあることの殆どは理解できなかった。
それでも私が本書を読んだのは、科学の「現場」に近い情報が欲しかったからだ。素人向けの雑学本やニュース記事から学ぶことも多くあるが、やはりそのような知識と最先端の現場にはある程度のギャップがある。常識的な手段*1でそのギャップを埋める最も手っ取り早い手段は学術論文を読むことだが、大抵の人にとってそれはハードルが高すぎる。本書を読めば、学術論文を読んだり、あるいはそれを理解するための体系的な勉強をすっ飛ばして、現場を覗き見ることができるというわけだ。万人のおすすめできる本ではないが、私と同じように分からないなりに現場を知りたい、という人には一読の価値がある。

さて、それでは、個々の巻の中で、興味を持ったテーマをそれぞれ1つずつピックアップしてみよう。

系譜の知

この巻では主にバイオ・医学・生物系の内容が扱われている。私の生物学の知識は高校1年生の時に必修だった生物Ⅰで止まっており、特にタンパク質やら薬品やらの名前が次々に出てくる分子生物学系の話には苦手意識さえある。一方で、脳科学には人並みに興味があるし、進化論・古生物学の話は割と好きだ。
そういうわけで、この巻で最も興味を持った話題は「進化(古生物)」カテゴリの、「始祖の地位から墜ちた始祖鳥」(オリジナルの論文は文献[1]を参照)。始祖鳥といえば恐竜から鳥への進化を表す化石として有名であるが、なんと、その始祖鳥が鳥ではないかもしれないというのだ。もしこれが本当なら、冥王星が惑星から墜ちたときと同じくらいの衝撃である*2
おおざっぱに要約すると、中国で新たに発見された新種を含めて分析すると、始祖鳥は鳥群(現在の鳥類に繋がる分類)から外れて別系統の種として分類される、ということらしい。ただし、重要なことは、その新種を除外して再分析すると、始祖鳥は鳥群に復活するということだ。たった1種の有無だけで分類が変わってしまうわけなのだから、今後の発見次第でこの研究の結果も覆る可能性は十分にありうるということだ。なんとも難しい分野である。

未踏の知

地球・環境・宇宙系の内容が扱われている巻ではあるが、宇宙に関する内容がおよそ半分を占めている。一般に宇宙の話が一番需要があるのだろうが、ここではあえて「地球」カテゴリから、「シート状の対流が作る地球ダイナモ」を紹介したい。
そもそもダイナモ理論とは、地球などの天体が磁場を生み出す仕組みを、天体内部の導電性流体の対流に求める理論である。ここで紹介されている研究は、従来のダイナモ理論のシミュレーションでは流体の対流が円柱状になるのに対し、より現実に近い条件でシミュレーションを行ったところ、対流が薄いシート状になったという内容だ。
私の印象に残った部分は二つ。一つは条件が現実に近いにもかかわらず、棒磁石のような双極子型の磁場形状を説明するという観点からは、従来の理論よりも悪くなってしまったらしいということ。もう一つは、コンピュータの性能限界から、その「現実に近い条件」でさえ非現実的にせざるを得ないということだ。例えば、粘性率に関わるエクマン数という数値は、現実の10^{-15}ではなく、10^{-6}\sim10^{-7}程度の数値を使っているというのだ。なんと現実値と8桁も違う!ほかにも、磁気プラントル数という数値は現実値10^{-6}に対して、1となっているらしい。この点について記事の中では、「モデル作成の秘訣は「適当な割合で間違っている」変数を用いることにあるのかもしれない」と指摘されている。つまり、模型飛行機で風洞実験を行うのと同じように、適切なスケーリングで計算しなくては現実は再現できない、ということなのだろうと理解した。
この記事の元になった論文(文献[2])は2008年のもの。この10年で進展があったのかどうか気になって少し調べてみた。文献[3](2015年)に目を通す限りそこまで大きなブレイクスルーはないようだが、地道に進んでいる様子がうかがえる。今後の研究に期待したい。

深層の知

この巻は学生時代の専門に最も近い物理・化学・工学分野を扱っており、上の2冊に比べて比較的理解しやすく、興味を持った記事も多かった。その中から一つ選ぶとしたら、やはり量子コンピュータ関連の記事「ピンクのキュービット」だろう。
ダイヤモンドと言えばもちろん宝石としての用途が最も一般的だが、その硬さを活かして研磨剤やダイヤモンド・カッターなどの加工機械に使われていることも有名である。しかし、その輝きの中に量子コンピュータとしての機能も備わっていることは、あまり知られていないのではないだろうか。
ダイヤモンド結晶の中で窒素不純物と空孔が隣り合った構造を窒素-空孔(NV)中心という。NV中心はダイヤモンドにピンク色を帯びさせるという、宝石の観点からも重要な特性を持つ。しかし今重要なのは、NV中心が天然の量子ドットとなって電子を捕獲し、その電子のスピンをキュービットとして利用することができるという点だ。
ダイヤモンド中のスピンは驚異的なコヒーレンス時間を持つという優れた性能を持つが、一方で拡張性、つまり多キュービット系を構築することに対して課題がある。その課題にチャレンジしたのがこの研究で、NV中心と、その近くに存在する別の電子スピン(窒素中心)が2キュービット系として扱えることを明らかにしている。
ただし、この記事で紹介されている論文(文献[4])は2006年のものであり、この分野の進展スピードを考えるとかなり古い。現在、ダイヤモンドキュービットでは既に量子テレポーテーションや量子エラー訂正アルゴリズムが実装されている(文献[5][6])*3。また、ダイヤモンドは超伝導回路などの他のハードウェアと比べて「光」との相性がよいため、量子通信関連の文脈でよく登場する。実をいうと、この記事を書いている途中でまさにそのようなニュースが飛び込んできた(文献[7])*4
最先端の科学というは、今、この瞬間にも進んでいるのである。

最後に

最後にもう一つ、本書の内容そのものとは直接は関係ないのだが、本書のおすすめポイントとしてぜひ挙げておきたいのが、「帯」のデザインである。
f:id:quanta087:20180611230412j:plain

光の3原色をモチーフにした色合いが美しい。特に私のお気に入りは「未踏の知」の青色だ。ぼぉっと眺めていると、宇宙を漂いながら世界の深淵を覗いているような、神秘的な気分に浸ることができる。私は普段はあまり本の帯の有無を気にする性格ではないのだが、本書に限って言えば内容以上に帯に惹かれて手に取ったと言っても過言ではない。もし本書をこれから読む方がいれば、ぜひ3冊そろえて並べてみて欲しい。

*1:研究室に連絡を取ってラボ見学させてもらうとか、twitterをやってる大学教授をフォローして現場の情報を流してもらうとかいう方法も考えられるが、そんなコミュ力お化けのような真似は私にはできない。

*2:冥王星の話はかつて「子供の科学」を読んでいた時に知ったのだが、私はその時に「科学的知識は固定されたものではなく、定説が変わることもありうる」ということを学んだ。

*3:少し専門的になるので脚注とするが、現在では多キュービット化のためにダイヤモンドに一定確率で含まれる炭素同位体の核スピンを用いるのがトレンドである。

*4:gigazineの記事ではダイヤモンドとは書いていないが、論文や英語記事の方を読めばダイヤモンドを用いていることがわかるだろう

「ディープラーニングがわかる数学入門」;涌井良幸・涌井貞美 著 読書感想

本日紹介するのは、涌井良幸・涌井貞美 著「ディープラーニングがわかる数学入門」。

ディープラーニングに関してはこれまでに「ゼロからわかるDeep Learning感想記事)」「機械学習と深層学習-C言語によるシミュレーション- (感想記事)」など、実装中心の本を読んでいたが、そろそろ理論的な理解も深めたいと考えていた。ディープラーニングの理論的教科書と言えば青本が有名だが、書店で立ち読みして自分にはまだ早いと感じ、代わりに手に取ったのが本書である。

著者のお二人は人工知能の専門的研究者ではなく、数学の(元)高校教員だ。退職後、数学や統計学を中心に数多くの入門書や解説書を執筆されており、元高校教員という経歴からか初心者への分かりやすさに定評がある。本書でも、ベクトルや微分、行列のような基本的な数学から始まり、ディープラーニングの本質がわかりやすく解説されている。

特に初心者向けだと思った本書の特徴は、記号の定義にページが割かれていることだ。ニューラルネットワークの理論では、扱わなければならないパラメータの数が非常に多い。しかも、一つの変数にこれでもかというくらい添え字がくっついていて、一目見ただけでは意味が分からない。学術書と呼ばれるレベルの本では記号の定義は定義式を一行示すだけで済ますことが多いが、本書では実に10ページ近くを割いて変数と添え字が何を指しているのかを図と一緒に解説してくれている。私も添え字が何を指しているのかすぐに混乱してしまうので、このような丁寧な説明は非常にありがたい。
また、「注がしつこい」ことも挙げておこう。誤差関数の定義に1/2がついている理由、フィルターサイズを一般的な5x5ではなく3x3にしている理由など、細かい点に関する注が繰り返し書いてある。わかっている人には鬱陶しいと感じられるかもしれないが、初心者は大枠についていくのに必死で細かい注のことなど何回聞いても忘れてしまうものだ。このようなしつこさも教員の性なのだろうか。

私自身が学んだこととして挙げられるのは、まず勾配降下法が「最急」であるという事実を再認識できたこと。数学を避けたニューラルネットワークの解説では、勾配降下法の更新量を決める公式
 \displaystyle  \Delta\omega = -\eta\nabla E
天下り的に与えられることが多いが、本書ではそもそもの勾配ベクトルの導出までさかのぼり、この公式が最も効率よく誤差を減らす(最急である)ことを説明している。勾配ベクトルが「最急」であること自体は知識として知っていたが、”ベクトルの内積が最も小さくなるのはベクトルが逆向きのときである”という性質から勾配ベクトルを導出することで、その意味がストンと腑に落ちた。もっとも、改めて線形代数やベクトル解析の教科書を開いてみると、導出過程まできちんと載っていたわけで、単に自分が不勉強だっただけなのだが…。

もう一つ、誤差逆伝播法についての理解が深まったことも大きい。「ゼロから作るDeep Learning」では、誤差逆伝播の説明として数学を用いるものと計算グラフを用いるのもを挙げ、後者を採用していた。本書ではもちろん前者、数学を用いた説明である。
以前計算グラフを学んだときにも、数値微分をするより計算効率がいいことに一応の納得はできた。しかし、色々なところで「誤差逆伝播といえばチェーンルール」というような説明ばかり聞いていたため、「合成関数を微分するのにチェーンルールを使うのは当たり前ではないか。何がそんなに凄いんだ」という思いは拭い切れていなかった。本書を読んだことでその疑問に自分なりの答えが出た。凄いのはチェーンルールそのものではなく、チェーンルールを微分を含まない漸化式に変形したところだったのだ。微分というコストの高い計算を避けて積和のみで計算できること、そして後ろの計算をするために前の計算結果をそのまま使うことができること。これこそが、単純にチェーンルールに則って数値微分を行うのに比べて誤差逆伝播法の計算効率が高い理由なのだ。
チェーンルールから漸化式を導く計算過程はそれほど自明ではない(少なくとも私には思いつかない)。きっと、式変形が得意な数学の天才が試行錯誤の末にたどり着いたのだろう。「誤差逆伝播がなぜ凄いのか」、この点を理解できたのが本書を読んでの最大の収穫である。

最後に、注意点もいくつか挙げておこう。
まず、本書で扱われている最適化手法は、用意した全学習用データを使って誤差を計算するバッチ勾配降下法(最急勾配法)である。実際には、全データの中からランダムにサンプリングしたデータに対して最適化を行う確率的勾配降下法が用いられる*1。また、畳み込みニューラルネットワークの説明では、ストライドが変数になっていないなど、やや一般性に欠ける部分がある。本書でも初心者がディープラーニングについて知っているべき本質は十分に学ぶことができるが、実践レベルに到達するためには、もう少し高度な教科書を読む必要があるだろう。私も、いずれはあの青いシリーズを理解したいものである。


*1:確率的勾配法の中でも、サンプリング数が1つであるものをオンライン学習、ある程度まとまった数をサンプリングする場合をミニバッチ学習と呼ぶ、らしい

「機械学習と深層学習-C言語によるシミュレーション-」;小高知宏 著 読書感想

年始に買って積読していた、小高知宏著「機械学習と深層学習-C言語によるシミュレーション-」を読み終わった。
本書の特徴は、事実上Pythonに支配されている機械学習や深層学習のプログラムをC言語で学べること。しかも、特殊なライブラリに頼ることなく、きわめて基本的な文法だけで1ファイルに収まるようにコーディングされている。例えば、畳み込み処理などもすべてforループで愚直に行っている。以前読んだ「ゼロから作るDeep Learning」でさえ、numpyはフル活用しているし、後半は著者作成のライブラリを導入してしまっていたことから考えると、この方針を一切ぶれずに貫いているのは素晴らしいと思う。ただ、その分本書で扱っている例題はごく簡単なものが多く、実際の問題にすぐに応用できるものではないのも事実ではある。

サンプルコードとデータセットは本書の公式ページからダウンロードすることができる*1。単にサンプルを実行したり写経するだけでは頭に入ってこない人は、自分の得意な言語に移植してみるのも一興だろう。私もとりあえずCで実行して動くことを確認してからPythonで書いてみる、という進め方をした。特別うまく書かなくてもコード量が半分程度になり、改めてPythonの便利さを実感した次第である。

さて、本書で学べる手法は以下の通り:
帰納的学習(ランダムパターン生成)
・強化学習(Q学習)
・蟻コロニー最適化法
遺伝的アルゴリズム
パーセプトロン
・深層学習(畳み込みニューラルネットワーク

見ての通り、機械学習の中でも生物学的手法を多く扱っている。この中で私にとって予想外の収穫だったのは遺伝的アルゴリズムが扱われていたことである。遺伝的アルゴリズムのことは以前から知っていた。きっかけは確かYoutubeの動画で、ヒト型の3Dモデルに二足歩行を教えるものと、マリオをクリアさせるものであった。

マリオの動画は残念ながら削除されていた…。まあ、ともかくそれ以来遺伝的アルゴリズムにはずっと興味を持ちつつも専門的に勉強する機会はなかった。今回思いがけず遺伝的アルゴリズムを実装ベースで勉強することができたのは私にとって大きな一歩であった。

話が逸れてしまった。本書は以上のように幅広い手法を扱っており、機械学習の素人である私にとってはどれも新鮮に学ぶことができた。しかし、ニューラルネットワークや深層学習をメインに学びたい人にとって本書の内容は決して満足できるものではないだろう。深層学習メインの方には、正直言っておすすめできない。だが、畳み込みなどを本当に一から実装している点などには何か得るものがあるのではないだろうか。
もう一つマイナス面として、理論的な面ではほとんど参考にならない、ということも注意しておこう。もともと約200ページという比較的薄目の本であるが、その半分はサンプルコードで占められている。扱っている内容の多さもあり、一テーマあたりの理論的解説は本当に微々たるものである。本書はあくまでもコードを通して理解するタイプのものであることを忘れてはならない。

結論。深層学習に限らずに生物学的機械学習を幅広く学びたい方、C言語は使えるのにわざわざPython覚えなくちゃいけないの…?という方、上級者様の「エレガントな」プログラミングテクニックについていけず、もっとシンプルな文法だけで機械学習を勉強したい方 etc... にはぜひ本書をお勧めしたい。

*1:このサンプルコードを利用できるのは本書を購入した方のみ、ということが規約に書いてあるので注意して欲しい