PEC — Probabilistic Error Cancellation

qc/mitigation qc/noise

Probabilistic Error Cancellation (PEC) mitigates gate noise by probabilistically rewriting the circuit to sample from the inverse noise channel. It produces an unbiased expectation value estimate when the noise model is accurate, at the cost of a sampling overhead .

Core idea

PEC uses the learned Pauli-Lindblad noise model to construct an inverse noise map (anti-noise), then:

  1. Samples circuits from the quasi-probability distribution of the anti-noise
  2. Each shot gets a sign from the quasi-probability weights
  3. After averaging with rescaling by , the result is unbiased

PEC vs PNA

PECPNA
CircuitRewritten (anti-noise sampling)Unchanged
ObservableUnchangedRewritten to
CostSampling overhead More observable terms
BiasExactExact (up to truncation)
Requires special structureNoNo (but works best on local observables)

Sampling overhead

where is the learned rate of generator at layer .

The number of shots needed scales as . Because is exponential in total circuit noise, PEC becomes expensive quickly as circuits grow deeper.

For a 100-qubit Trotter circuit at depth 4000, even at IBM’s best current error rates, full PEC would take more than a day of QPU time.

Runtime PEC vs Samplomatic PEC

Runtime Estimator PECSamplomatic PEC (Chapter 3)
Enableresilience.pec_mitigation = Trueinject_noise_strategy="individual_modification" + SLC
Per-layer controlNone exposedFull access via noise_scales per generator
Overhead controlresilience.pec.max_overhead capbias_tolerance in compute_local_scales

The Runtime switch is convenient but the API exposes no per-layer or per-generator knobs. The sampling overhead can blow up because every learned generator is cancelled.

PEC + SLC

SLC reduces PEC’s overhead by pruning generators outside the observable’s lightcone. This is the practical path for utility-scale PEC.

Full PEC is the limit of SLC at bias_tolerance = 0 (cancel everything).

Self-Check

  • Could you explain why PEC produces an unbiased estimate while ZNE doesn’t?
  • Why does PEC’s sampling overhead grow exponentially with circuit depth?
  • What’s the practical difference between enabling PEC via resilience.pec_mitigation vs via Samplomatic’s individual_modification?