Configurar la mitigación de errores¶
Las técnicas de mitigación de errores permiten a los usuarios mitigar los errores del circuito modelando el ruido del dispositivo en el momento de la ejecución. Esto generalmente da como resultado una sobrecarga de preprocesamiento cuántico relacionada con el entrenamiento del modelo y una sobrecarga de posprocesamiento clásico para mitigar los errores en los resultados sin procesar mediante el uso del modelo generado.
Las técnicas de mitigación de errores integradas en las primitivas son opciones de resiliencia avanzadas. Para especificar estas opciones, utiliza la opción resilience_level
al enviar tu trabajo (job).
El nivel de resiliencia especifica cuánta resiliencia construir contra los errores. Los niveles más altos generan resultados más precisos, a expensas de tiempos de procesamiento más prolongados. Los niveles de resiliencia se pueden usar para configurar el equilibrio costo/precisión al aplicar la mitigación de errores a tu consulta primitiva. La mitigación de errores reduce los errores (sesgo) en los resultados al procesar las salidas de una colección o conjunto de circuitos relacionados. El grado de reducción de errores depende del método aplicado. El nivel de resiliencia abstrae la elección detallada del método de mitigación de errores para permitir a los usuarios razonar sobre el intercambio de costo/precisión que es apropiado para su aplicación.
Dado esto, cada nivel corresponde a un método o métodos con un nivel creciente de sobrecarga de muestreo cuántico para permitirte experimentar con diferentes compensaciones de precisión de tiempo. La siguiente tabla te muestra qué niveles y métodos correspondientes están disponibles para cada una de las primitivas.
Nota
La mitigación de errores es específica de la tarea, por lo que las técnicas que puedes aplicar varían en función de si estás muestreando una distribución o generando valores esperados.
Nivel de Resiliencia |
Definición |
Estimator |
Sampler |
---|---|---|---|
0 |
Sin mitigación |
Ninguna |
Ninguna |
1 [Default] |
Costos mínimos de mitigación: Mitigar el error asociado con los errores de lectura |
Extinción de Error de Lectura Torcida (TREX) |
M3 |
2 |
Costos de mitigación medios. Por lo general, reduce el sesgo en los estimators, pero no se garantiza que sea un sesgo cero. |
Extrapolación de Ruido Cero (ZNE) |
— |
3 |
Mitigación intensa con muestreo de capas. Teóricamente se espera que entregue estimadores de sesgo cero. |
Cancelación Probabilística de Errores (PEC) |
— |
Nota
Los niveles de resiliencia se encuentran actualmente en versión beta, por lo que la sobrecarga de muestreo y la calidad de la solución variarán de un circuito a otro. Se lanzarán nuevas funciones, opciones avanzadas y herramientas de administración de forma continua. No se garantiza que se apliquen métodos específicos de mitigación de errores en cada nivel de resiliencia.
Configurar el Estimator con niveles de resiliencia¶
Resilience Level 0
No se aplica mitigación de errores al programa de usuario.
Resilience Level 1
El nivel 1 aplica métodos de mitigación de errores que abordan en particular los errores de lectura. En el Estimator, aplicamos una técnica sin modelo conocida como Extinción de Error de Lectura Torcida (Twirled Readout Error eXtinction, TREX). Reduce el error de medición al diagonalizar el canal de ruido asociado con la medición mediante la inversión aleatoria de qubits a través de compuertas X inmediatamente antes de la medición, y la inversión del bit medido correspondiente si se aplicó una compuerta X. Se aprende un término de reescalado del canal de ruido diagonal comparando circuitos aleatorios inicializados en el estado cero. Esto permite que el servicio elimine el sesgo de los valores esperados que resultan del ruido de lectura. Este enfoque se describe con más detalle en Model-free readout-error mitigation for quantum expectation values.
Resilience Level 2
El nivel 2 usa el método de Extrapolación de Ruido Cero (Zero Noise Extrapolation, ZNE) que calcula un valor esperado del observable para diferentes factores de ruido (etapa de amplificación) y luego usa los valores esperados medidos para inferir el valor esperado ideal en el límite de ruido cero (etapa de extrapolación). Este enfoque tiende a reducir los errores en los valores esperados, pero no garantiza que produzca un resultado sin sesgo.

Figura 1 Ilustración del método ZNE¶
La sobrecarga de este método escala con el número de factores de ruido. La configuración predeterminada muestra el valor esperado en tres factores de ruido, lo que lleva a una sobrecarga de aproximadamente 3 veces cuando se emplea este nivel de resiliencia.
Resilience Level 3
El nivel 3 habilita el método de Cancelación Probabilística de Errores (Probabilistic Error Cancellation, PEC). Este enfoque mitiga el error al aprender e invertir un modelo de ruido disperso que puede capturar el ruido correlacionado. PEC devuelve una estimación sin sesgo de un valor esperado siempre que el modelo de ruido aprendido represente fielmente el modelo de ruido real en el momento de la mitigación. En la práctica, el procedimiento experimental para aprender el modelo de ruido tiene ambigüedades debido a ciertos términos de error que no se pueden distinguir de forma independiente. Estos se resuelven mediante una suposición de simetría que, dependiendo del verdadero ruido subyacente, puede conducir a una estimación sesgada de los valores esperados mitigados debido al uso de un modelo de ruido imperfecto.
La implementación primitiva de Qiskit Runtime de PEC aborda específicamente el ruido en las compuertas autoinversas de dos qubits, por lo que primero estratifica cada circuito de entrada en una secuencia alterna de compuertas simultáneas de 1 qubit seguidas de una capa de compuertas simultáneas de 2 qubits. Luego aprende el modelo de ruido asociado con cada capa única de compuerta de 2 qubits.

Figura 2 Este es un ejemplo de un circuito estratificado, donde las capas de compuertas de dos qubits están etiquetadas como capa 1 a n. Ten en cuenta que cada \(U_l\) se compone de compuertas de dos qubits en la gráfica de conectividad nativa del procesador cuántico. Las cajas vacías representan compuertas arbitrarias de un solo qubit.¶
La sobrecarga de este método escala con el número de factores de ruido. La configuración predeterminada muestra el valor esperado en tres factores de ruido, lo que lleva a una sobrecarga de aproximadamente 3 veces cuando se emplea este nivel de resiliencia.
PEC utiliza un método de cuasi probabilidad para imitar el efecto de invertir el ruido aprendido. Esto requiere el muestreo de una familia de circuitos aleatorios asociada con el circuito original del usuario. La aplicación de PEC aumentará la variabilidad de las estimaciones del valor esperado devuelto, a menos que también aumente el número de muestras por circuito para los circuitos de entrada y de caracterización. La cantidad de muestras necesarias para contrarrestar esta variabilidad aumenta exponencialmente con la intensidad del ruido del circuito mitigado.
Cómo funciona esto:
Al estimar un observable de Pauli no mitigado \(\langle P\rangle\) el error estándar en el valor esperado estimado viene dado por \(\frac{1}{\sqrt{N_{\mbox{shots}}}}\left(1- \langle P\rangle^2\right)\) donde \(N_{\mbox{shots}}\) es el número de iteraciones usadas para estimar \(\langle P\rangle\). Al aplicar la mitigación de PEC, el error estándar se convierte en \(\sqrt{\frac{S}{N_{\mbox{samples}}}}\left(1- \langle P\rangle^2\right)\) donde \(N_{\mbox{samples}}\) es el número de muestras de PEC.
La sobrecarga de muestreo escala exponencialmente con un parámetro que caracteriza el ruido colectivo del circuito de entrada. A medida que la primitiva de Qiskit Runtime aprenda el ruido de tu circuito, devolverá metadatos sobre la sobrecarga de muestreo asociada con esa capa en particular. Etiquetemos la sobrecarga de la capa \(l\) como \(\gamma_l\). Entonces, la sobrecarga de muestreo total para mitigar tu circuito es el producto de todas las sobrecargas de capa, es decir:
\(S = \prod_l \gamma_l\)
Cuando el Estimator complete la fase de aprendizaje del modelo de la consulta primitiva, devolverá metadatos sobre la sobrecarga de muestreo total para el circuito.
Dependiendo de la precisión requerida por tu aplicación, deberás escalar el número de muestras en consecuencia. La siguiente gráfica ilustra la relación entre el error del estimator y el número de muestras del circuito para diferentes sobrecargas de muestreo totales.

Ten en cuenta que la cantidad de muestras requeridas para brindar la precisión deseada no se conoce antes de la consulta primitiva porque el factor de escala de mitigación se descubre durante la fase de aprendizaje de PEC.
Sigerimos comenzar con circuitos de profundidad corta para tener una idea de la escala de la sobrecarga de muestreo de PEC antes de intentar problemas más grandes.
Ejemplo¶
La interfaz de Estimator permite a los usuarios trabajar sin problemas con la variedad de métodos de mitigación de errores para reducir el error en los valores esperados de los observables. El siguiente código usa la Extrapolación de Ruido Cero (Zero Noise Extrapolation) simplemente configurando resilience_level 2
.
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Estimator, Options
service = QiskitRuntimeService()
options = Options()
options.resilience_level = 2
options.optimization_level = 3
with Session(service=service, backend="ibmq_qasm_simulator") as session:
estimator = Estimator(session=session, options=options)
job = estimator.run(circuits=[psi1], observables=[H1], parameter_values=[theta1])
psi1_H1 = job.result()
# Close the session only if all jobs are finished, and you don't need to run more in the session
session.close()
Nota
As you increase the resilience level, you will be able to use additional methods to improve the accuracy of your result. However, because the methods become more advanced with each level, they require additional sampling overhead (time) to generate more accurate expectation values. Note that higher resilience levels do not guarantee better quality. Higher levels only mean greater overhead. Each method has its strengths and weaknesses. For example, TREX (Twirled Readout Error eXtinction) is good for shallow circuits because of its readout error mitigation whereas ZNE (Zero Noise Extrapolation) is good for deeper circuits. PEC can mitigate arbitrary errors but may not work in practice because of its large overhead.
Configurar Sampler con niveles de resiliencia¶
La configuración de resiliencia predeterminada de Sampler (nivel 1) habilita la mitigación de errores de lectura para que los usuarios puedan generar distribuciones de cuasi probabilidad mitigadas.
Resilience Level 1
El nivel 1 utiliza la rutina de mitigación de medición sin matriz (matrix-free measurement mitigation, M3) para mitigar el error de lectura. M3 funciona en un subespacio reducido definido por las cadenas de bits de entrada ruidosas que deben corregirse. Debido a que el número de cadenas de bits únicas puede ser mucho más pequeño que la dimensionalidad del espacio completo de Hilbert de múltiples qubits, el sistema lineal de ecuaciones resultante es nominalmente mucho más fácil de resolver.

Figura 3 Ilustración del método M3¶
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Sampler, Options
service = QiskitRuntimeService()
options = Options()
options.resilience_level = 1
options.optimization_level = 3
with Session(service=service, backend="ibmq_qasm_simulator") as session:
sampler = Sampler(session=session, options=options)
Opciones avanzadas de resiliencia¶
Puedes ajustar las opciones avanzadas para configurar aún más su estrategia de resiliencia. Estos métodos se pueden usar junto con los niveles de resiliencia en los que cambias las opciones específicas de interés y dejas que tu nivel de resiliencia establecido previamente gestione el resto.
Como parte de la versión beta de las opciones de resiliencia, los usuarios podrán configurar ZNE utilizando las siguientes opciones avanzadas. Pronto agregaremos opciones para ajustar otros niveles de resiliencia que incluyen PEC.
Opciones |
Entradas |
Descripción |
---|---|---|
options.resilience.noise_amplifier(Optional[str]) seleccionar tu estrategia de amplificación |
|
Amplifica el ruido de las compuertas de dos qubits al realizar el plegado de la compuerta local. |
|
Amplifica el ruido de todas las compuertas CNOT al realizar el plegado de la compuerta local. |
|
|
Amplifica el ruido de todas las compuertas al realizar el plegado de la compuerta local. |
|
|
Amplifica el ruido del circuito de entrada realizando un plegamiento global de todo el circuito de entrada. |
|
options.resilience.noise_factors((Optional[Sequence[float]]) |
(1, 3, 5) [Default] |
Factores de amplificación de ruido, donde 1 representa el ruido de referencia. Todos deben ser mayores o iguales que la línea base. |
options.resilience.extrapolator(Optional[str]) |
|
Extrapolación polinomial de grado uno. |
|
Extrapolación polinomial de grado dos e inferior. |
|
|
Extrapolación polinomial de grado tres e inferior. |
|
|
Extrapolación polinomial de grado cuatro e inferior. |
Ejemplo de cómo agregar resilience_options
en tu sesión de estimator¶
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Estimator, Options
service = QiskitRuntimeService()
options = Options()
options.optimization_level = 3
options.resilience_level = 2
options.resilience.noise_factors = (1, 2, 3, 4)
options.resilience.noise_amplifier = 'CxAmplifier'
options.resilience.extrapolator = 'QuadraticExtrapolator'
with Session(service=service, backend="ibmq_qasm_simulator") as session:
estimator = Estimator(session=session, options=options)
job = estimator.run(circuits=[psi1], observables=[H1], parameter_values=[theta1])
psi1_H1 = job.result()
# Close the session only if all jobs are finished, and you don't need to run more in the session
session.close()