不確定な世界

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

量子コンピュータの基本素子・量子ビットのハードウェア実装(超伝導磁束編その2.5~ノイズ耐性~)

その1~素子構造~
その2~超伝導リング詳細~


前回の記事では、超伝導リングに加える磁場を変化させることによって量子ビットのエネルギーの上下関係が入れ替わることを説明した。磁場を強くしていく途中で右回りの電流と左回りの電流のエネルギーが等しくなると「重ね合わせ状態」そのものがビットとなるが、この状態が最もノイズに強いため「最適動作点」と呼ばれている。少し寄り道になるが、今回はこのことについて少し深掘りしてみよう。

磁場に対するエネルギー変化

しつこいようだが、もう一度復習しよう。リングに加える磁場が\displaystyle \frac{\Phi_0}{2}より小さいと、右回りに電流を流す方がエネルギーが小さく、左回りはエネルギーが高い。磁場が\displaystyle \frac{\Phi_0}{2}ちょうどになると右回りと左回りの「プラスの重ね合わせ状態」がエネルギーが低くなり、「マイナスの重ね合わせ状態」が高くなる。最後に磁場が\displaystyle \frac{\Phi_0}{2}より大きくなると、今度は左回りのエネルギーが低くなり、右回りが高くなる。このことを、磁場の強さを横軸としたグラフに表すと次のようになる(図9)。

f:id:quanta087:20171208203137p:plain
図9 磁場によるエネルギーの変化

キャプション機能があることに今気が付いた…。
磁場を強くしていくと右回りと左回りのエネルギーの違いが減っていき、\displaystyle \frac{\Phi_0}{2}で点線のようにエネルギーがクロスして入れ替わる…と思いきや、なんと真ん中では「重ね合わせ状態の符号」でエネルギーが分裂する。そのため、全体としてはX印形ではなく、双曲線のような形のグラフになる*1。実は、この丸っこい形が重要なのだ。

磁場ノイズが加わると…

ここで、我々が意図的に超伝導リングに与えている磁場の他に、予期しない磁場が加わっているとしよう*2。向きは取りあえず上向きとする。この余計な磁場により、量子ビットはどのくらい影響を受けるのだろうか。

グラフの両端

まずは、図9グラフの、磁場が\displaystyle \frac{\Phi_0}{2}より大きい領域を考えよう。ただし、これから説明することは磁場が小さい領域でもそのまま成り立つ。
今、ノイズ磁場は上向きと考えているので、リングに加わっている磁場が想定より大きいということである。つまり、二準位のエネルギーは想定よりも離れていることになる(図10)。

f:id:quanta087:20171208222447p:plain
図10 ノイズ磁場によるエネルギー変動

また、このようなノイズ磁場は一般には一定ではなく、大きさや向きがランダムに変動している*3。ノイズ磁場が下向きになると、図10とは逆に量子ビットのエネルギーは想定よりも近づくが、次の瞬間にはまた離れているかもしれない。このように、超伝導リングにノイズ磁場が加わると、量子ビットのエネルギーがグラグラと揺れてしまうのだ(図11)。

f:id:quanta087:20171208225058p:plain
図11 ノイズのせいで揺れる量子ビット

では、エネルギーが揺れることの何が困るのだろう。例えば、以前シリコン量子ビットで解説した(そして超伝導磁束編でもこれから解説する)ように、量子ビットの制御(演算)は、量子ビットが持つエネルギーの差にちょうど等しいエネルギーを持つ電磁波を吸収させることによって行うのだった(詳しくはシリコン編その4を参照)。ノイズが存在すると、この電磁波の周波数をうまく選ぶことができず演算エラーを誘発する。また、詳しくは説明しないが、量子ビットのエネルギー差は重ね合わせの符号(位相)にも大きな影響を与える。エネルギーが揺らぐと「位相」に関する情報がどんどん壊れてしまい、重ね合わせ状態を維持することができなくなる。これが、いわゆるデコヒーレンスと呼ばれる現象である*4

グラフの真ん中

では、図9のグラフの真ん中、磁場が\displaystyle \frac{\Phi_0}{2}ちょうどの領域に移ろう。先ほどと同じように、上向きのノイズ磁場が存在すると仮定する。この時のエネルギーの変動を見てみよう(図12)。

f:id:quanta087:20171208231909p:plain
図12 ノイズ磁場によるエネルギー変動(真ん中)

なんと、グラフが丸っこい形をしているおかげで真ん中付近はほぼ平らになっており、ノイズ磁場によるエネルギー変動が先ほどと比べて少ないのである。このことを専門用語では「磁場に対する微分係数がゼロである」という。これにより上述したようなデコヒーレンス現象が起こりにくくなり、量子ビットの寿命は1桁近く長くなる(文献[1])。

以上が、磁場が\displaystyle \frac{\Phi_0}{2}の領域で量子ビットがノイズに強くなる仕組みであり、この領域が「最適動作点」と呼ばれる理由である。

今回はここまで

次回は、本筋に戻って量子ビットの初期化法について説明する予定。

その3~初期化~

*1:正確には、\displaystyle \frac{\Phi_0}{2}を過ぎて一度エネルギーが離れた後、\displaystyle \frac{3\Phi_0}{2}で再び近づく…という周期性がある

*2:ノイズ磁場の具体的な原因は色々考えられる。地磁気かもしれないし、実験装置類も電子機器なので怪しい。だが、最も致命的な原因はチップそのものが持っていることが多い。これは超伝導量子ビットに限ったことではないが、そもそもチップを構成する原子がスピン(磁性)を持っていると、それが磁場ノイズの一番の原因になる。例えばアルミニウム原子はスピンを持っている。シリコン原子はスピンを持たないが、一定確率でスピンを持つ同位体が混じっている。

*3:一定時間の間にノイズが変動する頻度のことをノイズの周波数という。周波数という言葉はsinやcosのように規則正しい周期振動に使うようなイメージがあるが、このようにランダムな変化に対してもよく使う。ノイズは周波数によって色々な名前がついているが、1/fノイズ、ガウシアンノイズ、ホワイトノイズあたりが有名である。

*4:実は、デコヒーレンスには大きく分けて2種類ある。ここで説明した現象は専門用語で”位相緩和”と呼ばれる。もう片方はエネルギー緩和である。

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

その1~素子構造~


では、超伝導リングをもっと詳しく見ていこう。はじめに、量子ビット(+SQUID)の拡大写真を再掲しておく(図2)。図の右側は回路図表記である。

f:id:quanta087:20171203114256j:plain
図2 左:量子ビット拡大写真(文献[1]より転載)、右:回路図

ジョセフソン接合

超伝導リングの一部が細くなっている部分(回路図の×印)が、ジョセフソン接合である。ジョセフソン接合とは、以下のように2つの超伝導体(例えばアルミニウム)に絶縁体(例えば酸化アルミニウム)の薄膜が挟まれた構造のことをいう(図3)。なお、ジョセフソン接合の作成プロセスに興味のある方は文献[2]を参照してほしい。

f:id:quanta087:20171201201416p:plain
図3 ジョセフソン接合

絶縁体は本来は電気を通さない。しかし、ジョセフソン接合ではトンネル効果によって絶縁体に超伝導電流が流れる*1量子ビット本体の超伝導リングには、このようなジョセフソン接合が3か所ある。

ジョセフソン接合の役割

では、ジョセフソン接合は量子ビットにおいてどのような役割を果たすのだろうか。それは、一言でいえば「二準位系を孤立させる」ことだ。ジョセフソン接合がない場合、超伝導リングに流れる電流のエネルギーは、図4左のように等間隔に並ぶ。この場合、どのエネルギー帯を「ビット」として扱えばいいのかがわからなくなる。ジョセフソン接合があると、このエネルギー間隔に歪みが生じ、図4右のように二準位系を選び出すことができる*2。これが、ジョセフソン接合の役割である。

f:id:quanta087:20171203130453p:plain
図4 ジョセフソン接合の役割

磁束量子

次に、超伝導リングを用いてどのように量子ビットを構成するのかを説明する。キーワードは「磁束量子」である。
実は、超伝導リングは磁場に対して不思議な性質を持っている。リングの内側では、ある単位量の整数倍の強さの磁場しか存在できないのだ。この単位量を磁束量子と呼び、記号では\displaystyle \Phi_0と書く*3(図5)。ただし、これはリング内での単位であり、この世に存在できる最小磁場というわけではない。

f:id:quanta087:20171203160804p:plain
図5 磁束量子

小さな磁場を加える

ここで、超伝導リングの下から上に向けて、外部から\displaystyle \frac{\Phi_0}{2}よりも小さな(例えば\displaystyle 0.1 \Phi_0*4)磁場を加えるとしよう。これは超伝導リングにとっては困った状態だ。リングの中では磁束量子の整数倍の磁場しか存在できないからだ。そこで、リングに電流が流れることで「右ねじの法則」に従った磁場を生み出し、無理やり「磁束量子条件」を満たしてしまうのだ。
辻褄の合わせ方は2通り存在する。下向きに\displaystyle 0.1 \Phi_0の磁場を生み出してリング内の磁場を差し引きゼロにするか、上向きに\displaystyle 0.9 \Phi_0の磁場を生み出して\displaystyle \Phi_0まで引き上げてしまうか、である。どちらが簡単だろうか。右ねじの法則によって生じる磁場の強さは、リングに流れる円電流の強さに比例する。つまり、リングに右回りの電流を流して下向きの磁場を発生させる*5ほうが、より小さな電流で実現でき、エネルギー的に安定である。逆にリングに左回りの電流を流して上向きの磁場を発生させる*6のは、より大きな電流が必要で、エネルギー的にやや不安定である。今ここに、電流の向きによるエネルギーの違いに基づいた二準位系、磁束量子ビットが誕生した*7(図6)。

f:id:quanta087:20171203211457p:plain
図6 \displaystyle \frac{\Phi_0}{2}よりも小さな磁場を加えたときの磁束量子ビット

(注)なお、この図では説明の都合上左右の電流が大きく異なるように書いたが、実際には左回りも右回りも同じ300nA程度のようだ。個人的には、左右の電流が全く同じだとは思えないのだが…。実際には0.5付近の磁場を使うので電流はほとんど変わらないと理解して大丈夫なのだろうか?おそらく、ジョセフソン接合の非線形効果も関係してるのだろうが、私もこのあたりの理解はまだ曖昧なので詳しい方がいたら是非教えてほしい。

大きな磁場を加える

では次に、超伝導リングに加えている磁場を、\displaystyle \frac{\Phi_0}{2}よりも大きく(例えば\displaystyle 0.9 \Phi_0*8)してみよう。大体想像はつくだろう。今度は上向きの磁場を発生させて合計\displaystyle \Phi_0にしてしまう方が簡単になり、下向き磁場でキャンセルする方が不安定になるのである。このように、リングに加える磁場を変えることで、電流の向きとエネルギーの上下関係が入れ替わるのだ(図7)。

f:id:quanta087:20171203213549p:plain
図7 \displaystyle \frac{\Phi_0}{2}よりも大きな磁場を加えたときの磁束量子ビット

最適動作点

最後に、超伝導リングに加える磁場を、ちょうど\displaystyle \frac{\Phi_0}{2}にしてみよう。どうなるか分かるだろうか?この時、下向き磁場で打ち消しても上向き磁場で\displaystyle \Phi_0にしてもエネルギー的にはどちらでもよくなる。電流は右回りでも左回りでも、どちらでもよい。実はこの時、右回りと左回りの「プラスの重ね合わせ状態(記号では\displaystyle |+>と表記する)」が最も安定した状態であり、右回りと左回りの「マイナスの重ね合わせ(同じく\displaystyle |->と表記する)」の方がエネルギーが高くなる*9。「重ね合わせ状態」が、量子ビットの基準(専門用語では基底)となるのだ(図8)。

f:id:quanta087:20171203215747p:plain
図8 ちょうど\displaystyle \frac{\Phi_0}{2}の磁場を加えたときの磁束量子ビット


100歩譲って「右と左のどちらでもいいから重ね合わせが基準になる」というのは分かるかもしれないが、なぜ重ね合わせの符号が違うとエネルギーが違うのか…など、細かいことは言葉だけで理解するのは難しいと思う。ここはそんなものだと思ってもらうしかない。
重要なことは、重ね合わせが基準になっている今の状況こそが、実際には好んで使われる、ということだ。なぜこのような理解しにくい状態をわざわざ使うのか。それは、この状態が磁場ノイズに対して最も安定して動作するからである。この特徴のため、外部磁場がちょうど\displaystyle \frac{\Phi_0}{2}である状態は最適動作点と呼ばれている*10(文献[3][4][5]などを参照)。

今回はここまで

超伝導磁束量子ビットとは一体何なのか。そこの部分は大体解説できたと思う。次回は量子ビットの初期化法について…と言いたいところだが、補足として「最適動作点がなぜノイズに強いのか」についてもう少し突っ込むかもしれない。本筋からややずれるかもしれないが、個人的に面白いと思ったので。

その2.5~ノイズ耐性~

参考文献

今回参考にした文献はこちら。参考文献は記事ごとに示しているので、以前の記事と重複しているものもある。なお、文献[5]は文献[4]の著者による(学会か何かの)スライドである。内容はほぼ同じであるが、スライドの方が図が豊富で分かりやすい。
[1] 仙場浩一, 超伝導量子ビットと単一光子の量子もつれ制御, NTT技術ジャーナル2007年11月号
[2] 仙場浩一, 超伝導磁束量子ビットの単一回読み出し, NTT技術ジャーナル2004年1月号
[3] 齊藤志郎 他, 超伝導量子ビットとスピン集団のコヒーレント結合, NTT技術ジャーナル2012年6月号
[4] P. Bertet et al., Dephasing of a Superconducting Qubit Induced by Photon Noise., Phys. Rev. Lett. 95, 257002 (2005) (arXiv版はこちら)
[5] P. Bertet et al., Photon-noise induced dephasing in a flux-qubit. (文献[4]の著者によるスライド。内容はほぼ同じだが図が豊富。)

*1:絶縁体にトンネル電流が流れること自体は、半導体などでもよく起きる現象だ。しかし、ここで言っているのは単なる電流ではなく、超伝導電流である!

*2:電子のスピンや光子の偏光の場合は本質的に2準位しか存在しないので、このような心配が不要になる。

*3:具体的な数値は\displaystyle \Phi_0 = \frac{h}{2e} \sim 2.07 \times 10^-15 Wbである。

*4:実際には、\displaystyle 0.495 \Phi_0のように、0.5より少しだけ小さい数字が使われる。ここでは話を簡単にするため極端な数字を挙げた。

*5:右手の親指を立て、ブーイングのポーズをしてみよう。

*6:右手の親指を立て、グッジョブのポーズをしてみよう。

*7:もちろん、磁場の合計が2\displaystyle \Phi_0や3\displaystyle \Phi_0になるような強い電流でも磁束量子条件を満たすことができる。ジョセフソン接合の説明における、エネルギーが等間隔に並んでしまって困るという話はこのことを指している。

*8:先程と同様に、0.9というのは極端な数値であり、実際に使われるものではない。

*9:重ね合わせ状態って壊れやすいんじゃなかったっけ?と思うかもしれないが、それは「固有状態間の重ね合わせ」が壊れやすいのであって、「重ね合わせ自体が固有状態」である場合は問題ない。

*10:文献によっては\displaystyle 1.5 \Phi_0が採用されていることもあるが、理由は同じである。

量子コンピュータの基本素子・量子ビットのハードウェア実装(超伝導磁束編その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)