量子系が時間とともにどう変わるかを計算するとき、ひとまとまりの複雑な変化を、実行しやすい短い操作へ分けることがあります。その代表がトロッター分解です。時間を細かく刻めば目標に近づきますが、刻みの数だけで近似のよさが決まるわけではありません。
操作を「A、B」と繰り返すか、「Aを半分、B、Aを半分」と挟むか。この並べ方によって、残る誤差の性質が変わります。一次分解と対称な二次分解を、小さな行列の計算と操作数の比較で見てみます。扱うのは時間によらないハミルトニアンと、雑音のない理想的な操作です。[1]
簡単にまとめると?
- トロッター分解の誤差は、同時に働く作用を順番のある操作へ置き換えることで生じます。操作どうしが可換なら、ここで扱う分解の誤差はありません。
- 左右対称に半分の操作で挟むと、一次分解に残る低い次数の誤差を打ち消せます。分割数を増やすことと、分解の次数を上げることは別の変更です。
- 理想的な近似誤差が小さくても、実機での結果がよくなるとは限りません。操作数、ゲートの種類、実行時間、比較する誤差の定義をそろえて判断します。
分割するのは、時間だけでなく作用の組み合わせ
ハミルトニアンは、量子系のエネルギーや相互作用を表す演算子です。時間に依存しないハミルトニアンを H=A+B と分けられるとき、時間tの変化は U(t)=exp(−i(A+B)t) と書けます。ℏを1とする単位を使います。
Aだけ、Bだけなら扱いやすくても、その和による変化を直接実行するのは難しいことがあります。そこで全時間をK個に分け、短い時間を δ=t/K とします。まずAによる変化をδだけ、続いてBによる変化をδだけ進める組をK回繰り返すのが、ここでいう一次分解です。
この操作は、AとBが同時に働く時間δの近似です。「Aにδ、Bにδ使ったから、物理モデルの時間を2δ進めた」という意味ではありません。各項の働きを別々の操作で表しているためです。また、このtは模擬したい系の時間で、装置が回路を実行する秒数とも区別します。
状態を列ベクトルとし、右側の操作から作用する約束なら、1区間の一次分解は L₁(δ)=exp(−iBδ)exp(−iAδ) です。全体は L₁(δ)ᴷ になります。
順番の偏りが、小さな誤差として残る
AとBを交換しても同じになる場合を「可換」と呼びます。可換なら exp(−iBδ)exp(−iAδ)=exp(−i(A+B)δ) が成り立ち、この分解による誤差はありません。一方、交換すると結果が変わる場合には、短い操作を順に実行した結果と、同時に作用させた結果が一般にはずれます。
その違いは、指数関数を小さなδについて展開すると見えます。同時に作用する式にはABとBAが対になる形で現れますが、順序を固定した積では片方に偏ります。差を表すのが交換子 [A,B]=AB−BA です。一次分解の1区間では、最初の誤差がδの二乗に比例する次数から現れます。[1]
同じ有限次元のA、Bと全時間tを保ち、十分細かく分割した場合、K区間を合わせた誤差はおおむね O(t²/K) で抑えられます。Oは誤差の上限の増減の次数を表す記号で、実際の値には演算子の大きさや交換子に応じた係数が掛かります。Kを2倍にすれば、どの問題でも誤差がぴったり半分になる、という約束ではありません。
半歩ずつ挟むと、対称性で誤差の次数が変わる
対称な二次分解では、1区間を「Aをδ/2、Bをδ、Aをδ/2」とします。式では次の積です。
S₂(δ)=exp(−iAδ/2)exp(−iBδ)exp(−iAδ/2)
左右の並びが同じなので、δの符号を反転した組は元の組をちょうど打ち消します。すなわち S₂(δ)S₂(−δ)=I です。この時間反転に対する対称性から、δが十分小さいところで積を一つの指数の形にまとめると、その指数にはδの偶数次の項が現れません。一次分解で残った二次の項が消え、1区間の誤差は三次から始まります。[1]
全時間tを固定してK区間にすると、二次分解の誤差の上限は O(t³/K²) となります。「二次」という名前は、2回繰り返すという意味ではありません。1区間でδの二次まで正しく表せることを指しています。Kは区間の数、一次・二次は近似の次数です。
同じKでも二つの近似は異なります。また、対称性だけで装置の雑音が消えるわけでもありません。ここで打ち消しているのは、理想的な積の式に現れる近似誤差の低次の項です。
小さな例で、誤差の減り方を比べる
説明用に、1量子ビットの H=X+0.6Z と t=1.2 を選びます。Xは基底状態0と1を入れ替え、Zは1の成分の符号を反転するパウリ演算子です。XとZは可換ではありません。比較するのは、A=X、B=0.6Zとした一次分解と対称二次分解です。
厳密な時間発展は H²=1.36I を使い、三角関数で直接求められます。その値を、ハミルトニアンを対角化する別の計算でも照合しました。下表は公開ベンチマークや実機の測定値ではなく、この2×2行列から独自に計算した値です。
誤差には ε=‖U近似−U厳密‖₂ という演算子ノルムを使います。これは、長さ1の入力状態を変えたときに、二つの出力のベクトルとしての差が最大でどれだけになるかを表します。特定の測定で0や1が出る確率の差でも、忠実度でもありません。ここでは全体位相を合わせ直す最小化もしていません。
| 分割数K | 一次の誤差 | 対称二次の誤差 |
|---|---|---|
| 1 | 0.69334 | 0.23327 |
| 2 | 0.31480 | 0.05217 |
| 4 | 0.15341 | 0.01265 |
| 8 | 0.07621 | 0.00314 |
| 16 | 0.03804 | 0.00078 |

K=8から16に増やすと、一次の値は約半分、二次の値は約4分の1になっています。十分細かい分割で期待する次数の違いが、この例にも見えます。ただし、特殊な相殺や状態・観測量の選び方で見かけの減り方は変わります。この一例だけから、あらゆる問題で二次分解が同じ倍率だけ優れるとはいえません。
同じ分割数でも、操作数を確かめる
対称二次は1区間に3個の指数があるので、K区間なら常に3K操作が必要に見えます。しかし、隣り合う区間の境界には、同じAの半歩が二つ続きます。間に別の操作を挟まなければ、それらをAの1歩へまとめられます。
| 分解 | K区間の操作数 | K=8の場合 |
|---|---|---|
| 一次 | 2K | 16 |
| 対称二次、各区間をそのまま | 3K | 24 |
| 対称二次、境界の半歩を結合 | 2K+1 | 17 |
これは二つの項だけを使い、同じ生成子の連続操作を結合できる条件で数えた、抽象的な回転操作の数です。この1量子ビットの例ならX軸とZ軸の回転に対応しますが、多量子ビットの一項を実現するには、複数のゲートが必要な場合があります。上表をそのまま二量子ビットゲート数や実行時間に読み替えることはできません。
たとえば「理想的な演算子ノルム誤差を0.01以下にする」という目標なら、示した範囲では対称二次のK=8が条件を満たし、一次のK=16はまだ満たしません。分割数だけを同じにする比較に加え、同じ誤差目標を達成するための操作数を比べると、選び方が変わります。実機での最適点は、各操作の誤差、接続制約、変換後の回路長なども含めて探す必要があります。
公開実装では、引数から回路まで追う
QED-Cの公開ベンチマークにも、分割数と時間を指定するハミルトニアン・シミュレーションがあります。本稿で参照した固定版の回路生成部は τ=t/K とし、K回のループで短い操作を並べています。コメント中にKを「order」と呼ぶ箇所があっても、この処理でのKは分割回数です。近似の次数と名前だけで同一視しないことが大切です。[2]
さらに、同じ固定版のベンチマーク入口にはKとtの引数がありますが、実際の呼出しでは保存済みデータのkとtを読み、そちらを回路へ渡しています。引数を変えたつもりでも、生成される回路の条件が変わったとは限りません。ここではソースを読んだ結果を記しており、そのプログラムを実行して確認した結果ではありません。版を固定し、実際に渡される値と生成回路を確かめる必要があります。[3]
誤差の比較先にも注意が必要です。同じ近似回路の雑音なし計算と比べると、回路を作る前から含まれる近似誤差は見えにくくなります。近似自体を調べたいなら、今回のように回路へ分ける前の時間発展を比較先にします。QED-Cの説明も、雑音なしの回路を参照する方法と、ハミルトニアンの時間発展を直接参照する方法を区別しています。[4]
トロッター分解を比較するときは、まずモデルと全時間を固定し、次に分割数と分解の次数を分けて記録します。そのうえで、何を誤差と呼ぶか、同じ操作を結合できるか、実機の雑音を含めた値かを確かめます。細かく刻むことと、上手に並べることの効果を分けると、回路を長くする理由と、その代わりに何が改善するのかが見えてきます。
参考資料
- Naomichi Hatano、Masuo Suzuki「Finding Exponential Product Formulas of Higher Orders」、arXiv:math-ph/0506007v1、2005年6月2日。第2節の式(18)–(23)、第3節の式(37)・(38)を参照。固定版PDF。本稿の数値表・図は原論文の転載ではなく、明示した別の条件による独自計算です。
- QED-C「Hamiltonian Simulation / Qiskit回路生成」。commit
21dfc331ce61a2170b06f88259aa19f901c021bcに固定。τ=t/K、Heisenberg/TfimのK回反復を参照。 - 同じ固定版の hamiltonian_simulation_benchmark.py。get_circuits内の保存済みパラメータ読込と回路への受渡しを参照。公開コードは読解のみで、実行していません。
- 同じ固定版の Hamiltonian Simulation — Benchmark Program。近似分解と比較先の区別、および原論文への参照を確認。実装上の設定は上記ソースと照合しています。
