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

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

2026-08-15 ・ 実践

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

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

なぜ実機は乱れるのか

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

準備

ターミナル
pip install qiskit qiskit-aer

① まず理想のベル状態

Python
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}

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

② ノイズを足す

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

Python
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} のように、本来出ないはずの 01・10 が数%出てきます。これが実機の姿。もつれが「ときどき破れる」わけです。

💡

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

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

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

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

Python
from qiskit import transpile
 
basis = ['u', 'cx']   # 実機が実行できる基本ゲート
t = transpile(qc, basis_gates=basis, optimization_level=3)
 
print("深さ:", t.depth())
print("ゲート構成:", dict(t.count_ops()))

h は u ゲートに書き換えられ、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。

この記事のコードをまとめて動かす

この記事のコードは、そのまま実行できる形でGitHubに置いています。手元で動かして数字を変えてみると、理解が早くなります。

次の一歩 🌸

実機の方式そのものは量子コンピュータの方式まとめ、ノイズを訂正する話はビットフリップ符号の実装、回路の基礎は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 期の実務手法。 ↩

この記事をシェア:𝕏 で共有LINEで送る

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

あわせて読みたい