Qiskitのオンラインコースで量子プログラミングを勉強した
はじめに
こんにちは。株式会社SHIFT インフラ・アーキテクトの岡田です。
最近何かと話題の多い量子コンピューターですが、皆さんは何で勉強していますか?「Nielsen & Chuang[1]を読む」というのが模範解答ですが、あの本は線形代数と量子力学がわかっていて、テンソル解析もある程度知らないと読み進められない(ように見える)ので、はっきりいって敷居が高い!というのが実感です。
何か適当な教科書はないかな、と探していたところ、Qiskitのオンラインコース[2]を見つけました。これがよく出来ているので、ここで紹介させていただくとともに、私がわかりにくかった点を補足説明したいと思います。
Qiskitのオンラインコースとは
Qiskit[3]は量子コンピューターのプログラミング用に、IBMから提供されているPythonパッケージです。SDK本体とともにチュートリアルやAPIリファレンスなど、充実したドキュメントが提供されています。その一つが今回紹介するオンラインコースです。
2024年7月現在、6種類のオンラインコースが提供されていますが、そのうち以下の3コースからなるのが"Understanding Quantum Information and Computation"[4]シリーズです。
Unit 1: Basics of Quantum Information
Unit 2: Fundamentals of Quantum Algorithms
Unit 3: General Formulation of Quantum Information
Unit 1の冒頭に、このシリーズの目的は「量子情報と量子計算について数学的に詳細なレベルで説明する」ことだと書かれています。前提知識としては高校数学で習う程度のベクトル、行列、確率の知識があればよく、量子力学についてはコースの中で丁寧に説明されているので事前知識は不要です。また、コンテンツはテキストとビデオですが、ビデオはテキストの要約なので見なくても大丈夫です。
今回はUnit 1について紹介します。
Unit 1: Basics of Quantum Information
量子コンピューターが難しい理由の一つは、量子力学とテンソル解析をほぼ同時に理解しなければならない点ではないかと個人的に感じています。量子力学の入門書では、まず1粒子系を扱うのでテンソルははじめの方では出てきませんが、量子コンピューターは本質的に多粒子系の量子論を扱うので最初からテンソルが必須となります。
Unit 1ではこの学習上の困難さを、2つの工夫によって軽減することを図っているように見えます。一つ目の工夫はUnit 1の章立てに表れています。
Single systems(1粒子系)
Multiple systems(多粒子系)
Quantum circuits
Entanglement in action
Exam
1章で1粒子系を使用して量子コンピューターの概念に慣れた後で、2章の多粒子系に進むため、学習の障壁が下がったことを感じました。
2つ目の工夫は、1章・2章ともに最初に古典論の範囲でベクトル・行列・確率を論じた後で、量子論での対応物の説明に移るというスタイルをとっていることです。このため、古典論と量子論で何が同じ(アナロジーで語ることができる)で、何が本質的に異なるかがよくわかります。そして数学的な記述法に関しては、一般に考えられている以上に古典論と量子論には共通部分があるのだというのが著者の考えです。例えばDirac記法やテンソルは古典論から導入されます。測定という通常は量子論に結び付けられやすい概念すら、古典論で登場します。
こうした工夫で、数学的な厳密性を保ちつつ、量子コンピューターを理解しやすいものにしています。また、1章と2章の最後には、それぞれの章で導入された概念をQiskitで実装したサンプルコードも説明付きで提供されています。
3章では量子回路が導入され、内積、正規直交系、射影(projection)といった重要な概念が説明されます。
4章では、量子コンピューターの本質であるエンタングルメントを利用した計算の3つの例(quantum teleportation、superdense coding、CHSH game)についてアルゴリズムが丁寧に説明され、しかもQiskitによる実装付きと至れり尽くせりです。
最後が18問からなる選択式の試験問題で、全問正解するとこのようなバッジがもらえます。
Qiskitの実行環境
Pythonのサンプルコードは、オンラインコースのJupyter Notebookで実行できますが、環境の初期化に時間がかかる、編集した内容が保存されない、時々エラーが発生する、といった問題があったので、私はローカルのVisual Studio CodeにJupyter Notebookの拡張機能をインストールして実行していました。こちらのほうが快適だと思います。
戸惑ったところ
上に述べたように、懇切丁寧な説明と豊富な実例で全体としてはとても分かりやすい内容になっていますが、私の理解不足もあり、いくつか戸惑ったところがありました。疑問を解消するために、私が調べた内容を以下に記します。同じような疑問を感じた方の参考になったら幸いです。
1. Bloch球の説明があったほうがよい
Unit 1ではおそらく読者に情報を与えすぎて混乱させないという配慮から、Bloch球は出てきません("Unit 3: General Formulation of Quantum Information"で説明されます)。そのため、1章で導入されるPauli行列
が、何故それぞれ𝑋,𝑌,𝑍と呼ばれるのか、その理由が示されません。ここは「Bloch球における回転軸に対応している」という説明があったほうがわかりやすいと思いました。
まずBloch球について簡単に説明します。任意のqubitは
と書けます。2番目の等号では$${|\alpha|^2 + |\beta|^2 = 1}$$を使用しています。(1)の $${e^{i\gamma}}$$ はglobal phaseなので無視でき(何故無視できるかについては3章に説明があります)、また、𝛿−𝛾を 𝜑で置き換えると
となります。これより、qubitは単位長さの半径を持つ球面上の点で表せることがわかります。この球面をBloch球と呼びます。𝜃はZ軸からの角度(0から𝜋の範囲)、𝜑はX軸からの角度(0から2𝜋の範囲)です。
例として、qubit 0~3を以下のように定義した場合、
Bloch球は下図のようになります。これより、Pauli行列$${X,Y,Z}$$はqubitをBloch球上でそれぞれX、Y、Z軸の周りに角度𝜋だけ回転させることが見て取れます。なお、下でも述べますが、認定試験ではBloch球の理解が必要となります。
参考に、これらのBloch球を出力するプログラムを載せておきます。
bloch.ipynb
from qiskit import QuantumRegister
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_bloch_multivector
import math
qrphi = QuantumRegister(1, 'phi')
qrx = QuantumRegister(1, 'x')
qry = QuantumRegister(1, 'y')
qrz = QuantumRegister(1, 'z')
qc = QuantumCircuit(qrphi, qrx, qry, qrz)
qc.rx(-math.pi/4, [0,1,2,3])
qc.x(1)
qc.y(2)
qc.z(3)
state = Statevector(qc)
plot_bloch_multivector(state)
2. 射影測定の測定値の意味がよくわからない
3章のQuantum circuitsでは2 qubitシステム (X, Y) の射影測定(projective measurement)の例として、{$${\Pi_0, \Pi_1}$$}があげられています。ここで
です。$${\ket{\phi^+},\ket{\phi^-}, \ket{\psi^+}, \ket{\psi^-}}$$は2章で導入されるBell statesです。$${\Pi}$$の添え字は測定値を表しますが、何故0や1が測定されるのか、説明がありません。そこで「Nielsen & Chuang」にあたってみると、射影測定とは以下のスペクトル分解を持つエルミート演算子𝑀(Observableとも呼びます)のことだと書いてありました。
ここで𝑚は𝑀の固有値、𝑃𝑚は固有値𝑚を持つ𝑀の固有空間への射影子です。この固有値𝑚が測定値となります。「なぜそんなことが言えるのか?」というのは当然の疑問ですが、量子論ではそれは公理(Postulate)です。このように定式化すると、実験結果をうまく説明できるという実証科学の立場ですね。この公理を飲み込むと、$${\Pi}$$の添え字は識別子であってその値(0や1)には特に意味はないということになりそうです(𝑀の定義次第ということになります)。例えば添え字は2と4であってもよく、その場合は
となりますが、この時も以下が成り立つはずです。
行列𝑀は固有値2と4を持つ。
固有値2と4に対応する固有空間への射影子は$${\Pi_2 (= \Pi_0)}$$と$${\Pi_4 (=\Pi_1)}$$である。
そうなる気はしますが、念のため確認してみました。これからは線形代数の話となります。式の導出は線形代数の教科書[5]を参考にしました。 まず、行列𝑀の固有値は特性方程式
の解なので、計算すると
となり、確かに固有値は2と4です。
次に固有値2に対する固有ベクトルを
とすると
を解いて、
が得られます。これより正規直交基底として、例えば
を選択できます。同様に固有値4に対する固有ベクトルとして
を選択します。固有値2に対応する固有空間への射影子𝑃2が満たすべき条件は
すなわち
と書くことができるので、
となります。また、固有値4に対応する固有空間への射影子𝑃4は
となり、2点ともに確認することができました。
認定試験を受けてみた
このオンラインコースを学習すると、IBMの量子コンピューターの認定試験(IBM Certified Associate Developer - Quantum Computation using Qiskit v0.2X[6])に合格できるのかは気になるところです。そこで受験してみました。結果は合格でしたが、オンラインコースではカバーされない問題も出題されるので、次の点も学習しておくとよいと思います。
Bloch球
バックエンド・シミュレーター(qasm_simulator、statevector_simulator、unitary_simulator)
回転用ゲート(𝑅𝑋(𝜃)、𝑅𝑌(𝜃)、𝑅𝑍(𝜆))
まとめ
Qiskitのオンラインコースの中の"Understanding Quantum Information and Computation"シリーズのUnit 1を紹介しました。量子プログラミングの勉強を始めるにあたって、理論と実装を両方学べ、量的にもほどよいコースだと思います。また、認定試験に向けた準備としても役立ちます。
次回はUnit 2を紹介したいと思います。
参考文献
Nielsen, M.A., & Chuang, I.L. Quantum computation and quantum information. Cambridge University Press, 2010.
IBM, "Catalog", IBM Quantum Learning, https://learning.quantum.ibm.com/catalog/courses , (参照 2024-07-01).
IBM, "Qiskit", IBM Quantum, https://www.ibm.com/quantum/qiskit , (参照 2024-07-01).
Watrous, J., "Understanding Quantum Information and Computation", IBM Quantum Learning, https://learning.quantum.ibm.com/course/basics-of-quantum-information , (参照 2024-07-01).
齋藤正彦. 基礎数学1 線形代数入門. 東京大学出版会, 1966.
IBM, "IBM Certified Associate Developer - Quantum Computation using Qiskit v0.2X", IBM Training, https://www.ibm.com/training/certification/ibm-certified-associate-developer-quantum-computation-using-qiskit-v02x-C0010300 , (参照 2024-07-01).
お問合せはお気軽に
SHIFTについて(コーポレートサイト)
SHIFTのサービスについて(サービスサイト)
SHIFTの導入事例
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのEmmanuel Edward