引言
NISQ(含噪声中等规模量子)时代最大的敌人是噪声——门错误、退相干、测量错误让结果不可信。**错误缓解(Error Mitigation)**是「不修硬件、在软件层抵消噪声」的技术,与纠错(需要大量额外比特)不同,它适合当下。本文系统讲错误缓解:先认识噪声来源与错误模型,再逐个拆解四大技术——ZNE(零噪声外推)、测量错误缓解、PEC(概率错误消除)、动态解耦,最后用 Qiskit Runtime 的缓解工具实战,看缓解前后保真度怎么提升。
前置:/quantum-qubit-gates-basics/(测量与噪声基础)、/quantum-qiskit-programming/(Qiskit)、/quantum-error-correction/(纠错 vs 缓解对比)。
目录
- 1. 错误缓解 vs 错误纠正:方向不同
- 2. 噪声来源与错误模型
- 3. ZNE:零噪声外推
- 4. 测量错误缓解:校准矩阵法
- 5. PEC:概率错误消除
- 6. 动态解耦与去随机化
- 7. Qiskit 错误缓解工具实战
- 8. 缓解效果评估:如何量化提升
- 9. 选型指南:什么时候用哪种
- 10. 速查表
- 延伸阅读
1. 错误缓解 vs 错误纠正:方向不同
两条路线解决同一个问题:
纠错(QEC):用大量物理比特编码一个逻辑比特 → 主动纠正错误
代价:比特数量爆炸(表面码约 100:1)
目标:未来容错时代
缓解(QEM):软件后处理抵消噪声 → 不改电路、不加冗余比特
代价:增加采样数、有偏估计
目标:当下 NISQ 能用
| 维度 | 纠错 QEC | 缓解 QEM |
|---|---|---|
| 原理 | 冗余编码纠正 | 统计后处理 |
| 额外比特 | 大量 | 无 |
| 适用 | 容错机器 | NISQ |
| 代价 | 逻辑比特贵 | 采样数/偏差 |
| 现状 | 研究 | 可用 |
心智:纠错是「根治」、缓解是「对症」——NISQ 期用缓解,容错期用纠错,两者是路径不同。
2. 噪声来源与错误模型
量子机器的噪声来源:
| 来源 | 表现 |
|---|---|
| 门错误 | 每次操作不完美(depolarizing 近似) |
| 退相干(T1/T2) | 态随时间衰减 |
| 测量错误 | 读出 0/1 会翻错 |
| 串扰 | 相邻比特互相干扰 |
| 泄漏 | 态漏到非计算能级 |
常用错误模型:
单比特门:depolarizing 通道 ε:ρ → (1-ε)ρ + ε·I/2
测量:误读矩阵(读出 0 实际 1 的概率)
T1/T2:振幅/相位衰减
错误率量级(当下):
单比特门错误率:~0.1%-1%
两比特门(CNOT):~1%
测量错误:~1%
→ 几十个 CNOT 的电路保真度已明显下降
记忆:噪声三巨头——门错、退相干、测量错——错误率虽小,但门一多指数累积,缓解就是在「统计层」把它拉回来。
3. ZNE:零噪声外推
ZNE 核心思想:故意加噪声,再外推回零噪声:
1. 用「噪声放大因子」λ 把电路故意加深(如把门重复 2x、3x)
2. 分别跑 λ=1, 2, 3 的电路 → 得到 3 个「有噪声」期望值
3. 拟合这 3 个点,外推到 λ=0 → 得到「零噪声」估计
噪声放大怎么做:
门折叠(folding):把单个门 U 变成 U·U†·U(等价 U,但噪声×3)
λ = 1, 3, 5 …(奇数倍)
# Qiskit:用 ZNE 扩展
from qiskit_aer.noise import NoiseModel
from qiskit.utils import algorithm_globals
# 示意:门折叠 + 外推(用 mitiq 或 qiskit-ignis 类工具)
# 实际可用 Mitiq 库
import mitiq
from mitiq import zne
mitigated = zne.execute_with_zne(qc, executor, scale_noise=zne.folding.fold_gates_at_random)
优缺点:
| 优点 | 缺点 |
|---|---|
| 无需额外比特 | 需要多次采样 |
| 通用性强 | 外推假设平滑 |
| 实现简单 | 放大后噪声更大 |
记忆:ZNE = 把电路「故意弄噪」几个档位,再外推回零噪声——三个点一条线,估算干净值。
4. 测量错误缓解:校准矩阵法
测量错误:读出会翻错——用「校准矩阵」修正:
1. 校准:制备已知态(|00⟩、|01⟩…)测读出分布 → 误差矩阵 A
2. 修正:把实测分布 p 用 A 反推真实分布
p_true = A⁻¹ · p_measured
# Qiskit 测量错误缓解
from qiskit.ignis.mitigation import complete_meas_cal, MeasurementFilter
# 1. 构建校准电路
cal_circuits, state_labels = complete_meas_cal(qr=qc.qregs[0])
# 2. 跑校准,得到校准矩阵
cal_result = execute(cal_circuits, backend, shots=8192).result()
meas_filter = MeasurementFilter(cal_result, state_labels)
# 3. 跑实际电路,用滤波器修正
raw_counts = execute(qc, backend, shots=8192).result().get_counts()
mitigated_counts = meas_filter.apply(raw_counts)
测量缓解的优点:
1. 简单有效(测量错误是最大噪声源之一)
2. 计算开销低
3. 几乎必做的第一层缓解
记忆:测量缓解 = 先校准「读出错误矩阵」,再反推真实分布——最简单、回报最高,是缓解的「第一杯羹」。
5. PEC:概率错误消除
PEC 核心:用「带正负权的随机电路」分解出无噪声期望:
1. 把噪声电路分解成「干净操作 + 噪声修正」的组合
2. 每次运行随机选一个分解电路(带符号权)
3. 加权平均 → 期望值无偏逼近零噪声值
为什么贵:
PEC 是无偏的(不依赖外推假设)
但方差随电路规模指数增大 → 采样数爆炸
适合小电路、高精度需求
| 维度 | ZNE | PEC |
|---|---|---|
| 偏差 | 有(外推近似) | 无偏 |
| 采样代价 | 线性增长 | 指数增长 |
| 适用 | 通用 | 小电路高精度 |
| 复杂度 | 低 | 高 |
记忆:PEC 无偏但贵——适合「小而精」的电路;大电路用 ZNE,求准用小规模 PEC。
6. 动态解耦与去随机化
动态解耦(DD):在闲置比特上插入脉冲序列,抵消退相干:
原理:周期性翻转(如 XY4 序列)平均掉环境噪声
在等待/闲置期间插入 → 减少 T2 退相干影响
XY4 序列:X Y X Y(每个门间隔固定)
效果:把退相干「平均掉」,类似回波技术
去随机化(Pauli twirling):把噪声「随机化」成好处理的形状:
在门前后随机插入 Pauli 门(I/X/Y/Z)
噪声被「规范成」depolarizing 通道 → 好建模、好缓解
代价:增加门数(少量)
实际使用:
# Qiskit 的 dynamical decoupling 插入
from qiskit.transpiler.passes import DynamicalDecoupling
from qiskit.circuit.library import XGate, SXGate
dd = DynamicalDecoupling([XGate(), SXGate()]) # XY4 序列
circuit = dd(circuit)
记忆:动态解耦「平均掉」闲置退相干、Pauli twirling「规范化」噪声形状——两者都让缓解更有效。
7. Qiskit 错误缓解工具实战
Qiskit Runtime 自带缓解选项(开箱即用):
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2, EstimatorV2
service = QiskitRuntimeService()
backend = service.backend("ibm_sherbrooke")
# SamplerV2 自带测量缓解(resilience 选项)
sampler = SamplerV2(backend=backend)
job = sampler.run([qc], shots=8192,
resilience_level=1) # 0=无, 1=测量缓解, 2/3=更强
result = job.result()
# EstimatorV2:算期望值,自带更高级缓解
estimator = EstimatorV2(backend=backend)
job = estimator.run([(qc, cost_hamiltonian)],
shots=8192,
resilience_level=2) # ZNE 等
resilience_level 对照:
| 级别 | 缓解内容 | 代价 |
|---|---|---|
| 0 | 无 | 最快 |
| 1 | 测量缓解 | 中 |
| 2 | ZNE 类 | 慢 |
| 3 | 更强(PEC 近似) | 最慢 |
记忆:Qiskit Runtime 的
resilience_level是一键缓解——从 0 到 3 逐级加强,采样换保真度。
8. 缓解效果评估:如何量化提升
缓解效果怎么量:
1. 已知答案验证(制备已知态测错误率)
2. 对比缓解前后与理想值偏差
3. 用保真度/期望值误差
示例评估:
# 对比缓解前后
import numpy as np
ideal_value = 1.0 # 理论值
raw_err = abs(raw_estimate - ideal_value)
mitig_err = abs(mitigated_estimate - ideal_value)
print(f"原始误差: {raw_err:.4f}")
print(f"缓解后误差: {mitig_err:.4f}")
print(f"提升: {100*(raw_err-mitig_err)/raw_err:.0f}%")
缓解的「天花板」:
缓解不能解决所有问题(有偏估计残留)
深电路缓解效果有限 → 终究要容错
缓解是「过渡技术」——当下的救命稻草
记忆:缓解效果 = 缓解前后误差对比——大部分场景能提升 2-10 倍,但深电路的天花板要容错来突破。
9. 选型指南:什么时候用哪种
| 场景 | 首选缓解 | 理由 |
|---|---|---|
| 任意电路、快速 | 测量缓解 | 最简单有效 |
| 期望值估计 | ZNE | 通用好平衡 |
| 小电路高精度 | PEC | 无偏 |
| 闲置比特多 | 动态解耦 | 省退相干 |
| 噪声形状乱 | Pauli twirling | 规范化 |
| 生产环境 | Resilience level 1-2 | 开箱即用 |
组合策略:
实测流程:
测量缓解(必做)→ ZNE(估期望值)→ 必要时 DD 插入
逐层加码,采样预算内求最优
记忆:缓解选型——测量缓解打底、ZNE 通用、PEC 精、DD 防闲置退相干——先上便宜的,不够再上贵的。
10. 速查表
| 需求 | 做法 |
|---|---|
| 测量缓解 | 校准矩阵 + MeasurementFilter |
| ZNE | 门折叠 + 外推 |
| PEC | 随机分解 + 加权平均(无偏贵) |
| 动态解耦 | DynamicalDecoupling 插序列 |
| Twirling | 随机 Pauli 门规范化噪声 |
| 一键缓解 | resilience_level=1/2/3 |
| 评估效果 | 缓解前后误差对比 |
| 采样换保真 | 缓解越强采样越多 |
| 深电路 | 缓解有限,终需容错 |
一句话记忆:错误缓解是 NISQ 期的「统计外挂」——测量缓解校准读出、ZNE 加噪外推、PEC 无偏但贵、动态解耦防闲置退相干;Qiskit 的 resilience_level 一键开启;评估用缓解前后误差对比;缓解是过渡技术、容错是终点——先用好今天能用的。
延伸阅读
- /quantum-error-correction/ — 纠错 vs 缓解对比
- /quantum-qubit-gates-basics/ — 噪声与测量基础
- /quantum-qiskit-programming/ — Qiskit 实战
- /quantum-circuit-optimization/ — 编译降噪(前置)
- /quantum-hardware-annealing/ — 硬件噪声来源
- [[cs-fundamentals]] — 统计与估计理论
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。