עיצוב קוונטי של TensorFlow

TensorFlow Quantum (TFQ) מיועד לבעיות של למידת מכונות קוונטיות מתקופת NISQ. הוא מביא פרימיטיבים של מחשוב קוונטי - כמו בניית מעגלים קוונטיים - למערכת האקולוגית של TensorFlow. מודלים ופעולות שנבנו עם TensorFlow משתמשים בפרימיטיבים אלה כדי ליצור מערכות היברידיות קוונטיות-קלאסיות עוצמתיות.

באמצעות TFQ, חוקרים יכולים לבנות גרף TensorFlow באמצעות מערך נתונים קוונטי, מודל קוונטי ופרמטרי בקרה קלאסיים. כל אלה מיוצגים כטנסורים בגרף חישובי יחיד. התוצאה של מדידות קוונטיות - המובילות לאירועים הסתברותיים קלאסיים - מתקבלת על ידי TensorFlow ops. ההדרכה מתבצעת עם ה-API הסטנדרטי של Keras . מודול tfq.datasets מאפשר לחוקרים להתנסות עם מערכי נתונים קוונטיים חדשים ומעניינים.

Cirq

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

הפרימיטיבים הקוונטיים של TensorFlow

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

  • מעגל קוונטי : זה מייצג מעגלים קוונטיים המוגדרים על ידי Cirq ( cirq.Circuit ) בתוך TensorFlow. צור קבוצות של מעגלים בגודל משתנה, בדומה לקבוצות של נקודות נתונים שונות בעלות ערך אמיתי.
  • Pauli sum : מייצגים שילובים ליניאריים של תוצרי טנזור של אופרטורים של פאולי המוגדרים ב-Cirq ( cirq.PauliSum ). כמו מעגלים, צור קבוצות של מפעילים בגודל משתנה.

פעולות בסיסיות

באמצעות הפרימיטיבים של המעגל הקוונטי בתוך tf.Tensor , TensorFlow Quantum מיישמת פעולות המעבדות את המעגלים הללו ומייצרות תפוקות משמעותיות.

האופציות של TensorFlow נכתבות ב-C++ אופטימלי. פעולות אלה דוגמות ממעגלים, מחשבות ערכי ציפיות ומוציאות את המצב שנוצר על ידי המעגלים הנתונים. לכתיבת פעולות גמישות וביצועיות יש כמה אתגרים:

  1. המעגלים אינם באותו גודל. עבור מעגלים מדומים, אינך יכול ליצור פעולות סטטיות (כמו tf.matmul או tf.add ) ולאחר מכן להחליף מספרים שונים במעגלים בגדלים שונים. פעולות אלה חייבות לאפשר גדלים דינמיים שגרף המחשוב של TensorFlow בגודל סטטי אינו מאפשר.
  2. נתונים קוונטיים יכולים לגרום למבנה מעגל שונה לחלוטין. זוהי סיבה נוספת לתמוך בגדלים דינמיים ב-TFQ ops. נתונים קוונטיים יכולים לייצג שינוי מבני במצב הקוונטי הבסיסי שמיוצג על ידי שינויים במעגל המקורי. מכיוון שנקודות נתונים חדשות מוחלפות פנימה והחוצה בזמן ריצה, לא ניתן לשנות את גרף המחשוב של TensorFlow לאחר בנייתו, ולכן נדרשת תמיכה במבנים משתנים אלה.
  3. cirq.Circuits דומים לגרפי חישוב בכך שהם סדרה של פעולות - וחלקם עשויים להכיל סמלים/מצייני מיקום. חשוב להפוך את זה לתואם ככל האפשר עם TensorFlow.

מסיבות ביצועים, Eigen (ספריית C++ המשמשת בפעולות TensorFlow רבות) אינה מתאימה היטב להדמיית מעגלים קוונטיים. במקום זאת, סימולטורי המעגל המשמשים בניסוי הקוונטי מעבר לקלאסי משמשים כמאמתים ומורחבים כבסיס ל-TFQ ops (כולם כתובים עם הוראות AVX2 ו-SSE). נוצרו פעולות עם חתימות פונקציונליות זהות המשתמשות במחשב קוונטי פיזי. המעבר בין מחשב קוונטי מדומה לפיזי הוא קל כמו שינוי שורת קוד אחת. פעולות אלה ממוקמות ב- circuit_execution_ops.py .

שכבות

שכבות TensorFlow Quantum חושפות דגימה, ציפיות וחישוב מצב למפתחים המשתמשים בממשק tf.keras.layers.Layer . זה נוח ליצור שכבת מעגל עבור פרמטרי בקרה קלאסיים או עבור פעולות קריאה. בנוסף, ניתן ליצור שכבה עם רמה גבוהה של מורכבות התומכת במעגל אצווה, ערך פרמטר בקרת אצווה, ולבצע פעולות קריאת אצווה. ראה tfq.layers.Sample לדוגמא.

מבדילים

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

כדי לפתור בעיה זו, מודול tfq.differentiators מספק מספר טכניקות בידול סטנדרטיות. משתמשים יכולים גם להגדיר שיטה משלהם לחישוב מעברים - הן בהגדרת "העולם האמיתי" של חישוב ציפיות מבוסס מדגם, והן בעולם המדויק האנליטי. שיטות כמו הבדל סופי הן לרוב המהירות ביותר (זמן שעון קיר) בסביבה אנליטית/מדויקת. אמנם איטי יותר (זמן שעון קיר), שיטות מעשיות יותר כמו שינוי פרמטר או שיטות סטוכסטיות הן לרוב יעילות יותר. tfq.differentiators.Differentiator מוזמן ומצורף לאופ קיים עם generate_differentiable_op , או מועבר לבנאי tfq.layers.Expectation או tfq.layers.SampledExpectation . כדי ליישם מבדל מותאם אישית, קבל בירושה מהמחלקה tfq.differentiators.Differentiator . כדי להגדיר פעולת שיפוע עבור דגימה או חישוב וקטור מצב, השתמש tf.custom_gradient .

מערכי נתונים

ככל שתחום המחשוב הקוונטי יגדל, יתעוררו יותר נתונים קוונטיים ושילובי מודלים, מה שיקשה על השוואה מובנית. מודול tfq.datasets משמש כמקור הנתונים למשימות למידת מכונה קוונטית. זה מבטיח השוואות מובנות לדגם ולביצועים.

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