不確定な世界

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

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

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

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

損失関数

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

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

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

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

追記:

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

 

勾配法

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

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

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

 

5章 誤差逆伝播

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

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

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

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

 

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

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

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

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

 

7章、8章

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

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

 

総括

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

 

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

斎藤康毅著「ゼロから作るDeep Learning」を読んだので、その読書メモ。
人工知能ディープラーニングには前々から興味を持っていてブルーバックスレベルの本を数冊読んでいたが、この分野の本格的な専門書を読むのは初めてだ。この本は有名なので、既に無数の紹介記事や書評記事が存在する。なので、この記事では書籍紹介や内容要約の体裁は取らずに、読んだときの思考をそのまま書き散らすことにする。なお、一周ざっと読んでから二週目で考えをまとめるために書いているため、思考の時系列が飛んでいるところがあるのであしからず。

1章 Python入門

私は元々物理の計算のためにPythonを使用していた経験があるので、ここは軽く読み飛ばした。Numpyで配列とスカラー値を掛け算すると配列の全要素に一気に演算が行われる仕様のことを「ブロードキャスト」と呼ぶらしい。今まで何気なく使っていたが、初めて知った。

2章 パーセプトロン

パーセプトロンというニューロンを模したモデルにより、論理回路を構成できる。ただし、単層パーセプトロンではXORは作れない

パーセプトロンを多層化することで、XORを構成できる。そもそも単層でNANDが構成できる時点で計算万能なのだから、適当に組み合わせればどんな回路でも作れるのは当たり前といえば当たり前だが。

3章 ニューラルネットワーク

パーセプトロンが信号を出力(生物学用語では興奮)するかどうかを判定する関数を「活性化関数」と呼ぶ。単純パーセプトロンではステップ関数を用いるが、ニューラルネットワークでは微分ができるように滑らかな「シグモイド関数」を用いる。また、最近ではReLU(ランプ)関数なるものが多く使われるらしい。

→よく使われるということは、性能が良いのだろう。なぜReLU関数の方が性能がいいのかは、今の段階ではよくわからない。
→ReLU関数のメリットの一つは計算量が少ないこと。確かに、expを使うシグモイドに比べたら楽そうだ。だけど本当にそれだけなのだろうか?この分野では現実的な問題として計算量を減らす工夫が大事なのだから別にいいのだけど、もう少し本質的な理論上の根拠があったほうが個人的には面白い。

→いずれにしても大事なのは、活性化関数が非線形であるということ。非線形性が面白い性質を生み出すという、カオス理論や複雑系科学と同じ理屈だ。

・「行列の内積」と言われて、少し目が止まってしまった。紹介されているのは明らかに普通の「行列の積」だ。おそらく、Numpyのブロードキャストのせいで「行列の積」がdot関数に追いやられているので、勘違いしてしまったのだろう。このことはGitHub上でも訂正されている。
ちなみに、「行列の内積」というものが存在すること、それ自体は事実である。私も数学は専門ではないので墓穴を掘りたくはないが、少なくとも量子力学では以下のように習った(A、Bは複素成分で同じ大きさの行列とする)。

行列の内積の定義:
\displaystyle
(A,B) \equiv \mathrm{Tr}(A^{\dagger}B)

例えば

\displaystyle
A = \left(
    \begin{array}{ccc}
      a_{11} & a_{12}\\
      a_{21} & a_{22}\\
    \end{array}
  \right)
\

,B = \left(
    \begin{array}{ccc}
      b_{11} & b_{12}\\
      b_{21} & b_{22}\\
    \end{array}
  \right)
\

とすると、

\displaystyle
A^{\dagger}B = \left(
               \begin{array}{ccc}
                {a^{*}}_{11}b_{11}+{a^{*}}_{21}b_{21} & {a^{*}}_{11}b_{12}+{a^{*}}_{21}b_{22}\\
                {a^{*}}_{12}b_{11}+{a^{*}}_{22}b_{21} & {a^{*}}_{12}b_{12}+{a^{*}}_{22}b_{22}\\
              \end{array}
            \right)
          \

となるので、

\displaystyle
\mathrm{Tr}(A^{\dagger}B) = {a^{*}}_{11}b_{11}+{a^{*}}_{21}b_{21}+{a^{*}}_{12}b_{12}+{a^{*}}_{22}b_{22}

である。すなわち「対応する成分を掛け算して全部足す」という「ベクトルの内積」を、そっくりそのまま行列に拡張した形になる。当然、「行列の内積」でも出力は一つのスカラー値だ。

話がだいぶそれてしまった。数式を書く練習にちょうどよかった。

・重み行列と入力データを表すベクトルをかけることで、次のノードへの入力が計算できる。量子力学では普通縦ベクトルを使って行列×ベクトルと書くので、横ベクトルを使って行列が右に来る書き方はちょっと違和感がある。

・出力層では中間層とは異なる活性化関数が用いられる。回帰問題では恒等関数を、分類問題ではソフトマックス関数が用いられる。

・ソフトマックス関数の出力は「確率」と解釈できる。なぜわざわざexpを使うかだが、おそらく損失関数として使うlogと逆関数の関係になっていることが、誤差逆伝播の計算に重要だからだろう。

・ソフトマックス関数を実装する際、式変形することでオーバーフローを防ぐ。これは目からウロコだった。実装の問題は実装で逃げるしかないと思っていたが、純粋に数学的な式変形だけで根本的に解決できるのか。

・MNISTデータセットは、手書き数字の画像データの集まり。MNISTは画像認識分野のHello Worldに相当するらしい。

数値計算のライブラリは巨大な行列の計算を効率よく行うことに最適化されているので、入力データ(ベクトル)を束ねて行列として一気に処理してしまうと、計算が大幅に速くなる。

後編に続く

量子コンピュータの基本素子・量子ビットのハードウェア実装(シリコン編おまけ~エンジニアの視点で量子ゲートを実装する~)

その1~素子構造~
その2~スピンとは何か~
その3~データの初期化と読み出し~
その4~データの書き込み・演算~

 

前回の記事からだいぶ時間が経ってしまった…。まあ1ヶ月は経ってないからセーフかな。

 

今回は量子ゲートが実際にどのように実装されているのかを現場で働くエンジニアになったつもり見てみよう。

チップの製造工場から量子ビットが実装されたチップが運ばれてきた。このチップに量子ゲートを実装したい。前回の記事で解説したように、量子ゲートとはチップに一定時間交流電流を流し、スピンを狙った角度まで回すことである。つまり、パウリゲートやアダマールゲートを実現するには実際には何秒間交流電流を流せばいいのかを知ることが、量子ゲートを実装することと同義となる。そのためには早い話、実際にチップに電流を流してみて、どのくらいの速さでスピンが回るのかを観察すれば良いのだ。その実験の様子を見ていこう。

 

目次

 

量子実験は繰り返しが基本

ひとつ注意したいことがある。このような量子力学の実験では、繰り返し測定を行う必要がある。普通に身近な物の長さや重さを測るときも、繰り返し測定することで精度を高めることはあるが、データがたった1個だとしてもそのデータには一定の意味がある。しかし量子力学の理論で扱うのは確率や期待値といった統計量であり、これはデータが1個だけではそもそも意味を持たない。「サイコロを1回振ったら3が出た」というだけで確率を語れるだろうか?今やりたいのは、「スピンがアップなのかダウンなのか」というサイコロを振ることなのだ。そのことを頭に入れておいて欲しい。

また、ここからは「初期化」や「測定」など、抽象的な言葉だけで説明してしまう部分もあるが、「実際にはチップのどの部分の回路をどのように制御しているのか」「チップの内部ではどのような物理現象が起こっているのか」という部分は、前回までの記事で解説しているので必要に応じて参照して欲しい。

 

実験 

では、実際に実験してみよう。

今調べたいのは「交流電流をどのくらいの時間流したら、スピンがどのくらい回るのか」であったので、条件部分である「交流電流を流す時間」を変数(横軸)にして測定を行うのが自然だろう。

今までの記事で解説した通り、量子ビットの動作の流れは初期化→書き込み(スピンを回す)→読み出し(スピンの測定)の順だ。この流れを何回か繰り返し、アップスピンが観測される確率を調べる(つまり、SET回路に電流が流れ、パルスカウンタで検知される確率を調べる)*1

 

さあ、まずは交流電流を0秒だけ流す(要するに流さない)。つまり、スピンをダウンに初期化したあと、間髪入れずに測定フェーズに入る。これを何回か*2繰り返し、「アップスピンが観測される確率」を計算する。すると、なんと1回もアップスピンは観測されなかった。この結果から計算される確率は、0だ*3。この結果をグラフにプロットしていこう。

f:id:quanta087:20170422173921j:plain

図30 実験経過1

 

次は0.5マイクロ秒の交流電流を流してみよう*4。今度はある程度スピンが回り、アップが観測される確率が多少は上がるはずだ。実際に何回か測定してみると、今度はおよそ15%の確率でアップが観測された。

f:id:quanta087:20170422174134j:plain

図31 実験経過2

 

同じことを、0.5マイクロ秒刻みで交流電流の時間を増やしながら続けていく。1マイクロ秒、1.5マイクロ秒…どんどんアップスピンが観測される回数(確率)が増えていく。

f:id:quanta087:20170422174212j:plain

図32 実験経過3

 

そして、交流電流の時間が2マイクロ秒になったところで、ついにアップスピンしか観測されなくなった。アップ100%だ。さらに交流電流を長くしていくと、今度はアップスピンが観測される確率がどんどん減っていった。

f:id:quanta087:20170422174249j:plain

図33 実験経過4

 

最終的に、5マイクロ秒まで交流電流を流したときのグラフは次のようになった。

f:id:quanta087:20170422174330j:plain

図34 実験経過5

 

分かりやすいように、線を引いてみよう。

f:id:quanta087:20170422174406j:plain

図35 フィッティング

 

そう、(反転)コサインカーブだ。スピンの重ね合わせの確率は、このように時間に対してコサインカーブ(別に位相のずれたサインカーブとみなしてもいいが)を描いて増減する。これがラビ振動だ*5

 

実験結果を見る

この実験結果から、色々なことが分かる。まず、振動の時間周期は4マイクロ秒なので、周波数に直すと1/4=0.25MHz=250kHzだ*6。ラビ振動の周波数のことをラビ周波数という(そのまんまだ)。ラビ周波数はスピンがどれだけ速く回るか、言い換えれば量子ビットがどれくらい速く演算できるかを表す指標だ。つまり、量子コンピュータのクロック周波数だと思ってもらっていいだろう。250kHzという数字を見て今のコンピュータより遅いと感じる人もいるだろう*7。しかし量子コンピュータの計算の速さの本質はアルゴリズムにありクロックにあるわけではない。まあ速いに越したことはない、という程度だ*8

再びグラフに戻ろう。1マイクロ秒あたりでアップとダウンが50%の重ね合わせになり、2マイクロ秒でダウンからアップに完全に反転している。つまり、アダマールゲートを行うためには、1マイクロ秒、パウリゲートを行うためには2マイクロ秒の間、交流電流を流す必要があることが分かる。このように、量子ゲートを実装するためには、一度ラビ振動実験を行い、スピンの回転速度を確認する必要があるのだ。いかにスマートなIBMであろうと、ハードウェア開発の現場ではこのような泥臭い調整作業が行われているはずだ。

 

量子プログラミング

ずっと交流電流を流すと言っているが、具体的には市販の実験装置使って交流信号を発生させる。例えば、こういう装置だ。

このような装置に「このくらいの周波数で、このくらいの時間だけ交流電流を流せ」と命令することで、量子ビットを駆動するのだ。このような実験装置への命令が、ある意味では最も低級な量子コンピュータ・プログラミングと言えるだろう。ちなみに、このような装置を動かすためにはC言語Python、あるいはLabVIEW*9など普通のプログラミング言語を使う。そういう意味では、とりあえず普通のプログラミング言語が一つ使えれば、量子コンピュータを動かせると自慢してもいいだろう(笑)。

とはいえ、実験装置に直接命令する具体的な周波数値やパルス幅はチップの個性によっても変わってくるので、あまりにもハードウェア依存性が高く、量子コンピュータ・プログラミングというには低級すぎる。小規模な実験の論文では実験装置のレベル(つまり電流を何秒間流して~という感じ)でアルゴリズムを記述する「パルスシーケンス図」が使われることもあるのだが、より複雑な量子アルゴリズムを記述するときには実験装置の存在は隠蔽して「量子回路」を使うのが一般的だ。量子回路は、図のように論理の流れ(時間経過)を表す線の上に、個別の量子ゲート(論理回路)を表す記号を配置していくことで行われる。

f:id:quanta087:20170422174917j:plain

図36 量子回路の例

 

IBM量子コンピュータ*10を実際に使える「Quantum Experience」でも、ユーザーは量子回路によって量子コンピュータのプログラミングを行う*11。普通のコンピュータの水準から言えば論理回路によるプログラミングも十分すぎるほど低級ではあるが、今のところこれが業界標準だ。

もちろん、高級言語の研究もされてはいるのだが、普及はしていない。最近になって「量子プログラミングの基礎」という本が出版されたらしいが、目次を見る限りではやはり数学理論の項目が並んでいる。プログラミング意味論とか、そういう分野に近い本だと思う。「苦C」や「みんPy」などと同じ感覚でこの本を開いても痛い目を見るのは確実だろう。そもそも実際のハードウェアで扱える量子ビットの数がせいぜい数ビット~数十ビット程度である現状では、C言語Pythonのような高級言語には需要がないということもあるだろう。

 

最後に

これで連載記事としては終わりになる。元々は学生として最後の時間に暇を持て余して書き始めたのだが、意外に時間がかかってしまった。初めてのブログ記事が連載記事というのは重すぎたかもしれない。

これからは勉強の備忘録や読書感想などが中心になると思うが、時間を見つけてこのような解説記事も書いていきたい。そのほうが自分の勉強にもなる。

*1:別に「ダウンスピンが観測される確率」を調べてもいいのだが、“信号が検出されない事象をカウントする”というのはちょっと不自然だ。どうせなら信号検出をカウントした方が気持ちいい。

*2:最低でも1万回は繰り返さないとまともに信用できるデータは取れない。

*3:実際に実験を行うと、ノイズ信号を検知してしまったり、逆に信号がロストしてしまったりするので、このような綺麗な結果になることはないのだが、さすがにそこまでリアリティを求めるつもりはない。

*4:なぜ1ナノ秒や1秒ではなく、1マイクロ秒くらいのスケールで横軸を刻んでいけばいいのだと分かったのだろう。実を言うと、スピンの回転速度はある程度理論的に予測できるし、先人の蓄積したデータも目安になる。ただ、実際のチップには個体差があるので、正確なところは手作業で確認しないと分からない。今やっているのはそういう作業という設定だ。

*5:このカーブはブロッホ球上の状態ベクトルのZ軸方向への射影成分である。そのため、ここまでで述べてきた測定のことをZ測定などと呼ぶこともある。

*6:ここでは説明しやすいように綺麗な数字になるよう調整したが、実際の論文でも大体同じくらいだ

*7:ちなみにこの記事を書くのに使っているPCのCPUは2.53GHzだ

*8:ラビ周波数はハードウェアの材料によって幅があり、速い奴だとGHzやTHz級のものもある

*9:実験や計測の分野では割とメジャーな言語

*10:IBM量子コンピュータはハードウェアとして超伝導回路を採用しているため、ここで紹介しているシリコン量子ビットとは多少違いがある。まあやっていることは大体同じだ。

*11:その舞台裏で、ユーザーが組んだ量子回路が実験装置への命令へ翻訳され、チップに電流などが流れて演算が行われているのだ。正直アイコンを並べているだけでは量子プログラミングをしているという実感がわかないのだが、舞台裏で行われているハード側の処理を知っていると、なんとなく実感が湧かないだろうか。

量子コンピュータの基本素子・量子ビットのハードウェア実装(シリコン編その4~データの書き込み・演算~)

その1~素子構造~

その2~スピンとは何か~

その3~データの初期化と読み出し~

 

さて、今回は量子ビットへのデータの書き込みや演算、すなわち「量子ゲート」を現実のハードウェアでいかに実現するか、という部分を解説する。これが終われば、一通り「量子ビット」の実装について説明したことになる。

もう聞き飽きたと思うが、ここでいう量子ビットの正体は、シリコンチップに閉じ込められた電子が持つ磁石(スピン)の向きだ。つまり、この記事ではスピンの向きを制御する技術について解説することになる。ポイントとなるのは、「磁気共鳴」と呼ばれる現象だ。

 目次

磁気共鳴

ベクトル・モデルによる古典的説明

磁気共鳴を説明する上で、一つ注意をしたい。この説明では、今までのようにスピンを上下方向しか向けない量子力学的な磁石としてではなく、どちらを向いてもいい普通の磁石のように扱う。スピンを3次元空間の単なる矢印とみなしてしまう古典的な*1説明方法を「ベクトル・モデル」という。

以下の図のように、3次元空間にスピンが存在し、Z軸方向に静磁場がかかっているとする。実は今まで説明を避けていたが、スピンはただ単に磁場に沿って直立しているのではなく、磁場からちょっと傾いて首振り運動をしている。この運動をラーモア歳差運動という*2

f:id:quanta087:20170328101156j:plain

図21 ラーモア歳差運動

 

ラーモア歳差運動の回転周期は静磁場の強さによって変わるが、一度磁場を決めてしまえば一定である。ここで、ラーモア歳差運動の回転周期と同じ周期を持つ交流磁場を、静磁場に垂直な方向(ここではX軸方向)にかけてみよう。すると、図22のように交流磁場の軸(つまりX軸)を回転軸としてスピンが回転しだすのだ*3。このように特定の周波数を持つ交流磁場によってスピンが回転する現象を磁気共鳴と呼ぶ。そして、適当な時間だけ磁気共鳴を起こすことにより、スピンの傾きを適当に調節できる。これが、磁気共鳴によってスピンの向きを制御する、ということだ。なお、既にスピンが傾いている場合でも、交流磁場を与えれば追加でスピンを回すこともできる。

f:id:quanta087:20170328101353j:plain

図22 磁気共鳴

 

 

エネルギー準位を用いた量子力学的説明

さて、頭を量子力学に切り替えて、同じことを説明しよう。スピンは静磁場によりゼーマン分裂を起こし、アップとダウンでエネルギーに変化がするのだった。

一方、上記で議論した交流磁場というのは、言葉を換えれば電磁波のことであり、電磁波とは量子力学的に見れば光子という粒子の集まりなのである。光子1個当たりのエネルギーは、電磁波の周波数fと、ある比例定数hの積E=hfと表される。

ここで、電子に光子を当てた時、電子スピンのアップとダウンの間のエネルギー差と、光子1個が持つエネルギーが等しいとき、電子は光子の吸収・放出現象を起こす(図23)。ダウンスピンだった場合は光子(のエネルギー)を吸収してエネルギーの高いアップスピンになり、アップスピンだった場合は光子(のエネルギー)を放出してエネルギーの低いダウンスピンに落ちる。ただし、電子と光子がうまくぶつかる確率はそれほど高くはなく、ある程度時間をかけて電磁波(光子)を与え続けることで、確率的に電子のエネルギー(スピンの向き)が変化する。つまり、電磁波を与える時間に応じて、電子のスピンがアップなのかダウンなのかという確率が変化する。このような確率の変化をラビ振動という*4。これが、磁気共鳴を量子力学的に言い直した場合の説明だ。

f:id:quanta087:20170328103613j:plain

 図23 量子力学的な磁気共鳴

 

 

読者の皆さんにとってどちらがわかりやすい説明だったかは分からないが、いずれにしても次の2点は押さえて欲しい

  • 静磁場と直角に交流磁場(電磁波)を与えることで、スピンは「回転」する。
  • スピンの向き(重ねあわせの度合い)は瞬時に変わるわけではなく、時間をかけて徐々に「回転」する。

このように、ダウンスピンに初期化された電子に交流磁場(電磁場)を当て、スピンの向きをコントロールすることが、量子ビットへのデータの書き込みや演算に相当する。

 

スピン制御回路の実装

では、現実に実装されたチップの内部で、どうやって「磁気共鳴」とやらを起こすのだろうか。まずはチップの写真を思い出そう。

f:id:quanta087:20170317134406j:plain

 

図24 SEM写真(再掲)

 

既に、量子ドットの中に電子が存在すること、チップ全体には横から静磁場がかかっていることは説明した。残りは、交流磁場をどのように発生させるのか、ということになる。ポイントになるのは⑤の回路だ。

簡単のため、一本の導線に直流電流を流すことを考える。この時、いわゆる「右ネジの法則」に従い、電流の周りに円形磁場が発生する(図25)。

f:id:quanta087:20170328202924j:plain

図25 円形磁場

 

電流の向きを反対にすると、当然この円形磁場の方向も逆転する。つまり、導線に交流電流を流すと、交流の円形磁場が発生する。

このことを頭に入れて再びチップの写真を見れば大体察しはつくかもしれない。⑤の回路に交流電流を流すと、その真横にある量子ドットには、垂直方向に交流磁場がかかるのだ(図26)。具体的な数値を出すと、ここでの交流電流の周波数はおよそ40GHzである。電磁波の言葉だとマイクロ波領域ということになる。

一方静磁場はチップに対して水平にかかっているので、磁気共鳴が起こる条件を満たしている。あとは、回路に交流電流を流す時間を調節することで、スピンの向き(重ね合わせの度合い)を適当に調節できる。

f:id:quanta087:20170328203200j:plain

図26 交流磁場

 

以上の説明を読んで、スピンは具体的にどのくらいの速さで回転するのか、スピンがどのくらい回ったかを確認することは出来るのか、などといった疑問を持った人もいるかもしれないが、そのあたりの事情は次回の記事に回すことにする。

量子ゲート

ここまではスピンの制御を物理学・ハードウェアの観点から見てきたが、同じことをコンピュータ科学・ソフトウェア側の用語で表したものが「量子ゲート」だ。量子ゲートは普通のコンピュータにおける論理回路に相当し、量子コンピュータの“理論的”な基本素子である。

前述したように、スピンの方向(重ね合わせの重み)は交流電流を流す時間により自由に調節できる。このような制御を、スピンの回転角θに合わせて「θ-回転ゲート」などと呼ぶ*5。加えて、回転ゲートの中でも特徴的な性質を持つものには特殊な名前がついている。「パウリゲート」と「アダマールゲート」の2つだ*6

 

パウリゲート

図27のようにΘ=π(角度の単位はラジアン)のとき、すなわち「π-回転ゲート」には、特別に「パウリゲート」という名前がついている。「ビット反転演算」とも呼ばれる。これはちょうど、アップスピンがダウンスピンに、あるいはダウンスピンがアップスピンになるので、普通のコンピュータにおけるNOTゲートに対応している。普通のNOTゲートと違うのは、入出力状態として、スピンの「重ねあわせ状態」を含むことだ(図28)。

 

f:id:quanta087:20170401214157j:plain

図27 ダウンスピンに対するパウリゲート

 

f:id:quanta087:20170401214322j:plain

図28 重ね合わせ状態に対するパウリゲート

 

アダマールゲート

図29のようにΘ=π/2のとき、すなわち「π/2-回転ゲート」には、特別に「アダマールゲート」という名前がついている*7。これはダウンに初期化されたスピンを50%の重ねあわせ状態にしたり(縦に立ったスピンを横に寝かす)、逆に重ねあわせ状態のスピンをアップorダウン100%の状態に戻したりする(寝かしたスピンを起こす)効果がある。アダマールゲートには普通のコンピュータに対応する論理回路はない。重ねあわせの生成は量子並列計算の起点になり、その上いわゆる量子もつれを生成する前準備にも必要になる。アダマールゲートはまさに、量子コンピュータを象徴する演算といえる。

f:id:quanta087:20170401214454j:plain

図29 アダマールゲート

 

量子ゲート(論理回路)はやや抽象的な概念だが、結局ハードウェアでは何が起こっているのかといえば、チップ上の回路に一定時間だけ交流電流を流しているだけなのだ。教科書には量子ゲートという抽象的な数学しか書いていないことが多く、このような現実のチップの動きについて書かれているものは少ない。

 

 今回はここまで

 量子ビットの初期化、演算、読み出しの流れは一通り説明し終わった。ここで終わりにしてもいいのだが、次回はおまけとして「量子ゲートの実装」についてもう少し深堀りしたい。

ただ、私も新生活が始まってしまい、記事を書くのに時間がかかると思う。

 

おまけ~エンジニアの視点で量子ゲートを実装する~

*1:物理学でいう「古典的」という言葉は「量子力学的でない」という意味であり、「古臭い」というニュアンスはない。

*2:これを量子力学的に説明しようとすると“位相”について詳しく説明する必要があり、話がややこしくなるので隠していた。ベクトル・モデルでは普通の3次元空間の話なので、難しく考える必要はない。

*3:本当はZ軸周りの歳差運動とX軸周りの共鳴回転が合わさり、スピンはとぐろを巻くような軌道を描くのだが、歳差運動の周期は一定なので、図ではある種の補正をかけてX軸まわりの回転だけを表示している。この補正は専門用語では回転座標系と呼ばれる。

*4:「磁気共鳴」という言葉はハードウェアとしてスピンを用いる場合に限定された用語であるのに対し、「ラビ振動」という言葉は特定のハードウェアに依存しない、より広い意味を持つ。「二準位系と場の相互作用によってラビ振動が起こる」という見方はJaynes-Cummingsモデルと呼ばれ、物理学や工学の観点から量子ビットの制御理論を語る際によく用いられる。

*5:ここでいう回転角は、厳密に言えば「量子状態ベクトルブロッホ球上での回転角」である。スピンの場合はハードウェアの動きを表すベクトル・モデルと、量子状態の数学的な図示方法であるブロッホ球がたまたま似ているので、「回転ゲート」のイメージをハードウェアと対応させやすい。一方、例えば原子軌道を用いる量子ビットではハードウェアそのものが回転するイメージはできないが、数学的には「ブロッホ球上を量子状態ベクトルが回転する」と見なせる。

*6:制御ノットゲートやトフォリゲートといった量子ゲートもあるが、これは複数の量子ビットを組み合わせる「多入力」ゲートだ。ここで扱っている単一量子ビットで可能な量子ゲートは本質的には回転ゲートただ1種類である。

*7:理論上厳密に言えばπ/2ゲートとアダマールゲートは別物なのだが、実質的な効果が似ているので実装実験の段階ではこの2つを同一視してしまう傾向がある。専門的な話になるが、厳密な意味でのアダマールゲートを構成するにはX回転に加えてZ回転を組み合わせる必要がある。この記事ではそもそも回転ゲートにXYZの3種類があることは隠している

量子コンピュータの基本素子・量子ビットのハードウェア実装(シリコン編その3~データの初期化と読み出し~)

その1~素子構造~

その2~スピンとは何か~

 

今回は量子ビットの初期化と読み出しについて解説する。本当は初期化→データ書き込み(演算)→データ読み出しの順で説明したかったのだが、本デバイスは設計上初期化と読み出しを切り離すことが難しいので、書き込みは後に回すことにする。

 

目次

初期化の必要性

既に何回も述べたように、今紹介しているシリコン量子コンピュータでは、電子のスピンを量子ビットとして用いている。スピンの向きによってデータを表すのだ。しかしスピンにデータを書き込みましょう、といっても今現在スピンの向きが分からないと制御のしようがない。実際、チップが目の前にあってもその中の電子スピンがアップなのかダウンなのか、はたまた重ね合わせ状態なのか、最初はわからないのだ(専門用語では、これを混合状態という)。なので、量子コンピュータ使用前にスピンの向きを強制的に揃える必要がある。これが量子ビットの初期化だ。普通のコンピュータで言えば、メモリに強制的に一律のデータを上書きする、物理フォーマットに相当する。ただし、量子ビットは極めて不安定であり、せっかく初期化しても使用せずに放っておくだけですぐにまたスピンの向きがわからなくなる*1。そのため、量子ビットを使おうとする度にまずは初期化をする必要があるのだ*2

 

なお、ここから先の説明はそれなりに難しくなる。理屈抜きにとにかく「何をしたらどうなるのか」が手っ取り早く知りたい方は、上記目次から最後のまとめの部分に飛んでもらいたい。

 

自然はエネルギーが低い方に行こうとする

 具体的な話を始める前に一つだけ頭に入れておいて欲しいことがある。

それは、「自然はなるべくエネルギー(より正確にはポテンシャル・エネルギー)が低い方に行こうとする」ということだ。例えば、高いところにある物が落下するのは、位置エネルギー(ポテンシャル・エネルギーの一種)が低い方が安定するからだ。そもそも、量子ドットに電子が閉じ込められているのも、(ポテンシャル・)エネルギー箱の底にハマっているからだった。また、D-Wave量子コンピュータについて調べたことがある方は、以下のような図を見たことがあると思う。D-Waveの動作原理である量子アニーリングも、量子が自動的にエネルギーの低い方へ向かうことを利用しているのだ。

f:id:quanta087:20170323105107j:plain

図9 エネルギーが低い方に落ちていく

 

スピンの初期化

 やっと本題に入ることができる。まったく分からないスピンの向きを、実際にはどのように揃えるのだろうか。まずは以前にお見せしたチップ素子の写真を再掲しよう。

f:id:quanta087:20170317134406j:plain

図10 SEM写真(再掲)

 

初期化の説明に必要なのは、①量子ドット構成用電極のうちG4電極と、②量子ドット、それから③貯蔵電極だ。

ここで、量子ドット(の中の電子)と貯蔵電極(の中の電子)のエネルギーを比較してみよう。

f:id:quanta087:20170323105549j:plain

図11 エネルギーの比較

 

横軸のDは量子ドット、Rは貯蔵電極の位置を表している。量子ドット(D)よりも貯蔵電極(R)の方がエネルギーが高いことがわかる*3。なお、量子ドットには電子は1つだけだが、貯蔵電極には電子が大量に存在しており、「電子の池」状態になっている。

ここで、量子ドット近くにある電極G4の電圧を適当に調節して、アップスピンのエネルギー>貯蔵電極のエネルギー>ダウンスピンのエネルギーとなるように、量子ドットのエネルギーを底上げしてみよう。

f:id:quanta087:20170323105743j:plain

図12 量子ドットのエネルギーを上げる

 

今、スピンはアップなのかダウンなのかまったく分からないので、場合分けして電子の振る舞いを見ていこう。

 

ダウンスピンの場合

この場合、特に何も起こらない。ダウンスピンはエネルギーが低いため、電子は安定しているのだ。

f:id:quanta087:20170323193439j:plain

図13 ダウンスピンでは何も起こらない

 

アップスピンの場合

では、スピンがアップだった場合を見てみよう(図14左)。ここからが見ものだ。

前述したように、自然はエネルギーが低い方に進む。図を見て察した方もいるかもしれないが、スピンがアップの場合、エネルギーが高く居心地の悪い量子ドットから、よりエネルギーの低い貯蔵電極の方に移動するのだ。もちろん、このとき一時的に量子ドットは空になる。この現象は自然に起こるので、電極G4電圧の調節後、ただ待っているだけで良い(具体的には100マイクロ秒程度)。

f:id:quanta087:20170323110110j:plain

図14 アップスピンでは、貯蔵電極の方が安定

 

次の説明が初期化を理解する最後の山場だ。既に述べたように、貯蔵電極の中には電子がたくさんいる。量子ドットが空になってから時間が経つと、貯蔵電極の中の電子のうち、たまたまダウンスピンを持っているものが1つ、量子ドットに移動してくるのだ(図15右)*4。なぜなら、ダウンスピンの電子にとっては、貯蔵電極にいるより、量子ドットに入った方がエネルギーが低いからだ。この現象も、ただ100マイクロ秒待っているだけで自然に起こる。

f:id:quanta087:20170323110408j:plain

図15 時間が経つと、量子ドットに電子が戻ってくる

 

ぐちゃぐちゃ説明したが、結局何をしたかというと、量子ドット付近の電極の電圧を調節してから、ただ時間が経つのを待っていただけだ。電子がダウンスピンだと何も起こらず、アップスピンだった場合には電子が貯蔵電極に逃げ、空になった量子ドットにダウンスピンの電子が入ってくる。最初のスピンの向きがどちら向きであろうが、最終的にスピンはダウンになっている。つまり、スピンがダウン状態に初期化された、ということだ。もちろん、一連の処理が終わったら電極の電圧を再調整し、量子ドット内のエネルギーが貯蔵電極に比べて低い状態に戻す。このようにして、データの書き込みや演算の準備が整う。

ちなみに、チップを製造してから初めて量子ドットに電子を注入する際にも、まったく同じ仕組みが適用できる。

 

 

データの読み出し

 では次に、量子ビットのデータ読み出しに移ろう。スピンは初期化されたあと、何らかの演算が行われ(演算については次回の記事で説明する)、何らかの重ねあわせ状態になっているものとする。重ねあわせ状態にあるスピンを観測すると、重ねあわせの確率に従い、アップかダウンのどちらかが観測値として得られる。これが教科書的な筋書きだ。では、現実のデバイスでは、そのような観測をどのように実現するのだろうか。ポイントになるのは、チップ素子写真の④、「単電子トランジスタ」の機能だ。その説明のため、まずは「普通のMOSトランジスタ」の動作原理から入るのが良いだろう。

 

MOSトランジスタ

 とはいえ、MOSトランジスタの動作原理はネットで調べればいくらでも出てくるので、軽い説明で十分なはずだ。pnp型のMOSトランジスタは、図のように、正に帯電したP型半導体に、負に帯電したN型領域が埋め込まれた構造をしている。

f:id:quanta087:20170323110707j:plain

図16 MOSトランジスタ

 

ここで、ソース電極とドレイン電極の間に電圧をかけても、N型領域とP型領域の境目には大きなエネルギーの壁があり、電子はその壁を越えられないため、電流は流れない。ここで、ゲート電極に正の電圧を加えると、ゲート電極の真下にP型領域内の電子が集まり(絶縁膜があるので外に流出することはない)、この部分が負に帯電して一時的にN型領域が形成される。そのため両端のN型領域が繋がり、電流が流れるようになる。これが、MOSトランジスタの大まかな原理だ。

f:id:quanta087:20170323110753j:plain

図17 MOSトランジスタの動作原理

 

 

単電子トランジスタ

 次に、単電子トランジスタ(以下SET)の動作原理を説明する。図はチップ写真のSET部分を拡大したものだが、これ見てもわかるように、量子ドットとSET回路はかなり近い位置にある。これがポイントだ。

 

f:id:quanta087:20170323110905j:plain

図18 SET部分拡大

 

図のように、SET回路の端に電圧をかける。当然、電子は左から右に流れようとする。しかし、量子ドットに電子が入っていると、ドット内の電子とSET回路に流れる電子が電気的に反発するため、SETに電流が流れないのだ。ドット内の電子による電気的バリアはクーロン障壁と呼ばれている。一方、量子ドットから電子がいなくなると、クーロン障壁がなくなるので、SETに電流が流れる。

f:id:quanta087:20170323111036j:plain

図19 単電子トランジスタの動作原理

 

ここで、初期化のことを思い出していただきたい。量子ドット内の電子がダウンスピンならドット内に留まり、アップスピンだったら貯蔵電極に逃げるのだった。つまり、ドット内の電子がダウンスピンのときにはSETに電流が流れないが、アップスピンの場合SETに電流が流れる。SETに電流が流れるかどうかを検知することで、ドット内の電子がアップスピンだったのかダウンスピンだったのかを判定できるのだ*5。これも前述したことだが、量子ドットが空になってから大体100マイクロ秒で電子が再びドットに入り、SETの電流は止まる。この100マイクロ秒程度のパルス電流は、I/Vコンバータで電圧パルスに変換され、パルスカウンタなどの装置でカウントされる(そのあとはコンピュータで統計処理などが行われる)。これが、「スピンを観測する」ということの正体だ。

f:id:quanta087:20170323111150j:plain

図20 スピンの観測

 

加えて、観測後にスピンは自動的にダウンになることにも注目したい。この記事の最初の方に、量子ビットを使う前には必ず初期化が必要であると述べた。このデバイスでは、データの読み出し時に自動的に初期化が行われるため、必要であれば測定後すぐに次の演算に移ることができるのだ。

 

まとめ

話が長くなってしまったので、「初期化と読み出し」には結局何をすれば良いのかをまとめておこう。

1.量子ドット付近の電極G4の電圧を調節する

2.一定時間待つ

  もし電流が流れなかったら→電子はダウンスピンだったことが分かる

  もし電流が流れたら→電子はアップスピンだったことが分かる

3.一定時間待つことにより、自動的にダウンスピンへの初期化が行われる

4.必要なら次の演算を行う

5.1に戻る

 

量子力学なんて所詮ただのテクノロジーだ

量子力学の話になると、やたらと観測という言葉が一人歩きしている感がある。場合によっては人間の主観や意識などの哲学的領域に話が及ぶこともある。量子力学を魔法のような学問だと思っている人もいるらしい。このような現実に動作するデバイスの仕組みを知ることによって、「量子力学なんて所詮ただのテクノロジーなんだ」と多少なりとも現実味を持っていただければ幸いである。 

 

最後に

さて、次回は量子ビットへのデータの書き込みおよび演算の仕組みを解説する。もしかしたら、量子ゲートまで話に加えるかもしれない。

その4~データの書き込み・演算~

*1:いわゆるデコヒーレンスと呼ばれる問題。この記事では扱わないが、いずれデコヒーレンスについての解説記事も別に書きたいと思っている。

*2:初期化については量子力学量子コンピュータの教科書には殆ど記述がなく、アルゴリズムの章などでは「N個の量子ビットが|0>状態に準備されているとする」などと、最初から量子ビットが初期化されている前提で話が進むことが多い。しかし、実際のデバイスを動作させる上で、初期化は非常に大事なプロセスだ。初期化の精度が中途半端だと、そのあとの全てのプロセスが信用できないものになってしまう。量子コンピュータのハードウェア技術者を目指す方は、このような教科書に載っていない部分についても意識しておいた方がいいだろう。

*3:正確には、貯蔵電極のエネルギーは「帯」になっているのだが、ここではフェルミ準位のみに簡略化している。

*4:エネルギーが低い方に落ちていくなら、量子ドット内でアップスピンからダウンスピンに直接落ちたりはしないのだろうか。もちろん、それも可能ではある。しかし、ここでは説明していない専門的な理由により、貯蔵電極に落ちていく確率の方がはるかに高い。

*5:電流が流れたかどうかだけ判断できれば良いので具体的な数値にあまり意味はないが、このとき流れる電流の大きさは大体500ピコアンペア程度である。

量子コンピュータの基本素子・量子ビットのハードウェア実装(シリコン編その2~スピンとは何か~)

その1~素子構造~

 

前回の記事で述べたように、シリコンチップの量子ドットという構造の中に電子が閉じ込められている。シリコン量子コンピュータでは、この電子がもつ「スピン」にデータを埋め込むわけだが、そもそも「スピン」とは何なのだろうか。

 

電子は自転している

電子をはじめとする素粒子は、生まれつきいくつかのパラメータを持っている。ポケモンが「こうげき」や「すばやさ」といったパラメータを持っているのと同じように、素粒子は重力に関係する「質量」と呼ばれるパラメータや、電気的な性質を表す「電荷」と呼ばれるパラメータを持っている。「スピン」もそのような基礎パラメータの一つであり、素粒子が「自転」している様子を表すパラメータだ。

ただし、素粒子は本当の意味で回っているわけではない。何か力が働いて回っているのでもないし、止めることもできない。素粒子というのは生まれつき、このような不思議な「自転」をしているのだ。

 

電子は電気であると同時に磁石でもある

さて、一般的にはスピン=自転と言えば十分なのだが、ここではもう一歩踏み込んで説明する。前述したように、素粒子(以下、電子に限定する)は電荷を持っており、電荷を持った物質が運動(ここでは自転)していると、磁場が発生するのが自然の摂理だ。電子の自転は止めることができないので、磁場の発生も止めることができない。すなわち電子は生まれつき、磁場を発生させる性質を持っていると言っても良い。つまり、電子とは電気であると同時に、磁石でもあるのだ(図4)。

f:id:quanta087:20170320131045j:plain

図4 電子は磁石でもある

 

 実を言うとこの先、量子ビットの性質を説明するうえで、電子が自転していることはそれほど重要ではなく、電子が磁石であることの方がポイントになる。なので、ここでは思い切って自転のことは忘れてしまい、電子に内在している磁石としての性質のことを「スピン」と呼ぶ事にする(スピンという言葉のイメージからは離れてしまうが、単なる名前だと割り切って欲しい。猫にポチ、犬にタマという名前を付けたようなものだ)。

加えて、質量や電荷は一定の数値で表されるが、「スピン」は少し事情が異なる。スピンというのは磁石なのでS極とN極を持っている。そのため、単なる数値ではなく、「S極がどっちを向いているか」という「向き」のことも考える必要がある。そして、その「向き」は量子力学の原理に従って「上向き(アップスピン)」か「下向き(ダウンスピン)」の2種類しかないのだ。

 

スピンの向きはどうやって見分ける?

ところで、ここに電子があったとして、そのスピンの向きに区別がつくのだろうか?人間の感覚だと上下と言われるとつい重力に対する方向と思いがちだが、スピンは重力とは関係がないパラメータだ。実を言うと、真空中に電子がポツンと置いてあるだけではスピンの向きは上下の区別がつかない(このように上下の区別がつかない状況をスピンが縮退しているという)。

スピンは磁石であり、磁石は磁石に反応する。スピンの向きを区別するには、向きの基準となる磁場を外部から与える必要があるのだ(基準となる向きを量子化軸という)。

図で書くと次のようになる。外部磁場に対して反対方向を向いている方が、NとSが向かい合うので安定している。これを下向き(ダウン)スピンという。磁場に対して同じ方向を向いていると、磁石が反発して不安定だ。この状態を上向き(アップ)スピンという。

このように、スピンの向きは外部磁場に対して平行か反平行かで決まる。もし外部磁場が(普通の意味での)横向きにかかっていたら、スピンが右を向いている時がアップ…なんてことになる。前回の記事の図2で、チップに磁場がかかっていると説明したが、これはスピンの向きに区別をつけるためのものなのだ。

f:id:quanta087:20170320131402j:plain

図5 電子スピンの向きは磁場によって区別される

 

エネルギー準位

物理学では、安定であるとはエネルギーが低いことを表す。不安定というのはエネルギーが高いことだ。つまり、磁場をかけることによって、スピンがダウンの時は電子のエネルギーが下がり、アップの時はエネルギーが上がる、と言い換えても良い。このように、磁場の中でスピンの向きによってエネルギーが変わることを「ゼーマン効果」という。また、図6はスピンの向きによる電子のエネルギーの違いを表したものだが、このような図をエネルギー準位図という。

f:id:quanta087:20170320131544j:plain

図6 エネルギー準位図

 

なんでこんな話をしたのかと言えば、エネルギー準位図というのは個別の物理系を一般化するときに便利な方法だからだ。最初に、量子コンピュータのハードウェアには液体分子や超伝導回路など、たくさんの種類があることを述べた。このような色々なハードウェアを統一的に扱いたい場合がある。だからこそ「量子ビット」という言葉があるのだが、「ビット」というのは情報科学の手法であり、実際の物理現象を扱うハードウェア技術者にとっては抽象的すぎる。そこで、様々なハードウェアを「エネルギー」に換算することで、物理学の手法で扱える範囲内でハードウェアを抽象化することができるのだ。このような事情で、物理学者は「量子ビット」のことを「二準位系」と呼ぶことがある。

 

重ね合わせとブロッホ

だいぶ記事が長くなってきたが、これで最後だ。

前述のように、スピンはアップかダウンかどちらかの向きしか向くことができず、中途半端な方向にはならない。しかし、アップとダウンの「重ね合わせ」状態になることはできる。スピンがアップなのかダウンなのか、人間が知らないだけというわけではない。重ね合わせ状態にあるとき、スピンは本質的にアップでもダウンでもない状態であり、観測を行うことでどちらかに確定する。なんとも不思議な概念だが、量子力学とはそういうものだと認めてもらうしかない。

重ね合わせは必ずしもアップ50%+ダウン50%というわけではない。例えばアップ30%+ダウン70%などという重ね合わせも可能だ。このように、重ね合わせの確率の重みのことを「ポピュレーション」という。また、重ね合わせを考えるとき、アップ+ダウンのように足し算で表すだけでなく、アップ-ダウンのように「マイナスの重ね合わせ」を考えることもできる。それどころか虚数iを使って、アップ±iダウンのように虚数の重ね合わせも存在するのだ。このような重ね合わせの符号のことを「位相」と呼ぶ。「どのような確率・位相の重ね合わせ状態なのか」が、量子ビットにおける「情報」となる。

スピン(量子ビット全般)の重ね合わせを絵に描くときには、「ブロッホ球」を使うと便利だ(図7)。

f:id:quanta087:20170320131718j:plain

図7 ブロッホ

 

球の北極がアップスピン、南極がダウンスピン、赤道が50%の重ね合わせに対応しており、ベクトルの方向でスピン(量子ビット)の状態を表現できる。ここで、ブロッホ球のベクトルが横を向いているからといって、ハードウェアとしてのスピンが横を向いているわけではないことに注意して欲しい。ブロッホ球は「重ね合わせ」を図で表現するために数学的な手法だ。

下の図8にいくつか使用例を挙げる。なんとなく雰囲気を掴んでくれれば良い。

f:id:quanta087:20170320131822j:plain

図8 ブロッホ球使用例

 

量子ビットを絵で表せ」と言われたとき、物理学的な手法で扱いたい場合はエネルギー準位図による二準位系を使い、物理現象のことは一旦忘れて数学的に厳密に扱いたい場合はブロッホ球を使う、というのが妥当な使い分けだろう。

 

今回はここまで

想定していたよりだいぶ長くなってしまった。次回の記事ではスピンの初期化と測定(データ読み出し)について説明したい。

 

その3~データの初期化と読み出し~

 

 

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

はじめに

 量子コンピュータについて、”0と1を同時に計算する”という程度には知っている人も多いだろう。しかし、具体的に量子コンピュータのチップにはどんな回路が載っていて、どのようにハードウェアが駆動するのか?という部分は殆ど知られていないのが現状だと思う。

 

量子コンピュータのハードウェアには光を用いるもの、液体分子を用いるもの、超伝導回路を用いるものなど、様々な方式がある。この記事では、現在のコンピュータに比較的近いと思われるシリコンチップへの量子ビット実装について、論文を読んでわかったことをまとめていく。

 なお、参考文献としては主に

M. Veldhorst et al., An addressable quantum dot qubit with fault-tolerant control-fidelity. Nature Nanotechnology 9, 981–985 (2014).

を用いている。

 

シリコン量子ビットチップの素子概観

以下の図1に量子ビットチップの概観を示す。シリコン基板に酸化膜が皮膜してあり、その上にアルミニウムの電極や回路が載っている。素材や基礎的な構造は案外普通のICチップなどと変わらず、通常のMOS技術によって作成されている。既に十分成熟した半導体技術や量産ラインをそのまま利用できるのがシリコンで量子ビットを実装するメリットの一つなのだ。

 

f:id:quanta087:20170317134132j:plain

図1 チップの概観

 

さらに、チップ素子を上から見た電子顕微鏡写真がこちら(写真は参考文献より転載)。

 

f:id:quanta087:20170317134406j:plain

図2 SEM写真(参考文献より転載)

 

各回路の役割

とりあえず詳しい説明は後回しにして、各回路の役割をざっと説明しよう。

 

①量子ドット構成用電極

 G1~G4およびCとラベルが貼られた電極は、量子ドットという電子を閉じ込めるための一種の「箱」をつくるために使用する。

その中でも特に、電極G4は量子ビットのデータを初期化(フォーマット)したり読み出したりするのにも用いる(詳しい説明は後述する)。

 

②量子ドット

この部分が量子ドットいう一種の箱になっており、矢印付きの青い球が、閉じ込められた電子を表している。量子ビットとしてのデータは、この電子の「スピン」によって表現される(スピンについては後述)。量子ドットというと難しそうだが、要は電子の周りの電極にマイナスの電圧をかけることにより、電子を電気的な圧力で押さえつけることで、電子を閉じ込めている状態だ。

量子力学を教科書で学んだことがある人には、例題として解いたはずの「井戸型ポテンシャル」を思い出してもらいたい。図3のように、井戸の真ん中あたりに粒子(ここでいう電子)の存在している確率が高い、というような計算をしたはずだ。

 

f:id:quanta087:20170317134838j:plain

図3 井戸型ポテンシャル

 

量子ドットのことを「一種の箱」とぼかしたが、少し専門的に言えば電極によってこのような井戸型ポテンシャルをつくっているのだ。最先端のテクノロジーを理解するうえでも、教科書レベルの例題が意外に役に立つものだ。

 

③貯蔵電極

緑の電極に書いてあるRは、Reservoirのことで、(電子の)貯蔵庫を表す。前述のように、量子ドットには電子が閉じ込められているのだが、「そもそも、その電子はどこから持ってきたんだ」と思った方もいるかもしれない。実はその電子はこの電極から配給されるのだ。また、データの初期化や読み出し時の補助回路としても働く。

 

④単電子トランジスタ(データ読み出し用回路)

この部分は、単電子トランジスタ(SET:Single Electron Transistor)という回路を構成している。詳しい動作原理は後述するが、この回路に電流が流れるかどうかを検出することで、スピンの「観測」、すなわち量子ビットのデータ読み出しを行う。

 

⑤データ書き込み / 演算用回路

量子ビットへのデータの書き込みや演算は、この回路に交流電流を流すことによって行う。

 

⑥外部磁場 

チップ全体に1.4テスラという強力な磁場が与えられている。あまりピンと来ないかもしれないが、方位磁石(コンパス)と反応する地球磁場の大きさがおよそ0.00003テスラであり、一般的に冷蔵庫にメモを貼ったりするための磁石の強さが0.005テスラ程度である。とは言っても、オーディオ・スピーカーに内蔵されている磁石がちょうど1テスラ程度であることを考えると、家電製品に内蔵される磁場として特別大きいわけではない。なぜこのような磁場が必要なのかについては後述する。

なお、ついでにここに書いておくが、チップは希釈冷凍器と呼ばれる特殊な冷凍器に入れられ、50ミリケルビンという、殆ど絶対零度の超低温状態に保たれる。量子力学的な現象は極めてデリケートであり、熱雑音がある環境では使い物にならないからだ。ちなみに希釈冷凍器の価格は億単位。磁場はともかく、冷凍器が必要である限り、量子コンピュータを家庭に1台、というわけにはいかないようだ。

 

とりあえす今回はここまで

量子コンピュータのハードウェア・チップについて、概略は大体説明できたと思う。次回の記事では、スピンの概念について説明したい。

 

その2~スピンとは何か~