Zero-Noise Extrapolation
Deliberately amplifying noise, measuring the result at several noise levels, and extrapolating back to the zero-noise limit.
The premise
Suppose an expectation value
Amplifying noise
- Gate folding: replace each gate G with G G^dagger G, tripling its exposure to noise while preserving the logical operation. Repeating scales noise further.
- Pulse stretching: lengthen gate pulses so the qubits spend proportionally longer under decoherence.
- Global or local folding: fold the whole circuit or selected layers to reach fractional noise scale factors.
Extrapolation models
With expectation values measured at scale factors like lambda = 1, 2, 3, fit a model and evaluate at zero. Common models are linear (assuming small noise), polynomial (for curvature), and exponential (motivated by depolarizing noise, where
import numpy as np
# linear ZNE from expectation values at noise scales
scales = np.array([1.0, 2.0, 3.0])
vals = np.array([0.62, 0.48, 0.37]) # measured <O> at each scale
slope, intercept = np.polyfit(scales, vals, 1)
zne_estimate = intercept # value extrapolated to scale 0
print(zne_estimate)
Strengths and limits
ZNE needs no extra qubits and no detailed noise model, making it one of the most practical mitigation methods. Its accuracy depends on the extrapolation model matching the true noise dependence; a wrong model introduces bias, and each extra noise level multiplies the measurement cost. It works best for shallow-to-moderate circuits where the noise-versus-observable curve is smooth. ZNE is often combined with readout mitigation and is a staple of the error mitigation toolkit.