第3章: VQE — アルゴリズムの全体像

変分原理、ハイブリッドループ、そしてマシンのそれぞれの半分が何のためにあるのか

📖 Reading Time: 20-25 minutes 📊 Difficulty: Beginner 💻 Code Examples: 0 📝 Exercises: 0

ビデオ講義

このビデオは以下のテキストと同じ内容をカバーしています。お好みの学習形式をお選びください。

🌐 JP | 🇬🇧 EN | Last sync: 2026-08-17

量子コンピューティング道場 > 量子コンピュータによる量子化学計算 > 第3章

第2章はハミルトニアンで幕を閉じました。電子構造問題を第二量子化で書き直し、量子ビットへ写像した結果、パウリ文字列の重み付き和として現れたものです。この対象は次元 \(2^n\) の空間における1つの行列であり、私たちが欲しいのはその最小固有値です。素直に思いつく方針 — 行列を組み立てて対角化する — は、まさに破綻する方針にほかなりません。というのも、その行列こそが書き下す余裕のないものだからです。

変分量子固有値ソルバー(VQE) は、近い将来に向けた最有力の答えです。本章ではこれを分解します。変分原理はなぜ固有値問題を最小化問題へと変えるのか、マシンのそれぞれの半分は何を担っているのか、そして4つの可動部品 — アンザッツ、測定、オプティマイザ、そしてそれらをつなぐインターフェース — のそれぞれが、どこで静かに狂いうるのか。量子コンピュータ入門 シリーズは1つの節でVQEに触れ、本章をも支配する指摘をしていました。小さな分子でのデモンストレーションが検証しているのは手法であって、計算上の優位性ではない、という指摘です。ここに書かれることはそれを何も変えません。変わるのは詳細さの水準だけです。

3.1 変分原理

すべては1つの不等式の上に成り立っています。任意の規格化された試行状態 \(|\psi(\boldsymbol{\theta})\rangle\) と、基底状態エネルギー \(E_0\) を持つ任意のハミルトニアン \(\hat{H}\) に対して、

\[ E(\boldsymbol{\theta}) = \langle \psi(\boldsymbol{\theta}) | \hat{H} | \psi(\boldsymbol{\theta}) \rangle \geq E_0 \]

が成り立ち、等号が成立するのは \(|\psi(\boldsymbol{\theta})\rangle\) が完全に基底状態固有空間の中にあるとき、かつそのときに限ります。

📚 2行でわかる証明

試行状態を \(\hat{H}\) の(未知の)固有基底で展開します。ここで \(\hat{H}|k\rangle = E_k|k\rangle\)、そして \(E_0 \leq E_1 \leq \cdots\) です。すると期待値は固有値の重み付き平均になり、あらゆる固有値を最小のもので置き換えれば、値は減ることしかありえません。

\[ |\psi\rangle = \sum_k c_k |k\rangle \quad \Longrightarrow \quad \langle \psi | \hat{H} | \psi \rangle = \sum_k |c_k|^2 E_k \;\geq\; E_0 \sum_k |c_k|^2 = E_0 \]

この不等式が等号で満たされるのは、\(E_k > E_0\) となるすべての \(k\) について \(|c_k|^2 = 0\) であるとき — すなわち試行状態が基底状態であるとき — に限られます。この証明が 必要としない ものに注目してください。固有基底を知っていることは一度も要求されておらず、要求されているのはそれが存在することだけです。スペクトルが私たちにまったく未知であっても、この下界が使える理由はここにあります。

固有値問題は 最小化 問題へと姿を変えました。\(E_0\) を見つける必要はありません。\(E(\boldsymbol{\theta})\) を押し下げていき、到達した最小値を、それが上界であると承知のうえで報告すればよいのです。誤った答えは、既知の向きに誤ります。

📚 エネルギーの誤差が状態の誤差の2次になる理由

これはVQEの頑健さとしてもっとも頻繁に引き合いに出される性質であり、熱狂ではなく正確さをもって扱うに値します。回路が \(|\psi_0\rangle\) ではなく、わずかに誤った 純粋 状態を用意するとしましょう。直交する規格化された \(|\delta\rangle\) がわずかに混ざったものとして書きます。

\[ |\psi\rangle = \frac{|\psi_0\rangle + \epsilon |\delta\rangle}{\sqrt{1 + \epsilon^2}} \quad \Longrightarrow \quad E(\psi) = \frac{E_0 + \epsilon^2 \langle \delta | \hat{H} | \delta \rangle}{1 + \epsilon^2} = E_0 + \epsilon^2 \left( \langle \delta | \hat{H} | \delta \rangle - E_0 \right) + O(\epsilon^4) \]

状態は \(\epsilon\) のオーダーで誤っていますが、エネルギーが誤るのは \(\epsilon^2\) のオーダーです。用意された状態における1パーセントの誤差は、エネルギーではおよそ1万分の1のコストにしかなりません。これは本物であり有用でもあります — そして、通常語られるよりも適用範囲は狭いのです。

これが守ってくれないもの、3つ

非コヒーレントな雑音。 この導出は基底状態に近い 純粋 状態を仮定しています。デコヒーレンスは混合状態を生み、励起状態に重み \(p\) を担う混合状態はエネルギーを \(p\) について線形に押し上げます。脱分極雑音は1次の誤差なのです。

測定のバイアス。 2次の抑制が覆っているのは状態の準備だけです。推定されたパウリ期待値にバイアスを与える系統的な読み出し誤差は、報告されるエネルギーを1次でずらし、いかなる変分的な議論もそれを取り除いてはくれません。

ショット雑音と、境界そのもの。 不等式 \(E \geq E_0\) は厳密な期待値について成り立ちます。有限ショットの 推定値 は確率変数であり、偶然によって \(E_0\) を下回ることがありえます。収束した平均ではなくサンプルされた最小のエネルギーを報告することは、実際には何もしていないのに変分的な境界を破ったかのように見せる手口です。

3.2 ループの解剖

VQEは仕事を2台のマシンに分割し、それぞれが得意なことを担当します。

flowchart TD A[古典: パラメータ theta を選ぶ] B[量子: アンザッツ状態を準備
浅いパラメータ化回路] C[量子: 各パウリ文字列を測定
項ごとにショットを反復] D[古典: 各項を合成してエネルギーにする] E[古典: オプティマイザが新しい theta を提案] A --> B --> C --> D --> E E -.収束するまで繰り返す.-> B style A fill:#667eea,stroke:#764ba2,stroke-width:2px,color:#fff style B fill:#00bcd4,stroke:#764ba2,stroke-width:2px,color:#fff style C fill:#00bcd4,stroke:#764ba2,stroke-width:2px,color:#fff style D fill:#7c4dff,stroke:#764ba2,stroke-width:2px,color:#fff style E fill:#f57c00,stroke:#764ba2,stroke-width:2px,color:#fff

準備。 パラメータ化された回路 \(U(\boldsymbol{\theta})\) が固定された参照状態、通常はビット列として書かれたハートリー・フォック行列式に作用します。その結果である \(|\psi(\boldsymbol{\theta})\rangle = U(\boldsymbol{\theta})|\text{ref}\rangle\) がベクトルとして書き下されることは決してありません。それはデバイスの内部にのみ存在します。

測定。 \(\hat{H} = \sum_i c_i \hat{P}_i\) をパウリ文字列の和とすると、各 \(\langle \hat{P}_i \rangle\) は、回路を何度も実行し、\(\hat{P}_i\) を \(Z\) 演算子の積に変える基底回転を施し、\(\pm 1\) という結果を平均することによって推定されます。

合成と更新。 古典コンピュータが \(E(\boldsymbol{\theta}) = \sum_i c_i \langle \hat{P}_i \rangle\) を組み立ててオプティマイザに渡し、オプティマイザが新しいパラメータを提案します。

📚 これがNISQハードウェアに適する理由

デバイス上で走る回路は 浅く、そして反復される ものであり、深くて一度だけ走るものではありません。2量子ビットゲートの誤り率を \(\epsilon\) とすると、\(m\) 個のゲートからなる回路が生き延びる確率はおおよそ \(e^{-m\epsilon}\) ですから、許容できる深さは \(1/\epsilon\) のオーダーです。長くコヒーレントな計算を1回必要とするアルゴリズムは失格ですが、短いものを多数必要とするアルゴリズムはそうではありません。

古典側の半分は、雑音のあるデバイスが不得手なすべて — 帳簿づけ、多数の小さな数の足し合わせ、収束判定 — を、算術が厳密かつ無償である場所で引き受けます。量子デバイスが提供するのは、古典ハードウェアには供給できないただ1つのサービス、すなわち列挙するには大きすぎる空間の中の状態からサンプリングすることです。

この枠組みは、誠実な問いがどこにあるのかも指し示してくれます。VQEがNISQハードウェアに適合するのは、それが 要求の少ない アルゴリズムだからであり、要求が少ないことは、古典的には手に入らないものを届けることと同じではありません。第5章はこの2つの言明の間にある隔たりに立ち返ります。

3.3 アンザッツの設計: 精度の上限を決める選択

オプティマイザが探索できるのは、回路が作り出せる状態の族の内部だけです。基底状態がその族に含まれていなければ、どんな最適化もそれを見つけられません — エネルギーは \(E_0\) より上で頭打ちになり、変分原理が保証してくれるのは、下向きに騙されることはないという点だけです。2つの設計思想が主流であり、両者は正反対の仕方で破綻します。

📚 ハードウェア効率的アンザッツ

デバイスがネイティブに実行できるものだけで回路を組み立てます。それぞれ独自の角度を持つ1量子ビット回転の層と、物理的に結合した量子ビット間の固定パターンのもつれ生成ゲートとを、交互に重ねるのです。

\[ U(\boldsymbol{\theta}) = \prod_{\ell=1}^{L} \left[ W_{\text{ent}} \cdot \bigotimes_{q=1}^{n} R(\theta_{\ell,q}) \right] \]

魅力は深さにあります。 回路の中で化学によって指定されるものは何もないので、長くならざるを得ない要因もなく、もつれ生成の層は物理的に存在する結合だけを使います — ルーティングのためのゲートは一切挿入されません。

代償は構造です。 到達可能な族は分子の物理と何の関係も持ちません。それは一般に、粒子数の誤った状態やスピンの誤った状態を含んでいるため、オプティマイザは物理的に意味のあるセクターの外へさまよい出て、別の化学種に属するエネルギーを返しうるのです。事前知識も一切符号化されないので、探索を導いてくれるものが何もありません。

さらに悪いことに、表現力が牙をむきます。基底状態を含むほど一般的な族を目指して回路を広げ、深くしていくと、地形は平坦になります。パラメータ空間のほとんどにおいて、勾配が量子ビット数について指数関数的に小さくなるのです。これが 不毛の台地 であり、第5章はこれを、実際そうであるところの中心的な障害として扱います。この罠の形に注目してください — 答えを保持できるだけの表現力を持つアンザッツこそが、訓練できないアンザッツでありうるのです。

📚 化学に着想を得たアンザッツ: ユニタリ結合クラスター

もう一方の路線は、古典的な量子化学からアンザッツを輸入します。結合クラスター 理論は、相関を取り込んだ波動関数を、ハートリー・フォック参照状態に作用する励起演算子の指数関数として書きます。

\[ |\psi(\boldsymbol{\theta})\rangle = e^{\hat{T}(\boldsymbol{\theta}) - \hat{T}^\dagger(\boldsymbol{\theta})} |\text{HF}\rangle \]

ここで \(\hat{T}\) は電子を占有軌道から空軌道へ引き上げるものであり、よく使われる UCCSD 打ち切りでは1電子励起と2電子励起、励起1つにつきパラメータ1つとなります。反エルミートな組み合わせ \(\hat{T} - \hat{T}^\dagger\) こそが指数関数をユニタリにし、したがって回路として実装可能にしています。ここでは定性的な議論に留めますが、重要な点が3つあります。

この両極の間には、エネルギー勾配の最も大きい励起を1つずつ加えてアンザッツを育てていく適応的な構成法が位置します。それらはコンパクトさを、多数の追加測定によって購っています — 実在するコストであって、ただ飯ではありません。

3.4 測定: ショットはどこへ消えるのか

デバイスは \(\langle \hat{H} \rangle\) を評価しません。サンプルするのです。\(\hat{P}_i^2 = I\) なので、パウリ文字列の測定は1回ごとに \(+1\) か \(-1\) を返し、したがって1ショットあたりの分散は \(\mathrm{Var}(\hat{P}_i) = 1 - \langle \hat{P}_i \rangle^2\) となり、独立な項は分散が加算されます。

\[ \mathrm{Var}\big(\hat{E}\big) = \sum_i \frac{c_i^2 \left( 1 - \langle \hat{P}_i \rangle^2 \right)}{N_i} \]

問題はこのスケーリングです。 統計誤差を半分にするにはショットを4倍にしなければならないので、目標精度 \(\varepsilon\) に到達するコストは \(1/\varepsilon^2\) で増えるショット数となります — しかも分子のハミルトニアンは、係数が都合よく小さくなってはくれない多数の項を抱えています。VQEの実行における支配的なコストは、ゲート数ではなくむしろこちらであることが多く、化学精度が単に難しいというより高くつくものである理由も、ここにあります。

📚 可換な項をまとめる

可換な2つのパウリ文字列は、原理的には同時に測定できます。もっとも利用しやすいのは 量子ビットごとの可換性(qubit-wise commutation) です。これは、どのパウリを作用させるかが量子ビットごとに一致している文字列どうしのことで、恒等演算子は何とでも両立します。そうしたグループのすべてのメンバーが1つの基底回転を共有するので、1組のショットからそれら全部が得られます。

\(M\) 個の項をできるだけ少ないグループへ分割することはグラフ彩色問題であり、実際にはヒューリスティックに解かれます。この節約は本物であり、大きなものにもなりえますが、それは \(1/\varepsilon^2\) という法則に対する定数倍の改善です。変わるのは係数であって、指数ではありません。

3.5 オプティマイザ

古典側の半分が目にするのは、評価が高価で、しかも雑音を含む関数です。この組み合わせが、まともな選択のすべてを形づくります。

📚 パラメータシフト則

生成子が \(\hat{G}^2 = I\) を満たす回転ゲート \(R_G(\theta) = e^{-i\theta \hat{G}/2}\) — あらゆる1量子ビットのパウリ回転について成り立ちます — に対して、微分は 厳密 であり、同じ回路を2つのずらした角度で走らせることによって得られます。

\[ \frac{\partial E}{\partial \theta_k} = \frac{1}{2}\left[ E\left(\theta_k + \frac{\pi}{2}\right) - E\left(\theta_k - \frac{\pi}{2}\right) \right] \]

2つの特徴がこれを標準的な道具にしています。これは 近似ではありません。調整すべきステップ幅も、雑音とのトレードオフに晒される打ち切り誤差も存在しません。ステップを小さくすると統計誤差が増幅されてしまう有限差分とは対照的です。そしてずらされた回路は角度が違うだけの 同じ 回路ですから、新しいハードウェア機能は何も必要ありません。コストは正直な帳簿づけです — パラメータ1つにつき2回のエネルギー評価、その各々がパウリ測定のフルセットですから、\(p\) 個のパラメータについての勾配1ステップには \(2p\) 回の評価がかかります。

📚 勾配を使わない代替手法

勾配が高価すぎる、あるいは雑音が多すぎる場合には、勾配をそもそも作らないオプティマイザが代わりに使われます。Nelder-MeadとCOBYLAは関数値を直接比較することで探索し、SPSAはパラメータ数によらず、ランダムに摂動させた数回の評価から降下方向を推定します。雑音のあるハードウェア実験でSPSAが頻繁に登場するのはこのためです。ここでは名前を挙げて先へ進みます — オプティマイザは重要ですが、それは支配的な2つのコスト、すなわち1回の評価あたりのショット数と、そもそも辿るに値する勾配が地形に存在するのかどうか、の下流にあるからです。

3.6 ハンズオン: 2量子ビットVQEの完全版

以下のコードは、第2章が生み出したのと同じ形の2量子ビットのハミルトニアンに対して、ループ全体を実行します。

\[ \hat{H} = c_1 Z_0 + c_2 Z_1 + c_3 Z_0 Z_1 + c_4 X_0 X_1 \]

係数は教育上の選択です。 それらは丸い数字であり、単位を持たず、どの分子にも属しません。\(c_1 = c_2 = 0.5\)、\(c_3 = 0.25\)、\(c_4 = 0.3\) です。現実的なのは 構造 のほう — 対角部分と、相関を供給する1つの非対角項とを持つ、パウリ文字列の重み付き和です。第4章では、この作り物の数値を、実際の分子積分から計算された係数で置き換えます。アンザッツはハードウェア効率的な種類の1層であり、各量子ビットへの \(R_y\) 回転に続いてCNOTを掛けたものです。

\[ |\psi(\theta_0, \theta_1)\rangle = \mathrm{CNOT} \cdot \left( R_y(\theta_0) \otimes R_y(\theta_1) \right) |00\rangle \]

import numpy as np

# おもちゃのハミルトニアン。教育用の丸い係数、単位なし、分子なし。
# 現実的なのは構造のほう: パウリ文字列の重み付き和である。
I2, X, Z = np.eye(2), np.array([[0., 1.], [1., 0.]]), np.array([[1., 0.], [0., -1.]])
c1, c2, c3, c4 = 0.5, 0.5, 0.25, 0.30
terms = [(c1, "Z0", np.kron(Z, I2)), (c2, "Z1", np.kron(I2, Z)),
         (c3, "Z0Z1", np.kron(Z, Z)), (c4, "X0X1", np.kron(X, X))]
H = sum(coeff * op for coeff, _, op in terms)

# 古典的な参照値。4x4だからこそ計算できるもの。
eigvals = np.linalg.eigvalsh(H)
E_exact = float(eigvals[0])
print("Exact diagonalization (numpy.linalg.eigvalsh)")
print("  spectrum      = " + ", ".join(f"{v:+.9f}" for v in eigvals))
print(f"  ground energy = {E_exact:.9f}\n")

# アンザッツ:  |psi(theta)> = CNOT . (Ry(theta0) (x) Ry(theta1)) |00>
CNOT = np.array([[1., 0., 0., 0.], [0., 1., 0., 0.],
                 [0., 0., 0., 1.], [0., 0., 1., 0.]])


def ry(t):
    c, s = np.cos(t / 2.0), np.sin(t / 2.0)
    return np.array([[c, -s], [s, c]])


def ansatz_state(theta):
    psi = np.array([1.0, 0.0, 0.0, 0.0])                    # |00>
    return CNOT @ (np.kron(ry(theta[0]), ry(theta[1])) @ psi)


def energy(theta):
    psi = ansatz_state(theta)
    return float(psi @ H @ psi)


# パラメータシフトによる勾配。各角度はちょうど1つのRyゲートの中にあり、その
# 生成子の固有値は+-1/2なので、この規則は近似ではなく厳密である。
def parameter_shift_gradient(theta):
    grad = np.zeros_like(theta)
    for k in range(len(theta)):
        shift = np.zeros_like(theta)
        shift[k] = np.pi / 2.0
        grad[k] = 0.5 * (energy(theta + shift) - energy(theta - shift))
    return grad


probe, h = np.array([0.7, -1.3]), 1e-6
fd = np.array([(energy(probe + h * e) - energy(probe - h * e)) / (2 * h) for e in np.eye(2)])
ps = parameter_shift_gradient(probe)
print("Parameter shift vs central finite difference at theta = (0.70, -1.30)")
print(f"  parameter shift   = [{ps[0]:+.9f}, {ps[1]:+.9f}]")
print(f"  finite difference = [{fd[0]:+.9f}, {fd[1]:+.9f}]")
print(f"  max abs deviation = {np.max(np.abs(ps - fd)):.2e}")

出力:

Exact diagonalization (numpy.linalg.eigvalsh)
  spectrum      = -0.794030651, -0.550000000, +0.050000000, +1.294030651
  ground energy = -0.794030651

Parameter shift vs central finite difference at theta = (0.70, -1.30)
  parameter shift   = [-0.178819926, +0.609374521]
  finite difference = [-0.178819926, +0.609374521]
  max abs deviation = 1.22e-10

パラメータシフトによる勾配は、中心差分と10桁まで一致しています — どんな勾配であれ、信頼する前にやっておく価値のあるチェックです。残った差は有限差分のほうの誤差であって、シフト則の誤差ではありません。

つづいてループそのものを、2つの異なる出発点から2回走らせます。

# ハイブリッドループ: 古典的な降下法の内側に量子的なエネルギー評価が入る。
def descend(theta0, label, n_steps=400, learning_rate=0.25):
    theta = np.array(theta0, dtype=float)
    print(label + "\n  step       theta0       theta1         energy    |gradient|")
    for step in range(n_steps + 1):
        g = parameter_shift_gradient(theta)
        if step % 200 == 0:
            print(f"  {step:4d}  {theta[0]:+10.6f}  {theta[1]:+10.6f}  "
                  f"{energy(theta):+12.9f}  {np.linalg.norm(g):.3e}")
        theta = theta - learning_rate * g
    print(f"  converged energy = {energy(theta):.9f}   (exact = {E_exact:.9f})\n")
    return theta


# Run A: 任意の初期点。オプティマイザは完璧に振る舞う。
descend([0.30, 0.90], "Run A: descent from an arbitrary start")

# Run B: まず粗いスキャンで同じ降下法に初期値を与える。
grid = np.linspace(0.0, 2.0 * np.pi, 13)
best = min(((energy(np.array([a, b])), a, b) for a in grid for b in grid))
print(f"Grid scan over {len(grid)}x{len(grid)} angles: "
      f"theta = ({best[1]:.6f}, {best[2]:.6f}), energy = {best[0]:.9f}\n")
theta = descend([best[1], best[2]], "Run B: descent seeded by the grid scan")
print(f"  E_vqe - E_exact = {energy(theta) - E_exact:+.3e}   (machine epsilon)\n")

# デバイスが実際に測定しなければならないもの、項ごとに。
psi_opt = ansatz_state(theta)
print("Pauli-term expectation values at the optimum")
for coeff, label, op in terms:
    ev = float(psi_opt @ op @ psi_opt)
    print(f"  <{label:5s}> = {ev:+.9f}   contribution = {coeff * ev:+.9f}")
print()

# ショット雑音: デバイスは+-1の固有値をサンプルして平均する。
rng = np.random.default_rng(2026)
probs = psi_opt ** 2                                # Z基底での測定結果の確率
z0 = np.array([+1.0, +1.0, -1.0, -1.0])             # |00>,|01>,|10>,|11> に対するZ0
exact_z0 = float(probs @ z0)
spread = np.sqrt(1.0 - exact_z0 ** 2)               # 1ショットの標準偏差
print(f"Finite-shot estimation of <Z0>   (exact = {exact_z0:+.9f}, "
      f"single-shot sd = {spread:.6f})")
print("     shots    mean of 400 runs    sd of 400 runs    sd/sqrt(N) predicted    ratio")
previous = None
for n_shots in [100, 400, 1600, 6400]:
    est = np.array([float(np.mean(z0[rng.choice(4, size=n_shots, p=probs)]))
                    for _ in range(400)])
    sd = est.std(ddof=1)
    ratio = "    -" if previous is None else f"{sd / previous:.3f}"
    print(f"  {n_shots:8d}  {est.mean():+17.6f}  {sd:16.6f}  {spread / np.sqrt(n_shots):22.6f}  {ratio:>7s}")
    previous = sd

出力:

Run A: descent from an arbitrary start
  step       theta0       theta1         energy    |gradient|
     0   +0.300000   +0.900000  +1.018650141  5.719e-01
   200   -1.570796   +3.141592  -0.550000000  1.905e-07
   400   -1.570796   +3.141593  -0.550000000  1.560e-13
  converged energy = -0.550000000   (exact = -0.794030651)

Grid scan over 13x13 angles: theta = (3.665191, 0.000000), energy = -0.766025404

Run B: descent seeded by the grid scan
  step       theta0       theta1         energy    |gradient|
     0   +3.665191   +0.000000  -0.766025404  2.402e-01
   200   +3.433049   +0.000000  -0.794030651  4.441e-16
   400   +3.433049   +0.000000  -0.794030651  4.441e-16
  converged energy = -0.794030651   (exact = -0.794030651)

  E_vqe - E_exact = -1.110e-16   (machine epsilon)

Pauli-term expectation values at the optimum
  <Z0   > = -0.957826285   contribution = -0.478913143
  <Z1   > = -0.957826285   contribution = -0.478913143
  <Z0Z1 > = +1.000000000   contribution = +0.250000000
  <X0X1 > = -0.287347886   contribution = -0.086204366

Finite-shot estimation of <Z0>   (exact = -0.957826285, single-shot sd = 0.287348)
     shots    mean of 400 runs    sd of 400 runs    sd/sqrt(N) predicted    ratio
       100          -0.957700          0.028155                0.028735        -
       400          -0.957138          0.014685                0.014367    0.522
      1600          -0.958025          0.007217                0.007184    0.491
      6400          -0.957978          0.003811                0.003592    0.528

結果を読み解く。 重要な順に、5つの観察を挙げます。

アンザッツを、量子ビット0への \(R_y\) が1つだけでもつれ生成ゲートのないものに置き換えてみてください。最適化されたエネルギーは \(E_0\) よりかなり上で止まります — この族はもつれた状態を作り出せず、変分原理はその作れなさを、もっともらしい誤答ではなく、目に見える誠実な誤差へと変えるのです。

🎯 演習問題

  1. 変分原理における等号。 3.1節の2行の証明を用いて、\(\langle\psi|\hat{H}|\psi\rangle = E_0\) が \(|\psi\rangle\) を基底状態固有空間へ押し込むことを示してください。この議論はどこで、\(E_0\) が 最小の 固有値であるという事実を使っているでしょうか。
  2. 2次であることを定量的に。 3.1節の展開において \(\epsilon = 0.1\)、\(\langle\delta|\hat{H}|\delta\rangle - E_0 = 1\) としてください。エネルギーの誤差はどれくらいになるでしょうか。次に、その代わりに脱分極雑音が、同じだけの超過エネルギーを持つ状態に確率 \(p = 0.1\) を与えるとします。両者を比較し、一方が2次で他方が1次である理由を説明してください。
  3. ショット数の予算。 あるハミルトニアンが、大きさおよそ \(0.5\) の係数を持つ15個のパウリ項を持っています。最悪の場合 \(\langle \hat{P}_i \rangle = 0\) を仮定し、ショットを均等に配分するとして、エネルギーの標準誤差を \(10^{-3}\) にするために必要な総ショット数を見積もってください。\(10^{-4}\) についても同じことを行い、考察してください。
  4. パラメータシフトを手で。 \(\hat{H} = aZ + bX\) と \(|\psi(\theta)\rangle = R_y(\theta)|0\rangle\) について \(E(\theta) = a\cos\theta + b\sin\theta\) となることを示し、パラメータシフトの公式が \(dE/d\theta\) を近似的にではなく厳密に返すことを、代数的に確かめてください。
  5. 台地を診断する。 あなたのVQEのエネルギーが下がらなくなりました。その観察と整合する互いに異なる説明を3つ — アンザッツについて1つ、オプティマイザについて1つ、測定について1つ — 挙げ、それらを区別できるような数値実験を1つ述べてください。

まとめ

本章ではVQEをその部品へと分解しました。変分原理 \(\langle\psi(\boldsymbol{\theta})|\hat{H}|\psi(\boldsymbol{\theta})\rangle \geq E_0\) — 固有基底での展開によって2行で証明され、等号は基底状態のときに限られます — は、固有値問題を、誤差の向きが既知である最小化問題へと変換します。エネルギーの誤差は状態の誤差の 2次 ですが、それは純粋状態上のコヒーレントな誤差についてのみのことです。非コヒーレントな雑音、測定のバイアス、有限ショットの揺らぎはいずれもその保護をすり抜け、最後のものは報告される推定値を \(E_0\) の下へ押しやることさえあります。ハイブリッドループ はデバイス上で状態を準備し、反復されたショットから各パウリ項を推定し、組み立てられたエネルギーを古典オプティマイザへ渡します。そのため量子回路は浅いままで、何度も実行されます — \(1/\epsilon\) のオーダーの深さの予算に収まる形です。アンザッツの設計 は深さと構造を取引します。ハードウェア効率的な回路は浅いものの構造を持たず、大きくなるにつれて不毛の台地へ滑り落ちていきます。一方ユニタリ結合クラスターは、深いTrotter化された回路という代価を払って粒子数とスピンを保存します。測定 は \(1/\varepsilon^2\) でショットを消費し、可換なグループにまとめる戦略が改善するのは定数であって指数ではありません。パラメータシフト則 はパラメータあたり2回の評価から厳密な勾配を与え、それが賄えないときの代替として勾配を使わない手法があります。2量子ビットのNumPy製VQEは、それらすべてを一度に見せてくれました。一方の実行は \(-0.550000\) という局所極小へ自信たっぷりに収束し、グリッドスキャンで初期値を与えられたもう一方の実行はマシン精度で厳密な \(-0.794031\) に到達し、エネルギーは別々に測定された4つのパウリ項から組み立てられ、そしてそれらのうち1つの項のショット雑音は、ショット数を4倍にするごとに半減しました。

次章では、作り物の係数を投げ捨てます。公表されているSTO-3G基底関数系のパラメータだけを出発点として、H₂のガウス積分をNumPyで計算し、ハートリー・フォックSCFを収束まで走らせ、分子軌道へ変換し、Jordan-Wigner変換で4つの量子ビットへ写像し、そして同じコードが生み出す完全配置間相互作用のエネルギーに対してVQEを走らせます — 章に登場するあらゆる数値が、その実行から出てくることになります。

← 第2章: 分子から量子ビットへ 第4章: ハンズオン: H2 をゼロから →

免責事項