דלג לתוכן הראשי
פרויקט זה בשלב בטא. מצאת באג? פתח issue ב-GitHub. יש שאלה או רעיון? שאל ב-Discussions — נשמח לשמוע ממך!
מה איכות התרגום בדף זה?

אלכסון קוונטי מבוסס דגימה (SQD)

אלכסון קוונטי מבוסס דגימה (SQD) משלב אלגברה לינארית קלאסית עם עוצמת המחשוב הקוונטי כדי לאלכסן המילטוניאן (מטריצה) ולחשב את הערכים העצמיים ואת הווקטורים העצמיים שלו. אלכסון מטריצות הוא פעולה מתמטית חשובה, שכן בעיות רבות במדע, במחשוב ובאופטימיזציה משתמשות בה.

הסרטון הבא נותן סקירה של SQD, מה קובע את תועלתו, ומה הופך אותו למהיר יותר מגישות רבות אחרות. הטקסט שאחריו מפרט יותר.

1. מבוא ומוטיבציה​

נשתמש במשוואת ערכי האנרגיה העצמיים שהפכה מפורסמת בזכות שרדינגר כדוגמה.

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

HH הוא ההמילטוניאן של מערכת, ∣ψ⟩|\psi\rangle היא פונקציית הגל (המוכרת גם כמצב עצמי), ו-EE הוא ערך עצמי. הערכים העצמיים של המטריצה HH מייצגים את רמות האנרגיה של המערכת. למשל, אם המערכת היא מולקולה, הערך העצמי הנמוך ביותר מייצג את אנרגיית מצב היסוד של המולקולה. בבעיות רבות אנחנו מתעניינים באמידת אנרגיית מצב היסוד.

על ידי שימוש בטכניקות אלכסון מדויק מאלגברה לינארית, נוכל לאלכסן את מטריצת HH המלאה. אולם גישה זו הופכת לכבדה חישובית (ואף בלתי אפשרית) ככל שהמטריצה גדלה. למשל, גם עבור מולקולות כימיות קטנות, HH יכולה להיות גדולה באופן בעייתי (לדוגמה, ההמילטוניאן של מולקולת N2N_2 עם בסיס cc-PVDZ הוא בעל ממד 65780×65780).65780 \times 65780).

למרבה המזל, לא תמיד נחוצים לנו כל הערכים העצמיים והווקטורים העצמיים של המילטוניאן HH, ולכן, במקרים מעשיים רבים אין צורך לאלכסן את המטריצה המלאה. לדוגמה, במקרה של אמידת מצב יסוד, אנחנו מתעניינים בערך העצמי הנמוך ביותר ובווקטור העצמי המתאים. זה מאפשר לנו להשתמש במושג ההיטל על תת-מרחב (שימושי).

נשקול מטריצה N×NN \times N, HH, שבה למרחב הווקטורי המלא (מרחב הילברט) יש ממד NN (NN גדול). לאחר מכן נבחר תת-מרחב (S\mathcal{S}) — שהוא תת-קבוצה של מרחב הילברט המלא — בעל ממד MM, כאשר MM קטן מספיק. לאחר היטל HH על תת-מרחב זה, המטריצה המוטלת (נקרא לה HSH_\mathcal{S}) תהיה קטנה יותר (M×MM \times M). ניתן לאלכסן את HSH_\mathcal{S} הקטנה יותר בשיטה מספרית קלאסית מתאימה, ולהפיק ערכים עצמיים ווקטורים עצמיים עבור אותו תת-מרחב.

שימו לב שתת-המרחב חייב להיות ב_תמיכה_ של מצב המטרה העצמי שלנו (לדוגמה, מצב יסוד). במילים אחרות, ההמילטוניאן המוטל HSH_\mathcal{S} חייב להיות בתת-מרחב הכולל את הערך העצמי הנמוך ביותר.

2. היטל ואלכסון​

נניח שאנו רוצים למצוא את הערך העצמי הנמוך ביותר ואת הווקטור העצמי המתאים עבור מטריצת ההמילטוניאן HH בגודל 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}

נאלכסן את המטריצה המלאה יחד עם גרסאות מוטלות שונות (HSH_\mathcal{S}) עבור תת-מרחבים שונים, כדי להדגים את מדרגיות השיטה ואת חשיבות בחירת תת-המרחב.

אנרגיית מצב היסוד (ערך עצמי מינימלי) של המטריצה HH היא −0.5357-0.5357 ופונקציית הגל של מצב היסוד ה_מדויקת_ (ווקטור עצמי) היא:

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

כלומר, מצב היסוד של המטריצה נפרש על ידי שני מצבי בסיס חישוביים (וקטורים) ∣011⟩\vert 011 \rangle ו-∣101⟩\vert 101 \rangle.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"numpy": "numpy", "scipy": "scipy"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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. ]

לאחר מכן, נטיל את המטריצה HH על תת-מרחבים שונים ונבדוק אם נוכל לקבל את מצב היסוד המדויק. בפרט, נטיל את המטריצה על תת-מרחב הנפרש על ידי:

  1. ווקטורי מצב היסוד המדויקים (∣011⟩\vert 011 \rangle ו-∣101⟩\vert 101 \rangle).

  2. ווקטורים שאינם כוללים חלק מווקטורי מצב היסוד המדויקים או את כולם (לדוגמה, ∣000⟩\vert 000 \rangle, ∣011⟩\vert 011 \rangle, ו-∣110⟩\vert 110 \rangle).

  3. ווקטורים הכוללים גם ווקטורי מצב יסוד מדויקים וגם ווקטורים שאינם שייכים למצב היסוד (אך לא את כל הווקטורים האפשריים במרחב הילברט).

2.1 מקרה 1: תת-המרחב כולל את מצב היסוד​

נניח שאנו רוצים להטיל את HH על תת-מרחב (S\mathcal{S}) הנפרש על ידי שני ווקטורים x1=∣011⟩x_1 = |011\rangle ו-x2=∣101⟩x_2 = |101\rangle. ההמילטוניאן המוטל מוגדר על ידי:

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.T @ H @ x1, x1.T @ H @ x2], [x2.T @ H @ x1, x2.T @ H @ x2]])
print(Hs)
[[-0.1773 -0.4778]
[-0.4778 0.1014]]

שימו לב שבכתיבת איברי ההמילטוניאן המוטל כ-x1.T @ H @ x2, אנחנו מאמצים באופן מרומז את המוסכמה הנפוצה לפיה וקטורי המצב x1 ו-x2 מתאימים לקטים (וקטורי עמודה), בהתאם לביטויים כמו x1=∣011⟩x_1 = |011\rangle. עם זאת, מערכים חד-ממדיים של NumPy אינם מבחינים באופן מהותי בין וקטורי שורה לווקטורי עמודה, ועבור הווקטורים המשמשים כאן לפעולת השחלוף אין השפעה מספרית. כתוצאה מכך, כתיבת x1 @ H @ x2.T תניב את אותה תוצאה מספרית, אם כי x1.T @ H @ x2 תואמת בצורה קרובה יותר להתאמה הרגילה בסימון דיראק ⟨x1∣H∣x2⟩\langle x_1|H|x_2\rangle.

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]

ניתן להסיק מכאן מספר תצפיות מפתח.

  • מאחר שפרסנו את תת-המרחב בשני ווקטורים, הממד של המטריצה המוטלת (HSH_\mathcal{S}) הוא 2×22 \times 2, שהוא קטן מהמטריצה המלאה HH (8×88 \times 8).
  • הערך העצמי המינימלי של המטריצה המוטלת תואם את ערך האנרגיה המדויק של מצב היסוד.
  • הערכים במשתנה eigvecs מציינים את האמפליטודה של ווקטורי הפרישה של תת-המרחב, ובעזרתם נוכל לשחזר את המצב העצמי (מצב היסוד). במקרה זה נגיע למצב היסוד המדויק (עד פאזה גלובלית):
∣ψ⟩=−(0.8∣011⟩+0.6∣101⟩)|\psi \rangle = - (0.8 |011\rangle + 0.6 |101\rangle)

2.2 מקרה 2: תת-המרחב לא כולל חלק מווקטורי מצב היסוד או את כולם​

לאחר מכן, נטיל את HH על תת-מרחב הנפרש על ידי שלושה ווקטורים x1=∣000⟩x_1 = |000\rangle, x2=∣011⟩x_2 = |011\rangle, ו-x3=∣110⟩x_3 = |110\rangle. אנחנו בוחרים בכוונה ווקטורים שאינם כוללים ווקטור מצב יסוד (∣101⟩\vert 101 \rangle). ההמילטוניאן המוטל מוגדר על ידי:

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.T @ H @ x1, x1.T @ H @ x2, x1.T @ H @ x3],
[x2.T @ H @ x1, x2.T @ H @ x2, x2.T @ H @ x3],
[x3.T @ H @ x1, x3.T @ H @ x2, x3.T @ H @ x3],
]
)
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

הערך העצמי −0.2111-0.2111 במקרה זה אינו תואם את הערך העצמי המינימלי −0.5357-0.5357 של ההמילטוניאן המלא. התצפית המרכזית כאן היא: אם נטיל על תת-מרחב שאינו כולל מצבי בסיס של המצב המטרה (היסוד) שלנו — בין אם חלקית ובין אם לחלוטין — מצב היסוד המשוער יהיה שונה מהמדויק.

2.3 מקרה 3: תת-המרחב כולל גם ווקטורי מצב יסוד וגם ווקטורים שאינם שייכים למצב היסוד​

לאחר מכן, נציג מקרה שבו תת-המרחב נפרש על ידי ווקטורים הכוללים ווקטורי מצב יסוד מדויקים לצד ווקטורים בלתי רצויים. נניח שתת-המרחב שלנו נפרש על ידי x1=∣011⟩x_1 = |011\rangle, x2=∣101⟩x_2 = |101\rangle (קיימים במצב היסוד המדויק), ו-x3=∣111⟩x_3 = |111\rangle (נעדר ממצב היסוד המדויק).

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.T @ H @ x1, x1.T @ H @ x2, x1.T @ H @ x3],
[x2.T @ H @ x1, x2.T @ H @ x2, x2.T @ H @ x3],
[x3.T @ H @ x1, x3.T @ H @ x2, x3.T @ H @ x3],
]
)
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. ]

במקרה זה, אנחנו מקבלים שוב −0.5357-0.5357 כערך עצמי מינימלי, התואם את המטריצה המלאה (כלומר, מצב היסוד המדויק). תוצאה מעניינת נוספת היא האמפליטודה של x3x_3 שמחזיר תהליך ההיטל והאלכסון. האמפליטודה היא 00, וכשאנו משחזרים את פונקציית הגל (המצב העצמי) עם האמפליטודות והווקטורים המחושבים, אנחנו מקבלים:

∣ψ⟩=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)

כך, גם אם תת-המרחב שלנו כולל ווקטורים שאינם ממטרה (לצד הקבוצה המלאה של ווקטורי המטרה), נוכל לחשב את הערך העצמי והמצב העצמי הנכונים, שכן תהליך ההיטל והאלכסון מסנן ווקטורים שאינם ממטרה על ידי הגדרת אמפליטודותיהם ל-00. תכונה זו של SQD מספקת סבילות רעש טבועה.

3. תפקיד המחשוב הקוונטי ב-SQD​

הניתוחים שלעיל מבססים את החשיבות של וקטורי פריסת תת-המרחב, אשר חייבים להיות בתמיכה של המצב המטרה. זה מעלה שאלה חשובה: כיצד בוחרים וקטורים עם תמיכת מצב המטרה לבניית תת-המרחב?

כאן מחשבים קוונטיים נכנסים לתמונה. הסינרגיה הקוונטית-קלאסית פועלת כך בפרדיגמת SQD:

  1. באמצעות Circuit קוונטי מתאים, אנחנו מנסים להכין מצב במחשב קוונטי שייצר מצבי בסיס שבהם לפונקציית הגל המטרה (למשל, מצב היסוד) יש תמיכה משמעותית. מצבי הבסיס הנדגמים (ביטסטרינגים) יפרסו את תת-המרחב לטובת הטלת ה-Hamiltonian.

  2. מחשב קלאסי מטיל את ה-Hamiltonian על תת-המרחב (הנפרס על ידי דגימות/וקטורים מהמחשב הקוונטי) ומלכסן אותו כדי לחשב ערכים עצמיים ווקטורים עצמיים באמצעות שיטות נומריות מתאימות. A diagram of quantum and classical components of SQD. In quantum, you prepare and sample from your target support, you classically project your matrix onto the sampled subspace and diagonalize your projected matrix. יש כמה דרכים להכין מצב קוונטי כזה, והן יכולות להיות וריאציוניות או לא-וריאציוניות בהתאם לבעיה.

בשני השיעורים הבאים נציג שני דוגמאות ספציפיות להכנת מצבים ודגימה מהם.

  1. בשיעור 4, נשתמש ב-ansatz לוקאלי אוניטרי קשור ג'סטרו (LUCJ) עם פרמטרים כדי לייצר דגימות לבעיית כימיה (אומדן אנרגיית מצב יסוד של מולקולת N2N_2). נאתחל את ה-LUCJ ansatz עם פרמטרים מחישוב קלאסי של coupled cluster singles and doubles (CCSD).
  2. בשיעור 5, נדגום ממצבי בסיס של Krylov כדי לפרוס את תת-המרחב לבעיית פיזיקה של חומר מעובה. גישה זו אינה וריאציונית באופייה.

מעבר לגישות הספציפיות לבעיה לעיל, גישה גנרית להכנת מצב כוללת ansatz וריאציוני, שבו נעדכן פרמטרי ansatz בצורה איטרטיבית באמצעות מייעל קלאסי. A flow chart from a variational quantum circuit through quantum sampling over to classical computing in which the matrix is projected and diagonalized. Then the results are fed into a classical optimizer which selects new variational parameters, and we return to the variational quantum circuit. דגימות ממחשבים קוונטיים לפני סבילות לתקלות עלולות להיות רועשות. SQD משתמש בתהליך שחזור תצורה עצמי-עקבי לתיקון דגימות רועשות [1]. נדון בתהליך שחזור התצורה בפירוט רב יותר ונישם אותו לתיקון דגימות רועשות בצורה איטרטיבית כדי לחדד את אומדן אנרגיית מצב היסוד לבעיית כימיה בשיעור 4.

3.1 הערות על תמיכת מצב היסוד​

בואו נסביר את המושג תמיכת מצב היסוד ביתר פירוט. ניתן להגדיר תמיכת מצב יסוד כקבוצת מצבי הבסיס שבהם למצב היסוד יש משרעת שאינה אפס (עד לסף גזירה).

נניח שמצב היסוד המדויק של בעיית 33-Qubit הוא

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

אם נדגום את המצב לעיל, אנחנו אמורים לקבל קבוצה של מצבי בסיס חישובי {∣000⟩\{\vert 000 \rangle, ∣111⟩}\vert 111 \rangle \} (למצבי בסיס חישובי אחרים יש משרעת אפס במצב היסוד, ולכן, באופן אידיאלי, לא יופיעו בדגימה).

באופן אידיאלי, קבוצת וקטורי הבסיס למצב זה מורכבת מ-{∣000⟩,∣111⟩}\{ \vert 000 \rangle, \vert 111 \rangle \} (במילים אחרות, תת-המרחב של מצב זה נפרס על ידי שני וקטורי בסיס אלה).

בפועל, אין צורך להכין את מצב היסוד המדויק, שכן דגימה ממצבים רבים אחרים יכולה לתת לנו את אותה קבוצת וקטורים. לדוגמה:

∣ψ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}

הכנה ודגימה מכל אחד מהמצבים לעיל תייצר וקטורים בעלי משרעת שאינה אפס במצב היסוד, וכולם כשירים לכך שיש להם תמיכת מצב יסוד. שימו לב שדגימה מ-∣ψc⟩\vert \psi_c \rangle כוללת וקטור נוסף אחד ∣101⟩\vert 101 \rangle שיש לו משרעת 00 במצב היסוד המדויק. אולם, כפי שהראינו קודם, הכללת וקטורים כאלה בתת-המרחב אינה בעייתית שכן פעולת ההטלה והלכסון מציבה את המשרעת של הוקטורים הבלתי רצויים ל-00, וניתן לקבל את ערך העצמי הצפוי ולשחזר את מצב העצמי הנכון.

Diagrams of good and bad ansatz supports. A good ansatz has support that completely contains the ground state support. A poor ansatz contains only part or none of the ground state support.

לפיכך, הכנה ודגימה ממצב היסוד המדויק אינן הכרחיות. למעשה, לעשות זאת עלול להיות קשה, שכן מצב היסוד המדויק אינו ידוע מראש, ולעיתים קרובות מועיל לא להכין ולדגום ממצב היסוד המדויק, במיוחד אם פונקציית הגל (המצב) מוטה כאשר לחלק ממצבי הבסיס יש הסתברויות גבוהות מאוד. שקלו את פונקציית הגל הבאה:

∣ψ⟩=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

זוהי פונקציית גל מוטה שבה למצבי הבסיס ∣000⟩\vert 000 \rangle ו-∣010⟩\vert 010 \rangle יש משרעות גדולות בהרבה בהשוואה ל-∣101⟩\vert 101 \rangle ו-∣111⟩\vert 111 \rangle. כאשר דוגמים, נקבל את ∣000⟩\vert 000 \rangle ו-∣010⟩\vert 010 \rangle לעיתים קרובות יותר (הסתברות דגימה=∣משרעת∣2\text{הסתברות דגימה} = \vert \text{משרעת} \vert^{2} ≈49%\approx 49\% עבור ∣000⟩\vert 000 \rangle ו-∣010⟩\vert 010 \rangle כל אחד, ≈1%\approx 1\% עבור ∣101⟩\vert 101 \rangle, ו-≈0.01%\approx 0.01\% עבור ∣111⟩\vert 111 \rangle). עם תקציב דגימה מוגבל (shots), סביר מאוד שהקבוצה הנדגמת שלנו תכיל רק את ∣000⟩\vert 000 \rangle ו-∣010⟩\vert 010 \rangle. כפי שהראינו קודם, אם נפרוס את תת-המרחב עם קבוצה כזו שחסרים בה וקטורים, לא נוכל למצוא את ערך העצמי המינימלי האמיתי. לכן, יהיה מועיל (ונחוץ) לדגום ממצב בעל תמיכת מצב יסוד.

3.2 טיעון נגד דגימה אחידה​

עלול להיות מפתה לשאוב דגימות מהתפלגות אחידה כדי לפרוס את תת-המרחב. בעוד שזה עשוי לעבוד עבור בעיות קטנות, זה יתחיל להיכשל עבור בעיות גדולות ומעשיות יותר. לבעיות גדולות עם qubits רבים, מרחב הילברט יכול להיות גדול בצורה שאינה ניתנת לטיפול. לדוגמה, מרחב הילברט של 32-Qubit מכיל יותר מ-44 מיליארד וקטורי בסיס אפשריים (232=4,294,967,2962^{32} = 4,294,967,296). אם נדגום באופן אחיד מאותו מרחב עם תקציב דגימה מוגבל (נניח 1000010000 וקטורים כדי לשמור על ישימות תהליך הלכסון), תת-המרחב עלול לא לכלול וקטורים עם תמיכת מצב יסוד לעיתים קרובות יותר שכן התהליך יהיה אקראי. לכן, אנחנו צריכים דרך שיטתית לדגום מתמיכת מצב היסוד תוך ניצול Circuit-ים קוונטיים.

4. SQD ודלילות פונקציית הגל​

הפער בין מרחב הילברט המלא לממדי תת-המרחב הישימים מביא היבט חשוב נוסף של SQD, והוא דלילות פונקציית הגל. גישת SQD עובדת היטב עבור פונקציות גל דלילות או מרוכזות שבהן חלק קטן ממצבי הבסיס בעל משרעות שאינן זניחות. ישנן שתי סיבות לכך:

  1. אם פונקציית הגל רחבה (כלומר, למצבי בסיס רבים יש משרעות שאינן זניחות), ואנחנו מחמיצים וקטורים עם תמיכת מצב המטרה בתת-המרחב, אנחנו עלולים לקבל ערכים עצמיים ווקטורים עצמיים שגויים.

  2. כדי להימנע מהבעיה לעיל, צריך לכלול וקטורים רבים בתת-המרחב. אולם, הממד של ה-Hamiltonian המוטל קשור ישירות לממד תת-המרחב. תת-מרחב גדול יותר יאמר Hamiltonian גדול יותר, שעלול להפוך ללא ישים ללכסון.

אנחנו מדגימים את הבעיה עם המטריצה הבאה (HnewH_{new}). ערך העצמי הנמוך ביותר של HnewH_{new} הוא −2.2081-2.2081, ופונקציית הגל המתאימה (מצב עצמי) היא רחבה:

∣ψ⟩=∣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]

נניח שאנחנו מטילים את HnewH_{new} על תת-מרחב הנפרס על ידי ארבעה וקטורים: ∣000⟩|000\rangle, ∣010⟩|010\rangle, ∣101⟩|101\rangle, ו-∣110⟩|110\rangle ומחשבים את ערך העצמי.

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.T @ H_new @ x1, x1.T @ H_new @ x2, x1.T @ H_new @ x3, x1.T @ H_new @ x4],
[x2.T @ H_new @ x1, x2.T @ H_new @ x2, x2.T @ H_new @ x3, x2.T @ H_new @ x4],
[x3.T @ H_new @ x1, x3.T @ H_new @ x2, x3.T @ H_new @ x3, x3.T @ H_new @ x4],
[x4.T @ H_new @ x1, x4.T @ H_new @ x2, x4.T @ H_new @ x3, x4.T @ H_new @ x4],
]
)
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

הדוגמה לעיל מראה שכאשר פונקציית הגל רחבה ואנחנו לא כוללים מצבי בסיס בתת-המרחב, חישוב ערך העצמי הופך לשגוי.

5. SQD לעומת VQE​

כפי שצוין קודם, SQD עשוי להזדקק ל-Circuit קוונטי וריאציוני ועדכוני פרמטרים איטרטיביים כדי להכין ולדגום מתמיכת מצב היסוד. מכיוון שנוהל עדכון הפרמטרים האיטרטיבי הזה דומה ל-VQE, אפשר לשאול כיצד שיטות אלה שונות, ומה היתרונות של SQD על VQE? בסעיף זה, אנחנו משווים את השיטות ודנים ביתרונות של SQD עם מולקולת N2N_2 המתוארת עם קבוצת בסיס מינימלית (sto-3g) כדוגמה.

 VQESQD
עלות מדידהמונחי Pauli רבים, Circuit-ים מדידה רבים: ל-Hamiltonian של המולקולה יש 29512951 מונחי Pauli ייחודיים. מאחר שמונחי Pauli יכולים להכיל מונחי XX ו-YY, ומדידות קוונטיות טיפוסיות נעשות בבסיס ZZ, אנחנו צריכים שינוי בסיס מדידה כדי להעריך מונחים אלה. כשמאופטם למדידות, ניתן לקבץ את 29512951 המונחים ל-11871187 קבוצות, כשכל קבוצה יכולה להיות מוערכת באמצעות Circuit בודד. כך, אנחנו צריכים לפחות 11871187 Circuit-ים ייחודיים להערכת כל מונחי Pauli. shots רבים לכל Circuit לשונות קטנה יותר. שוב, לערך הציפייה המוערך של כל מונח Pauli יש שונות הצמודה לו שתלויה ביחס הפוך ב-shots\sqrt{shots}. לכן, כדי לאמוד בדיוק כל מונח, אנחנו צריכים להקצות shots רבים לכל Circuit. לדוגמה, כדי להשיג דיוק כימי (11 kcal/mol), בדרך כלל אנחנו צריכים shots בסדר גודל של 10510^5-10710^7 לכל Circuit. לפיכך, VQE צריך Circuit-ים מדידה רבים וכל Circuit עם מספר מסוים של shots. במקרים מעשיים, עלות מדידה זו יכולה להיות מגבילה.ב-SQD, איננו צריכים Circuit-ים מדידה שונים לכל מונחי Pauli המקובצים. בדרך כלל, אנחנו מודדים Circuit בודד עבור מספר קבוע של shots. בעוד שאנחנו עשויים להגדיר את מספר ה-shots לערך גדול בהתאם לבעיה, העלות נשארת קטנה בהרבה מ-VQE. כמו כן, אומדני האנרגיה באמצעות תהליך הלכסון הם מדויקים, כלומר הערכים העצמיים המחושבים מדויקים בתת-המרחב הזה ואין להם שונות כמו ב-VQE. (במקרה של דגימת מצבי בסיס של Krylov (שיעור 5), אנחנו צריכים למדוד Circuit-ים מרובים, אך מספר ה-Circuit-ים נשאר קטן בהרבה מ-VQE).
חסם אנרגיה מוערכתב-VQE, אומדני אנרגיה אינם חסומים ועלולים להיות נמוכים מהערכים המינימליים האמיתיים עקב רעש.תהליך אומדן האנרגיה ב-SQD תמיד מייצר חסם עליון לאנרגיית מצב היסוד, והאנרגיה המוערכת לעולם לא תהיה נמוכה מאנרגיית מצב היסוד האמיתית.
סבילות לרעשאומדן אנרגיית VQE רגיש לרעש ממחשבים קוונטיים לפני סבילות לתקלות.ל-SQD יש סבילות מובנית לרעש. מחשבים קוונטיים לפני סבילות לתקלות יכולים לייצר דגימות רועשות. גם אם נכלול את הדגימות האלה בתת-המרחב, הלכסון הבא יכול לדכא דגימות אלה על ידי הצבת המשרעות שלהן לאפס. כמו כן, נדון בשיטה הנקראת שחזור תצורה בהקשר ל-SQD שמשפרת את סבילות SQD לרעש עוד יותר.

6. סיכום​

  1. ב-SQD, מחשב קוונטי מייצר דגימות ומחשב קלאסי מטיל Hamiltonian על תת-מרחב הנפרס על ידי הדגימות ומלכסן אותו לחישוב ערכים עצמיים ווקטורים עצמיים.

  2. הדגימות שנוצרו צריכות להיות מתמיכת מצב המטרה (היסוד).

  3. בהתאם לבעיה, זרימת הכנת המצב הקוונטי וייצור הדגימות יכולה להיות איטרטיבית או לא-איטרטיבית.

  4. SQD עובד בצורה הטובה ביותר עבור פונקציות גל דלילות. פונקציית גל רחבה תדרוש תת-מרחב גדול לפתרונות מדויקים, מה שהופך את פעולת ההטלה והלכסון הקלאסית ליקרה.

  5. ל-SQD יש מספר יתרונות על VQE כגון עלות מדידה נמוכה יותר וחסם עליון לאנרגיית מצב היסוד המוערכת, מה שהופך אותו לניתן יותר לסקלאביליות.

מקורות​

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