不確定な世界

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

量子コンピュータの基本素子・量子ビットのハードウェア実装(超伝導磁束編その1~素子構造~)

はじめに

量子コンピュータのハードウェア解説シリーズ第二弾は、超伝導回路。現状開発が進んでいる量子コンピュータの殆どは超伝導回路を用いたものである(最近話題の量子ニューラルネットは除く*1)。
ただし、一口に超伝導量子ビットと言っても、様々な技術方式がある。大きく分けても「電荷型」「位相型」「磁束型」「トランズモン型」の4種類。周辺回路の工夫まで含めると論文ごとに違う方式があると言っても過言ではないくらいだ。超伝導量子ビットは、以前紹介したシリコンなどの他の方式と比べるとエンジニアリングの色が非常に濃い。
この中で、今回は「磁束型」を紹介する。理由は2つ。まず、D-Waveは磁束型、IBMはトランズモン型を採用しているという事実。つまりこの2方式が現在のトレンドである。もう一つの理由は、この2つの中では磁束型の方が理解するのが簡単そうだったからである。ただし、あくまでも色々な論文を読んだ上で説明しやすい部分をツギハギして紹介するので、必ずしもD-Waveの技術を紹介するものではない*2。あえて言うとNTTの論文が非常に参考になったが、説明はツギハギである。
なお、私は実際に超伝導量子ビットを見たことは一度もない。これから説明することはすべて論文を読んだだけの知識なので、正確性は保証しかねることをお断りしておく。

素子の写真

では、実際に超伝導量子ビットの回路構成を写真で見てみよう(図1)。なお、超伝導量子ビットは現在では集積化が当たり前になっているが、今回は比較的初期の論文から、1量子ビットを扱ったものを持ってきた(文献[1]および文献[2])。基本的な構成は、シリコン基板の上にアルミニウムの超伝導回路が載っている、というものだ*3

f:id:quanta087:20171129223739j:plain
図1 超伝導量子ビット電子顕微鏡写真(左の写真は文献[1]、右の写真は文献[2]より転載)

各回路の役割

では、各回路の役割をざっと説明していこう。

①磁束量子ビット構成用超伝導リング

左の写真の中央やや上に、二重に四角形のループがある(右側の拡大図の方がより分かりやすい)。このうち内側の方が量子ビット本体である。このリングを流れる電流の向きによって、「0」と「1」を表現する*4。また、超伝導リングの真ん中には、外部から静磁場が加えられる(詳細は後述)。

②③④データ読み出し(量子状態測定)用回路

二重四角ループの外側部分(②)は、量子ビット読み出し回路の中核をなす、SQUID*5と呼ばれる回路である。③はデータ読み出しのトリガー信号を入力する導線で、④はデータを取り出すための出口の役割を果たす。
なお、SQUID量子コンピュータ専用の部品というわけではなく、超高感度磁場センサとして医療機器などに使われている独立した技術である。

また、①量子ビットと②SQUIDには、一部回路が細くなっている部分がある(拡大図の赤い矢印の部分)。この部分にはジョセフソン接合と呼ばれる細工がしてあるのだが、詳細は次回に解説する。

⑤データ書き込み(量子ビット制御)用回路

この部分は、量子ビットにデータを書き込んだり、演算を行うための回路。以前紹介したシリコン量子ビットのときと同様に、この部分に交流電流を流し、それによって生じる交流磁場が量子ビットを制御するのだ。

その他

シリコン量子ビットと同じように、超伝導チップ全体は特殊な冷凍機に入れられ、20mK~50mK程度の極低温状態で動作する。やはり家庭には厳しいだろう。

今回はここまで

次回は量子ビット本体である超伝導リングについてもう少し詳細に見ていく予定。磁束量子とジョセフソン接合の解説になると思う。

その2~超伝導リング詳細~

参考文献

超伝導量子ビットの写真は、NTTの論文からお借りした。ただし、それは写真が綺麗で最も説明しやすいものだったからであり、この記事は必ずしもNTTの技術のみを説明するものではない。
[1] K. Kakuyanagi et al., Dephasing of a Superconducting Flux Qubit. Phys. Rev. Lett. 98, 047004 (2007)
[2] 仙場浩一, 超伝導量子ビットと単一光子の量子もつれ制御, NTT技術ジャーナル2007年11月号

*1:ちなみに私は、「新しい国産技術が出てきたのは大変素晴らしいが、あれを量子コンピュータと呼ぶのはややこしいので止めて欲しい」と思っている

*2:そもそも、D-Waveはほとんど論文を公開していないので、実際の回路構成はいまいちよく分からない

*3:超伝導回路にはニオブを用いることもある

*4:正確には、回転電流によって生み出される磁場が「磁束量子ビット」の名前の由来なのだが、一般的には電流の向きが量子ビットであると説明されることが多い

*5:スキッド、あるいはスクイドと読む

「量子暗号」;石井茂 著 読書感想

はじめに

今回紹介するのは、石井茂著「量子暗号」だ。
量子力学全般、あるいは暗号全般について解説した本の中で、話題の一つとして量子暗号についても触れているものは多い。しかし、丸々一冊分「量子暗号」の解説だけに特化している本というのは貴重だ。出版されたのは2007年であるが、今でも読む価値がある本だと思う。

本書は16の章から構成されるが、内容は大きく2つに分けられる。第1章から第8章は、古典的な暗号の弱点を踏まえつつ正統的な量子暗号について解説される前半部。途中の9章・10章では暗号の話からは少し離れ、光とレーザーの歴史について語られる。そして後半の第11章から第16では、やや異端(ではあるが実用的)な方式の量子暗号プロトコルが紹介される。

細かい内容紹介に移る前に、本書の全体的な特徴を述べておこう。まず本書は基本的な姿勢として、量子暗号を単に「不思議な現象」としてではなく、「実際に使えることを目指して開発するテクノロジ」として扱っている。単に理屈を説明して「凄いね、不思議だね」で終わらせるのではなく、実際に使用する場面で想定される弱点やその技術的対策、理論的には必要ないが実用化のためには必要になる補助的な技術など、類書ではお目にかからないような細かい部分まで解説してくれる。
また、日本に関するエピソードが多いのも特徴だ。暗号の歴史は日本の視点から語られるし、日本初の近代的物理学者に関するエピソードもある。もちろん、量子暗号分野における日本人の活躍についても多数紹介されている。東大の古澤明先生をはじめ、本書に出てくる研究者は論文や学会の会議などで一度は名前を見たことがある有名人ばかりだ。このように日本人の活躍についてしっかりと知ることができるのは本書のメリットの一つである。

内容紹介

では、もう少し具体的に本書の内容をピックアップしていこう。
第2章と第3章では、「解読されてきた歴史上の暗号」から始まり「解読できない暗号」に話が進む。実は、「解読不能であることが理論的に証明された暗号」というのは量子力学とは関係なく既に存在していた。それが「ランダムな数列を暗号鍵として共有し、それを使い捨てにする」というバーナム暗号だ。ちなみにその安全性を証明したのは、情報理論創始者として有名なクロード・シャノンである。では、なぜ絶対安全なバーナム暗号は一般に浸透しなかったのだろうか。それは、前提条件である「ランダムな数列の共有」が、実際の運用上難しいからだ。そもそも「ランダムな数を生成する」というのが意外と難しい。それにいざ共有しようとしても、使い捨てになる大量の数列を直接会って手渡すのは現実的ではないし、通信で送ろうとしても、”本番データを通信するための暗号鍵を共有するための通信の安全性”という堂々巡りの議論になる。このバーナム暗号の運用上の課題を解決するのが、量子暗号なのだ。

第4章・第5章では、以上の話を踏まえて具体的な量子暗号プロトコル、BB84の説明が始まる。詳細な内容は本書を実際に読んでもらうとして、量子暗号の立ち位置について少し注意しておこう。量子暗号はバーナム暗号の課題であった「ランダムな数列の共有」を実現する。その意味で、量子暗号は量子鍵配布と呼ぶのが正しい。量子暗号の目的は鍵の配布であり、本番データそのものを通信することではない。ときどき、共有されたランダム数列のことを「本番データ」であるかのように説明している解説文もあるが、(BB84を前提とするなら)それは誤解である。量子力学を利用して暗号鍵を共有できれば、暗号化したあとの本番の通信は、古典通信で構わない。インターネットでも郵便でも、相手の下駄箱に密かに入れておいても構わない。本番データの安全性は、量子力学とは関係なく、バーナム暗号の理論によって保証されているのだ。
第5章の後半から6章、7章では、BB84から派生した変種のプロトコルについて紹介がある。光子の偏光ではなく位相を用いるB92、日本人が考案した差動位相シフト量子鍵配送量子もつれを利用したE91など、いずれも類書ではお目にかからない貴重な一般向け解説である。

第8章では、量子暗号の実用化のために必要になる補助的な技術が解説される。みんな大好き量子テレポーテーションもここで登場するのだが、ちょっと意外と思う人もいるのではないだろうか?。実を言うと私は、専門的に勉強するまでは「量子テレポーテーションこそが、量子暗号通信の仕組みの中核部分である」と思っていた。しかし量子テレポーテーションは、量子暗号の仕組みそのものには直接関わっておらず、「光ファイバに光子を通すと信号が劣化する」という、極めて現実的な課題を解決するために導入される補助的な技術なのだ。もう少し詳しく説明しよう。普通の光通信であれば、光ファイバによって劣化した信号は増幅して元に戻すことができる(これを中継という)。しかし一般に単一光子の信号を増幅することはできず、光ファイバで直接通信できる距離は制限されてしまう。そこで量子テレポーテーションを使えば、信号を劣化させずに遠隔地に転送することができる。すなわち、量子テレポーテーションは、量子暗号というよりは「量子中継」に使われるということだ。
ここまででも一般書としてはかなり詳しい部類なのだが、本書では、この話はさらに「もつれスワッピング」にまで発展する。もつれスワッピングは量子テレポーテーションの亜種で、2組の短距離もつれを元に、長距離の量子もつれを生成することができる。これは量子テレポーテーション、すなわち量子中継の長距離化に利用される。つまり量子暗号の補助技術の、そのまた補助技術というわけだ。正直「一般向け書籍で、そんな細かい話まで出してしまっていいのか!?」という感じだ。この他にも「もつれ蒸留」や「超高密度符号化」(これは量子暗号には直接は関係ないが)といった、専門書レベルの極めて発展的な技術が次々に出てくる。他書では名前さえ知ることができないような技術が解説付きで読めるのだから、凄いとしかいいようがない。

本書の後半、第11章以降は、前半部分で解説された正統的な量子暗号とは少し異なる方式の紹介が始まる。デコイ法、連続量量子暗号、量子ストリーミング暗号(Y00)などだ。特にY00は量子雑音を利用して本文データを直接送信するという、他の方式とは根本的に異なる仕組みを持つ。私もこの辺りの話は本格的に勉強したことはないので、すべてを理解しているわけではない。しかし、これらの方式の共通点は理解した。それは、「現状の未熟な技術でなんとか実用レベルの量子暗号を実現したい」という思想で考案されていることだ。
"技術的に難しい正統派の方式"vs"実用的な異端の方式"という構図は量子コンピュータにも共通する。量子ゲート方式の研究者にとって、量子アニーリング方式は異端としか言いようがなかった。しかし量子アニーリング方式は、機能に制限はあっても現状の技術で十分に安定した動作を実現しており、正統派よりも先に市場に出て人工知能などに実際に使われつつある。将来自分が初めてお世話になる量子暗号が正統派のものになるか異端派のものになるか、予想してみるのも面白いだろう。

ちょっとだけ注意

本書が刊行されたのは2007年であり、もう10年前だ。そのため、本書の中には少し古い部分があることも事実である。例えば、本書には「実は、単一光子に情報を持たせる(離散変数の)量子テレポーテーションは、まだ実現されていない」とある。確かにこのあたりの事情は少しややこしい。光子の偏光を用いた離散量テレポーテーションの実験自体は昔から普通に行われている。例えば、古澤先生よりも先に行われたザイリンガーの実験(Nature版はこちら)や、最近では中国の量子通信衛生の量子テレポーテーション実験(Nature版はこちらarXiv版はこちら)がある。しかし光子の偏光を用いた量子テレポーテーションには、4つの「ベル基底」のうち一部しか用いることができないという性質があり、この点で"不完全"とする見方がある。連続量を用いることでこの弱点を克服したのが、古澤先生による"完全な"量子テレポーテーションである。上記の「(離散変数の)量子テレポーテーションは、まだ実現されていない」とは、このことを指しているのだろう。
しかし最近では、物質中のスピンを用いた"完全な"量子テレポーテーションが普通に行われるようになっている(例えばこちらを参照)。スピンであれば文句なしの離散変数量子なので、離散量テレポーテーションが実現できていないというのは過去の知識だと言っていいだろう。

また、本書の最終章では量子コンピュータでも解けない公開鍵暗号としてナップザック問題を応用した量子公開鍵暗号が紹介される。ゲート式の量子コンピュータ素因数分解のような「いざ答えの候補が見つかったら、それが本当かどうか確かめるのは簡単」という問題に対しては強いが、ナップザップ問題のような「たとえ答えの候補が見つかっても、それが本当に求める答えなのかを確認することさえ難しい」という種類の問題には弱い。しかしナップザップ問題は巡回セールスマン問題と同じタイプの「組み合わせ最適化問題」であり、これはアニーリング式量子コンピュータで高速に解ける可能性がある。2007年当時、D-Waveなどという存在は予測不可能だった。組み合わせ最適化問題を利用するというアイデアは、今となっては少々修正が必要だろう。

最後に

ここまで見てきたように、本書は単に理屈を説明するだけでなく、実際に使うことを前提に技術的な課題やその解決策まで細かく紹介してくれている。量子暗号を、単に不思議な現象としてではなく、量子を自由自在に制御して便利に利用するというエンジニアリングの観点から知りたい人には、是非本書をおすすめしたい。

「この話有名だけどそういえば元ネタ知らないな」と思って調べた論文まとめ

確かに調べたが読んだとは言っていない。随時追加予定。
古い文献が多いが原著を調べるのが目的なので、リンクはできるだけ後世のリタイプ版よりもオリジナル版を優先している。文字のフォントが読みにくかったりコピペできなかったりするが、ご容赦願いたい。

Luis W. Alvarez et al., Extraterrestrial cause for the cretaceous-tertiary extinction. Science 208, 1095-1108 (1980)
「隕石の落下が原因となって恐竜が絶滅した」という、あまりにも有名な説の原著論文。ちなみに、著者の前半2人は親子で、父親のLuis Alvarezは素粒子物理学の分野でノーベル物理学賞を受賞している。


Lorenz, Edward N., Deterministic Nonperiodic Flow. Journal of the boneless Sciences 20, 130–141 (1963)
タイムリープ系SFでよく出てくる「バタフライ・エフェクト」として知られる現象の元ネタ。なおこの論文では蝶の話は一言も出て来ない。蝶の羽ばたきが云々というのは、後におこなった講演のタイトルに由来する。


L. Adleman, Molecular Computation of Solutions to Combinatorial Problems. Science 266, 1021–1024 (1994)
量子コンピュータとともに次世代の超並列計算機として注目された(されている)DNAコンピュータ。著者のAdlemanはRSA暗号のAの人。確かデータの読み出しに時間がかかるのが弱点だったと記憶しているが、その後どうなったのだろうか。


A. M. Turing, COMPUTING MACHINERY AND INTELLIGENCE. Mind 49, 433-460 (1950)
人工知能関連の本には必ずといっていいほど出てくるチューリング・テストの原著論文。


John R. Searle, Minds, Brains, and Programs. Behavioral and Brain Sciences 3, 417-424 (1980)
チューリング・テストと必ずセットになって言及される「中国語の部屋」の原著論文。


Roy P. Kerr, Gravitational Field of a Spinning Mass as an Example of Algebraically Special Metrics. Phys. Rev. Lett. 11, 237 (1963)
某SFアニメでタイムリープの理論を説明するために出てきたカー・ブラックホールの原著論文。

Gordon E. Moore, Cramming more components onto integrated circuits, Electronics Magazine 19 (1965)
集積回路の発展に関する、有名な(むしろ知らないまま生きる方が難しい)ムーアの法則が提唱された原著論文。

ドラクエ11をクリアした

ここ2ヶ月程、ドラクエ11(3DS)に夢中だった。

ドラクエをやるのは中学生のときの8以来で、ゲーム自体も10年ぶりだった(興味の対象がライトノベルや深夜アニメに移っただけなので、決して高尚な生活をしていたわけではないが)。始めるまでは億劫だったが、いざやってみるとハマるハマる。いつの間にかレベル99になっていた。

BGMをはじめとしてファン向けの要素が多い印象だったが、システム周りやゲーム難易度はかなり初心者向けに作られていて、快適にプレイすることができた。真エンディングを見たあとはしばらく放心してしまった。

ゲームってこんなに面白いものだったんだと思い出させてくれた、ドラクエ11のスタッフに感謝!

さて、積ん読や仕事上勉強しなくてはいけないことが溜まってしまったので、消化しないとな…

一見平等なトレードから必然的に不平等が生まれる(pythonシミュレーション)

池谷裕二さんの「脳はなにげに不公平」を読んでいて、初っ端から面白そうで試すのが簡単そうなお話があったので、pythonでシミュレーションしてみた。

シミュレーション内容

「100人のプレイヤー全員に1万円を渡す。100人の中からランダムに2人選び、1人目から2人目へと千円渡す。これを繰り返す」

たったこれだけだ。ただし、話を簡単にするため残金0の場合に借金はできないものとする。
全員が平等に初期資金をもらい、全員が同じようにもらう側になり、全員が同じように渡す側にもなり得る。ルールは明らかに平等だ。誰も贔屓などされていないし、誰も差別されていない。「不公平だ」なんていう文句は、この時点ではつけようがない。

シミュレーション

では実際にpythonでシミュレーションをしてみよう。プレイヤーおよびその所持金はnumpyの配列で表現する。

import numpy as np
num = 100#プレイヤーの数
players = 10000*np.ones(num,np.int32)#プレイヤーを用意して10000円ずつ渡す

この時点での配列の中身を一応確認しておこう。

print("初期状態:\n",players)
print("トレード前平均所持金:",np.mean(players))
print("\n")

#実行結果
初期状態:
 [10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
 10000 10000 10000 10000]
トレード前平均所持金: 10000.0

まあ当然、全員が1万円を持っている。平均が1万円なのも当たり前だろう。
次に、トレードを行う関数を作る。

#プレイやーiからプレイヤーjに1000円渡す
def trade(players):
    i,j=np.random.randint(0,num,2)#ランダムに2人を選ぶ
    if (players[i] > 0):#残金があるかどうか確認
        players[i]-=1000
        players[j]+=1000
    else:
        pass#プレイヤーiの残金がゼロの場合はトレード不成立

あとはトレードを繰り返せば良い。

#トレードを繰り返す
times = 10000#トレードの回数
for _ in range(times):
    trade(players)

…わざわざ関数化する必要もなかったかも。では結果を見てみよう

print("{}回トレード後:\n".format(times),players)    
print("トレード後平均所持金:",np.mean(players))
print("\n")

#実行結果
10000回トレード後:
 [ 9000  2000 19000 11000     0  7000  8000  7000 11000  5000 10000  5000
  4000 20000 22000  1000  4000  3000 22000  1000  1000 19000 10000 20000
  8000  3000 16000  4000 21000  1000 28000  8000  7000     0  2000     0
 25000 34000     0 24000 12000 10000 34000 15000  9000 22000 19000 14000
  1000 20000  2000 10000  2000     0 13000  7000  9000 22000     0  2000
 24000  1000     0  2000  5000 11000  4000     0  5000 15000  3000 18000
 28000  9000 21000  8000 22000 35000 11000 12000  3000     0  6000  3000
  6000  8000  4000  5000 40000  1000  2000  7000 19000     0  4000  6000
  7000 12000  4000  4000]
トレード後平均所持金: 10000.0

数字の羅列を見てもよくわからないので、ヒストグラムにした方がよいだろう。

#ヒストグラムを表示
import matplotlib.pyplot as plt
plt.hist(players)

以下のようなグラフが得られた。
f:id:quanta087:20170822233741p:plain

なんと、たったこれだけのトレードでも「大多数の貧乏人とごく一部の大富豪」という、現実世界と同じ格差が生まれてしまったのだ!しかも恐ろしいことに、これだけの格差があったとしても「平均所持金」だけを見ると、常に10000円なのだ(当たり前だが)!平均ボーナスだとか平均貯蓄額などの数字を見るたびに現実と乖離している印象を受けるのは正規分布から大きく外れたこの格差が原因なわけだ。

まとめ

非常に平等な条件でのトレードから格差が生まれることをシミュレーションによって確認した。ちなみにこの不平等な分布はボルツマン分布と呼ばれ、数学的には自明らしい。らしいというのは、恥ずかしながら私は統計学や数理解析には詳しくなく、このような時にどう定式化すれば解析解が導けるのかという「理論屋の方法論・思考法」みたいなものがよく分からないのだ。このくらいの問題は理論計算出来る人間になりたいものだ。というわけで、この問題からボルツマン分布を解析的に導く方法をご存知の方がいたら是非教えて欲しい。

最後に、今回使用したプログラムを整理して掲載しておく。

import numpy as np
import matplotlib.pyplot as plt

num = 100#プレイヤーの数
times = 10000#トレードの回数
players = 10000*np.ones(num,np.int32)#プレイヤーを用意して10000円ずつ渡す

print("初期状態:\n",players)
print("トレード前平均所持金:",np.mean(players))
print("\n")

#プレイやーiからプレイヤーjに1000円渡す
def trade(players):
    i,j=np.random.randint(0,num,2)#ランダムに2人を選ぶ
    if (players[i] > 0):#残金があるかどうか確認
        players[i]-=1000
        players[j]+=1000
    else:
        pass#プレイヤーiの残金がゼロの場合はトレード不成立
        
#トレードを繰り返す
for _ in range(times):
    trade(players)

print("{}回トレード後:\n".format(times),players)    
print("トレード後平均所持金:",np.mean(players))
print("\n")

#ヒストグラムを表示
plt.hist(players)

量子力学によく出てくる「エルミート」って何?その物理的意味は?

はじめに

量子力学ではよく、「演算子はエルミートである」と仮定して議論を進める。そこで「エルミート演算子」あるいは「エルミート行列」について調べてみると、難解怪奇な数学理論についてはたくさん出てくるが、「ふーん。で、エルミートって、結局はどういうイミなの?」「行列がエルミートであることは、現実の物理現象とどういう関係があるの?」という部分については意外と調べても出てこない。
この記事では、私の個人的な考えではあるが、量子力学において「演算子(行列)がエルミートである」とはどういうイミを持っているのかを考察したい。

エルミート演算子の定義

まず、エルミート演算子の定義を確認しよう。
ある演算子(行列)\displaystyle Hがエルミートであるとは、自分自身と複素転置(エルミート共役)が等しいこと、すなわち
\displaystyle
H = H^{\dagger}
が成り立つことである。
多くの量子力学の教科書では、このエルミート演算子の数学的定義と「以下、この本に登場する演算子はエルミートである」という事実だけが告げられるのだが、せっかく物理の教科書を読んでいるのだから、どうせならその意味にまで踏み込んで説明してもらいたいものだ。

エルミート演算子の性質

これはどの教科書にも必ず書いてあるだろうが、エルミート演算子の重要な性質は「固有値が実数」であることだ。このことについての証明や解説はググればいくらでも出てくるのでここで深く説明する必要はないだろう。

固有値の物理的意味

これも、どの教科書にも出てくのであえて触れる必要もないだろうが、量子力学において、演算子固有値は量子系を観測した時の測定値に対応している。

演算子がエルミートである」ことの物理的意味

以上、どこにでも書いてある事実を述べただけだが、実はこれでもうエルミート演算子の物理的意味を考察する材料は揃っている。まず、エルミート演算子固有値は実数である。そして、演算子固有値は測定値に対応する。なら簡単ではないか。「演算子がエルミートである」とは、要するに、「測定値は実数である」ということを言っているだけなのだ。

もう少し噛み砕いて言おう。量子力学の教科書に「演算子はエルミートである」と書いてあったら、その行間には、著者の以下のような気持ちが隠されている。

量子力学では、波動関数複素数だったり、演算子の係数が複素数だったり直感的には把握しにくいだろう。しかし安心してくれ。たとえ波動関数複素数だろうがなんだろうが、君が実際に粒子の位置や運動量やスピンを測定したとき、検出器の針は必ず実数を指している。感光板の複素座標が光ることはないし、検流計に複素数の電流が流れたりすることは有り得ない。君が実際に目の当たりにする物理現象は、必ず実数の姿で現れるんだ」

実際のところ、私は学生時代に量子力学の実験を数え切れない程行ったが、実験に使っていたパルスカウンタやオシロスコープ複素数を表示したことは残念ながら(?)一度もなかった。そう考えると、「演算子がエルミートである」ことを自明の事実として受け入れるのもやぶさかではないという気持ちにならないだろうか。

最後に

ただし、実験装置に複素数が検出されないとは言っても、実験のやり方を工夫すれば密度行列の複素成分や波動関数の複素位相を、実数に変換して測定することは可能である。このような測定を一般に「量子トモグラフィー測定」という。

「ゼロから作るDeep Learning」を読んだ(後編)

 前回から引き続き、「ゼロから作るDeep Learning」の読書メモ。

4章 ニューラルネットワークの学習

損失関数

 2乗差誤差はわかりやすいが、交差エントロピー誤差は直感的に意味を把握しにくい。しかしソフトマックス関数と組み合わせて使うことを考慮に入れると、幾分か理解が進んだ。

第3章で学んだ通り、ソフトマックス関数は確率を出力する。確率のlogを取るとエントロピーと呼ばれる量になるのは情報理論の基礎中の基礎だが、考えてみると誤差とエントロピーは非常に似た概念なのだ。

情報エントロピーはよく「何かデータを得た時の驚き具合」のことだと説明される。正解ラベルを提示されたとき、元々「これが答えである確率は非常に高い」と推論していたなら驚きは少ないが、「これが答えである確率は低い」と推論していたのだったら正解を知った時の驚きは大きい。この驚きを誤差と同一視しているのだろう。

さらに言えば、ここでエントロピーとしてlogを取るために、ソフトマックス関数は指数関数を使って定義されているのだろう。単純に確率に変換するだけならexpの代わりに絶対値や2乗を使っても良さそうだが、expを使えばlogとの相性がいいのは詳しく計算しなくても直感的に理解できる。

追記:

後から気づいたが、絶対値や2乗では単調増加にならないので、常に正かつ単調増加となると自然に指数関数に到達する。また、情報理論だとエントロピーの底を2にするのが自然なので、ソフトマックス関数に使う指数関数として数学的に扱いやすいexpを選び、その後それと相性がいいようにエントロピーの底をeに合わせたのかもしれない。いずれにせよ、理論がうまく設計されていることは確かだ。

 

20180113追記:

最近、交差エントロピーの「交差」とは何なのかを偶然知った。曰く、p×log(p)のようにlogの中身と外側に同じ変数が使われているのが普通のエントロピー。それに対して、t×log(y)のようにlogの中身と外側に異なる変数が使われているものを"交差"エントロピーと呼ぶらしい。

 

勾配法

 ここでついに、ニューラルネットワークディープラーニング)が学習を行う仕組みが明らかになった。正直に言えば、こう思った。「なんだ、ディープラーニングっつっても、結局やってることは勾配法なのか。もっと難しいものを想像していたけど、勉強してみると意外に単純なんだな」と。勾配法による評価関数の最小化(最大化)の手法自体は、全く別の分野で学んでいたのだ。それがまさか、今話題のあの「ディープラーニング」の根幹部分に使われているとは思わなかった。

そしてもう一つ私にとって重要だったのが、量子コンピュータ(特に量子アニーリング)との関連性が見えたことだ。私は量子コンピュータについては多少の知識があるのだが、人工知能についてはまったくのど素人だった。ネットで「量子コンピュータ×人工知能」といった記事を見かけても「どうせバズワード2つくっつけただけで深い意味はないだろう」と思っていた。しかし、ディープラーニングの根幹に勾配法が使われているとなると話が変わる。そのような「最適化問題」こそまさに、(アニーリング式)量子コンピュータの存在意義そのものではないか。だから「量子コンピュータ×人工知能」の組み合わせがこんなに注目されてるのか。

 この点に気づいた点だけでも、本書を読んだ甲斐があった。

 

5章 誤差逆伝播

誤差逆伝播のための複雑な計算が並んでいる。個人的にはもう少し厳密な証明が知りたいのだが、この本は数学の本ではないのでやむを得ないだろう。

誤差逆伝播のご利益は2つある。一つは、損失関数の微分値が(y-t)という誤差そのものに比例しているため、誤差が効率よくパラメータ更新に反映されるという点。前述したexp-logの組み合わせなどもおそらくこのためのものだろう。

そしてももう一つのご利益は、あらかじめ誤差関数の微分を(人間が)解析的に行うことによって、コンピュータの計算量が減り、計算が高速化されることだ。実際、各レイヤごとの逆伝播は「順伝搬の入力を記憶しておいて反転して出力」など、いちいち定義通りに数値微分するのに比べてはるかに簡単な処理で済んでいる。

「最初に苦労しておくと後が楽」という例は数学の他の領域でも多い。例えば対数もそうだろう。あらかじめ対数という複雑な計算を頑張っておくと、乗算が単純な加算で済んでしまう。これと同じことなのだろうと理解した。

 

6章 学習に関するテクニック

 6章は学習に関する細かいテクニック。数学的に難解なものが多く、この本だけで理解するのは難しい。特にパラメータ更新アルゴリズムについては、いずれ原著論文などでもう少し詳しく勉強したい。

この章でもう一つ面白いと思ったのは、Dropoutとアンサンブル学習についてのコラム。異なる多数のモデルの平均値を用いるのと、一つのモデルをランダムに変化させることは同値であるというものだ。

実は、物理でも似たような概念を勉強する。統計力学量子力学では、「たくさんの物理系を用意して一度に測定する」のと、「一つの物理系に対して時間をかけて繰り返し測定する」ことが同じ結果を与えると暗黙のうちに仮定する。いわゆるエルゴート仮説というやつだ。量子コンピュータの実験の論文では、測定がアンサンブル系で行われたのか、単一量子系で行われたのかを注意する必要がある。

 

7章、8章

 7章は畳み込みニューラルネットワークの話。このあたりになるとさすがにゼロからの実装というのは難しいらしく、im2colなどの関数が著者によって用意されている。理論的にもやや難しく、消化不良。プーリング層によって平行移動に強くなるというのは面白いと思った。通常の意味での画像処理の勉強も合わせて、もう少しじっくり勉強したい。

8章は最新の話題や社会での応用技術についての概観。強化学習に興味があるが、文献が少ない…。

 

総括

後半がやや消化不良だったが、ディープラーニングとは何ぞやという概念は一通り理解できた。一冊目でここまで勉強できれば十分だろう。