דלג לתוכן הראשי

טכניקות לצמצום ודיכוי שגיאות

מודל הרצה חדש, כעת בגרסת בטא

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

Package versions

The code on this page was developed using the following requirements. We recommend using these versions or newer.

qiskit-ibm-runtime~=0.43.1

טכניקות לצמצום שגיאות ולדיכוי שגיאות משמשות לשיפור איכות התוצאות בעת ​​הגדלת עומסי עבודה. עמוד זה מספק הסברים ברמה גבוהה על טכניקות דיכוי השגיאות וצמצום השגיאות הזמינות דרך Qiskit Runtime.

תא הקוד הבא מייבא את ה-primitive של Estimator ויוצר Backend שישמש לאתחול ה-Estimator בתאי קוד מאוחרים יותר.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy()

פענוח דינמי

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

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

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

Depiction of dynamical decoupling

ניתן להפעיל פענוח דינמי על ידי הגדרת enable ל-True באפשרויות הפענוח הדינמי. ניתן להשתמש באפשרות sequence_type כדי לבחור מבין מספר רצפי פולסים שונים. סוג הרצף המוגדר כברירת מחדל הוא "XX".

תא הקוד הבא מראה כיצד להפעיל פענוח דינמי עבור ה-Estimator ולבחור רצף פענוח דינמי.

estimator = Estimator(mode=backend)
estimator.options.dynamical_decoupling.enable = True
estimator.options.dynamical_decoupling.sequence_type = "XpXm"

סיבוב פאולי

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

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

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

Depiction of Pauli twirling

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

Depiction of gate twirls

ניתן להפעיל סיבוב פאולי על ידי הגדרת enable_gates ל-True באפשרויות הסיבוב. אפשרויות בולטות נוספות כוללות:

  • num_randomizations: מספר מופעי המעגל לשלוף מהמכלול של מעגלים מסובבים.
  • shots_per_randomization: מספר ה-shots לדגום מכל מופע מעגל.

תא הקוד הבא מראה כיצד להפעיל סיבוב פאולי ולהגדיר אפשרויות אלה עבור ה-Estimator. אין צורך להגדיר באופן מפורש אף אחת מהאפשרויות הללו.

estimator = Estimator(mode=backend)
estimator.options.twirling.enable_gates = True
estimator.options.twirling.num_randomizations = 32
estimator.options.twirling.shots_per_randomization = 100

ביטול שגיאות מדידה מסובבת (TREX)

ביטול שגיאות מדידה מסובבת (TREX) מצמצם את השפעת שגיאות המדידה עבור הערכת ערכי ציפייה של תצפיות פאולי. הוא מבוסס על המושג של מדידות מסובבות, המושגות על ידי החלפה אקראית של Gate-ים של מדידה ברצף של (1) Gate X של פאולי, (2) מדידה, ו-(3) היפוך סיביות קלאסי. בדיוק כמו בסיבוב Gate רגיל, רצף זה שווה ערך למדידה פשוטה בהיעדר רעש, כפי שמתואר בתרשים הבא:

Depiction of measurement twirling

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

ניתן להפעיל TREX על ידי הגדרת measure_mitigation ל-True באפשרויות העמידות של Qiskit Runtime עבור ה-Estimator. האפשרויות ללמידת רעש מדידה מתוארות כאן. כמו בסיבוב Gate, ניתן להגדיר את מספר האקראות של המעגל ואת מספר ה-shots לכל אקראות.

תא הקוד הבא מראה כיצד להפעיל TREX ולהגדיר אפשרויות אלה עבור ה-Estimator. אין צורך להגדיר באופן מפורש אף אחת מהאפשרויות הללו.

estimator = Estimator(mode=backend)
estimator.options.resilience.measure_mitigation = True
estimator.options.resilience.measure_noise_learning.num_randomizations = 32
estimator.options.resilience.measure_noise_learning.shots_per_randomization = 100

אקסטרפולציה לאפס רעש (ZNE)

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

ZNE מורכבת משני שלבים:

  1. הגברת רעש: המעגל הקוונטי המקורי מורץ מספר פעמים בשיעורי רעש שונים.
  2. אקסטרפולציה: התוצאה האידיאלית מוערכת על ידי אקסטרפולציה של תוצאות ערך הציפייה הרועשות לגבול האפס-רעש.

ניתן לממש הן את שלב הגברת הרעש והן את שלב האקסטרפולציה בדרכים שונות רבות. Qiskit Runtime מממש הגברת רעש על ידי "קיפול Gate דיגיטלי", מה שאומר ש-Gate-ים של שני Qubits מוחלפים ברצפים שקולים של ה-Gate והופכו. לדוגמה, החלפת יחידה UU ב-UUUU U^\dagger U תניב גורם הגברת רעש של 3. עבור האקסטרפולציה, ניתן לבחור מבין מספר צורות פונקציונליות, כולל התאמה ליניארית או התאמה מעריכית. התמונה שלהלן מתארת ​​קיפול Gate דיגיטלי משמאל, ואת תהליך האקסטרפולציה מימין.

Depiction of ZNE

ניתן להפעיל ZNE על ידי הגדרת zne_mitigation ל-True באפשרויות העמידות של Qiskit Runtime עבור ה-Estimator. האפשרויות של Qiskit Runtime ל-ZNE מתוארות כאן. האפשרויות הבולטות הבאות:

  • noise_factors: גורמי הרעש לשימוש עבור הגברת הרעש.
  • extrapolator: הצורה הפונקציונלית לשימוש עבור האקסטרפולציה.

תא הקוד הבא מראה כיצד להפעיל ZNE ולהגדיר אפשרויות אלה עבור ה-Estimator. אין צורך להגדיר באופן מפורש אף אחת מהאפשרויות הללו.

estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.noise_factors = (1, 3, 5)
estimator.options.resilience.zne.extrapolator = "exponential"

הגברת שגיאות הסתברותית (PEA)

אחד האתגרים העיקריים ב-ZNE הוא להגביר במדויק את הרעש המשפיע על המעגל המטרה. קיפול Gate מספק דרך קלה לביצוע הגברה זו, אך הוא עלול להיות לא מדויק ועלול להוביל לתוצאות שגויות. ראה את המאמר "Scalable error mitigation for noisy quantum circuits produces competitive expectation values", ובפרט עמוד 4 של המידע המשלים לפרטים. הגברת שגיאות הסתברותית מספקת גישה מדויקת יותר להגברת שגיאות באמצעות למידת רעש.

PEA היא טכניקה מתוחכמת יותר המבצעת ניסויים מקדימים לשחזור הרעש ולאחר מכן משתמשת במידע זה לביצוע הגברה מדויקת. היא מתחילה בלמידת מודל הרעש המסובב של כל שכבה של Gate-ים שזירה במעגל לפני הרצתם (ראה LayerNoiseLearningOptions לאפשרויות למידה רלוונטיות). לאחר שלב הלמידה, המעגלים מורצים בכל גורם רעש, כאשר כל שכבת שזירה של המעגלים מוגברת על ידי הזרקה הסתברותית של רעש חד-Qubit פרופורציונלי למודל הרעש הנלמד המתאים. ראה את המאמר "Evidence for the utility of quantum computing before fault tolerance" לפרטים נוספים.

PEA מורכבת משלושה שלבים:

  1. למידה: מודל הרעש המסובב של כל שכבה של Gate-ים שזירה במעגל נלמד.
  2. הגברת רעש: המעגל הקוונטי המקורי מורץ מספר פעמים בגורמי רעש שונים.
  3. אקסטרפולציה: התוצאה האידיאלית מוערכת על ידי אקסטרפולציה של תוצאות ערך הציפייה הרועשות לגבול האפס-רעש.

עבור ניסויים בקנה מידה שימושיות, PEA היא לרוב הבחירה הטובה ביותר.

מכיוון ש-PEA היא טכניקת הגברת רעש של ZNE, עליך גם להפעיל ZNE על ידי הגדרת resilience.zne_mitigation = True. ניתן גם להשתמש באפשרויות resilience.zne אחרות להגדרת אקסטרפולטורים, רמות הגברה וכן הלאה. PEA דורשת מודל רעש, הנוצר אוטומטית בעת שימוש ב-primitives.

הקטע הבא מספק דוגמה שבה PEA משמשת לצמצום תוצאת עבודת Estimator:

estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.amplifier = "pea"

ביטול שגיאות הסתברותי (PEC)

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

ב-PEC, האפקט של מעגל מטרה אידיאלי מבוטא כצירוף לינארי של מעגלים רועשים שניתנים למימוש בפועל:

Oideal=iηiOnoisy,i\mathcal{O}_{\text{ideal}} = \sum_{i} \eta_i \mathcal{O}_{noisy, i}

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

γ=iηi1.\gamma = \sum_{i} \lvert \eta_i \rvert \geq 1.

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

ניתן להפעיל PEC על ידי הגדרת pec_mitigation ל-True באפשרויות העמידות של Qiskit Runtime עבור ה-Estimator. האפשרויות של Qiskit Runtime ל-PEC מתוארות כאן. ניתן להגדיר מגבלה על תקורת הדגימה באמצעות אפשרות max_overhead. שים לב שהגבלת תקורת הדגימה עלולה לגרום לדיוק התוצאה לחרוג מהדיוק המבוקש. ערך ברירת המחדל של max_overhead הוא 100.

תא הקוד הבא מראה כיצד להפעיל PEC ולהגדיר את אפשרות max_overhead עבור ה-Estimator.

estimator = Estimator(mode=backend)
estimator.options.resilience.pec_mitigation = True
estimator.options.resilience.pec.max_overhead = 100

השלבים הבאים