Recent Schrodin's Diary on Quantum Computing and Quantum Programming
AWSのAmazon Braketでショアのアルゴリズム
これまでの記事では以下の内容を学びました:
量子フーリエ変換を具体例で理解 Qiskit 2.0で逆量子フーリエ変換 Amazon Braket SDKで逆量子フーリエ変換 Qiskit 2.0で量子位相推定 Amazon Braket SDKで量子位相推定 これらを踏まえてRSA暗号や、ビットコインのトランザクションで利用されるECDSA暗号を破ると言われている量子アルゴリズムであるショアのアルゴリズムについて学びます。
Amazon Braket学習コース この記事で登場する、量子ゲートや量子回路など、量子コンピュータの基本的な知識や、Amazon Braketの使い方についてはこちらのコースで効率的に学べます。
https://www.udemy.com/course/quantum-computing-on-aws-for-beginners-amazon-braket/?referralCode=F361C3FD774489A1B5B8 量子コンピュータやAWSの知識が無い方でも学び始められ、最終的には量子機械学習についても学べます。 こちらも利用し、量子技術のスキルを身につけましょう!
Qiskit試験対策問題集 qiskitについての資格試験をIBMが提供しています。
この資格を取得することでqiskitや量子プログラミングに関する知識を証明することが可能です。 こちらの資格取得を目指される方のため、Udemyというサイト上にて日本語版、英語版で問題集を作りました!解説もなるべくわかりやすく作成いたしましたので、是非是非ご活用ください。
英語版問題集 https://www.udemy.com/course/ibm-certified-quantum-computation-qiskit-practice-exams/?referralCode=3B3263DF800E05439AD2 日本語版問題集 https://www.udemy.com/course/ibm-certified-quantum-computation-qiskit-jp/?referralCode=7D18ADD30A495E12120B ショアのアルゴリズム 量子コンピューターで十分な数の量子ビットが扱えるようになった場合、ショアのアルゴリズムでRSA暗号や、ECDSA暗号が破られる危険性があると言われています。 例えばRSA暗号は大きな数の素因数分解が困難であることを利用した暗号方式ですが、今回はショアのアルゴリズムで素因数分解を行う例についてみていきましょう。 このアルゴリズムを用いて整数$N$の素因数分解を行う際の流れは以下の通りです。 $1 < a < N$ かつ$ N$との最大公約数が $1$ となる$a$を選ぶ $\downarrow$ $a^x\bmod\ N$ という関数の周期 $r$を見つける $\downarrow$ $a^{\frac{r}{2}} \pm 1$の最大公約数からNの素因数を求める ここで"$a^x\bmod\ N$ という関数の周期 $r$を見つける"と記載されていますが、具体例を見ていきましょう。
例として$N=39$を素因数分解する際に、$a=5$を選んだ場合について考えます。$a^x\bmod\ N\ =\ 5^x\bmod\ 39$のグラフは$x$を横軸とすると次の通りとなります。
y軸の値を書き出すと以下の通りで、4回の変化を通じて元の値に戻る周期関数であることがわかります。
$$ 1 \rightarrow 5 \rightarrow 25 \rightarrow 8 \rightarrow 1 \rightarrow 5 \rightarrow 25 \rightarrow 8 \tag{1} $$
read more
Qiskit 2.0で量子位相推定(Quantum Phase Estimation)
これまでの記事では以下の内容を学びました:
量子フーリエ変換を具体例で理解 Qiskit 2.0で逆量子フーリエ変換 Amazon Braket SDKで逆量子フーリエ変換 Amazon Braketで量子位相推定 今回はQiskit 2.0を用いて、量子位相推定を実行します。
Amazon Braket学習コース この記事で登場する、量子ゲートや量子回路など、量子コンピュータの基本的な知識や、Amazon Braketの使い方についてはこちらのコースで効率的に学べます。
https://www.udemy.com/course/quantum-computing-on-aws-for-beginners-amazon-braket/?referralCode=F361C3FD774489A1B5B8 量子コンピュータやAWSの知識が無い方でも学び始められ、最終的には量子機械学習についても学べます。 こちらも利用し、量子技術のスキルを身につけましょう!
Qiskit試験対策問題集 qiskitについての資格試験をIBMが提供しています。
この資格を取得することでqiskitや量子プログラミングに関する知識を証明することが可能です。 こちらの資格取得を目指される方のため、Udemyというサイト上にて日本語版、英語版で問題集を作りました!解説もなるべくわかりやすく作成いたしましたので、是非是非ご活用ください。
英語版問題集 https://www.udemy.com/course/ibm-certified-quantum-computation-qiskit-practice-exams/?referralCode=3B3263DF800E05439AD2 日本語版問題集 https://www.udemy.com/course/ibm-certified-quantum-computation-qiskit-jp/?referralCode=7D18ADD30A495E12120B Qiskit 2.0で量子位相推定 今回は対象のユニタリ行列を$S$ゲート、固有状態を$\ket{1}$として実装してみましょう。 つまり量子位相推定により$\ket{1}$に対する$S$ゲートの固有値を求めます。暗算でもこの固有値の結果は算出できるかもしれませんが、あえて分からないふりをして進めていきましょう。 まずは必要となる関数をimportします。
from qiskit import QuantumCircuit from qiskit.primitives import StatevectorSampler from qiskit.circuit.library import QFT from qiskit.circuit.library import SGate samplerを定義します。
sampler = StatevectorSampler() 量子回路を定義します。今回読み出しレジスタの量子ビット数は3とします。
n_qubits = 4 n_readout_qubits = n_qubits - 1 qc = QuantumCircuit(n_qubits, n_readout_qubits) 読み出しレジスタの量子ビットにはHゲートを書けるのでした。
for qubit in list(range(n_readout_qubits)): qc.h(qubit) また、末尾のビットとなる4量子ビット目は固有状態$\ket{1}$に変換しておきます。
read more
AWSのAmazon Braketで量子位相推定(Quantum Phase Estimation)
これまでの記事では以下の内容を学びました:
量子フーリエ変換を具体例で理解 Qiskit 2.0で逆量子フーリエ変換 Amazon Braket SDKで逆量子フーリエ変換 今回はそれらを踏まえて、量子位相推定について解説します。
Amazon Braket学習コース この記事で登場する、量子ゲートや量子回路など、量子コンピュータの基本的な知識や、Amazon Braketの使い方についてはこちらのコースで効率的に学べます。
https://www.udemy.com/course/quantum-computing-on-aws-for-beginners-amazon-braket/?referralCode=F361C3FD774489A1B5B8 量子コンピュータやAWSの知識が無い方でも学び始められ、最終的には量子機械学習についても学べます。 こちらも利用し、量子技術のスキルを身につけましょう!
Qiskit試験対策問題集 qiskitについての資格試験をIBMが提供しています。
この資格を取得することでqiskitや量子プログラミングに関する知識を証明することが可能です。 こちらの資格取得を目指される方のため、Udemyというサイト上にて日本語版、英語版で問題集を作りました!解説もなるべくわかりやすく作成いたしましたので、是非是非ご活用ください。
英語版問題集 https://www.udemy.com/course/ibm-certified-quantum-computation-qiskit-practice-exams/?referralCode=3B3263DF800E05439AD2 日本語版問題集 https://www.udemy.com/course/ibm-certified-quantum-computation-qiskit-jp/?referralCode=7D18ADD30A495E12120B Amazon Braket SDKで量子位相推定 これまでの記事で、逆量子フーリエ変換により、位相を含めた量子状態を判別できることを学びました。 この性質をうまく利用して量子アルゴリズムを設計できないでしょうか? 実は量子位相推定アルゴリズムではこの性質が活用されています。 このアルゴリズムはユニタリ演算子$ U $とその固有状態$|\psi\rangle$が与えられているとき、 $\phi$を$\phi \approx 0.\phi_1\phi_2\ldots\phi_n = \sum_{k=1}^{n} \frac{\phi_k}{2^k}$の形で推定します。ただしnは読み出しレジスタの量子ビット数です。 $$ U |\psi\rangle = e^{2\pi i \phi} |\psi\rangle \quad (\phi \in [0, 1)) $$ このアルゴリズムの流れは以下の通りです。 $\phi$の情報を持った量子フーリエ変換後の状態をうまく作り出す $\downarrow$ 出来上がった状態を逆量子フーリエ変換することで$\phi$の情報を取り出す 理論の流れを見ていきましょう。まずは$\phi$の情報を持った量子フーリエ変換後の状態をうまく作り出すことを考えていきます。 ある$n+1$量子ビットの初期状態はいつもの通り以下となります。 $$ |0\rangle^{\otimes n+1} $$ 固有状態を作らないと$\phi$の値も登場できないので末尾のビットを$U$の固有状態$|\psi\rangle$に変換しましょう。 $$ |0\rangle^{\otimes n} \otimes |\psi\rangle $$ 今回の目的は$\phi$の情報を持った量子フーリエ変換後の状態を作り出すことにあります。 量子フーリエ変換$\mathcal{F}$の定義を思い出すと。 $$ \mathcal{F} \ket{j} = \frac{1}{\sqrt{2^n}} \sum_{k=0}^{2^n-1} e^{2\pi i jk / 2^n} \ket{k} $$ $|0\rangle^{\otimes n}$のビット列は今回読み出しレジスタと呼びますが、こちらにHゲートを適用すれば以下の通り少し量子フーリエ変換後の形に近づきます。 $$ \left( H^{\otimes n} |0\rangle^{\otimes n} \right) \otimes |\psi\rangle = \frac{1}{\sqrt{2^n}} \sum_{k=0}^{2^n - 1} |k\rangle \otimes |\psi\rangle $$ 量子フーリエ変換の式と現在の状態を見比べると、量子フーリエ変換の式では$|k\rangle$に、$k$に依存した位相因子がかけられていることがわかります。これは$|k\rangle$を制御ビットとした制御$U$ゲート$\mathrm{C}\text{-}U$を適用することで得られます。 $$ \begin{align} \mathrm{C}\text{-}U \left( \frac{1}{\sqrt{2^n}} \sum_{k=0}^{2^n - 1} |k\rangle \otimes |\psi\rangle \right) &= \frac{1}{\sqrt{2^n}} \sum_{k=0}^{2^n - 1} |k\rangle \otimes U^k |\psi\rangle \\ &= \frac{1}{\sqrt{2^n}} \sum_{k=0}^{2^n - 1} e^{2\pi i \phi k} |k\rangle \otimes |\psi\rangle \end{align} \tag{1} $$ かなり量子フーリエ変換の式に近づきました!ここで逆量子フーリエ変換$\mathcal{F}^{-1}$の定義についても思い出してみましょう。 $$ \mathcal{F}^{-1} \left( \frac{1}{\sqrt{2^n}} \sum_{k=0}^{2^n-1} e^{2\pi i jk / 2^n} \ket{k} \right) = \ket{j} $$ 逆量子フーリエ変換を適用することでかなりシンプルになりますね。同様に今回導いた式の読み出しレジスタの部分を逆量子フーリエ変換すればシンプルな形となるはずです。式で表すと以下の通りとなります。 $$ \left( \mathcal{F}^{-1} \left( \frac{1}{\sqrt{2^n}} \sum_{k=0}^{2^n - 1} e^{2\pi i \phi k} |k\rangle \right) \right) \otimes |\psi\rangle = |2^n\phi\rangle \otimes |\psi\rangle $$ ここまで変形した後に、読み出しレジスタを観測すれば$|2^n\phi\rangle$の形で$\phi$が観測できるはずです! ただし、量子位相推定では$\phi$が2進数でちょうど$n$量子ビットで表せない場合は、近似値に重なった状態になることに注意が必要です。
read more