手を上げるキュビットくんゆるふわ量子コンピュータ
考え中のキュビットくん

Qiskitのノイズモデルとトランスパイル|実機の"クセ"を再現する

2026-08-15実践

#Qiskit#ノイズ#トランスパイル#NISQ#Python#実践

シミュレータで完璧に動いた回路が、実機ではなぜか結果が乱れる——NISQ期の量子コンピュータの現実です。この記事では、理想シミュレータにノイズモデルを足して実機のクセを再現し、回路が実機向けに書き換えられるトランスパイルの中身を、コードで確かめます。

なぜ実機は乱れるのか

実機のゲートには一定確率で誤りが乗り、量子ビットは時間とともに状態を失います(ノイズ)。だから理想シミュレータの「きれいすぎる結果」は、実機の予測には使えません。ノイズモデルは、その誤りをシミュレータに足して現実に近づける道具です。

準備

pip install qiskit qiskit-aer

① まず理想のベル状態

from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator

qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

ideal = AerSimulator().run(qc, shots=2000).result().get_counts()
print("理想:", ideal)   # {'00': ~1000, '11': ~1000}

理想では 0011 しか出ません。もつれの教科書どおりです。

② ノイズを足す

各ゲートに脱分極ノイズ(一定確率で状態がランダムに崩れる誤り)を設定します。

from qiskit_aer.noise import NoiseModel, depolarizing_error

nm = NoiseModel()
nm.add_all_qubit_quantum_error(depolarizing_error(0.02, 1), ['h'])   # 1量子ビットゲート誤り2%
nm.add_all_qubit_quantum_error(depolarizing_error(0.05, 2), ['cx'])  # 2量子ビットゲート誤り5%

noisy = AerSimulator(noise_model=nm).run(qc, shots=2000).result().get_counts()
print("ノイズあり:", noisy)

結果は {'00': 983, '11': 979, '01': 20, '10': 18} のように、本来出ないはずの 0110 が数%出てきます。これが実機の姿。もつれが「ときどき破れる」わけです。

💡

2量子ビットゲートは特に弱い

cx(CNOT)の誤り率を h より高く設定したのは実機に合わせた設定です。2量子ビットゲートは1量子ビットゲートより誤りが1桁大きいのが普通。だから「CNOTをいかに減らすか」が回路設計の腕の見せどころになります。

③ トランスパイル: 実機の言葉に翻訳する

実機は決まった種類のゲート(基本ゲート)しか実行できません。書いた回路を、その基本ゲートの組み合わせに変換するのがトランスパイルです。

from qiskit import transpile

basis = ['u', 'cx']   # 実機が実行できる基本ゲート
t = transpile(qc, basis_gates=basis, optimization_level=3)

print("深さ:", t.depth())
print("ゲート構成:", dict(t.count_ops()))

hu ゲートに書き換えられ、optimization_level=3 で冗長な部分が削られます。同じ計算でも、実機で速く・正確に動く形に最適化されるわけです。

🌱

なぜ最適化が効くのか

ゲート1つ1つに誤りが乗るので、ゲート数と回路の深さが減るほど結果はきれいになります。optimization_level を 0 と 3 で切り替えて count_ops() を比べると、最適化がどれだけゲートを減らすか見えます。ノイズありシミュレータで両者を実行すれば、正確さの差も体感できます。

現実的なワークフロー

実務では「①理想で正しさを確認 → ②ノイズモデルで実機の見込みを評価 → ③トランスパイルして最小化 → ④実機に投入」という流れになります。ノイズと戦いながら少しでも良い結果を引き出すのが、NISQ期のエンジニアリングです。この誤りを根本から消しにいくのが誤り訂正の世界です。

まとめ

  • 実機はゲート誤りとノイズで結果が乱れる。理想シミュレータだけでは予測できない
  • ノイズモデルで誤りを足すと、本来出ない結果が数%現れる実機の姿を再現できる
  • 2量子ビットゲートは誤りが大きいので、CNOTを減らす設計が効く
  • トランスパイルは回路を実機の基本ゲートに変換・最適化する。深さを減らすほど正確

もう少し詳しく(背景と理論)

実機ノイズは、ゲート誤り・測定誤り・そして時間とともに状態が失われるデコヒーレンス(緩和時間 T₁、位相緩和 T₂)に大別されます1。シミュレータで使う脱分極チャネルやビット/位相反転チャネルは、これらを数式化したノイズモデルです2。トランスパイルは、論理回路を実機のネイティブゲートとカップリングマップに合わせて変換し、SWAP 挿入やゲート融合で深さ・2量子ビットゲート数を減らす最適化を行います3。2量子ビットゲートは1量子ビットゲートより1桁誤りが大きいため、その数の削減が結果の質に直結します。誤り訂正が未成熟な現在は、結果を統計的に補正する誤り緩和(ゼロノイズ外挿など)と併用するのが実務的です4

次の一歩 🌸

実機の方式そのものは量子コンピュータの方式まとめ、ノイズを訂正する話はビットフリップ符号の実装、回路の基礎はQiskit入門へどうぞ。

Footnotes

  1. T₁(エネルギー緩和:|1⟩→|0⟩)と T₂(位相のコヒーレンス喪失)が量子情報の寿命を決める。ゲート時間が T₁,T₂ に対し十分短いことが精度の前提。

  2. 脱分極チャネルは確率 p で状態を完全混合に近づける単純モデル。実機の較正データ(各ゲートの誤り率・T₁/T₂)から、より現実的なノイズモデルを構築できる。

  3. トランスパイルは NP 困難な最適化を含み、Qiskit は optimization_level 0–3 でヒューリスティックの強さを選べる。SWAP ネットワークの最小化やルーティングが性能を左右する。

  4. ゼロノイズ外挿(ZNE)、確率的誤り相殺(PEC)、測定誤り較正などの誤り緩和は、追加の量子ビットなしに期待値の精度を改善する NISQ 期の実務手法。

🔥 この分野の最新トレンドをチェック →

あわせて読みたい

考え中のキュビットくん

トポロジカル量子ビットとは?マヨラナ粒子とMicrosoftの挑戦、そして続く論争

マヨラナ粒子を使う「トポロジカル量子ビット」のしくみと、なぜ誤りに強いと期待されるのかをやさしく解説。Microsoftの長年の挑戦とMajorana 1チップ、そして専門家の間で続く論争まで整理します。

考え中のキュビットくん

量子コンピュータの方式まとめ2026|超伝導・イオン・中性原子・光

量子コンピュータの主要な実現方式を初心者向けに比較。超伝導・イオントラップ・中性原子・光の特徴とメリット・デメリット、どの企業がどの方式かをやさしくまとめました。

すまし顔のキュビットくん

表面符号(サーフェスコード)をQiskitで実装|XとZを同時に見張る2次元誤り訂正

Googleの量子プロセッサ「Willow」で話題になった表面符号(サーフェスコード)の最小単位をQiskitで実装。X・Zどちらのエラーも検出できるしくみと、格子を大きくするほど論理エラー率が指数関数的に下がる理由をコードで確かめます。

計算中のキュビットくん

ショアのアルゴリズムをQiskitで実装|位数発見でN=15を素因数分解する

なぜ量子コンピュータは素因数分解が速いのか。ショアのアルゴリズムの心臓部「位数(周期)発見」を、量子フーリエ変換の逆変換を使ってQiskitで実装し、N=15を実際に素因数分解します。似た名前の「ショア符号」(誤り訂正)との違いにも触れます。