קודי חזרה
נפתח את השיעור בדיון על קודי חזרה. קודי חזרה אינם מגנים על מידע קוונטי מפני כל סוגי השגיאות שיכולות להתרחש ב-qubit, אך הם מהווים את הבסיס לקוד Shor בן 9 qubit שנראה בשיעור הבא, והם גם שימושיים להסבר יסודות תיקון השגיאות.
קידוד ופענוח קלאסיים
קודי חזרה הם דוגמאות בסיסיות ביותר לקודים מתקני שגיאות. הרעיון הוא שניתן להגן על סיביות מפני שגיאות פשוט על ידי חזרה על כל סיבית מספר קבוע של פעמים.
בפרט, נתחיל בקוד החזרה בן 3 הסיביות, רק בהקשר של מידע קלאסי. קוד זה מקודד סיבית אחת לשלוש על ידי חזרה על הסיבית שלוש פעמים, כך ש- מקודד כ- ו- מקודד כ-
אם הכל תקין, ניתן כמובן להבחין בין שתי האפשרויות לסיבית המקורית מתוך הקידודים שלהן. הנקודה היא שאם הייתה שגיאה ואחת משלוש הסיביות התהפכה — כלומר שה-0 הפך ל-1 או ה-1 הפך ל-0 — עדיין ניתן לגלות מה הייתה הסיבית המקורית על ידי קביעה איזה משני הערכים הבינאריים מופיע פעמיים. באופן שקול, ניתן לפענח על ידי חישוב ערך הרוב (כלומר, הערך הבינארי המופיע הכי הרבה פעמים).
כמובן, אם 2 או 3 סיביות מהקידוד יתהפכו, הפענוח לא יעבוד כראוי ותתקבל הסיבית השגויה, אך אם לכל היותר 1 מ-3 הסיביות יתהפך, הפענוח יהיה נכון. זוהי תכונה אופיינית של קודים מתקני שגיאות בכלל: הם עשויים לאפשר תיקון שגיאות, אך רק כל עוד אין יותר מדי מהן.
הפחתת רעש לערוץ הסימטרי הבינארי
לדוגמה של מצב שבו ניתן להפחית את הסיכוי לשגיאה באמצעות קוד חזרה, נניח שמטרתנו היא להעביר סיבית אחת למקבל היפותטי, ואנחנו יכולים לשלוח סיביות דרך מה שנקרא ערוץ סימטרי בינארי, אשר מהפך כל סיבית שעוברת דרכו באופן עצמאי עם הסתברות כלומר, עם הסתברות המקבל מקבל את הסיבית שנשלחה, אך עם הסתברות הסיבית מתהפכת והמקבל מקבל את הסיבית ההפוכה.
אז, אם נבחר לא להשתמש בקוד החזרה בן 3 הסיביות ופשוט נשלח את הסיבית הרצויה ישירות דרך הערוץ, המקבל יקבל סיבית שגויה עם הסתברות לעומת זאת, אם נקודד תחילה את הסיבית שנרצה לשלוח בקוד החזרה בן 3 הסיביות ואז נשלח כל אחת משלוש הסיביות של הקידוד דרך הערוץ, כל אחת מהן תתהפך באופן עצמאי עם הסתברות הסיכוי להיפוך סיבית גדול יותר כעת כי יש שלוש סיביות שעלולות להתהפך במקום אחת, אך אם לכל היותר סיבית אחת תתהפך, המקבל יפענח נכון. שגיאה תישאר לאחר הפענוח רק אם שתיים או יותר מהסיביות יתהפכו בזמן ההעברה.
ההסתברות ששתי סיביות יתהפכו בזמן ההעברה היא שהיא לכל אחת משלוש האפשרויות לסיבית שלא תתהפך, בעוד ההסתברות שכל שלוש הסיביות יתהפכו היא ההסתברות הכוללת של שניים או שלושה היפוכי סיביות היא לכן
עבור ערכים של קטנים ממחצית, הדבר מביא לירידה בהסתברות שהמקבל יקבל סיבית שגויה. עדיין תהיה אפשרות לשגיאה במקרה זה, אך הקוד מפחית את הסבירות. (עבור ערכים של גדולים ממחצית, לעומת זאת, הקוד למעשה מגדיל את הסבירות שהמקבל יקבל סיבית שגויה.)
קידוד qubit
קוד החזרה בן 3 הסיביות הוא קוד תיקון שגיאות קלאסי, אך ניתן לבחון מה יקרה אם ננסה להשתמש בו להגנה על qubit מפני שגיאות. כפי שנראה, זה לא קוד תיקון שגיאות קוונטי מרשים במיוחד, כי הוא למעשה מגביר חלק מהשגיאות. עם זאת, הוא הצעד הראשון לקראת קוד Shor, ויסייע לנו היטב מבחינה פדגוגית.
להיות מדויקים, כשאנחנו מתייחסים לקוד החזרה בן 3 הסיביות המשמש ל-qubit, אנחנו מתכוונים לקידוד של qubit שבו מצבי הבסיס הסטנדרטי מחוזרים שלוש פעמים, כך שוקטור מצב של qubit בודד מקודד כך:
קידוד זה מיושם בקלות על ידי ה-Circuit הקוונטי הבא, שמשתמש בשני qubit מאותחלים כמרחב עבודה ובשני שערי NOT מבוקרים.
שים לב, בפרט, שקידוד זה אינו זהה לחזרה על המצב הקוונטי שלוש פעמים, כפי שבמצב qubit נתון מקודד כ- קידוד כזה אינו ניתן ליישום עבור מצב קוונטי לא ידוע בגלל משפט אי-השכפול.
שגיאות היפוך סיביות
נניח כעת שמתרחשת שגיאה לאחר ביצוע הקידוד. ספציפית, נניח ש-Gate מסוג , כלומר היפוך סיבית, מתרחש על אחד מה-qubit. לדוגמה, אם ה-qubit האמצעי חווה היפוך סיבית, מצב שלושת ה-qubit מומר למצב הבא:
כמובן, זה לא הסוג היחיד של שגיאה שיכולה להתרחש — וגם ניתן לערער על ההנחה שהשגיאה לוקחת צורה של פעולה אוניטרית מושלמת. נחזור לנושאים אלו בסעיף האחרון של השיעור, ובינתיים ניתן לראות שגיאה בצורה זו כסוג אפשרי אחד בלבד של שגיאה (אם כי חשוב מהותית).
ניתן לראות בבירור מהביטוי המתמטי של המצב לעיל שהסיבית האמצעית היא זו השונה בתוך כל ket. אך נניח שהיו לנו שלושת ה-qubit ברשותנו ולא ידענו את מצבם. אם היינו חושדים שהיפוך סיבית אולי התרחש, אפשרות אחת לאימות שסיבית התהפכה הייתה לבצע מדידה בבסיס סטנדרטי, שבמקרה הנדון הייתה גורמת לנו לראות או עם הסתברויות ו-, בהתאמה. בכל מקרה, מסקנתנו הייתה שהסיבית האמצעית התהפכה — אך, לצערנו, היינו מאבדים את המצב הקוונטי המקורי זה המצב שאנחנו מנסים להגן עליו, אז מדידה בבסיס סטנדרטי אינה אפשרות מספקת.
מה שניתן לעשות במקום זאת הוא להשתמש ב-Circuit הקוונטי הבא, תוך הזנת המצב המקודד לשלושת ה-qubit העליונים. Circuit זה מודד זוגיות (parity) של מצבי הבסיס הסטנדרטי של שני ה-qubit העליונים וגם שני ה-qubit התחתונים מתוך הקידוד בן שלושת ה-qubit, וזאת ללא הרס המצב.
בהנחה שלכל היותר סיבית אחת התהפכה, ניתן להסיק בקלות מתוצאות המדידה את מיקום היפוך הסיבית (או היעדרו). בפרט, כפי שארבעת דיאגרמות ה-Circuit הבאות מדגימות, תוצאת המדידה מציינת שלא התרחש היפוך סיבית, בעוד שלוש האפשרויות האחרות מציינות איזה qubit חווה היפוך סיבית.
הנקודה החשובה היא שמצב שלושת ה-qubit העליונים אינו קורס באף אחד מהמקרים, מה שמאפשר לנו לתקן שגיאת היפוך סיבית אם אחת התרחשה — פשוט על ידי הפעלת אותו היפוך סיבית שוב עם Gate מסוג . הטבלה הבאה מסכמת את המצבים שנקבל מלכל היותר היפוך סיבית אחד, תוצאות המדידה (הנקראות תסמונת (syndrome) בהקשר של תיקון שגיאות), והתיקון הנדרש לחזרה לקידוד המקורי.
| מצב | תסמונת | תיקון |
|---|---|---|
שוב, אנחנו שוקלים רק את האפשרות שלכל היותר היפוך סיבית אחד התרחש. זה לא היה עובד נכון אם שניים או שלושה היפוכי סיביות היו מתרחשים, וגם לא שקלנו שגיאות אפשריות אחרות מלבד היפוכי סיביות.
שגיאות היפוך פאזה
בהגדרה הקוונטית, שגיאות היפוך סיביות אינן השגיאות היחידות שעלינו לדאוג להן. לדוגמה, עלינו גם לדאוג לשגיאות היפוך פאזה, המתוארות על ידי Gate מסוג . באותו קו של שגיאות היפוך סיביות, ניתן לחשוב על שגיאות היפוך פאזה כאפשרות נוספת לשגיאה שיכולה לפגוע ב-qubit.
עם זאת, כפי שנראה בסעיף האחרון של השיעור, שעוסק בדיסקרטיזציה של שגיאות עבור קודים מתקני שגיאות קוונטיים, התמקדות בשגיאות היפוך סיביות ושגיאות היפוך פאזה מתבררת כמוצדקת היטב. ספציפית, היכולת לתקן שגיאת היפוך סיבית, שגיאת היפוך פאזה, או את שתיהן בו-זמנית מעניקה אוטומטית את היכולת לתקן שגיאה קוונטית שרירותית על qubit בודד.
למרבה הצער, קוד החזרה בן 3 הסיביות אינו מגן בכלל מפני היפוכי פאזה. לדוגמה, נניח שמצב qubit קודד בקוד החזרה בן 3 הסיביות, ושגיאת היפוך פאזה מתרחשת על ה-qubit האמצעי. התוצאה היא המצב
שהוא בדיוק המצב שהיינו מקבלים מקידוד מצב ה-qubit אכן, לשגיאת היפוך פאזה על כל אחד משלושת ה-qubit של הקידוד יש אותה השפעה, שהיא שקולה לשגיאת היפוך פאזה על ה-qubit המקורי לפני הקידוד. בהנחה שהמצב הקוונטי המקורי הוא מצב לא ידוע, לכן אין דרך לזהות שהתרחשה שגיאה, כי המצב המתקבל הוא קידוד תקף לחלוטין של מצב qubit שונה. בפרט, הפעלת Circuit זיהוי השגיאות מקודם על המצב בהכרח תניב תסמונת , שמציעה בטעות שלא התרחשו שגיאות.
בינתיים, ישנם כעת שלושה qubit במקום אחד שעלולים לחוות שגיאות היפוך פאזה. לכן, במצב שבו מניחים שגיאות היפוך פאזה מתרחשות באופן עצמאי על כל qubit עם הסתברות שאינה אפס (בדומה לערוץ הסימטרי הבינארי אך להיפוכי פאזה במקום היפוכי סיביות), קוד זה למעשה מגדיל את הסבירות לשגיאת היפוך פאזה לאחר הפענוח עבור ערכים קטנים של להיות יותר מדויקים, נקבל שגיאת היפוך פאזה על ה-qubit המקורי לאחר הפענוח בכל פעם שיש מספר אי-זוגי של שגיאות היפוך פאזה על שלושת ה-qubit של הקידוד, דבר שמתרחש עם הסתברות
ערך זה גדול מ- כאשר , כך שהקוד מגביר את ההסתברות לשגיאת היפוך פאזה עבור ערכים של בטווח זה.
גרסה מותאמת של קוד החזרה לשגיאות היפוך פאזה
ראינו שקוד החזרה בן 3 הסיביות אינו מודע כלל לשגיאות היפוך פאזה, ולכן הוא נראה כמי שאינו מועיל בהתמודדות עם סוג זה של שגיאות. עם זאת, ניתן לשנות את קוד החזרה בן 3 הסיביות בצורה פשוטה כך שהוא יזהה שגיאות היפוך פאזה. שינוי זה יהפוך את הקוד לחסר מודעות לשגיאות היפוך סיביות — אך, כפי שנראה בסעיף הבא, ניתן לשלב את קוד החזרה בן 3 הסיביות עם גרסה מותאמת זו כדי לקבל את קוד Shor, אשר יכול לתקן גם שגיאות היפוך סיביות וגם שגיאות היפוך פאזה.
הנה הגרסה המותאמת של Circuit הקידוד מלמעלה, שתוכל כעת לזהות שגיאות היפוך פאזה. השינוי פשוט מאוד: אנחנו פשוט מפעילים Gate של Hadamard על כל qubit לאחר ביצוע שני ה-NOT Gate המבוקרים.
Gate של Hadamard ממיר מצב למצב , ומצב למצב , כך שהאפקט הכולל הוא שמצב ה-qubit הבודד מקודד כ-
כאשר ו-
שגיאת היפוך פאזה, או בשקולים Gate מסוג , מחליפה בין המצבים ו-, כך שקידוד זה יהיה שימושי לזיהוי (ותיקון) שגיאות היפוך פאזה. ספציפית, ניתן לשנות את Circuit זיהוי השגיאות מקודם כך:
במילים, לוקחים את ה-Circuit מקודם ופשוט שמים Gate של Hadamard על שלושת ה-qubit העליונים גם בתחילה וגם בסוף. הרעיון הוא ששלושת Gate של Hadamard הראשונים ממירים מצבי ו- בחזרה למצבי ו-, בדיקות הזוגיות הרגילות מתבצעות, ואז שכבת Gate של Hadamard השנייה ממירה את המצב בחזרה למצבי ו- כך שאנחנו מקבלים בחזרה את הקידוד שלנו. לעיון עתידי, נשים לב ש-Circuit זיהוי היפוך הפאזה זה ניתן לפישוט כך:
ארבעת דיאגרמות ה-Circuit הבאות מתארות כיצד הגרסה המותאמת שלנו של קוד החזרה בן 3 הסיביות, כולל שלב הקידוד ושלב זיהוי השגיאות, פועלת כאשר מתרחשת לכל היותר שגיאת היפוך פאזה אחת. ההתנהגות דומה לקוד החזרה הרגיל בן 3 הסיביות עבור היפוכי סיביות.
הנה טבלה מקבילה לזו שלמעלה, הפעם שוקלת את האפשרות של לכל היותר שגיאת היפוך פאזה אחת.
| מצב | תסמונת | תיקון |
|---|---|---|
למרבה הצער, גרסה מותאמת זו של קוד החזרה בן 3 הסיביות אינה יכולה עוד לתקן שגיאות היפוך סיביות. עם זאת, לא הכל אבוד. כפי שהוצע קודם, נוכל לשלב את שני הקודים שראינו זה עתה לקוד אחד — קוד Shor בן 9 qubit — שיכול לתקן גם שגיאות היפוך סיביות וגם שגיאות היפוך פאזה, ואכן כל שגיאה על qubit בודד.