不確定な世界

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

「スッキリわかる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:このサンプルコードを利用できるのは本書を購入した方のみ、ということが規約に書いてあるので注意して欲しい

量子コンピュータの基本素子・量子ビットのハードウェア実装(超伝導磁束編その5~データの読み出し(測定)~)

その1~素子構造~
その2~超伝導リング詳細~
その2.5~ノイズ耐性~
その3~初期化~
その4~データの書き込み・演算


では最後に、量子ビットに書き込んだデータを読み出す技術、つまり「量子を観測する」とは実際にはどういうことなのか、を見ていこう。かなり難しく・長くなるので注意して欲しい。
今回キーとなるのは図19で量子ビット本体を囲んでいる②の回路、SQUIDだ。SQUIDは必ずしも量子コンピュータ専用の部品というわけではなく、一般的に超高感度磁場センサとして使われているので、すでに知っている方もいるかもしれない。SQUIDの動作原理を数式で理解しようとすると結構大変だが、ここでは量子ビット読み出しの仕組みを理解するのに必要な部分だけをおおざっぱに説明する。

f:id:quanta087:20171222074806p:plain
図19 回路全体図(文献[1]より転載)

SQUIDの仕組み

SQUIDの構造

SQUIDの構造自体は量子ビット本体とよく似ており、ジョセフソン接合を含む超伝導リングである。量子ビットと違うのは、ジョセフソン接合が2つであること、外部から電流を注入するための導線がくっついていることである(図20)。

f:id:quanta087:20171225232026p:plain
図20 SQUIDの回路図

ジョセフソン接合の限界

ジョセフソン接合は、薄い絶縁体を超伝導体でサンドイッチすると、絶縁体にも超伝導電流が流れるというものであった。しかし、このような状態にはやはり限界がある。ジョセフソン接合に流す電流値がある限界を超えると、超えた分の電流は普通の(トンネル)電流として流れてしまうのだ*1*2。つまり、ジョセフソン接合に電気抵抗が生じ、電圧降下が発生する。このことがSQUIDの動作原理のキーポイントである。

SQUIDによる磁場検出

では、一般的にSQUIDでどのように磁場を検出するのかを見ていこう。なお、以下の説明の大部分は文献[2](こちらのウェブページ)を参考にさせていただいた。
まず具体的にどういう操作をするのか結論だけ述べておく。SQUIDに外部から電流を注入し、それを強くしていって、どのくらいの電流でジョセフソン接合が限界に達して電圧が生じるのかを観察するのである。

(1)磁場がない(ゼロ)場合

最も簡単な場合として、検出すべき磁場がゼロである場合のことを考えよう。図21のようにSQUIDに生えている端子から電流\displaystyle I_{in}を注入すると、SQUID内を\displaystyle \frac{I_{in}}{2}ずつに分かれて流れ、もう片方の端子で合流して出ていく。\displaystyle I_{in}をどんどん大きくしていって、ジョセフソン接合を通る電流\displaystyle \frac{I_{{in}}}{2}が限界値を超えるとジョセフソン接合の両端に電圧が生じるので、あらかじめSQUIDに電圧計をつけておいて電圧計が反応した時の\displaystyle I_{in}を記録しておく。ただし、これはあくまで一般論である。量子ビットに応用するときには電圧計は別のところについているなど、ちょっとした違いがあるので、その点については後述する。

f:id:quanta087:20171226080744p:plain
図21 磁場がない場合

(2)弱い磁場がある場合

次に、SQUIDリングを弱い磁場が下から上に貫いている場合を考えよう*3その2で述べたように、超伝導リング内に中途半端な磁場が存在すると、それを相殺する磁場を生み出すために、リングに(右回りの)電流が流れる。この状態で電流\displaystyle I_{in}を注入してみよう(図22)。

f:id:quanta087:20171226205740p:plain
図22 弱い磁場がある場合

ここで、ジョセフソン接合に流れる電流に注目して欲しい。右側では、元々SQUIDに流れている電流と外部から注入された電流\displaystyle \frac{I_{{in}}}{2}が、同じ向きに流れているのだ。キルヒホッフの法則により、ジョセフソン接合にはこの2つの電流の和が流れ込むことになる。そのため、\displaystyle I_{in}を強くしていくと、磁場がなかった時よりも小さい\displaystyle I_{in}でジョセフソン接合が限界を迎えるのだ*4

(3)そこそこ強い磁場がある場合

続いて、もう少し強い(具体的には\displaystyle \frac{\Phi _0}{2}を超えない程度の)磁場がSQUIDを貫いているとしよう。加わっている磁場が大きいと、それを相殺するために流れる電流も大きくなる。その結果、ジョセフソン接合に電圧降下を起こすために必要な外部電流はさらに小さくなるのがわかるだろう(図23)。

f:id:quanta087:20171226220313p:plain
図23 そこそこ強い磁場がある場合

このように、SQUIDを貫く磁場が大きくなると、電圧降下を起こすのに必要な外部電流が小さくなっていく。さらに正確に言えば、磁場が\displaystyle \frac{\Phi _0}{2}を超えると再び外部電流の限界値が大きくなり、磁場が\displaystyle \Phi _0になると磁場がないときの状態に戻る、という周期性がある(磁場が\displaystyle \Phi _0であれば磁束量子条件を満たしているので、SQUIDに円電流は流れない)。この効果を利用して磁場の強さを測定するのが、SQUIDの基本的な原理である。ただし、文献[2]として挙げたウェブページでは、注入する外部電流は常に一定で、常伝導成分の変化によって生じる電圧値の変化を読み取る、という説明になっている。ここでは、量子ビットの説明に都合がいいように説明を改変したことをお断りしておく。

ここまでのまとめ

SQUIDについて、ここから先に必要になる部分をまとめておこう。最低でも、以下の2点だけは押さえて欲しい。
・ジョセフソン接合に限界を超えた電流を流すと、抵抗および電圧降下が生じる。
SQUIDを貫く磁場が大きいほど、より小さな外部電流を注入するだけで電圧降下が起きるようになる(正確には、\displaystyle \frac{\Phi _0}{2}を境にして\displaystyle \Phi _0で元に戻るという周期性がある)。


量子ビット読み出し回路としてのSQUID

では、SQUIDがどのように量子ビットに応用されているのかを見ていこう。ただ、ここの部分の説明は比較的優先度が低いので、どうしても我慢できなければ「ここまでのまとめ」を読んでいただくだけで構わない。

量子ビットが生み出す磁場

再び図19の写真を見ると、SQUIDの内部に量子ビットが配置されていることがわかる。量子ビットから発生する磁場をSQUIDで測定するわけだ。ところで、素朴に写真を眺めていると、SQUID量子ビットの内側部分の磁場を検出のだろう、となんとなく直感的に考えると思う(図24)。

f:id:quanta087:20171228145028p:plain
図24 内側の磁場を検出?

しかしよく考えてみると、量子ビットの内側の磁場は、まさに量子ビットが生み出す磁場によってゼロまたは\displaystyle \Phi _0に保たれている。上述したように、\displaystyle \Phi _0の磁場はSQUIDにとってはゼロと同じことであり、ゼロと区別することができない。ではどうするのかというと、実は、SQUIDが検出するのは量子ビットの内側ではなく、外側の磁場なのである(図25)*5

f:id:quanta087:20171228152514p:plain
図25 外側の磁場を検出

一応、量子ビットの外側に磁場が生じる仕組みも説明しておこう。量子ビットリングには、加えられている磁場を相殺するための右回りの電流が流れている。ここで、リングの一辺だけを考えて直線状の電流に対する「右ねじの法則」を適用する。すると、リングの内側では磁場が下向きであるのに対し、リングの外側では磁場が上向きであることがわかるだろう(図26)。

f:id:quanta087:20171228173823p:plain
図26 リングの外側に磁場が生じる

このように、量子ビットはリングの内側だけでなく、外側にも磁場をつくる。SQUIDはこの外側の磁場を検出するわけだ*6。ただし、量子ビットが内側につくる磁場が、例えば\displaystyle 0.1 \Phi _0だったとして、外側も\displaystyle 0.1 \Phi _0だとは限らないことは注意しておく。磁場(正確には磁束)の値は、領域の面積に比例するからだ。図19の写真を見ると、どう考えても明らかに量子ビットの外側の面積の方が小さいので、具体的な磁場の数値は外側では小さくなるはずだ。とは言っても、「リングに流れる電流が弱ければ生じる磁場も弱いし、リングに流れる電流が強ければ生じる磁場も強い」という定性論は成り立つ。ここで思い出してもらいたいのが、その4の後半で述べた通り、データ読み出しの段階では量子ビットは「右回り」と「左回り」が基準になる状態に変換されており、右回り状態が電流が弱く(=エネルギーが低く)、左回り状態は電流が強い(=エネルギーが高い)ということだ(その2の図6を参照)。つまり、量子ビットが外側につくる磁場にも強弱がある。量子ビットが右回りなのか左回りなのかによってSQUIDを貫く磁場の強さが変わり、その違いが検出されるのだ。

ここまでのまとめ

SQUIDは、量子ビットが(リングの外側に)つくる磁場の強弱を読み取る。
量子ビットが右回り状態であればSQUIDを貫く磁場は弱く、左回り状態であればSQUIDを貫く磁場は強い。

量子ビットのデータ読み出し

ゴールまであともう少しだ。
ここで、入出力線まで含めた量子ビット読み出し回路の全体図を確認しておこう(図27)。ただし、図は文献[1]を参考に説明しやすいように改変した*7

f:id:quanta087:20171228201040p:plain
図27 量子ビット読み出し回路全体図

SQUIDの説明でもちょっと触れたが、測定器(電圧計+カウンタ・パソコンなど)がSQUID本体とは少し離れて設置されている。そのため、信号の流れがやや複雑になるのだが、それを理解するためにあと一つだけ勉強していただくことがある。中学校の理科(あれ、もしかしたら高校の物理かも?)で習う回路理論だ。

並列抵抗回路

問題:以下の図28のように、抵抗\displaystyle R_1と抵抗\displaystyle R_2が並列に接続されている。そこに電流\displaystyle Iを流すと、それぞれの経路を流れる電流はいくらか?
答え:\displaystyle I_1 = \frac{R_2}{R_1 + R_2}I\qquad \displaystyle I_2 = \frac{R_1}{R_1 + R_2}I

f:id:quanta087:20171228210957p:plain
図28 並列抵抗

一気に答えまで出してしまったが、並列回路では抵抗値に応じて電流が分配されるということが分かればよい。例えば、\displaystyle R_1=1 \Omega\displaystyle R_2=2 \Omegaとすると、\displaystyle I_1=\frac{2}{3}I\displaystyle I_2=\frac{1}{3}Iである。両方の経路に電流が流れてはいるが、その大きさは異なる。抵抗とは電流の流れにくさであるのだから当然だが、電流は抵抗が低い経路を優先して流れるのだ。このことをもう少し極端な状況で試してみよう。\displaystyle R_1=0 \Omegaにしてみたらどうだろうか。上記の式に当てはめると、\displaystyle I_1=I\displaystyle I_2=0となる。つまり、抵抗ゼロの経路がある場合、電流はその経路にすべて流れ込み、抵抗がある経路には一切流れなくなる。この状況を短絡(ショート)と呼ぶ(図29)。

f:id:quanta087:20171228212646p:plain
図29 短絡(ショート)

ここで理解しておいて欲しいことをまとめると、
並列回路では電流は(抵抗値に応じて)それぞれの経路に分配される。ただし、抵抗ゼロの経路がある場合、電流は全てそちらに流れる(ショート)
ということになる。

全ての話がつながる

さあ、これで準備は整った。この記事で説明してきた知識が、ここで全てつながる。ここまでの知識を、改めてまとめ直してみよう。
SQUIDの一般論
 ・ジョセフソン接合に限界を超えた電流を流すと、抵抗が生じる。
 ・SQUIDを貫く磁場が強いほど、より小さな外部電流を注入するだけで抵抗が生じる。

量子ビットSQUIDの関係
 SQUIDは、量子ビットが(リングの外側に)つくる磁場の強弱を読み取る。
 ・量子ビットが右回り状態であればSQUIDを貫く磁場は弱く、左回り状態であればSQUIDを貫く磁場は強い。

・回路理論
 ・並列回路では電流は(抵抗値に応じて)それぞれの経路に分配される。ただし、抵抗ゼロの経路がある場合、電流は全てそちらに流れる(ショート)。


では、最後のピースをはめよう。量子ビットの状態によってSQUIDを貫く磁場の強さが変わり、それに応じてSQUIDの抵抗ゼロを保ったまま入力できる電流が大きくなったり小さくなったりする。では、「中くらい」の電流を、トリガー信号として入力してみよう。何が起こるだろうか。

量子ビットが「右回り」状態だった場合

もし量子ビットが「右回り」状態だったならば、SQUIDを貫く磁場は小さい。ここに「中くらいの電流」が注入されても、ジョセフソン接合の限界まで余裕がある。抵抗はゼロのままだ。このとき、入力されたトリガー信号は全て抵抗ゼロのSQUIDに流れ、わざわざ「抵抗」がある出力線には流れない。当然、出力線に設置された電圧計も反応しない。トリガー信号を入力してからどれくらい待てば判断できるかは事前に調節してあるとすると、「電圧計に反応がない」ことをもって、量子ビットが「右回り」状態だったのだと確定する(図30)。

f:id:quanta087:20171228222617p:plain
図30 量子ビットが右回り状態のとき

量子ビットが「左回り」状態だった場合

もし量子ビットが「左回り」状態だったならば、SQUIDを貫く磁場は大きい。ここに「中くらいの電流」が注入されると、ジョセフソン接合が限界に達して抵抗が生じる。このとき、入力されたトリガー信号が、SQUID側と出力線側に分配される(具体的な比率までは分からないが)。すると、「抵抗」に電流が流れて電圧が生じ、電圧計が反応する。これが、量子ビットが「左回り」に確定したという信号だ(図31)。このイベントはカウンタやパソコンに記録され、実験データが十分に集まれば統計処理などが行われる。例えば、最適動作点でのラビ振動によって「80%\displaystyle |+>、20%\displaystyle |->」という状態をつくり、「80%\displaystyle |右>、20%\displaystyle |左>」に変換して測定する。実験を繰り返せば、統計的に電圧計が反応する確率は20%だという結果が得られるだろう*8*9

f:id:quanta087:20171228225526p:plain
図31 量子ビットが左回り状態のとき


以上が、超伝導量子ビットのデータ読み出し、ひいては"量子を「観測」する"ということの正体である。

最後に

なんとか年内に終わらせることができた。実をいうと磁束量子ビットについてもう一回分書きたいことがあるのだが、まだ勉強していないので、文献が理解できるかどうか次第である。
それにしてもここ数年で本当に量子コンピュータはメジャーな存在になった。(おそらく将来高級言語として用いることを想定した)量子シミュレータ言語などもかなり増えてきた。しかし理論やソフトの情報に比べてまだまだハードの情報が少ないと思う。例えば、「量子コンピュータ Advent Calendar 2017」の記事を見ると、ほとんどが理論やアルゴリズム、シミュレータの話である。もちろんこれらの記事のレベルは大変高い。私自身は理論やシミュレータには弱いので本当に勉強になる。だが、これだけの量の記事がありながらハードに全く触れられていないのは、Qiitaがそもそもプログラミングやソフトウェアのためのサイトだということを差し引いても、少し寂しい。みんなは「”観測”、”観測”って、言葉では簡単にいうけど、実際のチップからはどんな信号が出てくるんだ?」とは疑問に思わないのだろうか?ぜひ、ハード関連の情報がもっと増えて欲しい。そうすれば私も勉強する手間が省けるのに。
というわけで、今年の更新はこれで終わる。皆さん、よいお年を。

*1:そもそも超伝導体そのものにも流せる電流の限界値が存在するが、ジョセフソン接合はそれよりも弱い

*2:一度ジョセフソン接合の限界を超えても、流す電流を弱めれば再び超伝導状態に戻る

*3:向きはあまり関係ないので、上から下に貫いていてもよい

*4:電圧降下は片方のジョセフソン接合が限界を迎えた時点で発生するので、もう片方では電流が相殺しているということは気にしなくてもよい。 また、SQUIDに流れる電流が左回りであるならば左側のジョセフソン接合が電圧降下を起こすというだけの話なので、磁場や電流の向きもあまり気にする必要はない。

*5:正直にいうと、この説明には100%の自信はない。文献中にはっきりとした記述がないからだ。例えば文献[1]には「量子ビットSQUIDはinductiveに結合している」とある。また、文献[3]には「量子ビットSQUIDの2つのループの面積比は最適化されています」とある。これらの情報を総合して自分なりに噛み砕いた結果が、本文中の説明である。

*6:元々超伝導リングに意図的に加えている磁場の一部もSQUIDに入っているはずだが、それは考慮に入れなくてもおおざっぱな理解には問題ないだろう

*7:例えば、原図では回路安定化のためのキャパシタやローパスフィルタなどがついているが、全部省いた。また、測定器は原図には書かれておらず、おそらく「抵抗」よりも奥に設置されているはずだが、私の図では説明の都合上「抵抗」にくっつけた。本質的な部分は変わらないはずなので許してほしい。

*8:最初はどのくらいの時間のラビ振動でどのくらいの確率の重ね合わせになるかは分からないので、試行錯誤で調節する。そのあたりの話はシリコン編おまけを参照のこと。

*9:もともと最適動作点の状態でいうと、\displaystyle |->であれば信号が検知されるということである。ところで実は、最適動作点からずらすときに磁場を強めて「左回り」のエネルギーが低いような状態にすると、測定信号が反転する。すなわち、最適動作点で\displaystyle |+>であれば信号が検出されるようになる。この仕組みをうまく説明できるほど理解できなかったので、磁場を弱める方を採用した。信号が反転するということ自体は、文献[4]を参照のこと。