מצבי ייחוס
בשיעור זה נחקור כיצד אפשר לאתחל את המערכת שלנו עם מצב ייחוס כדי לעזור לאלגוריתם הוריאציוני שלנו להתכנס מהר יותר. ראשית, נלמד כיצד לבנות מצב ייחוס באופן ידני, ולאחר מכן נחקור מספר אפשרויות סטנדרטיות שניתן להשתמש בהן באלגוריתם וריאציוני.
מצב ברירת המחדל
מצב ייחוס מתייחס לנקודת ההתחלה הקבועה של הבעיה שלנו. כדי להכין מצב ייחוס, עלינו להחיל את האוניטרי המתאים, הבלתי-פרמטרי בתחילת המעגל הקוונטי שלנו, כך ש-. אם יש לכם השערה מושכלת או נקודת נתונים מפתרון אופטימלי קיים, סביר שהאלגוריתם הוריאציוני יתכנס מהר יותר אם תשתמשו בה כנקודת מוצא.
מצב הייחוס הפשוט ביותר הוא מצב ברירת המחדל, שבו אנחנו משתמשים במצב ההתחלתי של מעגל קוונטי בן קיוביטים: . עבור מצב ברירת המחדל, האופרטור האוניטרי שלנו . בזכות פשטותו, מצב ברירת המחדל הוא מצב ייחוס תקף שנפוץ בשימוש בתרחישים רבים.
מצב ייחוס קלאסי
נניח שיש לכם מערכת של שלושה קיוביטים ואתם רוצים להתחיל במצב במקום במצב ברירת המחדל . זוהי דוגמה למצב ייחוס קלאסי טהור, וכדי לבנות אותו, פשוט מחילים שער X על הקיוביט (לפי סדר הקיוביטים של Qiskit), שכן .
במקרה זה, האופרטור האוניטרי שלנו הוא , שמוביל למצב ייחוס .
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit"}
_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")
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.x(0)
qc.draw("mpl")
מצב ייחוס קוונטי
נניח שאתם רוצים להתחיל במצב מורכב יותר הכולל סופרפוזיציה ו/או שזירה, כגון .
כדי להגיע למצב זה מ-, אחת הגישות היא להשתמש ב-שער Hadamard על קיוביט (), בשער CNOT (CX) כאשר קיוביט הוא קיוביט הבקרה וקיוביט הוא קיוביט המטרה (), ולבסוף שער המוחל על קיוביט ().
בתרחיש זה, האופרטור האוניטרי שלנו הוא , ומצב הייחוס שלנו הוא .
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)
qc.draw("mpl")
בניית מצבי ייחוס באמצעות מעגלי תבנית
ניתן גם להשתמש במגוון מעגלי תבנית, כגון TwoLocal, המאפשר לבטא מספר פרמטרים מכווננים ושזירות בקלות. נעמיק במעגלי תבנית אלה בשיעור הבא, אך ניתן להשתמש בהם למצבי הייחוס שלנו בתנאי שמציבים ערכים לפרמטרים:
from qiskit.circuit.library import TwoLocal
from math import pi
reference_circuit = TwoLocal(2, "rx", "cz", entanglement="linear", reps=1)
theta_list = [pi / 2, pi / 3, pi / 3, pi / 2]
reference_circuit = reference_circuit.assign_parameters(theta_list)
reference_circuit.decompose().draw("mpl")
מצבי ייחוס ספציפיים לאפליקציה
למידת מכונה קוונטית
בהקשר של מסווג קוונטי וריאציוני (VQC), נתוני האימון מקודדים למצב קוונטי באמצעות מעגל פרמטרי הידוע בשם מפת מאפיינים, שבו כל ערך פרמטר מייצג נקודת נתונים מסט האימון. ה-zz_feature_map הוא סוג של מעגל פרמטרי שניתן להשתמש בו כדי להעביר את נקודות הנתונים שלנו () למפת המאפיינים.
from qiskit.circuit.library import zz_feature_map
data = [0.1, 0.2]
zz_feature_map_reference = zz_feature_map(feature_dimension=2, reps=2)
zz_feature_map_reference = zz_feature_map_reference.assign_parameters(data)
zz_feature_map_reference.decompose().draw("mpl")
סיכום
בשיעור זה למדתם כיצד לאתחל את המערכת שלכם באמצעות:
-
מצב ייחוס ברירת מחדל
-
מצבי ייחוס קלאסיים
-
מצבי ייחוס קוונטיים
-
מצבי ייחוס ספציפיים לאפליקציה
באופן כללי, תהליך העבודה הוריאציוני שלנו נראה כך:
בעוד שמצבי הייחוס הם נקודות התחלה קבועות, נוכל להשתמש בצורה וריאציונית כדי להגדיר אנזאץ' המייצג אוסף של מצבים פרמטריים שהאלגוריתם הוריאציוני שלנו יחקור.