Przejdź do głównej treści

Kwantowa diagonalizacja próbkowana (SQD)

Kwantowa diagonalizacja próbkowana (SQD) łączy klasyczną algebrę liniową z możliwościami obliczeń kwantowych w celu diagonalizacji Hamiltonianu (macierzy) i wyznaczenia jego wartości własnych oraz wektorów własnych. Diagonalizacja macierzy jest ważną operacją matematyczną, ponieważ wiele problemów w nauce, informatyce i optymalizacji korzysta z tej metody.

Poniższy film przedstawia przegląd SQD — co decyduje o jego przydatności i co sprawia, że jest szybszy niż wiele innych podejść. Poniższy tekst zawiera więcej szczegółów.

1. Wprowadzenie i motywacja

Rozważmy jako przykład równanie energetycznych wartości własnych rozsławione przez Schrödingera.

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

HH to Hamiltonian układu, ψ|\psi\rangle to funkcja falowa (znana również jako stan własny), a EE to wartość własna. Wartości własne macierzy HH reprezentują poziomy energii układu. Na przykład, jeśli układem jest cząsteczka, najniższa wartość własna odpowiada energii ground state cząsteczki. W wielu problemach jesteśmy zainteresowani szacowaniem energii ground state.

Stosując techniki dokładnej diagonalizacji z algebry liniowej, możemy zdiagonalizować pełną macierz HH. Jednak to podejście staje się kosztowne obliczeniowo (a nawet niemożliwe) w miarę wzrostu macierzy. Na przykład nawet dla małych cząsteczek chemicznych HH może być prohibicyjnie duży (przykładowo Hamiltonian cząsteczki N2N_2 z bazą cc-PVDZ ma wymiar 65780×65780).65780 \times 65780).

Na szczęście nie zawsze potrzebujemy wszystkich wartości własnych i wektorów własnych Hamiltonianu HH, dlatego w wielu praktycznych przypadkach diagonalizacja pełnej macierzy nie jest wymagana. Na przykład w przypadku szacowania energii ground state interesuje nas najniższa wartość własna i odpowiadający jej wektor własny. Pozwala nam to zastosować koncepcję rzutowania na (użyteczną) podprzestrzeń.

Rozważmy macierz N×NN \times N, HH, gdzie pełna przestrzeń wektorowa (przestrzeń Hilberta) ma wymiar NN (NN jest duże). Następnie wybieramy podprzestrzeń (S\mathcal{S}) — podzbiór pełnej przestrzeni Hilberta — o wymiarze MM, gdzie MM jest wystarczająco małe. Po rzutowaniu HH na tę podprzestrzeń rzutowana macierz (oznaczmy ją HSH_\mathcal{S}) będzie mniejsza (M×MM \times M). Mniejszą macierz HSH_\mathcal{S} można zdiagonalizować odpowiednią klasyczną metodą numeryczną i wyznaczyć wartości własne oraz wektory własne dla tej podprzestrzeni.

Zauważ, że podprzestrzeń musi zawierać nasz docelowy (np. ground) stan własny. Innymi słowy, rzutowany Hamiltonian HSH_\mathcal{S} musi znajdować się w podprzestrzeni obejmującej najniższą wartość własną.

2. Rzutowanie i diagonalizacja

Przyjmijmy, że chcemy znaleźć najniższą wartość własną i odpowiadający jej wektor własny dla następującej macierzy Hamiltonianu HH o wymiarze 8×88 \times 8.

H=[0.22350.03900.10350.08180.17460.10910.11650.01040.03900.66210.07060.19640.07820.26190.10950.00290.10350.07060.99610.17240.10670.22990.18170.15710.08180.19640.17240.17730.10190.47780.12720.04140.17460.07820.10670.10190.14180.13590.17930.07660.10910.26190.22990.47780.13590.10140.16960.05520.11650.10950.18170.12720.17930.16960.42270.27020.01040.00290.15710.04140.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}

Zdiagonalizujemy pełną macierz wraz z różnymi jej wersjami rzutowanymi (HSH_\mathcal{S}) dla różnych podprzestrzeni, aby zademonstrować skalowalność i znaczenie wyboru podprzestrzeni.

Energia ground state (minimalna wartość własna) macierzy HH wynosi 0.5357-0.5357, a dokładna funkcja falowa ground state (wektor własny) to:

GSexact=0.8011+0.6101.\text{GS}_{\text{exact}} = 0.8 * |011\rangle + 0.6 * |101\rangle.

tzn. ground state macierzy jest rozpiętym przez dwa obliczeniowe stany bazowe (wektory) 011\vert 011 \rangle i 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. ]

Następnie rzutujemy macierz HH na różne podprzestrzenie i sprawdzamy, czy możemy uzyskać dokładny ground state. W szczególności rzutujemy macierz na podprzestrzeń rozpiętą przez:

  1. dokładne wektory ground state (011\vert 011 \rangle i 101\vert 101 \rangle).
  2. wektory wykluczające niektóre lub wszystkie dokładne wektory ground state (na przykład 000\vert 000 \rangle, 011\vert 011 \rangle i 110\vert 110 \rangle).
  3. wektory zawierające zarówno dokładny ground state, jak i stany spoza ground state (ale nie wszystkie możliwe wektory w przestrzeni Hilberta).

2.1 Case-1: Subspace includes ground state

Załóżmy, że chcemy rzutować HH na podprzestrzeń (S\mathcal{S}) rozpiętą przez dwa wektory x1=011x_1 = |011\rangle i x2=101x_2 = |101\rangle. Rzutowany Hamiltonian jest zdefiniowany jako:

HS=[x1Hx1x1Hx2x2Hx1x2Hx2]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]

Możemy poczynić tu kilka kluczowych obserwacji.

  • Ponieważ podprzestrzeń została rozpięta przez dwa wektory, wymiar rzutowanej macierzy (HSH_\mathcal{S}) wynosi 2×22 \times 2, co jest mniejsze niż pełna macierz HH (8×88 \times 8).
  • Minimalna eigenvalue rzutowanej macierzy pokrywa się z dokładną eigenvalue ground state.
  • Wartości w zmiennej eigvecs oznaczają amplitudy wektorów rozpinających podprzestrzeń; korzystając z nich, możemy zrekonstruować eigenstate (ground state). W tym przypadku otrzymujemy dokładny ground state (z dokładnością do globalnej fazy):
ψ=(0.8011+0.6101)|\psi \rangle = - (0.8 |011\rangle + 0.6 |101\rangle)

2.2 Case-2: Podprzestrzeń wyklucza niektóre lub wszystkie wektory ground state

Teraz rzutujemy HH na podprzestrzeń rozpiętą przez trzy wektory x1=000x_1 = |000\rangle, x2=011x_2 = |011\rangle i x3=110x_3 = |110\rangle. Celowo dobieramy wektory tak, aby wykluczyć jeden z wektorów ground state (101\vert 101 \rangle). Rzutowany Hamiltonian jest zdefiniowany następująco:

HS=[x1Hx1x1Hx2x1Hx3x2Hx1x2Hx2x2Hx3x3Hx1x3Hx2x3Hx3]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

Eigenvalue 0.2111-0.2111 w tym przypadku nie odpowiada minimalnemu eigenvalue 0.5357-0.5357 pełnego Hamiltonianu. Kluczowa obserwacja jest następująca: jeśli rzutujesz na podprzestrzeń, która wyklucza — częściowo lub całkowicie — stany bazowe należące do docelowego ground state, uzyskane przybliżenie ground state będzie różnić się od dokładnego.

2.3 Case-3: Subspace includes both ground state and non-ground state vectors

Następnie pokazujemy przypadek, w którym podprzestrzeń jest rozpiętą przez wektory obejmujące dokładne wektory ground state wraz z niechcianymi wektorami. Załóżmy, że nasza podprzestrzeń jest rozpięta przez x1=011x_1 = |011\rangle, x2=101x_2 = |101\rangle (obecne w dokładnym ground state) oraz x3=111x_3 = |111\rangle (nieobecny w dokładnym ground state).

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

W tym przypadku ponownie otrzymujemy 0,5357-0,5357 jako minimalny eigenvalue, co zgadza się z pełną macierzą (czyli z dokładnym ground state). Kolejnym interesującym wynikiem jest amplituda x3x_3 zwrócona przez proces projekcji i diagonalizacji. Amplituda wynosi 00, a gdy rekonstruujemy funkcję falową (eigenstate) za pomocą wyznaczonych amplitud i wektorów, otrzymujemy:

ψ=0.8011+0.6101+0.0111=0.8011+0.6101(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)

Zatem nawet jeśli nasza podprzestrzeń zawiera pewne wektory spoza celu (wraz z pełnym zestawem wektorów docelowych), możemy obliczyć poprawny eigenvalue i eigenstate, ponieważ proces projekcji i diagonalizacji odfiltrowuje wektory spoza celu, ustawiając ich amplitudy na 00. Ta właściwość SQD zapewnia wbudowaną odporność na szumy.

3. Rola obliczeń kwantowych w SQD

Powyższe analizy dowodzą, jak ważne są wektory rozpinające podprzestrzeń, które muszą należeć do nośnika docelowego stanu. Rodzi to istotne pytanie: Jak wybierać wektory z nośnikiem docelowego stanu do budowy podprzestrzeni?

Tu właśnie wkraczają komputery kwantowe. Synergia kwantowo-klasyczna w paradygmacie SQD działa następująco:

  1. Za pomocą odpowiedniego obwodu kwantowego staramy się przygotować na komputerze kwantowym stan, który będzie generował stany bazowe, na których docelowa funkcja falowa (np. ground state) ma znaczący nośnik. Próbkowane stany bazowe (bitstrings) będą rozpinać podprzestrzeń do rzutowania Hamiltonianu.
  2. Klasyczny komputer rzutuje Hamiltonian na podprzestrzeń (rozpiętą przez próbki/wektory z komputera kwantowego) i diagonalizuje go, obliczając wartości własne oraz wektory własne przy użyciu odpowiednich metod numerycznych. Diagram komponentów kwantowych i klasycznych SQD. Po stronie kwantowej przygotowujesz stan i próbkujesz z jego nośnika; klasycznie rzutujesz macierz na próbkowaną podprzestrzeń i diagonalizujesz rzutowaną macierz. Istnieje wiele sposobów przygotowania takiego stanu kwantowego — mogą być one wariacyjne lub nierwariacyjne, w zależności od problemu.

W dwóch kolejnych lekcjach pokażemy dwa konkretne przykłady przygotowywania stanów i próbkowania z nich.

  1. W Lekcji 4 użyjemy sparametryzowanego ansatzu lokalnie unitarnego sprzężonego Jastrow (LUCJ), aby wygenerować próbki dla problemu chemicznego (szacowanie energii ground state cząsteczki N2N_2). Zainicjalizujemy ansatz LUCJ parametrami z klasycznych obliczeń metodą sprzężonych klasterów z pojedynczymi i podwójnymi pobudzeniami (CCSD).
  2. W Lekcji 5 będziemy próbkować ze stanów bazy Krylova, aby rozpiąć podprzestrzeń dla problemu z fizyki materii skondensowanej. Podejście to ma charakter nierwariacyjny.

Poza podejściami specyficznymi dla danego problemu, ogólne podejście do przygotowania stanu obejmuje wariacyjny ansatz, w którym będziemy iteracyjnie aktualizować jego parametry przy użyciu klasycznego optymalizatora. Schemat blokowy: od wariacyjnego obwodu kwantowego przez kwantowe próbkowanie do obliczeń klasycznych, w których macierz jest rzutowana i diagonalizowana. Wyniki trafiają do klasycznego optymalizatora, który dobiera nowe parametry wariacyjne, po czym wracamy do wariacyjnego obwodu kwantowego. Próbki z komputerów kwantowych sprzed ery tolerancji błędów mogą być zaszumione. SQD stosuje samospójny proces odtwarzania konfiguracji w celu korygowania zaszumionych próbek [1]. Proces odtwarzania konfiguracji omówimy szczegółowo i zastosujemy go do iteracyjnego korygowania zaszumionych próbek w celu ulepszenia szacowania energii ground state dla problemu chemicznego w Lekcji 4.

3.1 Notes on ground state support

Wyjaśnijmy dokładniej pojęcie nośnika ground state. Nośnik ground state można zdefiniować jako zbiór stanów bazowych, w których ground state ma niezerową amplitudę (powyżej pewnego progu odcięcia).

Załóżmy, że dokładny ground state problemu na 33 qubitach wynosi

ψ=12000+12111\vert \psi \rangle = \frac{1}{\sqrt{2}} \vert 000 \rangle + \frac{1}{\sqrt{2}} \vert 111 \rangle

Próbkując powyższy stan, powinniśmy otrzymać zbiór obliczeniowych stanów bazowych {000\{\vert 000 \rangle, 111}\vert 111 \rangle \} (pozostałe obliczeniowe stany bazowe mają zerową amplitudę w ground state i dlatego idealnie nie pojawią się podczas próbkowania).

Idealnie zbiór wektorów bazowych dla tego stanu składa się z {000,111}\{ \vert 000 \rangle, \vert 111 \rangle \} (innymi słowy, podprzestrzeń tego stanu jest rozpinana przez te dwa wektory bazowe).

W praktyce nie musimy przygotowywać dokładnego ground state, ponieważ próbkowanie wielu innych stanów może dać nam ten sam zbiór wektorów. Na przykład:

ψa=0.8000+0.6111Sampling{000,111}ψb=12000+32111Sampling{000,111}ψc=12000+12111+12101Sampling{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}

Przygotowanie i próbkowanie z dowolnego z powyższych stanów wygeneruje wektory o niezerowej amplitudzie w ground state — wszystkie kwalifikują się zatem jako posiadające nośnik ground state. Zwróć uwagę, że próbkowanie ψc\vert \psi_c \rangle obejmuje jeden dodatkowy wektor 101\vert 101 \rangle, który ma amplitudę 00 w dokładnym ground state. Jednak jak pokazaliśmy wcześniej, uwzględnienie takich wektorów w podprzestrzeni nie jest problematyczne, ponieważ operacja rzutowania i diagonalizacji zeruje amplitudę niepożądanych wektorów i pozwala uzyskać oczekiwaną wartość własną oraz zrekonstruować właściwy eigenstate.

Diagramy dobrego i złego nośnika ansatzu. Dobry ansatz ma nośnik całkowicie zawierający nośnik ground state. Słaby ansatz zawiera tylko część nośnika ground state lub wcale go nie zawiera.

Dlatego przygotowanie i próbkowanie z dokładnego ground state nie jest konieczne. W rzeczywistości może to być trudne, ponieważ dokładny ground state nie jest znany a priori, i często korzystne jest nieprzygotowywanie i próbkowanie z dokładnego ground state — szczególnie gdy funkcja falowa (stan) jest skośna, a niektóre stany bazowe mają bardzo wysokie prawdopodobieństwa. Rozważmy następującą funkcję falową:

ψ=0.70000.7010+0.11010.01111\vert \psi \rangle = 0.7 \vert 000 \rangle - 0.7 \vert 010 \rangle + 0.1 \vert 101 \rangle - 0.01 \vert 111 \rangle

Jest to skośna funkcja falowa, w której stany bazowe 000\vert 000 \rangle i 010\vert 010 \rangle mają znacznie większe amplitudy niż 101\vert 101 \rangle i 111\vert 111 \rangle. Podczas próbkowania 000\vert 000 \rangle i 010\vert 010 \rangle będą pojawiać się częściej (prawdopodobienˊstwo proˊbkowania=amplituda2\text{prawdopodobieństwo próbkowania} = \vert \text{amplituda} \vert^{2} 49%\approx 49\% dla 000\vert 000 \rangle i 010\vert 010 \rangle, 1%\approx 1\% dla 101\vert 101 \rangle i 0,01%\approx 0{,}01\% dla 111\vert 111 \rangle). Przy skończonym budżecie próbkowania (shots) bardzo prawdopodobne jest, że próbkowany zbiór zawiera wyłącznie 000\vert 000 \rangle i 010\vert 010 \rangle. Jak pokazano wcześniej, jeśli rozepniemy podprzestrzeń takim niekompletnym zbiorem, nie będziemy w stanie znaleźć prawdziwej minimalnej wartości własnej. Dlatego korzystne (i konieczne) jest próbkowanie ze stanu mającego nośnik ground state.

3.2 A case against uniform sampling

Może być kuszące, aby losować próbki z rozkładu jednostajnego w celu rozepnięcia podprzestrzeni. Choć może to działać dla małych problemów, w przypadku większych i bardziej praktycznych zadań zaczyna zawodzić. Dla dużych problemów z wieloma qubitami przestrzeń Hilberta może być prohibicyjnie wielka. Na przykład przestrzeń Hilberta dla 32 qubitów zawiera ponad 44 miliardy możliwych wektorów bazowych (232=42949672962^{32} = 4\,294\,967\,296). Jeśli będziemy jednostajnie próbkować z tej przestrzeni przy skończonym budżecie próbkowania (np. 1000010000 wektorów, aby utrzymać wykonalność procesu diagonalizacji), podprzestrzeń może często wykluczać wektory z nośnikiem ground state, ponieważ proces będzie losowy. Dlatego potrzebujemy systematycznego sposobu próbkowania z nośnika ground state z wykorzystaniem obwodów kwantowych.

4. SQD and Sparsity of the wave function

Przepaść między wymiarem pełnej przestrzeni Hilberta a wymiarem wykonalnej podprzestrzeni odsłania kolejny ważny aspekt SQD — rzadkość (sparsity) wave function. Podejście SQD działa dobrze dla rzadkich lub skoncentrowanych wave functions, w których jedynie niewielka część stanów bazowych ma nieznaczące amplitudy. Stoją za tym dwa powody:

  1. Jeśli wave function jest rozległa (tzn. wiele stanów bazowych ma nieznaczące amplitudy) i nie uwzględnimy wektorów z nośnikiem na stanie docelowym w podprzestrzeni, możemy skończyć z błędnymi wartościami własnymi i wektorami własnymi.
  2. Aby uniknąć powyższego problemu, musimy uwzględnić wiele wektorów w podprzestrzeni. Jednak wymiar rzutowanego Hamiltonianu jest bezpośrednio związany z wymiarem podprzestrzeni. Większa podprzestrzeń oznacza większy Hamiltonian, którego diagonalizacja może stać się niewykonalna.

Poniżej prezentujemy ten problem na przykładzie macierzy (HnewH_{new}). Najniższa wartość własna HnewH_{new} wynosi 2.2081-2.2081, a odpowiadająca jej wave function (stan własny) jest rozległa:

ψ=000+001+010+011+100+101+110+1118|\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]

Przyjmijmy, że rzutujemy HnewH_{new} na podprzestrzeń rozpiętą przez cztery wektory: 000|000\rangle, 010|010\rangle, 101|101\rangle oraz 110|110\rangle, a następnie obliczamy wartość własną.

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

Powyższy przykład pokazuje, że gdy wave function jest rozległa i nie uwzględniamy stanów bazowych w podprzestrzeni, obliczenie wartości własnej staje się niepoprawne.

5. SQD vs. VQE

Jak wspomniano wcześniej, SQD może wymagać wariacjonalnego obwodu kwantowego oraz iteracyjnych aktualizacji parametrów, aby przygotować stan podstawowy i próbkować z jego nośnika. Ponieważ ta procedura iteracyjnych aktualizacji parametrów jest podobna do VQE, można zapytać, czym te metody się różnią i jakie są zalety SQD nad VQE. W tej sekcji porównujemy obie metody i omawiamy zalety SQD na przykładzie cząsteczki N2N_2 opisanej minimalnym zestawem bazowym (sto-3g).

 VQESQD
Narzut pomiarowyWiele składników Pauliego, wiele obwodów pomiarowych: Hamiltonian cząsteczki zawiera 29512951 unikatowych składników Pauliego. Ponieważ składniki te mogą zawierać operatory XX i YY, a typowe pomiary kwantowe wykonywane są w bazie ZZ, potrzebujemy zmiany bazy pomiaru, by wyznaczyć te składniki. Po optymalizacji pomiarów 29512951 składników można pogrupować w 11871187 grup, gdzie każdą grupę można wyznaczyć za pomocą jednego obwodu. Potrzebujemy więc co najmniej 11871187 unikatowych obwodów do wyznaczenia wszystkich składników Pauliego. Wiele strzałów na obwód dla mniejszej wariancji. Wyznaczona wartość oczekiwana każdego składnika Pauliego obarczona jest wariancją odwrotnie proporcjonalną do shots\sqrt{shots}. Aby precyzyjnie oszacować każdy składnik, należy przydzielić dużo strzałów na obwód. Przykładowo, aby osiągnąć dokładność chemiczną (11 kcal/mol), zazwyczaj potrzeba od 10510^5 do 10710^7 strzałów na obwód. VQE wymaga więc wielu obwodów pomiarowych, z których każdy musi mieć odpowiednią liczbę strzałów. W praktycznych przypadkach ten narzut pomiarowy może być ograniczający.W SQD nie potrzebujemy różnych obwodów pomiarowych dla każdej grupy składników Pauliego. Zazwyczaj mierzymy jeden obwód przez ustaloną liczbę strzałów. Choć liczba strzałów może być duża w zależności od problemu, narzut pozostaje znacznie mniejszy niż w VQE. Ponadto szacowania energii w procesie diagonalizacji są dokładne — wyznaczone wartości własne są dokładne w danej podprzestrzeni i nie są obarczone wariancją jak w VQE. (W przypadku próbkowania stanów bazowych Kryłowa (Lekcja 5) trzeba mierzyć wiele obwodów, ale ich liczba pozostaje znacznie mniejsza niż w VQE).
Ograniczenie oszacowanej energiiW VQE szacowania energii nie są ograniczone z dołu i mogą być niższe od prawdziwej wartości minimalnej z powodu szumów.Proces szacowania energii w SQD zawsze daje górne ograniczenie energii stanu podstawowego — oszacowana energia nigdy nie będzie niższa od prawdziwej energii stanu podstawowego.
Tolerancja na szumySzacowanie energii w VQE jest podatne na szumy komputerów kwantowych sprzed epoki tolerancji na błędy.SQD ma wbudowaną tolerancję na szumy. Komputery kwantowe sprzed epoki tolerancji na błędy mogą generować zaszumione próbki. Nawet jeśli uwzględnimy te próbki w podprzestrzeni, kolejna diagonalizacja może je stłumić, ustawiając ich amplitudy na zero. Omówimy też metodę zwaną odtwarzaniem konfiguracji (ang. configuration recovery) w kontekście SQD, która dodatkowo poprawia tolerancję SQD na szumy.

6. Summary

  1. W SQD komputer kwantowy generuje próbki, a komputer klasyczny rzutuje Hamiltonian na podprzestrzeń rozpiętą przez te próbki i diagonalizuje go, aby wyznaczyć wartości własne i wektory własne.
  2. Wygenerowane próbki powinny pochodzić z nośnika docelowego (podstawowego) stanu kwantowego.
  3. W zależności od problemu, przygotowanie stanu kwantowego i generowanie próbek może przebiegać iteracyjnie lub nieiteracyjnie.
  4. SQD działa najlepiej dla rzadkich funkcji falowych. Szeroka funkcja falowa wymaga dużej podprzestrzeni dla dokładnych rozwiązań, co sprawia, że operacja rzutowania i diagonalizacji klasycznej staje się kosztowna.
  5. SQD ma kilka zalet nad VQE, takich jak mniejszy narzut pomiarowy oraz górne ograniczenie oszacowanej energii stanu podstawowego, co czyni go bardziej skalowalnym.

References

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