{ "cells": [ { "cell_type": "markdown", "id": "68ae1318", "metadata": {}, "source": [ "# Block-Encodingについて" ] }, { "cell_type": "markdown", "id": "52b98770", "metadata": {}, "source": [ "## 概要" ] }, { "cell_type": "markdown", "id": "543542af", "metadata": {}, "source": [ "量子コンピュータは現在稼働中の古典コンピュータとは異なる基本単位の量子ビット\n", "によって構成されており、量子ビットの性質を持ちいることで今までの\n", "古典コンピュータでは不可能であった計算や情報処理が可能になることが期待されている。\\\n", "ただ量子コンピュータには実行上種々の制約が存在し、量子回路上で用いることのできる\n", "行列がユニタリ行列に限られるのも制約の一つである。\n", "この制約により非ユニタリ行列の期待値計算や\n", "量子コンピュータ上での量子状態への作用は困難であり、解決すべき課題である。\\\n", "この問題に対する解決策の一つが本モジュールで扱う\n", "\"Block-Encoding\"(以後BE)法[1]である。\n", "BE法は非ユニタリ行列がPauli行列積の線型結合で表現できる場合、\n", "構成するPauli行列積を制御ビットを介して作用させることで量子状態に\n", "作用させることができる。\n", "これにより量子回路上でも非ユニタリ行列を量子状態に作用させることができる。" ] }, { "cell_type": "markdown", "id": "8dc17f64", "metadata": {}, "source": [ "このページではBE法についての理論的背景及び抱えている問題点について解説する。\\\n", "本モジュール`PItBE`を用いてBE法を実行する際の手順については[デモプレイ](../jpn/demo_use.ipynb)を参照すること。" ] }, { "cell_type": "markdown", "id": "96326882", "metadata": {}, "source": [ "## 理論的背景" ] }, { "cell_type": "markdown", "id": "449f1b1d", "metadata": {}, "source": [ "### 理論的背景の説明に向けての準備\n", "\n", "理論的背景を説明する前に説明時に用いる行列や量子状態について紹介する。扱いたい$2^n$次正方行列の非ユニタリ行列を$\\hat{A}$とし、$\\hat{A}$は係数$\\alpha_i$とユニタリ行列積$\\hat{P}_i$を用いて\n", "$$\n", "\\hat{A} = \\sum_i^m\\alpha_i\\hat{P}_i\n", "$$\n", "と表現できるとする。\\\n", "($m$は自然数、なお今回は後述する説明のために$m=2^k, k=1,2,3,\\dots$とする。また$\\alpha_i$は複素数、こちらも後述する説明のために規格化されている($\\sum_i^m|\\alpha_i|^2=1$)とする。)\\\n", "そして非ユニタリ行列を作用させたい量子状態を\n", "$$|\\psi\\rangle$$\n", "とする。\n", "\n", "またBE法における量子状態は作用させたい量子状態を格納したメイン量子ビットに加えて、メイン量子ビットに作用させる量子ゲート$\\hat{P}_i$を制御するための補助量子ビットで構成されている。クロネッカー積で量子状態を表現すると次の式のようになる。\n", "$$\n", "|0\\dots{}0\\rangle_{\\text{anci}}\\otimes|\\psi\\rangle_{\\text{main}}\n", "$$\n", "補助量子ビットの個数は$\\log_2(m)$であり、今回の場合は$k$個である。\\\n", "加えて量子回路中に現れる量子ゲートは非ユニタリ行列を構成するユニタリ行列を量子状態に作用させる制御量子ゲート$\\hat{P}_i$のほかに、補助ビット部分のみに作用する量子ゲート$\\hat{B}$及び$\\hat{C}$が存在する。\\\n", "$\\hat{B}$及び$\\hat{C}$は$2^k$次正方ユニタリ行列であり、それぞれの要素は複素数であり、\n", "$$\n", "\\begin{aligned}\n", " \\hat{B}: \\beta_{s,t}\\\\\n", " \\hat{C}: \\gamma_{s,t}\n", "\\end{aligned}\n", "$$\n", "とする。" ] }, { "cell_type": "markdown", "id": "90e0e257", "metadata": {}, "source": [ "### 量子ゲート$\\hat{B}$の補助量子ビットへの作用\n", "ここからは量子回路の実行に伴って変化する量子状態を追いながら理論的背景を説明する。\\\n", "まずBE法を実行する量子回路を紹介する。\n", "![BE Circuit](../../picture/be_circ.png)\n", "最初は補助量子ビット部分に量子ゲート$\\hat{B}$を作用させる。この操作により補助量子ビットのとる量子状態は次のような重ね合わせ状態となる。\n", "$$\n", "|0\\dots{}0\\rangle_{\\text{anci}}\\otimes|\\psi\\rangle_{\\text{main}}\n", "\\to\n", "\\left(\\sum_i^m{\\beta_{i,0}}|i\\rangle_{\\text{anci}}\\right)\\otimes|\\psi\\rangle_{\\text{main}}\n", "$$\n", "ここで$|i\\rangle$は$k$桁の二進数表記における整数$i$を表している。\\\n", "(例:$k=5$における$i=8$の場合$|i\\rangle = |00100\\rangle$)" ] }, { "cell_type": "markdown", "id": "a73dd84d", "metadata": {}, "source": [ "### 制御ゲート$\\hat{P}_i$のメイン量子ビットへの作用\n", "\n", "次に補助量子ビットの値を制御ビットとする制御量子ゲート$\\hat{P}_i$をメイン量子ビットに作用させていく。作用させる制御量子ゲートと補助量子ビットの値の対応関係は、補助量子ビットの値が$|i\\rangle$の場合、$i$番目の量子ゲートを作用させるというものになっている。\n", "$$\n", "\\left(\\sum_i^m\\beta_{i,0}|i\\rangle_{\\text{anci}}\\right)\\otimes|\\psi\\rangle_{\\text{main}}\n", "\\to\n", "\\sum_i^m\\beta_{i,0}|i\\rangle_{\\text{anci}}\\otimes\\hat{P}_i|\\psi\\rangle_{\\text{main}}\n", "$$\n", "この操作により異なる量子ゲートを$|\\psi\\rangle$に作用させた状態が補助量子ビットの値によって区別された重ね合わせ状態として保存することができる。" ] }, { "cell_type": "markdown", "id": "c4347733", "metadata": {}, "source": [ "### 補助量子ビットへの量子ゲート$\\hat{C}$の作用及び量子回路実行結果の測定\n", "\n", "制御量子ゲートの作用が完了後、補助量子ビット部分に作用させた量子ゲート$\\hat{C}$を作用させる。作用後の量子状態は次のように変化する。\n", "$$\n", "\\sum_i^m\\beta_{i,0}|i\\rangle_{\\text{anci}}\\otimes\\hat{P}_i|\\psi\\rangle_{\\text{main}}\n", "\\to\n", "\\sum_{i,j}^m\\gamma_{j,i}\\beta_{i,0}|j\\rangle_{\\text{anci}}\\otimes\\hat{P}_i|\\psi\\rangle_{\\text{main}}\n", "$$\n", "このときダミーインデックス$j$のいずれかに対して次式\n", "$$\n", "\\gamma_{j,i}\\beta_{i,0} = t\\alpha_i\\quad(t>0)\n", "$$\n", "が成立するように$\\gamma_{j,i}$及び$\\beta_{i,0}$の値を決定すると、補助量子ビットが$|j\\rangle$となる量子状態を射影測定することで$\\hat{A}|\\psi\\rangle$についての情報を得ることができる。\n", "$$\n", "\\begin{aligned}\n", " &\\quad\\sum_{i}^m\\gamma_{j,i}\\beta_{i,0}|j\\rangle_{\\text{anci}}\\otimes\\hat{P}_i|\\psi\\rangle_{\\text{main}}\\\\\n", " &=\\sum_{i}^mt\\alpha_i|j\\rangle_{\\text{anci}}\\otimes\\hat{P}_i|\\psi\\rangle_{\\text{main}}\\\\\n", " &=|j\\rangle_{\\text{anci}}\\otimes\\left(\\sum_{i}^mt\\alpha_i\\hat{P}_i|\\psi\\rangle_{\\text{main}}\\right)\\\\\n", " &=|j\\rangle_{\\text{anci}}\\otimes{}t\\hat{A}|\\psi\\rangle_{\\text{main}}\\\\\n", "\\end{aligned}\n", "$$\n", "なお実際には$j=0$とすることを推奨する。これは量子ゲート$\\hat{B}$及び$\\hat{C}$については行列成分が前述した条件を満たしていれば良いが、\n", "$$\n", "\\beta_{i,0} = \\sqrt{t\\alpha_i}\n", "$$\n", "とすることにより\n", "$$\n", "\\gamma_{0,i} = \\sqrt{t\\alpha_i}\n", "$$\n", "となり、\n", "$$\n", "\\hat{C} = \\hat{B}^T\n", "$$\n", "とすることができるためである。" ] }, { "cell_type": "markdown", "id": "0a5c01b1", "metadata": {}, "source": [ "射影測定時にBE法の実行結果を測定する確率$p_j$は次のように計算される。\n", "$$\n", "\\begin{aligned}\n", " p_j \n", " &= ||j\\rangle_{\\text{anci}}\\otimes{}t\\hat{A}|\\psi\\rangle_{\\text{main}}|^2\\\\\n", " &= \\langle{}j|j\\rangle_{\\text{anci}}\\times{}t^2\\langle{}\\psi|\\hat{A}^{\\dagger}\\hat{A}|\\psi\\rangle_{\\text{main}}\\\\\n", " &= t^2\\langle{}\\psi|\\hat{A}^{\\dagger}\\hat{A}|\\psi\\rangle_{\\text{main}}\\\\\n", "\\end{aligned}\n", "$$\n", "ここで$\\hat{A}$の固有ベクトル$|\\phi_i\\rangle$及び定数$\\epsilon_i$により量子状態$|\\psi\\rangle$が\n", "$$\n", "|\\psi\\rangle=\\sum_l\\epsilon_l|\\phi_l\\rangle\n", "$$\n", "と書けるとすると$\\hat{A}$の固有値$\\lambda_i$を用いて\n", "$$\n", "\\begin{aligned}\n", " p_j \n", " &= t^2\\langle{}\\psi|\\hat{A}^{\\dagger}\\hat{A}|\\psi\\rangle_{\\text{main}}\\\\\n", " &= t^2\\sum_i|\\epsilon_i\\lambda_i|\\phi_i\\rangle|^2\\\\\n", " &= t^2\\sum_i|\\epsilon_i\\lambda_i|^2\n", "\\end{aligned}\n", "$$\n", "となる。" ] }, { "cell_type": "markdown", "id": "e7a141b7", "metadata": {}, "source": [ "## 問題点" ] }, { "cell_type": "markdown", "id": "c74537d2", "metadata": {}, "source": [ "### 必要量子ビット数の増大\n", "BE法では、主要な量子ビットに加えて補助量子ビットを必要とするため、他の非ユニタリ行列を適用する量子アルゴリズムと比較して、必要とされる量子ビット数が多い。このため、本手法の実行には、より高性能な量子コンピュータが求められる。" ] }, { "cell_type": "markdown", "id": "7b0139ef", "metadata": {}, "source": [ "### 量子ゲート$\\hat{B}$及び$\\hat{C}$の構成方法\n", "BE法を実行するためには、量子ゲート $\\hat{B}$ および $\\hat{C}$ の実装が必要である。しかし現時点では、Pauli回転ゲートの組み合わせによって、量子ビットがすべて 0 の状態(初期状態)から任意の量子状態へと変換する汎用的な量子ゲートの実装手法は確立されていない。\\\n", "筆者は機械学習を応用することで実装できるのではないかと考えているが定かではない。" ] }, { "cell_type": "markdown", "id": "1217706f", "metadata": {}, "source": [ "### 量子ゲート$\\hat{B}$及び$\\hat{C}$の実装\n", "BE法の実行には$\\hat{A}$を構成するPauli行列積を作用させるための制限量子ゲート$\\hat{P}_i$の実装も必要だが、複数の制御ビットが必要となる量子ゲートの実装はCNOTゲートを複数個必要となる。\\\n", "これと量子ゲート$\\hat{B}$と$\\hat{C}$を実装するのに必要な量子ゲート数を合わせて考えると、BE法の実行にはいわゆるNISQ (Noisy Intermediate-Scale Quantum) 型の量子コンピュータでは不十分である。\\\n", "BE法の本格的な実行には量子誤り訂正の実現した量子コンピュータか、量子ゲート数を削減させる方法の確立が必要であると筆者は考えている。" ] }, { "cell_type": "markdown", "id": "b8a0456b", "metadata": {}, "source": [ "### 測定時に生じる成功・失敗\n", "BE法では作用後の状態が確率$p_j$で測定される。そのため$p_j$が極端に小さい場合(例:$p_j = 0.001$)測定結果に作用後の状態が含まれない可能性が生じる。\\\n", "これを回避するには何かしらの形で測定確率を向上させる必要があると筆者は考えている。" ] }, { "cell_type": "markdown", "id": "ff6ded5a", "metadata": {}, "source": [ "## 参考文献\n", "\n", "[1] Andrew M Childs and Nathan Wiebe. “Hamiltonian simulation using linear combinations of unitary operations”. In: \n", "[arXiv preprint arXiv:1202.5822](https://arxiv.org/abs/1202.5822) (2012). \n", "\n", "\n", "BE法を提案した論文" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }