はじめに
こんにちは、ユーゴです。今回は、量子コンピュータについてお話ししたいと思います。この節は余談的なのでスキップ可です。
最近は量子コンピュータの勉強をしており、直近ではQuantum Computation using Qiskit v0.2Xを取得しました。認定バッジも載せておきます。
さらに見識を深めるため、最近ではQuantum Native Dojoというページで学習を進めています。今回紹介するのは、こちらのページを進めていたときに、「アダマールテスト」という直感に反する現象を確認したので、紹介します。
本題
量子コンピュータの分野で、「アダマールテスト」というものがあります。回路は以下のように組みます。
$|\psi\rangle$は任意の状態ベクトルですが、今回は$|0\rangle$としておきます。
ここで直感的に、最終的な状態ベクトルはどのようになると思いますか?
僕は以下のようになると思いました。
|0\rangle\otimes|+\rangle
1量子目は$|0\rangle$にアダマールゲートを2回適用しているので、$HH|0\rangle=|0\rangle$
絶対に$|0\rangle$で測定されるから、アダマールテストって何の意味があるんだ?という謎がありました。
結論
1量子目が2量子目に干渉することによって、確率に変化が起きます。あくまで制御ユニタリゲートが直接1量子目に影響したのではなく、2量子目に干渉したことによる間接的な結果です。
これが量子の不思議な性質で、直感に反する原因だと考えています。
計算
具体的な計算で確認しましょう。
以下のような、制御アダマールゲートを使用したアダマールテストを考えます。
また、初期状態は以下とします。
q[0] = |0\rangle
q[1] = |0\rangle
ここで、回路を層に分けて計算します。
並列回路におけるゲートの合成は、テンソル積で計算できます。
U_1 = H \otimes I = \frac{1}{\sqrt2}\left(\begin{matrix} 1&0&1&0 \\ 0&1&0&1 \\ 1&0&-1&0 \\ 0&1&0&-1 \end{matrix}\right)
U_2 = CH_{(0,1)} = \left(\begin{matrix} 1&0&0&0 \\ 0&1&0&0 \\ 0&0& \frac{1}{\sqrt{2}} &\frac{1}{\sqrt{2}} \\ 0&0&\frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}} \end{matrix}\right)
U_3 = H \otimes I = \frac{1}{\sqrt2}\left(\begin{matrix} 1&0&1&0 \\ 0&1&0&1 \\ 1&0&-1&0 \\ 0&1&0&-1 \end{matrix}\right)
ここで、合成されたゲートを適用していきます。
U_3U_2U_1|00\rangle = U_3U_2\frac{1}{\sqrt2}\left(\begin{matrix} 1&0&1&0 \\ 0&1&0&1 \\ 1&0&-1&0 \\ 0&1&0&-1 \end{matrix}\right) \left(\begin{matrix} 1\\0\\0\\0 \end{matrix}\right)
=U_3U_2\frac{1}{\sqrt2}\left(\begin{matrix} 1\\0\\1\\0 \end{matrix}\right)
=U_3\left(\begin{matrix} 1&0&0&0 \\ 0&1&0&0 \\ 0&0& \frac{1}{\sqrt{2}} &\frac{1}{\sqrt{2}} \\ 0&0&\frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}} \end{matrix}\right)\frac{1}{\sqrt2}\left(\begin{matrix} 1\\0\\1\\0 \end{matrix}\right)
= U_3\frac{1}{\sqrt2}\left(\begin{matrix} 1\\0\\\frac{1}{\sqrt2}\\\frac{1}{\sqrt2} \end{matrix}\right)
= \frac{1}{\sqrt2}\left(\begin{matrix} 1&0&1&0 \\ 0&1&0&1 \\ 1&0&-1&0 \\ 0&1&0&-1 \end{matrix}\right) \frac{1}{\sqrt2}\left(\begin{matrix} 1\\0\\\frac{1}{\sqrt2}\\\frac{1}{\sqrt2} \end{matrix}\right)
= \frac{1}{2} \left(\begin{matrix} \frac{\sqrt2+1}{\sqrt2}\\ \frac{1}{\sqrt2}\\ \frac{\sqrt2-1}{\sqrt2}\\ -\frac{1}{\sqrt2}\\ \end{matrix}\right)
= \left(\frac{\sqrt2+1}{2\sqrt2}|00\rangle + \frac{1}{2\sqrt2}|01\rangle + \frac{\sqrt2-1}{2\sqrt2}|10\rangle - \frac{1}{2\sqrt2}|11\rangle\right)
1量子目の測定結果が0となる確率$p_0$は、
p_0 = \left| \frac{\sqrt2+1}{2\sqrt2} \right|^2 + \left| \frac{1}{2\sqrt2} \right|^2 = \frac{4+2\sqrt2}{8}
2量子目の測定結果が0となる確率$p_1$は、
p_1 = \left| \frac{\sqrt2-1}{2\sqrt2} \right|^2 + \left| \frac{1}{2\sqrt2} \right|^2 = \frac{4-2\sqrt2}{8}
つまり、初期状態が$q[0]=|0\rangle$、$q[1]=|0\rangle$のアダマールテストにおいて、制御アダマールゲートを使用した時、1量子目の測定は
p_0 = \frac{4+2\sqrt2}{8} \approx 0.85
p_1 = \frac{4-2\sqrt2}{8} \approx 0.15
となり、$|1\rangle$も出現することがわかりました。
(人力なので、計算にミスがあれば教えてください)
コードで確認する
GitHubにqiskitでアダマールテストを実行するコードを公開しました!
ぜひお試しください!
HadamardTest:シミュレータ版
QiskitRemoteJobTemplate:実機版
シミュレータ版は大体83%〜87%で理想的です。
実機版は1回しか試していませんが、82.7%とこちらも大方正しいです。(無料クレジット節約のため)
余談
アダマールテストも分からずよくQuantum Computation using Qiskit v0.2Xに受かったな...と思っています。ちなみにこちらの資格はqiskitというIBMが出している量子コンピューティング用のPythonライブラリについての技能を証明するものです。もちろん、前提として量子ビットの状態を計算できる必要があるので、事実としてこの資格を取ることで「qiskitを使ったプログラミング技能」と「量子状態の計算技能」の2つを証明できます。量子コンピュータ分野で働くことにご興味がある方は、ぜひ挑戦してみてください。
注意点
1. 英語のテストのみ
英語が苦手だと、初見の質問パターンに対応できないことがあるかもしれません。(自分も1,2問英語が分からないという理由でスキップしました)。一応「Assessment」というテストが受けられるので、そちらで質問パターンを把握しておくと、かなり効果的です。
2. qiskit v0.2.xの環境構築が大変
pipからだと0.2.xは古すぎて持ってこれません。現在は1.1.0が最新版であり、かなりコードも違います。僕は諦めてリファレンスを読み漁りました。
3. お値段が高い
2万円します。キャンセル料は2,000円です。僕はテストのホストが鯖落ちしていたせいでテストを受けられず、1度キャンセル扱いとなり2,000円失いました🫠 補填もありません。
読者様が試験を受けるときは、鯖が落ちていないことを祈ります。
勉強したい人ウェルカム!
勉強方法、勉強時間など詳しく知りたい方は、ぜひ@Yugo_dvlpまでご連絡ください!
まとめ
いかがだったでしょうか。今回は、量子コンピューティングのアダマールテストについて解説しました。
このように、コンピュータ系の基礎的な話から、Unity, GAS, AWSなど実践的なプログラミングやツールなどについても紹介していきます。
お役に立てましたら、いいね,フォロー等よろしくお願いします!