פותר הערכים העצמיים הקוונטי הווריאציוני (VQE)
שיעור זה יציג את פותר הערכים העצמיים הקוונטי הווריאציוני, יסביר את חשיבותו כאלגוריתם יסודי בחישוב קוונטי, וגם יסקור את חוזקותיו וחולשותיו. VQE כשלעצמו, ללא שיטות משלימות, כנראה לא יספיק לחישובים קוונטיים בקנה מידה של שירות מודרני. עם זאת, הוא חשוב כשיטה היברידית-קלאסית-קוונטית מייצגת, וכבסיס חשוב עליו בנויים אלגוריתמים מתקדמים רבים יותר.
הסרטון הזה נותן סקירה של VQE ושל הגורמים המשפיעים על יעילותו. הטקסט שלהלן מוסיף פרטים נוספים ומממש VQE באמצעות Qiskit.
1. מהו VQE?
פותר הערכים העצמיים הקוונטי הווריאציוני הוא אלגוריתם המשתמש בחישוב קלאסי וקוונטי יחד כדי לבצע משימה. ל-VQE ארבעה רכיבים עיקריים:
- אופרטור: לעיתים קרובות Hamiltonian, שנקרא לו , המתאר תכונה של המערכת שלך שברצונך לייעל. דרך אחרת לומר זאת היא שאתה מחפש את הוקטור העצמי של האופרטור הזה המתאים לערך העצמי המינימלי. לעיתים קרובות נקרא לוקטור העצמי הזה "מצב היסוד".
- "ansatz" (מילה גרמנית שמשמעותה "גישה"): זהו Circuit קוונטי המכין מצב קוונטי המקרב את הוקטור העצמי שאתה מחפש. למעשה, ה-ansatz הוא משפחה של Circuits קוונטיים, כי חלק מה-Gates ב-ansatz הם פרמטריים, כלומר, הם מקבלים פרמטר שניתן לשנות. משפחת Circuits קוונטיים זו יכולה להכין משפחה של מצבים קוונטיים המקרבים את מצב היסוד.
- Estimator: אמצעי להערכת ערך הציפייה של האופרטור על המצב הקוונטי הווריאציוני הנוכחי. לפעמים מה שמעניין אותנו הוא פשוט ערך הציפייה הזה, שנקרא לו פונקציית עלות. לפעמים, אנחנו מתעניינים בפונקציה מסובכת יותר שעדיין ניתן לכתוב החל מערך ציפייה אחד או יותר.
- מייעל קלאסי: אלגוריתם המשנה פרמטרים בניסיון למזער את פונקציית העלות.
בואו נסתכל על כל אחד מהרכיבים הללו ביתר עומק.
1.1 האופרטור (Hamiltonian)
בלב בעיית VQE נמצא אופרטור המתאר מערכת מעניינת. נניח כאן שהערך העצמי הנמוך ביותר והוקטור העצמי המתאים לו שימושיים למטרה מדעית או עסקית כלשהי. דוגמאות עשויות לכלול Hamiltonian כימי המתאר מולקולה, כך שהערך העצמי הנמוך ביותר של האופרטור מתאים לאנרגיית מצב היסוד של המולקולה, והמצב העצמי המתאים מתאר את הגיאומטריה או תצורת האלקטרונים של המולקולה. או שהאופרטור יכול לתאר עלות של תהליך מסוים שיש לייעל, והמצבים העצמיים יכולים להתאים למסלולים או נוהלים. בתחומים מסוימים, כמו פיזיקה, "Hamiltonian" כמעט תמיד מתייחס לאופרטור המתאר את אנרגיית מערכת פיזית. אבל בחישוב קוונטי, נפוץ לראות אופרטורים קוונטיים המתארים בעיה עסקית או לוגיסטית שמכנים אותם גם "Hamiltonian". נאמץ מוסכמה זו כאן.
מיפוי בעיה פיזית או בעיית אופטימיזציה ל-Qubits הוא בדרך כלל משימה לא טריוויאלית, אך הפרטים הללו אינם מוקד הקורס הזה. דיון כללי על מיפוי בעיה לאופרטור קוונטי ניתן למצוא ב-חישוב קוונטי בפרקטיקה. מבט מפורט יותר על מיפוי בעיות כימיה לאופרטורים קוונטיים ניתן למצוא ב-כימיה קוונטית עם VQE.
לצורך קורס זה, נניח שצורת ה-Hamiltonian ידועה. לדוגמה, Hamiltonian עבור מולקולת מימן פשוטה (תחת הנחות מסוימות של מרחב פעיל, ובשימוש ב-Jordan-Wigner mapper) הוא:
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime scipy
from qiskit.quantum_info import SparsePauliOp
hamiltonian = SparsePauliOp(
[
"IIII",
"IIIZ",
"IZII",
"IIZI",
"ZIII",
"IZIZ",
"IIZZ",
"ZIIZ",
"IZZI",
"ZZII",
"ZIZI",
"YYYY",
"XXYY",
"YYXX",
"XXXX",
],
coeffs=[
-0.09820182 + 0.0j,
-0.1740751 + 0.0j,
-0.1740751 + 0.0j,
0.2242933 + 0.0j,
0.2242933 + 0.0j,
0.16891402 + 0.0j,
0.1210099 + 0.0j,
0.16631441 + 0.0j,
0.16631441 + 0.0j,
0.1210099 + 0.0j,
0.17504456 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
],
)
שים לב שב-Hamiltonian לעיל, יש איברים כמו ZZII ו-YYYY שאינם מתחלפים זה עם זה. כלומר, כדי להעריך את ZZII, נצטרך למדוד את אופרטור פאולי Z על Qubit 3 (בין מדידות אחרות). אבל כדי להעריך את YYYY, נצטרך למדוד את אופרטור פאולי Y על אותו Qubit, Qubit 3. קיים יחס אי-וודאות בין אופרטורי Y ו-Z על אותו Qubit; איננו יכולים למדוד את שני האופרטורים הללו בו-זמנית. נחזור לנקודה זו להלן, ולאורך הקורס.
ה-Hamiltonian לעיל הוא אופרטור מטריצה . אלכסון האופרטור כדי למצוא את ערך האנרגיה העצמי הנמוך ביותר שלו אינו קשה.
import numpy as np
A = np.array(hamiltonian)
eigenvalues, eigenvectors = np.linalg.eigh(A)
print("The ground state energy is ", min(eigenvalues), "hartrees")
The ground state energy is -1.1459778447627311 hartrees
פותרי ערכים עצמיים קלאסיים בגסות לא יכולים לאפיין את האנרגיות או הגיאומטריות של מערכות אטומים גדולות מאוד, כמו תרופות או חלבונים. VQE הוא אחד הניסיונות הראשונים למנף חישוב קוונטי בבעיה זו.
נתקל ב-Hamiltonians גדולים בהרבה בשיעור זה מזה שלעיל. אבל יהיה זה בזבזני לדחוף את גבולות מה ש-VQE יכול לעשות, לפני שנציג כמה מהכלים המתקדמים יותר שיכולים להשלים או להחליף את VQE, בהמשך הקורס הזה.
1.2 Ansatz
המילה "ansatz" היא גרמנית ל"גישה". הרבים הנכון בגרמנית הוא "ansätze", אם כי לעיתים קרובות רואים "ansatzes" או "ansatze". בהקשר של VQE, ansatz הוא ה-Circuit הקוונטי שבו אתה משתמש כדי ליצור פונקציית גל של Qubits מרובים שמקרבת בצורה הטובה ביותר את מצב היסוד של המערכת שאתה חוקר, ואשר מפיקה כך את ערך הציפייה הנמוך ביותר של האופרטור שלך. Circuit קוונטי זה י כיל פרמטרים ווריאציוניים (המאוגדים לעיתים קרובות יחד בוקטור המשתנים ).
נבחר ערכים התחלתיים של הפרמטרים הווריאציוניים. נקרא לפעולה האוניטרית של ה-ansatz על ה-Circuit . כברירת מחדל, כל ה-Qubits במחשבי הקוונטום של IBM® מאותחלים למצב . כאשר מריצים את ה-Circuit, מצב ה-Qubits יהיה
אם כל מה שהיינו צריכים הוא האנרגיה הנמוכה ביותר (בשפה של מערכות פיזיות), יכולנו להעריך זאת פשוט על ידי מדידת האנרגיה פעמים רבות ולקחת את הנמוכה ביותר. אבל בדרך כלל אנחנו גם רוצים את התצורה שמניבה את האנרגיה הנמוכה ביותר או הערך העצמי. אז השלב הבא הוא אומדן ערך הציפייה של ה-Hamiltonian, המושג באמצעות מדידות קוונטיות. יש הרבה מה שנכנס לכך. אבל אנחנו יכולים להבין את התהליך הזה איכותית על ידי ציון שהסתברות למדידת אנרגיה (שוב בשפה של מערכות פיזיות) קשורה לערך הציפייה לפי:
הסתברות קשורה גם לחפיפה בין המצב העצמי למצב הנוכחי של המערכת :
אז על ידי ביצוע מדידות רבות של אופרטורי פאולי המרכיבים את ה-Hamiltonian שלנו, אנחנו יכולים להעריך את ערך הציפייה של ה-Hamiltonian במצב הנוכחי של המערכת . השלב הבא הוא לשנות את הפרמטרים ולנסות להתקרב יותר למצב הנמוך-אנרגיה (היסוד) של המערכת. בגלל הפרמטרים הווריאציוניים ב-ansatz, לעיתים קרובות מכנים אותו הצורה הווריאציונית.
לפני שנעבור לתהליך הווריאציוני הזה, שים לב שלעיתים קרובות שימושי להתחיל את המצב שלך ממצב "ניחוש טוב". אולי אתה יודע מספיק על המערכת שלך כדי לעשות ניחוש התחלתי טוב יותר מ-. לדוגמה, נפוץ לאתחל Qubits למצב Hartree-Fock ביישומים כימיים. ניחוש התחלתי זה שאינו מכיל פרמטרים ווריאציוניים נקרא מצב הייחוס. נקרא ל-Circuit הקוונטי המשמש ליצירת מצב הייחוס . בכל פעם שיש חשיבות להבחין בין מצב הייחוס לשאר ה-ansatz, השתמש ב: בשקילות
1.3 Estimator
אנחנו צריכים דרך להעריך את ערך הציפייה של ה-Hamiltonian שלנו במצב ווריאציוני מסוים . אם יכולנו למדוד ישירות את האופרטור כולו , זה היה פשוט כמו ביצוע מדידות רבות (נניח ) וממוצע הערכים הנמדדים:
כאן, סימן מזכיר לנו שערך הציפייה הזה יהיה מדויק רק בגבול כש-. אבל עם אלפי מדידות שמבוצעות על Circuit, שגיאת הדגימה של ערך הציפייה נמוכה למדי. קיימים שיקולים נוספים כמו רעש שהופכים לבעיה עבור חישובים מדויקים מאוד.
עם זאת, בדרך כלל לא ניתן למדוד את בבת אחת. עשוי להכיל אופרטורי פאולי X, Y ו-Z מרובים שאינם מתחלפים. לכן יש לפרק את ה-Hamiltonian לקבוצות של אופרטורים שניתן למדוד בו-זמנית, ויש להעריך כל קבוצה כזו בנפרד, ולשלב את התוצאות כדי לקבל ערך ציפייה. נחזור לכך ביתר פירוט בשיעור הבא, כאשר נדון בהתרחבות של גישות קלאסיות וקוונטיות. מורכב ות המדידה הזו היא אחת הסיבות לכך שאנחנו צריכים קוד יעיל ביותר לביצוע הערכה כזו. בשיעור זה ובהמשך, נשתמש ב-Qiskit Runtime primitive Estimator למטרה זו.
1.4 מייעלים קלאסיים
מייעל קלאסי הוא כל אלגוריתם קלאסי שנועד למצוא קיצוניות של פונקציית יעד (בדרך כלל מינימום). הם מחפשים במרחב הפרמטרים האפשריים אחר קבוצה שממזערת פונקציית עניין כלשהי. ניתן לסווגם באופן כללי לשיטות מבוססות-גרדיאנט, המשתמשות במידע גרדיאנט, ולשיטות ללא-גרדיאנט, הפועלות כמייעלות קופסה שחורה. בחירת המייעל הקלאסי יכולה להשפיע משמעותית על ביצועי האלגוריתם, במיוחד בנוכחות רעש בחומרה קוונטית. מייעלים פופולריים בתחום זה כוללים Adam, AMSGrad ו-SPSA, שהראו תוצאות מבטיחות בסביבות רועשות. מייעלים מסורתיים יותר כוללים COBYLA ו-SLSQP.
תזרים עבודה נפוץ (מוצג בסעיף 3.3) הוא להשתמש באחד מהאלגוריתמים הללו כשיטה בתוך מייעל כמו פונקציית minimize של scipy. זו מקבלת כארגומנטים שלה:
- פונקציה כלשהי שיש למזער. זהו לעיתים קרובות ערך ציפייה האנרגיה. אבל אלה נקראים בדרך כלל "פונקציות עלות".
- קבוצת פרמטרים ממנה להתחיל את החיפוש. לעיתים קרובות נקרא או .
- ארגומנטים, כולל ארגומנטים של פונקציית העלות. בחישוב קוונטי עם Qiskit, ארגומנטים אלה יכללו את ה-ansatz, את ה-Hamiltonian ואת ה-Estimator primitive, שנדון בו יותר בתת-הסעיף הבא.
- 'שיטה' של מיזעור. זה מתייחס לאלגוריתם הספציפי המשמש לחיפוש במרחב הפרמטרים. כאן נציין לדוגמה COBYLA או SLSQP.
- אפשרויות. האפשרויות הזמינות עשויות להשתנות לפי שיטה. אבל דוגמה שכמעט כל השיטות יכללו היא מספר האיטרציות המקסימלי של המייעל לפני סיום החיפוש: 'maxiter'.
בכל שלב איטרטיבי, ערך הציפייה של ה-Hamiltonian מוערך על ידי ביצוע מדידות רבות. אנרגיה מוערכת זו מוחזרת על ידי פונקציית העלות, והמייעל מעדכן את המידע שיש לו על נוף האנרגיה. מה בדיוק עושה המייעל כדי לבחור את השלב הבא משתנה משיטה לשיטה. חלקם משתמשים בגרדיאנטים ובוחרים בכיוון הירידה התלולה ביותר. אחרים עשויים לקחת בחשבון רעש ועשויים לדרוש שהעלות תקטן בפער גדול לפני קבלת הנחה שהאנרגיה האמיתית פוחתת לאורך אותו כיוון.
# Example syntax for minimization
# from scipy.optimize import minimize
# res = minimize(cost_func, x0, args=(ansatz, hamiltonian, estimator), method="cobyla", options={'maxiter': 200})
1.5 העיקרון הווריאציוני
בהקשר זה, העיקרון הווריאציוני חשוב מאוד; הוא קובע שאף פונקציית גל ווריאציונית לא יכולה להניב ערך ציפייה של אנרגיה (או עלות) נמוך מזה שמניבה פונקציית גל מצב היסוד. מתמטית,
קל לאמת זאת אם נשים לב שקבוצת כל המצבים העצמיים של יוצרת בסיס שלם למרחב הילברט. במילים אחרות, כל מצב ובפרט ניתן לכתוב כסכום ממושקל (מנורמל) של המצבים העצמיים הללו של :
כאשר הם קבועים לקביעה, ו-. נשאיר זאת כתרגיל לקורא. אבל שים לב להשלכה: המצב הווריאציוני המניב את ערך ציפייה האנרגיה הנמוך ביותר הוא האומדן הטוב ביותר של מצב היסוד האמיתי.
בדוק את הבנתך
אמת מתמטית ש- עבור כל מצב ווריאציוני .
Answer
בשימוש בפיתוח הנתון של המצב הווריאציוני במונחי המצבים העצמיים של האנרגיה,
אנחנו יכולים לכתוב את ערך ציפייה האנרגיה הווריאציונית בתור
עבור כל המקדמים . אז נוכל לכתוב
2. השוואה עם תזרים עבודה קלאסי
נניח שאנחנו מתעניינים במטריצה עם N שורות ו-N עמודות. נניח שהמטריצה שלך כה גדולה שאלכסון מדויק אינו אפשרות. נניח עוד שאתה יודע מספיק על הבעיה שלך כדי לעשות כמה ניחושים על המבנה הכולל של המצב העצמי היעד, ואתה רוצה לבדוק מצבים דומים לניחוש ההתחלתי שלך כדי לראות אם ניתן להוריד עוד את העלות/אנרגיה שלך. זוהי גישה ווריאציונית, והיא שיטה אחת שנמצאת בשימוש כאשר אלכסון מדויק אינו אפשרות.
2.1 תזרים עבודה קלאסי
בשימוש במחשב קלאסי, זה יעבוד כך:
- עשה מצב ניחוש, עם כמה פרמטרים שתשנה: . למרות שניחוש התחלתי זה יכול להיות אקראי, זה לא מומלץ. אנחנו רוצים להשתמש בידע על הבעיה הנוכחית כדי להתאים את הניחוש שלנו ככל האפשר.
- חשב את ערך הציפייה של האופרטור כאשר המערכת במצב הזה:
- שנה את הפרמטרים הווריאציוניים וחזור: .
- השתמש במידע שנצבר על נוף המצבים האפשריים בתת-המרחב הווריאציוני שלך כדי לעשות ניחושים טובים יותר ויותר ולהתקרב למצב היעד. העיקרון הווריאציוני מבטיח שהמצב הווריאציוני שלנו לא יכול להניב ערך עצמי נמוך מזה של מצב היסוד היעד. אז ככל שערך הציפייה נמו ך יותר, כך הקירוב שלנו למצב היסוד טוב יותר:
בואו נבחן את הקושי של כל שלב בגישה זו. הגדרה או עדכון פרמטרים היא מבחינה חישובית פשוטה; הקושי שם הוא בבחירת פרמטרים התחלתיים שימושיים ומוטיבציה פיזית. שימוש במידע שנצבר מאיטרציות קודמות לעדכון פרמטרים באופן שמתקרב למצב היסוד הוא לא טריוויאלי. אבל אלגוריתמי אופטימיזציה קלאסיים קיימים שעושים זאת בצורה יעילה למדי. אופטימיזציה קלאסית זו יקרה רק מכיוון שהיא עשויה לדרוש איטרציות רבות; במקרה הגרוע ביותר, מספר האיטרציות עשוי להתרחב באופן מעריכי עם N. השלב הבודד היקר ביותר מבחינה חישובית הוא כמעט בוודאות חישוב ערך הציפייה של המטריצה שלך בשימוש במצב נתון :
מטריצת חייבת לפעול על וקטור בגודל , מה שמתאים ל: פעולות כפל במקרה הגרוע ביותר. יש לבצע זאת בכל איטרציה של פרמטרים. עבור מטריצות גדולות מאוד, יש לכך עלות חישובית גבוהה.
2.2 תזרים עבודה קוונטי וקבוצות פאולי מתחלפות
עכשיו תאר לעצמך שאתה מעביר חלק זה של החישוב למחשב קוונטי. במקום לחשב ערך ציפייה זה, אתה מעריך אותו על ידי הכנת המצב על המחשב הקוונטי באמצעות ה-ansatz הווריאציוני שלך, ואז ביצוע מדידות.
זה אולי נשמע קל יותר ממה שהוא. בדרך כלל לא קל למדידה. לדוגמה, הוא יכול להיות מורכב מאופרטורי פאולי X, Y ו-Z רבים שאינם מתחלפים. אבל יכול להיכתב כצירוף לינארי של איברים, , שכל אחד מהם ניתן למדידה קלה (לדוגמה, אופרטורי פאולי או קבוצות של אופרטורי פאולי מתחלפים לפי Qubit). ערך הציפייה של על מצב כלשהו הוא הסכום הממושקל של ערכי הציפייה של האיברים המרכיבים . ביטוי זה תקף לכל מצב , אבל נשתמש בו באופן ספציפי עם המצבים הווריאציוניים שלנו .
כאשר הוא מחרוזת פאולי כמו IZZX…XIYX, או מספר מחרוזות כאלה שמתחלפות זו עם זו. אז תיאור של ערך הציפייה שמתאים יותר למציאות המדידה על מחשבים קוונטיים הוא
ובהקשר של פונקציית הגל הווריאציונית שלנו:
כל אחד מהאיברים ניתן למדידה פעמים המניבות דגימות מדידה עם ומחזירות ערך ציפייה וסטיית תקן . אנחנו יכולים לסכם את האיברים הללו ולהפיץ שגיאות דרך הסכום כדי לקבל ערך ציפייה כולל וסטיית תקן .
זה לא דורש כפל בקנה מידה גדול, ולא כל תהליך שמתרחב בהכרח כמו . במקום זאת, זה דורש מדידות מרובות על המחשב הקוונטי. אם אין צורך ברבות מהן, גישה זו יכולה להיות יעילה. וזה החלק הקוונטי של VQE.
אבל בואו נדבר על סיבות מדוע זה עשוי להיות לא יעיל. סיבה אחת למדידות רבות היא להפחית את אי-הוודאות הסטטיסטית באומדנים שלך, עבור חישובים בדיוק גבוה מאוד. סיבה נוספת היא מספר מחרוזות פאולי הנדרשות לאפיין את המטריצה כולה. מכיוון שמטריצות פאולי (בתוספת הזהות: X, Y, Z ו-I) פורשות את המרחב של כל האופרטורים בממד נתון, מובטח לנו שנוכל לכתוב את המטריצה המעניינת שלנו כסכום ממושקל של אופרטורי פאולי, כפי שעשינו קודם.
כאשר הוא מחרוזת פאולי הפועלת על כל ה-Qubits המתארים את המערכת שלך כמו IZZX…XIYX, או מספר מחרוזות כא לה שמתחלפות זו עם זו. זכור שQiskit משתמשת בסימון little endian, בו אופרטור פאולי ה- מימין פועל על ה-Qubit ה-. אז אנחנו יכולים למדוד את האופרטור שלנו על ידי מדידת סדרה של אופרטורי פאולי.
אבל לא נוכל למדוד את כל אופרטורי פאולי הללו בו-זמנית. אופרטורי פאולי (למעט I) אינם מתחלפים זה עם זה אם הם קשורים לאותו Qubit. לדוגמה, ניתן למדוד IZIZ ו-ZZXZ בו-זמנית, כי ניתן למדוד I ו-Z בו-זמנית עבור ה-Qubit ה-3, וניתן לדעת I ו-X בו-זמנית עבור ה-Qubit ה-1. אבל לא ניתן למדוד ZZZZ ו-ZZZX בו-זמנית, כי Z ו-X אינם מתחלפים, ושניהם פועלים על ה-Qubit ה-0.
לכן אנחנו מפרקים את המטריצה שלנו לסכום של פאולי הפועלים על Qubits שונים. חלק מהאיברים בסכום הזה ניתנים למדידה בבת אחת; אנחנו קוראים לזה קבוצה של פאולי מתחלפים. בהתאם לכמה איברים לא-מתחלפים יש, עשויות להיות דרושות קבוצות רבות כאלה. קרא למספר קבוצות כאלה של מחרוזות פאולי מתחלפות . אם קטן, זה יכול לעבוד טוב. אם ל- יש מיליוני קבוצות, זה לא יהיה שימושי.
התהליכים הנדרשים לאומדן ערך הציפייה מאוגדים יחד ב-Qiskit Runtime primitive שנקרא Estimator. למידע נוסף על Estimator, ראה את ה-API reference בתיעוד IBM Quantum®. ניתן פשוט להשתמש ב-Estimator ישירות, אבל Estimator מחזיר הרבה יותר מאשר רק ערך הערך העצמי הנמוך ביותר. לדוגמה, הוא גם מחזיר מידע על שגיאת תקן של הגדרה. לכן, בהקשר של בעיות מיזעור, לעיתים קרובות רואים את Estimator בתוך פונקציית עלות. למידע נוסף על קלטים ופלטים של Estimator ראה מדריך זה בתיעוד IBM Quantum.
אתה מתעד את ערך הציפייה (או פונקציית העלות) עבור קבוצת הפרמטרים שנמצאת בשימוש במצב שלך, ואז אתה מעדכן את הפרמטרים. לאורך זמן, יכולת להשתמש בערכי הציפייה או בערכי פונקציית העלות שהערכת כדי לקרב גרדיאנט של פונקציית העלות שלך בתת-מרחב המצבים שנדגמו על ידי ה-ansatz שלך. קיימים מייעלים קלאסיים הן מבוססי-גרדיאנט והן ללא-גרדיאנט. שניהם סובלים מבעיות אימון פוטנציאליות, כמו מינימה מקומיים מרובים, ואזורים גדולים של מרחב פרמטרים עם גרדיאנט קרוב לאפס, שנקראים רמות שוממות (barren plateaus).