4. 量子噪声信道建模与仿真

在真实量子硬件上,量子比特并非孤立系统,它会与周围环境发生不可避免的耦合,导致退相干、能量弛豫和门操作误差。要在算法层面评估噪声鲁棒性,第一步就是把物理噪声抽象为可计算、可复现的量子信道模型。本节围绕比特翻转、相位翻转、去极化、振幅阻尼四类典型信道,说明它们的数学形式、物理含义,以及如何用 Qiskit 或 Cirq 构建可复现的噪声仿真环境。

一、从物理噪声到量子信道

量子信道是作用在密度矩阵上的完全正定保迹映射(CPTP map)。若把噪声看作以一定概率发生的随机过程,则可用算符和表示:

ρ' = Σ_k E_k ρ E_k†,  且 Σ_k E_k† E_k = I

其中 {E_k} 称为 Kraus 算符。不同噪声对应不同的 Kraus 集合。理解这一点后,仿真就变成“选择 Kraus 算符 + 设定概率参数”的过程。下面先给出四类信道的定义与参数约定,再进入代码实现。

二、四类典型信道模型

比特翻转信道(Bit Flip):以概率 p 将 |0⟩ 变为 |1⟩、|1⟩ 变为 |0⟩,等价于以概率 p 施加 Pauli-X。Kraus 算符为 E₀=√(1−p)I,E₁=√p X。它模拟的是比特态本身的翻转错误。

相位翻转信道(Phase Flip):以概率 p 施加 Pauli-Z,使 |+⟩ 变为 |−⟩,改变的是相位而非布居数。Kraus 算符为 E₀=√(1−p)I,E₁=√p Z。它与比特翻转在布洛赫球上分别对应绕 X 轴和 Z 轴的收缩。

去极化信道(Depolarizing):以概率 p 随机施加 X、Y、Z 之一,使量子态向完全混合态 I/2 收缩。其等效形式为 ρ' = (1−p)ρ + (p/3)(XρX + YρY + ZρZ)。去极化信道是硬件上最常用的“平均误差”模型,单比特门误差率常直接映射为去极化参数。

振幅阻尼信道(Amplitude Damping):描述能量从 |1⟩ 弛豫到 |0⟩ 的过程,参数 γ 对应时间 t 内的弛豫概率,γ = 1 − exp(−t/T₁)。Kraus 算符为 E₀=[[1,0],[0,√(1−γ)]],E₁=[[0,√γ],[0,0]]。它只把 |1⟩ 向 |0⟩ 衰减,因此是非对称信道,常用于模拟 T₁ 能量弛豫。

四类信道的核心区别可用下图概括:比特翻转改变布居数,相位翻转改变相干性,去极化同时压缩三者,振幅阻尼则单向衰减激发态。

四类量子噪声信道的布洛赫球作用对比 输入态 |ψ⟩ 经信道后,布洛赫矢量长度与方向的变化 比特翻转 Bit Flip · X 错误 |0⟩ |1⟩ |ψ⟩ X|ψ⟩ E₀=√(1−p)I E₁=√p X 布居数翻转 相干性部分保留 相位翻转 Phase Flip · Z 错误 |0⟩ |1⟩ |+⟩ |−⟩ E₀=√(1−p)I E₁=√p Z 布居数不变 相干性衰减 去极化 Depolarizing · X/Y/Z |ψ⟩ 收缩 ρ'=(1−p)ρ +(p/3)(XρX+YρY+ZρZ) 向 I/2 收缩 各方向均匀退化 振幅阻尼 Amplitude Damping · T₁ |0⟩ |1⟩ |ψ⟩ 衰减 E₀=[[1,0],[0,√(1−γ)]] E₁=[[0,√γ],[0,0]] γ=1−exp(−t/T₁) |1⟩→|0⟩ 单向 比特翻转改变布居数 · 相位翻转破坏相干性 · 去极化均匀压缩 · 振幅阻尼单向弛豫

三、用 Qiskit 构建可复现噪声环境

Qiskit 提供 qiskit_aer.noise 模块,可直接把上述信道注册为噪声模型。以下示例构建一个包含比特翻转、相位翻转、去极化和振幅阻尼的复合噪声模型,并固定随机种子以保证复现性。

from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
from qiskit_aer.noise import (
    NoiseModel, pauli_error, depolarizing_error,
    amplitude_damping_error, phase_damping_error
)

# 1. 比特翻转:p=0.02
bit_flip = pauli_error([('X', 0.02), ('I', 0.98)])

# 2. 相位翻转:p=0.03
phase_flip = pauli_error([('Z', 0.03), ('I', 0.97)])

# 3. 去极化:单比特门 p=0.01,双比特门 p=0.05
depol_1q = depolarizing_error(0.01, 1)
depol_2q = depolarizing_error(0.05, 2)

# 4. 振幅阻尼:γ=0.04(对应 T1 弛豫)
amp_damp = amplitude_damping_error(0.04)

# 组装噪声模型
noise_model = NoiseModel()
noise_model.add_all_qubit_quantum_error(bit_flip, ['x'])
noise_model.add_all_qubit_quantum_error(phase_flip, ['z'])
noise_model.add_all_qubit_quantum_error(depol_1q, ['u1', 'u2', 'u3'])
noise_model.add_all_qubit_quantum_error(depol_2q, ['cx'])
noise_model.add_all_qubit_quantum_error(amp_damp, ['id'])

# 固定种子,保证每次运行结果一致
sim = AerSimulator(noise_model=noise_model, seed_simulator=42)

# 测试电路:制备 Bell 态并测量
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

result = sim.run(transpile(qc, sim), shots=4096).result()
counts = result.get_counts()
print(counts)

运行后典型输出(示例,非实测)可能为 {'00': 1980, '11': 1930, '01': 95, '10': 91}。理想 Bell 态只应出现 00 和 11,各约 2048 次;出现 01/10 说明噪声已引入比特翻转或去极化错误。通过对比不同噪声参数下的 counts 分布,即可量化信道对纠缠保真度的影响。

四、用 Cirq 构建等价噪声环境

Cirq 通过 cirq.depolarize、cirq.bit_flip、cirq.phase_flip、cirq.amplitude_damp 等信道对象,在电路层插入噪声。其优势是噪声与门操作在同一电路描述中,便于逐门控制。

import cirq

q0, q1 = cirq.LineQubit.range(2)

# 构建带噪声的 Bell 态电路
circuit = cirq.Circuit([
    cirq.H(q0),
    cirq.depolarize(p=0.01).on(q0),          # 单比特去极化
    cirq.CNOT(q0, q1),
    cirq.depolarize(p=0.05).on(q0, q1),      # 双比特去极化
    cirq.amplitude_damp(gamma=0.04).on(q0),  # 振幅阻尼
    cirq.bit_flip(p=0.02).on(q1),            # 比特翻转
    cirq.measure(q0, q1, key='m')
])

# 固定随机种子,保证采样可复现
sim = cirq.DensityMatrixSimulator(seed=1234)
result = sim.run(circuit, repetitions=4096)
print(result.histogram(key='m'))

Cirq 的 DensityMatrixSimulator 直接演化密度矩阵,能精确反映信道对相干性的影响;若使用 cirq.Simulator 配合 cirq.kraus,则按采样方式近似。两者结果在 shots 足够大时趋于一致。

五、参数设置与结果判读要点

构建可复现噪声环境时,需注意以下关键点:

  • 参数来源要明确:p 或 γ 应来自硬件标定(如 T₁、T₂、门误差率),而非随意设定。例如 γ = 1 − exp(−t_gate/T₁),t_gate 为门时间。
  • 噪声位置要对应物理过程:单比特门误差用单比特去极化,双比特门用双比特去极化,空闲时段用振幅阻尼或相位阻尼。
  • 随机种子必须固定:Qiskit 用 seed_simulator,Cirq 用 seed,否则每次 counts 波动会干扰对比。
  • 结果判读看分布偏移:理想分布与含噪分布的 TVD(全变分距离)或保真度可作为鲁棒性指标。TVD 越小,信道影响越弱。
若需评估算法在噪声下的鲁棒性,建议先用去极化信道做粗粒度扫描(p 从 0 到 0.1),再用振幅阻尼模拟 T₁ 主导的弛豫,最后叠加比特/相位翻转模拟特定硬件错误。分层建模比一次性堆叠所有噪声更易定位误差来源。
注意:Qiskit 的 pauli_error 与 depolarizing_error 参数含义不同。前者直接给出 Pauli 算符概率,后者 p 表示“发生非恒等操作的总概率”,且三轴均分。混用时需换算,否则会高估或低估噪声强度。

综上,四类信道各有明确的 Kraus 表示和物理对应。在 Qiskit 或 Cirq 中,只要固定随机种子、按物理过程放置噪声、并明确参数来源,就能构建可复现的噪声仿真环境,为后续的鲁棒性评估提供稳定基线。