Vai al contenuto principale

Diagonalizzazione Quantistica Basata su Campionamento (SQD)

La diagonalizzazione quantistica basata su campionamento (SQD) combina l'algebra lineare classica e la potenza del calcolo quantistico per diagonalizzare un Hamiltoniano (matrice) e calcolarne autovalori e autovettori. La diagonalizzazione di matrici è un'operazione matematica importante, poiché molti problemi in ambito scientifico, computazionale e di ottimizzazione si avvalgono di questo metodo.

Il video qui sotto offre una panoramica di SQD, di cosa ne determina l'utilità e di cosa lo rende più veloce rispetto a molti altri approcci. Il testo successivo fornisce maggiori dettagli.

1. Introduzione e motivazione​

Prendiamo come esempio l'equazione agli autovalori dell'energia resa celebre da Schrödinger.

H∣ψ⟩=E∣ψ⟩H \vert \psi \rangle = E \vert \psi \rangle

HH è l'Hamiltoniano di un sistema, ∣ψ⟩|\psi\rangle è la funzione d'onda (nota anche come autostato), e EE è un autovalore. Gli autovalori della matrice HH rappresentano i livelli energetici del sistema. Ad esempio, se il sistema è una molecola, l'autovalore più basso rappresenta l'energia dello stato fondamentale della molecola. In molti problemi siamo interessati alla stima dell'energia dello stato fondamentale.

Applicando tecniche di diagonalizzazione esatta dall'algebra lineare, possiamo diagonalizzare l'intera matrice HH. Tuttavia, questo approccio diventa computazionalmente costoso (persino impossibile) man mano che la matrice cresce. Ad esempio, anche per piccole molecole chimiche, HH può essere proibitivamente grande (per esempio, l'Hamiltoniano della molecola N2N_2 con base cc-PVDZ ha dimensione 65780×65780).65780 \times 65780).

Fortunatamente, non sempre abbiamo bisogno di tutti gli autovalori e autovettori di un Hamiltoniano HH, e quindi la diagonalizzazione dell'intera matrice non è necessaria in molti casi pratici. Ad esempio, nel caso della stima dello stato fondamentale, ci interessa l'autovalore più basso e il corrispondente autovettore. Questo ci permette di applicare il concetto di proiezione su un sottospazio (utile).

Considera una matrice N×NN \times N, HH, dove lo spazio vettoriale completo (spazio di Hilbert) ha dimensione NN (NN è grande). Successivamente, selezioniamo un sottospazio (S\mathcal{S}) — che è un sottoinsieme dello spazio di Hilbert completo — di dimensione MM, dove MM è sufficientemente piccolo. Dopo aver proiettato HH su questo sottospazio, la matrice proiettata (chiamiamola HSH_\mathcal{S}) sarà più piccola (M×MM \times M). La HSH_\mathcal{S} più piccola può essere diagonalizzata con un adeguato metodo numerico classico, generando autovalori e autovettori per quel sottospazio.

Nota che il sottospazio deve essere nel supporto del nostro stato target (ad esempio, lo stato fondamentale). In altre parole, l'Hamiltoniano proiettato HSH_\mathcal{S} deve trovarsi in un sottospazio che include l'autovalore più basso.

2. Proiezione e Diagonalizzazione​

Supponiamo di voler trovare l'autovalore più basso e il corrispondente autovettore per la seguente matrice Hamiltoniana HH di dimensione 8×88 \times 8.

H=[0.2235−0.0390−0.1035−0.08180.17460.10910.1165−0.0104−0.03900.66210.0706−0.1964−0.07820.26190.10950.0029−0.10350.07060.99610.17240.1067−0.2299−0.18170.1571−0.0818−0.19640.1724−0.17730.1019−0.4778−0.1272−0.04140.1746−0.07820.10670.10190.1418−0.1359−0.1793−0.07660.10910.2619−0.2299−0.4778−0.13590.10140.16960.05520.11650.1095−0.1817−0.1272−0.17930.16960.42270.2702−0.01040.00290.1571−0.0414−0.07660.05520.27020.4456]H = \begin{bmatrix} 0.2235 & -0.0390 & -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 \\ \end{bmatrix}

Diagonalizzeremo la matrice completa insieme a diverse versioni proiettate (HSH_\mathcal{S}) per diversi sottospazi, allo scopo di dimostrare la scalabilità e l'importanza della scelta del sottospazio.

L'energia dello stato fondamentale (autovalore minimo) della matrice HH è −0.5357-0.5357 e la funzione d'onda esatta dello stato fondamentale (autovettore) è:

GSexact=0.8∗∣011⟩+0.6∗∣101⟩.\text{GS}_{\text{exact}} = 0.8 * |011\rangle + 0.6 * |101\rangle.

ovvero, lo stato fondamentale della matrice è generato da due stati della base computazionale (vettori) ∣011⟩\vert 011 \rangle e ∣101⟩\vert 101 \rangle.

# 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. ]

Successivamente, proietteremo la matrice HH su diversi sottospazi per verificare se riusciamo a ottenere lo stato fondamentale esatto. In particolare, proietteremo la matrice su un sottospazio generato da:

  1. vettori esatti dello stato fondamentale (∣011⟩\vert 011 \rangle e ∣101⟩\vert 101 \rangle).
  2. vettori che escludono alcuni o tutti i vettori dello stato fondamentale esatto (ad esempio, ∣000⟩\vert 000 \rangle, ∣011⟩\vert 011 \rangle, e ∣110⟩\vert 110 \rangle).
  3. vettori che includono sia lo stato fondamentale esatto sia vettori estranei allo stato fondamentale (ma non tutti i vettori possibili nello spazio di Hilbert).

2.1 Caso 1: il sottospazio include lo stato fondamentale​

Supponiamo di voler proiettare HH su un sottospazio (S\mathcal{S}) generato da due vettori x1=∣011⟩x_1 = |011\rangle e x2=∣101⟩x_2 = |101\rangle. L'Hamiltoniano proiettato è definito da:

HS=[⟨x1∣H∣x1⟩⟨x1∣H∣x2⟩⟨x2∣H∣x1⟩⟨x2∣H∣x2⟩]H_\mathcal{S} = \begin{bmatrix} \langle x1 | H | x1 \rangle & \langle x1 | H | x2 \rangle \\ \langle x2 | H | x1 \rangle & \langle x2 | H | x2 \rangle \end{bmatrix}
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]

Possiamo fare alcune osservazioni chiave.

  • Poiché abbiamo generato il sottospazio con due vettori, la dimensione della matrice proiettata (HSH_\mathcal{S}) è 2×22 \times 2, più piccola della matrice completa HH (8×88 \times 8).
  • L'autovalore minimo della matrice proiettata coincide con l'autovalore dello stato fondamentale esatto.
  • I valori nella variabile eigvecs indicano l'ampiezza dei vettori che generano il sottospazio; utilizzandoli possiamo ricostruire l'autostato (stato fondamentale). In questo caso, otteniamo lo stato fondamentale esatto (a meno di una fase globale):
∣ψ⟩=−(0.8∣011⟩+0.6∣101⟩)|\psi \rangle = - (0.8 |011\rangle + 0.6 |101\rangle)

2.2 Caso 2: il sottospazio esclude alcuni o tutti i vettori dello stato fondamentale​

Successivamente, proiettiamo HH su un sottospazio generato da tre vettori x1=∣000⟩x_1 = |000\rangle, x2=∣011⟩x_2 = |011\rangle e x3=∣110⟩x_3 = |110\rangle. Scegliamo deliberatamente i vettori in modo da escludere un vettore dello stato fondamentale (∣101⟩\vert 101 \rangle). L'Hamiltoniano proiettato è definito da:

HS=[⟨x1∣H∣x1⟩⟨x1∣H∣x2⟩⟨x1∣H∣x3⟩⟨x2∣H∣x1⟩⟨x2∣H∣x2⟩⟨x2∣H∣x3⟩⟨x3∣H∣x1⟩⟨x3∣H∣x2⟩⟨x3∣H∣x3⟩]H_\mathcal{S} = \begin{bmatrix} \langle x1 | H | x1 \rangle & \langle x1 | H | x2 \rangle & \langle x1 | H | x3 \rangle\\ \langle x2 | H | x1 \rangle & \langle x2 | H | x2 \rangle & \langle x2 | H | x3 \rangle \\ \langle x3 | H | x1 \rangle & \langle x3 | H | x2 \rangle & \langle x3 | H | x3 \rangle \\ \end{bmatrix}
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

L'autovalore −0.2111-0.2111 in questo caso non corrisponde all'autovalore minimo −0.5357-0.5357 dell'Hamiltoniano completo. L'osservazione chiave è: se proiettiamo su un sottospazio che esclude stati della base presenti nel nostro stato target (fondamentale) — parzialmente o completamente — lo stato fondamentale stimato sarà diverso da quello esatto.

2.3 Caso 3: il sottospazio include sia vettori dello stato fondamentale sia vettori non appartenenti allo stato fondamentale​

Mostriamo ora un caso in cui il sottospazio è generato da vettori che includono sia i vettori esatti dello stato fondamentale sia vettori indesiderati. Supponiamo che il nostro sottospazio sia generato da x1=∣011⟩x_1 = |011\rangle, x2=∣101⟩x_2 = |101\rangle (presenti nello stato fondamentale esatto) e x3=∣111⟩x_3 = |111\rangle (assente nello stato fondamentale esatto).

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. ]

In questo caso, otteniamo nuovamente −0.5357-0.5357 come autovalore minimo, che corrisponde a quello della matrice completa (ovvero lo stato fondamentale esatto). Un altro risultato interessante è l'ampiezza di x3x_3 restituita dal processo di proiezione e diagonalizzazione. L'ampiezza è 00, e quando ricostruiamo la funzione d'onda (autostato) con le ampiezze e i vettori calcolati, otteniamo:

∣ψ⟩=0.8∣011⟩+0.6∣101⟩+0.0∣111⟩=0.8∣011⟩+0.6∣101⟩(exact ground state)\vert \psi \rangle = 0.8 |011\rangle + 0.6 |101\rangle + 0.0 |111\rangle = 0.8 |011\rangle + 0.6 |101\rangle \left( \text{exact ground state} \right)

Quindi, anche se il nostro sottospazio include alcuni vettori non target (insieme all'insieme completo dei vettori target), possiamo calcolare l'autovalore e l'autostato corretti, poiché il processo di proiezione e diagonalizzazione filtra i vettori non target impostando la loro ampiezza a 00. Questa proprietà di SQD garantisce una tolleranza intrinseca al rumore.

3. Il ruolo del quantum in SQD​

Le analisi precedenti stabiliscono l'importanza dei vettori che definiscono il sottospazio, i quali devono essere nel supporto dello stato target. Questo solleva una domanda fondamentale: Come scegliamo i vettori con il supporto dello stato target per la costruzione del sottospazio?

È qui che entrano in gioco i computer quantistici. La sinergia quantistico-classica nel paradigma SQD funziona nel modo seguente:

  1. Utilizzando un circuito quantistico adeguato, cerchiamo di preparare uno stato su un computer quantistico che generi stati di base sui quali la funzione d'onda target (ad esempio, lo stato fondamentale) abbia un supporto significativo. Gli stati di base campionati (bitstring) definiranno il sottospazio per la proiezione dell'Hamiltoniano.
  2. Un computer classico proietta l'Hamiltoniano sul sottospazio (definito dai campioni/vettori provenienti dal computer quantistico) e lo diagonalizza per calcolare autovalori e autovettori usando opportuni metodi numerici. Un diagramma delle componenti quantistiche e classiche di SQD. Nella parte quantistica, si prepara lo stato e si campiona dal supporto target; classicamente si proietta la matrice sul sottospazio campionato e si diagonalizza la matrice proiettata. Esistono diversi modi per preparare tale stato quantistico, e possono essere variazionali o non variazionali a seconda del problema.

Nelle prossime due lezioni mostreremo due esempi specifici di preparazione di stati e campionamento da essi.

  1. Nella Lezione 4, utilizzeremo un ansatz parametrizzato LUCJ (local unitary coupled Jastrow) per generare campioni per un problema di chimica (stima dell'energia dello stato fondamentale della molecola N2N_2). Inizializzeremo l'ansatz LUCJ con parametri provenienti dal calcolo classico CCSD (coupled cluster singles and doubles).
  2. Nella Lezione 5, campioneremo dagli stati di base di Krylov per definire il sottospazio per un problema di fisica della materia condensata. Questo approccio è di natura non variazionale.

Oltre agli approcci specifici al problema descritti sopra, un approccio generico per la preparazione degli stati prevede un ansatz variazionale, in cui i parametri dell'ansatz vengono aggiornati iterativamente tramite un ottimizzatore classico. Un diagramma di flusso che parte da un circuito quantistico variazionale, passa per il campionamento quantistico e arriva al calcolo classico in cui la matrice viene proiettata e diagonalizzata. I risultati vengono poi passati a un ottimizzatore classico che seleziona nuovi parametri variazionali, e si ritorna al circuito quantistico variazionale. I campioni provenienti da computer quantistici pre-fault-tolerant possono essere rumorosi. SQD impiega un processo di recupero della configurazione auto-consistente per correggere i campioni rumorosi [1]. Il processo di recupero della configurazione verrà discusso in modo più dettagliato e applicato per correggere iterativamente i campioni rumorosi al fine di raffinare la stima dell'energia dello stato fondamentale per un problema di chimica nella Lezione 4.

3.1 Note sul supporto dello stato fondamentale​

Approfondiamo il concetto di supporto dello stato fondamentale. Il supporto dello stato fondamentale può essere definito come l'insieme degli stati di base in cui lo stato fondamentale ha un'ampiezza diversa da zero (fino a una soglia di cutoff).

Supponiamo che lo stato fondamentale esatto di un problema a 33 qubit sia

∣ψ⟩=12∣000⟩+12∣111⟩\vert \psi \rangle = \frac{1}{\sqrt{2}} \vert 000 \rangle + \frac{1}{\sqrt{2}} \vert 111 \rangle

Se campioniamo lo stato precedente, dovremmo ottenere un insieme di stati di base computazionale {∣000⟩\{\vert 000 \rangle, ∣111⟩}\vert 111 \rangle \} (gli altri stati di base computazionale hanno ampiezza zero nello stato fondamentale e quindi, idealmente, non compariranno durante il campionamento).

Idealmente, l'insieme dei vettori di base per questo stato è {∣000⟩,∣111⟩}\{ \vert 000 \rangle, \vert 111 \rangle \} (in altre parole, il sottospazio di questo stato è definito da questi due vettori di base).

In pratica, non è necessario preparare lo stato fondamentale esatto, poiché campionare molti altri stati può fornirci lo stesso insieme di vettori. Ad esempio:

∣ψa⟩=0.8∣000⟩+0.6∣111⟩→Sampling{∣000⟩,∣111⟩}∣ψb⟩=12∣000⟩+32∣111⟩→Sampling{∣000⟩,∣111⟩}∣ψc⟩=12∣000⟩+12∣111⟩+12∣101⟩→Sampling{∣000⟩,∣101⟩,∣111⟩}\begin{align} \vert \psi_a \rangle = 0.8 \vert 000 \rangle + 0.6 \vert 111 \rangle &\xrightarrow{\text{Sampling}} \{ \vert 000 \rangle, \vert 111 \rangle \} \\ \vert \psi_b \rangle = \frac{1}{2} \vert 000 \rangle + \frac{\sqrt{3}}{2} \vert 111 \rangle &\xrightarrow{\text{Sampling}} \{ \vert 000 \rangle, \vert 111 \rangle \} \\ \vert \psi_c \rangle = \frac{1}{2} \vert 000 \rangle + \frac{1}{2} \vert 111 \rangle + \frac{1}{\sqrt{2}} \vert 101 \rangle &\xrightarrow{\text{Sampling}} \{ \vert 000 \rangle, \vert 101 \rangle, \vert 111 \rangle \} \end{align}

Preparare e campionare da uno qualsiasi degli stati precedenti genererà vettori con ampiezza non nulla nello stato fondamentale, e tutti si qualificano come aventi il supporto dello stato fondamentale. Si noti che il campionamento di ∣ψc⟩\vert \psi_c \rangle include un vettore in più, ∣101⟩\vert 101 \rangle, che ha ampiezza 00 nello stato fondamentale esatto. Tuttavia, abbiamo già mostrato che includere tali vettori nel sottospazio non è problematico, poiché l'operazione di proiezione e diagonalizzazione imposta l'ampiezza dei vettori indesiderati a 00, permettendoci di ottenere l'autovalore atteso e ricostruire l'autostato corretto.

Diagrammi del supporto di un buon ansatz e di uno scarso. Un buon ansatz ha un supporto che contiene completamente il supporto dello stato fondamentale. Un ansatz scarso contiene solo una parte o nessuna parte del supporto dello stato fondamentale.

Pertanto, preparare e campionare dallo stato fondamentale esatto non è necessario. In realtà, farlo può essere difficile dato che lo stato fondamentale esatto non è noto a priori, ed è spesso vantaggioso non preparare e campionare dallo stato fondamentale esatto, specialmente se la funzione d'onda (stato) è asimmetrica con alcuni stati di base che hanno probabilità molto elevate. Considera la seguente funzione d'onda:

∣ψ⟩=0.7∣000⟩−0.7∣010⟩+0.1∣101⟩−0.01∣111⟩\vert \psi \rangle = 0.7 \vert 000 \rangle - 0.7 \vert 010 \rangle + 0.1 \vert 101 \rangle - 0.01 \vert 111 \rangle

Questa è una funzione d'onda asimmetrica in cui gli stati di base ∣000⟩\vert 000 \rangle e ∣010⟩\vert 010 \rangle hanno ampiezze molto più grandi rispetto a ∣101⟩\vert 101 \rangle e ∣111⟩\vert 111 \rangle. Quando campionata, otterremo ∣000⟩\vert 000 \rangle e ∣010⟩\vert 010 \rangle con maggiore frequenza (probabilitaˋ di campionamento=∣ampiezza∣2\text{probabilità di campionamento} = \vert \text{ampiezza} \vert^{2} ≈49%\approx 49\% per ∣000⟩\vert 000 \rangle e ∣010⟩\vert 010 \rangle ciascuno, ≈1%\approx 1\% per ∣101⟩\vert 101 \rangle, e ≈0.01%\approx 0.01\% per ∣111⟩\vert 111 \rangle). Con un budget di campionamento finito (shots), è molto probabile che il nostro insieme campionato contenga solo ∣000⟩\vert 000 \rangle e ∣010⟩\vert 010 \rangle. Come mostrato in precedenza, se definiamo il sottospazio con un insieme di vettori mancanti, non saremo in grado di trovare il vero autovalore minimo. È quindi vantaggioso (e necessario) campionare da uno stato con supporto dello stato fondamentale.

3.2 Un argomento contro il campionamento uniforme​

Può essere allettante estrarre campioni da una distribuzione uniforme per definire il sottospazio. Sebbene possa funzionare per problemi piccoli, inizierà a fallire per problemi più grandi e pratici. Per problemi di grandi dimensioni con molti qubit, lo spazio di Hilbert può essere proibitivamente grande. Ad esempio, uno spazio di Hilbert a 32 qubit ha più di 44 miliardi di vettori di base possibili (232=4.294.967.2962^{32} = 4.294.967.296). Se campioniamo uniformemente da quello spazio con un budget di campionamento finito (ad esempio 1000010000 vettori per mantenere il processo di diagonalizzazione fattibile), il sottospazio potrebbe escludere più spesso i vettori con supporto dello stato fondamentale, poiché il processo è casuale. Abbiamo quindi bisogno di un modo sistematico per campionare dal supporto dello stato fondamentale sfruttando i circuiti quantistici.

4. SQD e la sparsità della funzione d'onda​

Il divario tra le dimensioni dello spazio di Hilbert completo e quelle del sottospazio fattibile introduce un altro aspetto importante di SQD: la sparsità della funzione d'onda. L'approccio SQD funziona bene per funzioni d'onda sparse o concentrate, in cui solo una piccola frazione degli stati di base ha ampiezze non trascurabili. Ci sono due ragioni alla base di ciò:

  1. Se la funzione d'onda è ampia (cioè molti stati di base hanno ampiezze non trascurabili) e tralasciamo di includere nel sottospazio i vettori con supporto dello stato target, potremmo ottenere autovalori e autovettori errati.
  2. Per evitare il problema precedente, dobbiamo includere molti vettori nel sottospazio. Tuttavia, la dimensione dell'Hamiltoniano proiettato è direttamente correlata alla dimensione del sottospazio. Un sottospazio più grande implica un Hamiltoniano più grande, che potrebbe diventare infeasibile da diagonalizzare.

Illustriamo il problema con la seguente matrice (HnewH_{new}). L'autovalore minimo di HnewH_{new} è −2.2081-2.2081, e la corrispondente funzione d'onda (autostato) è ampia:

∣ψ⟩=∣000⟩+∣001⟩+∣010⟩+∣011⟩+∣100⟩+∣101⟩+∣110⟩+∣111⟩8|\psi\rangle = \frac{|000\rangle + |001\rangle + |010\rangle + |011\rangle + |100\rangle + |101\rangle + |110\rangle + |111\rangle}{\sqrt{8}}
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]

Supponiamo di proiettare HnewH_{new} su un sottospazio definito da quattro vettori: ∣000⟩|000\rangle, ∣010⟩|010\rangle, ∣101⟩|101\rangle e ∣110⟩|110\rangle, e di calcolare l'autovalore.

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

L'esempio precedente mostra che quando la funzione d'onda è ampia e non includiamo tutti gli stati di base nel sottospazio, il calcolo dell'autovalore diventa scorretto.

5. SQD vs. VQE​

Come accennato in precedenza, SQD può richiedere un circuito quantistico variazionale e aggiornamenti iterativi dei parametri per preparare e campionare dal supporto dello stato fondamentale. Poiché questa procedura di aggiornamento iterativo dei parametri è simile a VQE, ci si può chiedere in cosa differiscano questi metodi e quali siano i vantaggi di SQD rispetto a VQE. In questa sezione confrontiamo i metodi e discutiamo i vantaggi di SQD usando come esempio la molecola N2N_2 descritta con un insieme di base minimo (sto-3g).

 VQESQD
Overhead di misurazioneMolti termini di Pauli, molti circuiti di misurazione: L'Hamiltoniano per la molecola ha 29512951 termini di Pauli unici. Poiché i termini di Pauli possono contenere termini XX e YY, e le misurazioni quantistiche tipiche vengono effettuate nella base ZZ, abbiamo bisogno di cambiare la base di misurazione per valutare quei termini. Una volta ottimizzati per le misurazioni, i 29512951 termini possono essere raggruppati in 11871187 gruppi, dove ogni gruppo può essere valutato con un singolo circuito. Quindi, sono necessari almeno 11871187 circuiti unici per valutare tutti i termini di Pauli. Molti shots per circuito per ridurre la varianza. Inoltre, il valore di aspettazione valutato per ciascun termine di Pauli presenta una varianza che dipende inversamente da shots\sqrt{shots}. Pertanto, per stimare accuratamente ciascun termine, è necessario allocare molti shots per circuito. Ad esempio, per raggiungere l'accuratezza chimica (11 kcal/mol), di solito si ha bisogno di shots nell'ordine di 10510^5-10710^7 per circuito. VQE richiede quindi molti circuiti di misurazione, ognuno con un certo numero di shots. Per i casi pratici, questo overhead di misurazione può essere limitante.In SQD non sono necessari circuiti di misurazione diversi per ciascun gruppo di termini di Pauli. Di norma, si misura un singolo circuito per un numero fisso di shots. Anche se possiamo impostare un numero elevato di shots a seconda del problema, l'overhead rimane molto inferiore rispetto a VQE. Inoltre, le stime energetiche tramite il processo di diagonalizzazione sono esatte, nel senso che gli autovalori calcolati sono esatti in quel sottospazio e non presentano una varianza come in VQE. (Nel caso del campionamento degli stati di base di Krylov, Lezione 5, è necessario misurare più circuiti, ma il numero di circuiti rimane molto inferiore rispetto a VQE).
Stima dell'energiaIn VQE, le stime energetiche non sono limitate e possono essere inferiori ai valori minimi reali a causa del rumore.Il processo di stima energetica in SQD produce sempre un limite superiore all'energia dello stato fondamentale; l'energia stimata non sarà mai inferiore alla vera energia dello stato fondamentale.
Tolleranza al rumoreLa stima energetica di VQE è suscettibile al rumore dei computer quantistici pre-fault-tolerant.SQD ha una tolleranza al rumore intrinseca. I computer quantistici pre-fault-tolerant possono produrre campioni rumorosi. Anche se includiamo quei campioni nel sottospazio, la successiva diagonalizzazione può sopprimerli impostando le loro ampiezze a zero. Discuteremo inoltre un metodo chiamato configuration recovery in relazione a SQD, che migliora ulteriormente la tolleranza al rumore di SQD.

6. Riepilogo​

  1. In SQD, un computer quantistico genera campioni e un computer classico proietta un Hamiltoniano su un sottospazio definito dai campioni e lo diagonalizza per calcolare autovalori e autovettori.
  2. I campioni generati devono provenire dal supporto dello stato target (fondamentale).
  3. A seconda del problema, il flusso di preparazione dello stato quantistico e di generazione dei campioni può essere iterativo o non iterativo.
  4. SQD funziona meglio per funzioni d'onda sparse. Una funzione d'onda ampia richiederà un sottospazio di grandi dimensioni per soluzioni accurate, rendendo costosa l'operazione classica di proiezione e diagonalizzazione.
  5. SQD presenta diversi vantaggi rispetto a VQE, come un minore overhead di misurazione e un limite superiore all'energia dello stato fondamentale stimata, che lo rendono più scalabile.

Riferimenti​

[1] J. Robledo-Moreno et al., "Chemistry Beyond Exact Solutions on a Quantum-Centric Supercomputer" (2024). arXiv:quant-ph/2405.05068.