Sample-based Quantum Diagonalization (SQD)
La diagonalización cuántica basada en muestreo (SQD) combina el álgebra lineal clásica con la potencia de la computadora cuántica para diagonalizar un hamiltoniano (una matriz) y calcular sus valores propios y vectores propios. La diagonalización de matrices es una operación matemática importante que se utiliza en muchas áreas de la ciencia, la informática y la optimización.
El siguiente video ofrece una descripción general de SQD, muestra qué determina su utilidad y explica qué lo hace más rápido frente a muchos otros enfoques. El texto posterior contiene más detalles.
1. Introducción y motivación
Consideremos como ejemplo la ecuación de valores propios de energía, hecha famosa por Schrödinger.
es el hamiltoniano de un sistema, la función de onda (también conocida como estado propio) y un valor propio. Los valores propios de la matriz representan los niveles de energía del sistema. En el caso de una molécula, por ejemplo, el valor propio más pequeño representa la energía del estado fundamental de la molécula. En muchos problemas, lo que interesa es estimar la energía del estado fundamental.
Mediante la aplicación de métodos de diagonalización exacta del álgebra lineal, se puede diagonalizar la matriz completa . Sin embargo, este enfoque se vuelve computacionalmente intensivo (e incluso imposible) a medida que la matriz crece. Incluso para moléculas químicas pequeñas, puede volverse inmanejablemente grande; por ejemplo, el hamiltoniano para la molécula con una base cc-PVDZ tiene una dimensión de .
Afortunadamente, no siempre se necesitan todos los valores propios y vectores propios de un hamiltoniano . Por lo tanto, la diagonalización de la matriz completa no es necesaria en muchos casos prácticos. En la estimación del estado fundamental, por ejemplo, solo interesa el valor propio más pequeño y el vector propio asociado. Esto permite aplicar el concepto de proyección sobre un subespacio (útil).
Consideremos una matriz , cuyo espacio vectorial completo (espacio de Hilbert) tiene dimensión ( es grande). Entonces elegimos un subespacio (), un subconjunto del espacio de Hilbert completo, con dimensión , donde es suficientemente pequeño. Después de proyectar sobre este subespacio, la matriz proyectada (por ejemplo, ) es más pequeña (). El más pequeño puede diagonalizarse con un método numérico clásico adecuado para calcular valores propios y vectores propios para ese subespacio.
Nótese que el subespacio debe estar en el soporte de nuestro estado propio objetivo (por ejemplo, del estado fundamental). En otras palabras, el hamiltoniano proyectado debe estar en un subespacio que contenga el valor propio más pequeño.
2. Proyección y diagonalización
Supongamos que queremos encontrar el valor propio más pequeño y el vector propio asociado de la siguiente matriz hamiltoniana de .
Diagonalizaremos la matriz completa así como diferentes versiones proyectadas () para diferentes subespacios, con el fin de ilustrar la escalabilidad y la importancia de la elección del subespacio.
La energía del estado fundamental (valor propio mínimo) de la matriz es , y la función de onda exacta del estado fundamental (vector propio) es:
Es decir, el estado fundamental de la matriz está generado por dos vectores de la base computacional y .
# Added by doQumentation — required packages for this notebook
!pip install -q numpy scipy
import numpy as np
from scipy.linalg import eigh
np.set_printoptions(precision=4, sign="-", suppress=True, linewidth=100)
H = np.array(
[
[0.2235, -0.039, -0.1035, -0.0818, 0.1746, 0.1091, 0.1165, -0.0104],
[-0.0390, 0.6621, 0.0706, -0.1964, -0.0782, 0.2619, 0.1095, 0.0029],
[-0.1035, 0.0706, 0.9961, 0.1724, 0.1067, -0.2299, -0.1817, 0.1571],
[-0.0818, -0.1964, 0.1724, -0.1773, 0.1019, -0.4778, -0.1272, -0.0414],
[0.1746, -0.0782, 0.1067, 0.1019, 0.1418, -0.1359, -0.1793, -0.0766],
[0.1091, 0.2619, -0.2299, -0.4778, -0.1359, 0.1014, 0.1696, 0.0552],
[0.1165, 0.1095, -0.1817, -0.1272, -0.1793, 0.1696, 0.4227, 0.2702],
[-0.0104, 0.0029, 0.1571, -0.0414, -0.0766, 0.0552, 0.2702, 0.4456],
]
)
eigvals, eigvecs = eigh(H)
print("Eigenvalues:")
print(eigvals)
print(f"Minimum eigenvalue: {eigvals.min()}")
print("\nEigenvectors (columns represent vectors):")
print(eigvecs)
print("\nEigenvector for the minimum eigenvalue (ground state)")
print(eigvecs[:, np.argmin(eigvals)])
Eigenvalues:
[-0.5357 -0.1321 0.1049 0.1258 0.3616 0.6405 0.947 1.3039]
Minimum eigenvalue: -0.5356560029438817
Eigenvectors (columns represent vectors):
[[-0. -0.5612 0.098 -0.0024 0.8051 -0.0806 0.0643 0.1288]
[-0. -0.1403 -0.1985 -0.4249 -0.0092 0.585 -0.5952 0.2526]
[ 0. 0.0416 0.3041 0.2122 0.1509 -0.0139 -0.5794 -0.7086]
[ 0.8 -0.1936 -0.0127 -0.4376 -0.1081 -0.0838 0.1557 -0.2966]
[ 0. 0.6716 -0.3535 -0.2552 0.5395 0.0954 0.1449 -0.1941]
[ 0.6 0.258 0.017 0.5834 0.1441 0.1118 -0.2076 0.3954]
[ 0. 0.3088 0.5504 -0.4197 0.0626 -0.468 -0.2625 0.3657]
[-0. -0.1146 -0.6559 0.0356 -0.0394 -0.6352 -0.3856 0.0418]]
Eigenvector for the minimum eigenvalue (ground state)
[-0. -0. 0. 0.8 0. 0.6 0. -0. ]
A continuación, proyectaremos la matriz sobre diferentes subespacios y comprobaremos si obtenemos el estado fundamental exacto. En particular, proyectamos la matriz sobre un subespacio generado por:
- los vectores exactos del estado fundamental ( y ),
- vectores que excluyen algunos o todos los vectores exactos del estado fundamental (por ejemplo, , y ),
- vectores que contienen tanto vectores del estado fundamental exacto como vectores que no son del estado fundamental (pero no todos los vectores posibles del espacio de Hilbert).
2.1 Caso 1: El subespacio incluye el estado fundamental
Supongamos que queremos proyectar sobre un subespacio () generado por dos vectores y . El hamiltoniano proyectado se define como:
x1 = np.zeros(8)
x1[3] = 1 # binary 011 is 3 in decimal. |011> = |3> = [0,0,0,1,0,0,0,0]
x2 = np.zeros(8)
x2[5] = 1 # binary 101 is 5 in decimal
Hs = np.array([[x1 @ H @ x1.T, x1 @ H @ x2.T], [x2 @ H @ x1.T, x2 @ H @ x2.T]])
print(Hs)
[[-0.1773 -0.4778]
[-0.4778 0.1014]]
eigvals, eigvecs = eigh(Hs)
print(f"Minimum eigenvalue: {eigvals.min()}")
print(f"Eigenvector for minimum eigenvalue: {eigvecs[:,np.argmin(eigvals)]}")
Minimum eigenvalue: -0.535656000064295
Eigenvector for minimum eigenvalue: [-0.8 -0.6]
Aquí se pueden hacer varias observaciones importantes.
- Dado que generamos el subespacio con dos vectores, la matriz proyectada () tiene dimensión , más pequeña que la matriz completa ().
- El valor propio mínimo de la matriz proyectada coincide con el valor propio del estado fundamental exacto.
- Los valores en la variable
eigvecsindican las amplitudes de los vectores que generan el subespacio. Con ellos se puede reconstruir el estado propio (estado fundamental). En este caso obtenemos el estado fundamental exacto (salvo una fase global):
2.2 Caso 2: El subespacio excluye algunos o todos los vectores del estado fundamental
A continuación, proyectamos sobre un subespacio generado por tres vectores , y . Elegimos deliberadamente los vectores de modo que se excluya un vector del estado fundamental (). El hamiltoniano proyectado se define como:
x1 = np.zeros(8)
x1[0] = 1
x2 = np.zeros(8)
x2[3] = 1
x3 = np.zeros(8)
x3[6] = 1
Hs = np.array(
[
[x1 @ H @ x1.T, x1 @ H @ x2.T, x1 @ H @ x3.T],
[x2 @ H @ x1.T, x2 @ H @ x2.T, x2 @ H @ x3.T],
[x3 @ H @ x1.T, x3 @ H @ x2.T, x3 @ H @ x3.T],
]
)
print(Hs)
[[ 0.2235 -0.0818 0.1165]
[-0.0818 -0.1773 -0.1272]
[ 0.1165 -0.1272 0.4227]]
eigvals, eigvecs = eigh(Hs)
print(f"Minimum eigenvalue: {eigvals.min()}")
Minimum eigenvalue: -0.21108858736702252
El valor propio no coincide en este caso con el valor propio mínimo del hamiltoniano completo. La observación clave es: si proyectamos sobre un subespacio al que le faltan estados base de nuestro estado objetivo (fundamental), parcial o completamente, el estado fundamental estimado se desvía del exacto.
2.3 Caso 3: El subespacio incluye tanto vectores del estado fundamental como vectores que no son del estado fundamental
A continuación, mostramos un caso en el que el subespacio está generado por vectores que contienen tanto los vectores exactos del estado fundamental como vectores no deseados. Supongamos que nuestro subespacio está generado por , (presentes en el estado fundamental exacto) y (no presente en el estado fundamental exacto).
x1 = np.zeros(8)
x1[3] = 1
x2 = np.zeros(8)
x2[5] = 1
x3 = np.zeros(8)
x3[7] = 1
Hs = np.array(
[
[x1 @ H @ x1.T, x1 @ H @ x2.T, x1 @ H @ x3.T],
[x2 @ H @ x1.T, x2 @ H @ x2.T, x2 @ H @ x3.T],
[x3 @ H @ x1.T, x3 @ H @ x2.T, x3 @ H @ x3.T],
]
)
print(Hs)
[[-0.1773 -0.4778 -0.0414]
[-0.4778 0.1014 0.0552]
[-0.0414 0.0552 0.4456]]
eigvals, eigvecs = eigh(Hs)
print(f"Minimum eigenvalue: {eigvals.min()}")
print(f"Eigenvector for minimum eigenvalue: {eigvecs[:,np.argmin(eigvals)]}")
Minimum eigenvalue: -0.53565600006461
Eigenvector for minimum eigenvalue: [ 0.8 0.6 -0. ]
En este caso, obtenemos nuevamente como valor propio mínimo, que coincide con el de la matriz completa (es decir, el estado fundamental exacto). Otro resultado interesante es la amplitud de , devuelta por el proceso de proyección y diagonalización. Esta amplitud es . Si reconstruimos la función de onda (estado propio) con las amplitudes y vectores calculados, obtenemos:
Incluso si nuestro subespacio contiene algunos vectores que no son del estado objetivo (junto con el conjunto completo de vectores objetivo), podemos calcular el valor propio y el estado propio correctos, ya que el proceso de proyección y diagonalización filtra los vectores no objetivo asignándoles amplitudes de . Esta propiedad de SQD proporciona una tolerancia al ruido inherente.
3. El papel de la computadora cuántica en SQD
Los análisis anteriores demuestran la importancia de los vectores que generan el subespacio, que deben estar en el soporte del estado objetivo. Esto plantea una pregunta importante: ¿Cómo elegimos vectores con soporte del estado objetivo para la construcción del subespacio?
Aquí es donde entran las computadoras cuánticas. La sinergia cuántico-clásica funciona en el paradigma SQD de la siguiente manera:
- Con un circuito cuántico adecuado, intentamos preparar en una computadora cuántica un estado que genere estados base sobre los cuales la función de onda objetivo (por ejemplo, el estado fundamental) tiene un soporte significativo. Los estados base muestreados (cadenas de bits) generan el subespacio para la proyección del hamiltoniano.
- Una computadora clásica proyecta el hamiltoniano sobre el subespacio (generado por las muestras/vectores de la computadora cuántica) y lo diagonaliza para calcular valores propios y vectores propios con métodos numéricos adecuados.
Existen diferentes maneras de preparar tal estado cuántico, variacional o no variacional, dependiendo del problema.
En las próximas dos lecciones mostramos dos ejemplos concretos de preparación de estados y muestreo.
- En la Lección 4, utilizamos un ansatz parametrizado de tipo local unitary coupled Jastrow (LUCJ) para generar muestras para un problema de química (estimación de la energía del estado fundamental de la molécula ). Inicializamos el ansatz LUCJ con parámetros de un cálculo clásico de coupled-cluster singles and doubles (CCSD).
- En la Lección 5, muestreamos de estados base de Krylov para generar el subespacio para un problema de física del estado sólido. Este enfoque es de naturaleza no variacional.
Además de estos enfoques específicos del problema, un procedimiento general de preparación de estados incluye un enfoque variacional en el que los parámetros del ansatz se actualizan iterativamente con un optimizador clásico.
Las muestras de computadoras cuánticas pre-tolerantes a fallos pueden ser ruidosas. SQD emplea un proceso de recuperación de configuración autoconsistente para corregir muestras ruidosas [1]. Discutiremos el proceso de recuperación de configuración con más detalle en la Lección 4 y lo aplicaremos iterativamente para corregir muestras ruidosas y refinar la estimación de la energía del estado fundamental para un problema de química.
3.1 Notas sobre el soporte del estado fundamental
Expliquemos el concepto de soporte del estado fundamental con más detalle. El soporte del estado fundamental puede definirse como el conjunto de estados base en los que el estado fundamental tiene una amplitud distinta de cero (hasta un umbral).
Supongamos que el estado fundamental exacto de un problema de qubits es
Si muestreamos el estado anterior, obtenemos un conjunto de vectores de la base computacional , (otros vectores de la base computacional tienen amplitud cero en el estado fundamental y, por lo tanto, idealmente no aparecen al muestrear).
Idealmente, el conjunto de vectores base para este estado consiste en (el subespacio de este estado está generado por estos dos vectores base).
En la práctica, no necesitamos preparar el estado fundamental exacto, ya que el muestreo de muchos otros estados puede proporcionarnos los mismos vectores. Por ejemplo:
Preparar y muestrear cualquiera de los estados anteriores produce vectores con amplitud distinta de cero en el estado fundamental; todos califican como estados con soporte del estado fundamental. Nótese que el muestreo de proporciona un vector adicional que tiene amplitud en el estado fundamental exacto. Sin embargo, ya hemos demostrado que incluir tales vectores en el subespacio no es un problema, ya que el proceso de proyección y diagonalización asigna la amplitud de los vectores no deseados a y podemos reconstruir el estado propio correcto.

Por lo tanto, preparar y muestrear a partir del estado fundamental exacto no es necesario. De hecho, esto puede ser difícil, ya que el estado fundamental exacto es desconocido a priori. A menudo, es incluso ventajoso no muestrear a partir del estado fundamental exacto, especialmente si la función de onda (el estado) es asimétrica y algunos estados base tienen probabilidades muy altas. Consideremos la siguiente función de onda:
Esta es una función de onda asimétrica donde los estados base y tienen amplitudes significativamente mayores que y . Al muestrear, obtendremos y con más frecuencia ( para y respectivamente, para y para ). Con un presupuesto de muestreo limitado (shots), es muy probable que nuestro conjunto de muestras contenga solo y . Como ya se demostró, si generamos el subespacio con un conjunto tan incompleto, no podemos encontrar el verdadero valor propio mínimo. Por lo tanto, es ventajoso (y necesario) muestrear a partir de un estado con soporte del estado fundamental.
3.2 Un argumento contra el muestreo uniforme
Puede ser tentador tomar muestras de una distribución uniforme para generar el subespacio. Para problemas pequeños esto puede funcionar, pero para problemas más grandes y prácticos no. En problemas grandes con muchos qubits, el espacio de Hilbert puede volverse inmanejablemente grande. Un espacio de Hilbert de 32 qubits tiene, por ejemplo, más de mil millones de vectores base posibles (). Si muestreamos uniformemente de este espacio con un presupuesto de muestras limitado (por ejemplo, vectores, para mantener la diagonalización manejable), el subespacio puede frecuentemente omitir vectores con soporte del estado fundamental, ya que el proceso es aleatorio. Por lo tanto, necesitamos un método sistemático para muestrear del soporte del estado fundamental utilizando circuitos cuánticos.
4. SQD y la dispersión de la función de onda
La brecha entre el espacio de Hilbert completo y la dimensión del subespacio manejable introduce otro aspecto importante de SQD: la dispersión de la función de onda. El enfoque SQD funciona bien para funciones de onda dispersas o concentradas, donde solo una pequeña fracción de los estados base tiene amplitudes no despreciables. Hay dos razones para ello:
- Si la función de onda es amplia (es decir, muchos estados base tienen amplitudes no despreciables) y no incluimos vectores con soporte del estado objetivo en el subespacio, podemos obtener valores propios y vectores propios incorrectos.
- Para evitar el problema anterior, necesitamos incluir muchos vectores en el subespacio. Sin embargo, la dimensión del hamiltoniano proyectado depende directamente de la dimensión del subespacio. Un subespacio más grande significa un hamiltoniano más grande, lo que puede hacer que la diagonalización sea intratable.
Ilustramos el problema con la siguiente matriz (). El valor propio más pequeño de es , y la función de onda (estado propio) asociada es amplia:
H_new = np.array(
[
[-0.958, 0.1853, -0.2663, -0.3875, -0.0524, -0.3779, -0.0145, -0.3369],
[0.1853, -0.4081, -0.8549, -0.2312, 0.0615, -0.2493, -0.3804, -0.3312],
[-0.2663, -0.8549, -0.6929, -0.0063, -0.0478, -0.0236, -0.2494, -0.0669],
[-0.3875, -0.2312, -0.0063, -0.4468, -0.6301, -0.4627, -0.1188, 0.0753],
[-0.0524, 0.0615, -0.0478, -0.6301, -0.6664, -0.1514, -0.3571, -0.3644],
[-0.3779, -0.2493, -0.0236, -0.4627, -0.1514, -0.9605, 0.0137, 0.0035],
[-0.0145, -0.3804, -0.2494, -0.1188, -0.3571, 0.0137, -1.1449, 0.0433],
[-0.3369, -0.3312, -0.0669, 0.0753, -0.3644, 0.0035, 0.0433, -1.2307],
]
)
eigvals, eigvecs = eigh(H_new)
print(f"Minimum eigenvalue: {eigvals.min()}")
print(f"Eigenvector for minimum eigenvalue: {eigvecs[:,np.argmin(eigvals)]}")
Minimum eigenvalue: -2.208137504726661
Eigenvector for minimum eigenvalue: [0.3536 0.3536 0.3536 0.3536 0.3535 0.3536 0.3535 0.3535]
Supongamos que proyectamos sobre un subespacio generado por cuatro vectores: , , y , y calculamos el valor propio.
x1 = np.zeros(8)
x1[0] = 1
x2 = np.zeros(8)
x2[2] = 1
x3 = np.zeros(8)
x3[5] = 1
x4 = np.zeros(8)
x4[6] = 1
H_new_s = np.array(
[
[x1 @ H_new @ x1.T, x1 @ H_new @ x2.T, x1 @ H_new @ x3.T, x1 @ H_new @ x4.T],
[x2 @ H_new @ x1.T, x2 @ H_new @ x2.T, x2 @ H_new @ x3.T, x2 @ H_new @ x4.T],
[x3 @ H_new @ x1.T, x3 @ H_new @ x2.T, x3 @ H_new @ x3.T, x3 @ H_new @ x4.T],
[x4 @ H_new @ x1.T, x4 @ H_new @ x2.T, x4 @ H_new @ x3.T, x4 @ H_new @ x4.T],
]
)
print(H_new_s)
[[-0.958 -0.2663 -0.3779 -0.0145]
[-0.2663 -0.6929 -0.0236 -0.2494]
[-0.3779 -0.0236 -0.9605 0.0137]
[-0.0145 -0.2494 0.0137 -1.1449]]
eigvals, eigvecs = eigh(H_new_s)
print(f"Minimum eigenvalue: {eigvals.min()}")
Minimum eigenvalue: -1.4266552340586673
El ejemplo anterior muestra: si la función de onda es amplia y no incluimos estados base en el subespacio, el cálculo de valores propios se vuelve impreciso.
5. SQD vs. VQE
Como se menciónó anteriormente, SQD puede requerir un circuito cuántico variacional y actualizaciones iterativas de parámetros para muestrear del soporte del estado fundamental. Dado que esta rutina de actualización iterativa de parámetros es similar a VQE, uno puede preguntarse en qué se diferencian los métodos y qué ventajas tiene SQD sobre VQE. En esta sección comparamos los métodos y discutimos las ventajas de SQD usando el ejemplo de una molécula de con un conjunto de bases mínimo (sto-3g).
| VQE | SQD | |
|---|---|---|
| Carga de medición | Muchos términos de Pauli, muchos circuitos de medición: El hamiltoniano de la molécula contiene términos de Pauli únicos. Dado que los términos de Pauli pueden contener términos e y las mediciones cuánticas típicas se realizan en la base , se requiere un cambio de base de medición para evaluar estos términos. Con medición optimizada, los términos pueden agruparse en grupos, donde cada grupo puede evaluarse con un único circuito. Por lo tanto, se necesitan al menos circuitos únicos para evaluar todos los términos de Pauli. Muchos shots por circuito para menor varianza: El valor esperado evaluado de cada término de Pauli tiene una varianza inversamente proporcional a . Para estimar cada término con precisión, se deben planificar muchos shots por circuito. Para alcanzar precisión química ( kcal/mol), típicamente se requieren shots del orden de a por circuito. Por lo tanto, VQE necesita muchos circuitos de medición, cada uno requiriendo un cierto número de shots. Para aplicaciones prácticas, esta carga de medición puede ser muy limitante. | En SQD no se necesitan circuitos de medición diferentes para cada grupo de términos de Pauli agrupados. Típicamente, un solo circuito se mide para un número fijo de shots. Aunque el número de shots puede ser grande dependiendo del problema, la carga total sigue siendo significativamente menor que en VQE. Además, las estimaciones de energía son exactas a través del proceso de diagonalización; los valores propios calculados son exactos en ese subespacio y no tienen varianza como la que ocurriría en VQE. (En el caso del muestreo de estados base de Krylov (Lección 5), se deben medir múltiples circuitos, pero el número de circuitos sigue siendo significativamente menor que en VQE.) |
| Cota de energía estimada | En VQE, las estimaciones de energía no están acotadas y pueden caer por debajo de los verdaderos valores mínimos debido al ruido. | El proceso de estimación de energía en SQD siempre proporciona una cota superior para la energía del estado fundamental; el valor estimado nunca es inferior a la verdadera energía del estado fundamental. |
| Tolerancia al ruido | La estimación de energía de VQE es susceptible al ruido de computadoras cuánticas pre-tolerantes a fallos. | SQD posee una tolerancia al ruido inherente. Las computadoras cuánticas pre-tolerantes a fallos pueden producir muestras ruidosas. Incluso si estas muestras se incluyen en el subespacio, la diagonalización posterior puede suprimir estas muestras asignándoles amplitudes de cero. Además, discutiremos un método llamado recuperación de configuración en el contexto de SQD que mejora aún más la tolerancia al ruido de SQD. |
6. Resumen
- En SQD, una computadora cuántica genera muestras y una computadora clásica proyecta un hamiltoniano sobre un subespacio generado por las muestras y lo diagonaliza para calcular valores propios y vectores propios.
- Las muestras generadas deben provenir del soporte del estado objetivo (fundamental).
- Dependiendo del problema, el flujo de trabajo de preparación del estado cuántico y generación de muestras puede ser iterativo o no iterativo.
- SQD funciona mejor para funciones de onda dispersas. Una función de onda amplia requiere un subespacio grande para obtener soluciones precisas, lo que hace que la proyección y diagonalización clásica sean costosas.
- SQD ofrece varias ventajas sobre VQE, como una menor carga de medición y una cota superior para la energía del estado fundamental estimada, lo que lo hace más escalable.
Referencias
[1] J. Robledo-Moreno et al., "Chemistry Beyond Exact Solutions on a Quantum-Centric Supercomputer" (2024). arXiv:quant-ph/2405.05068.