不確定な世界

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

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

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