דלג לתוכן הראשי
פרויקט זה בשלב בטא. מצאת באג? פתח issue ב-GitHub. יש שאלה או רעיון? שאל ב-Discussions — נשמח לשמוע ממך!
מה איכות התרגום בדף זה?

מצבי ייחוס

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

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

מצב ברירת המחדל​

מצב ייחוס מתייחס לנקודת ההתחלה הקבועה של הבעיה שלנו. כדי להכין מצב ייחוס, עלינו להחיל את האוניטרי המתאים, הבלתי-פרמטרי URU_R בתחילת המעגל הקוונטי שלנו, כך ש-∣ρ⟩=UR∣0⟩|\rho\rangle = U_R |0\rangle. אם יש לכם השערה מושכלת או נקודת נתונים מפתרון אופטימלי קיים, סביר שהאלגוריתם הוריאציוני יתכנס מהר יותר אם תשתמשו בה כנקודת מוצא.

מצב הייחוס הפשוט ביותר הוא מצב ברירת המחדל, שבו אנחנו משתמשים במצב ההתחלתי של מעגל קוונטי בן nn קיוביטים: ∣0⟩⊗n|0\rangle^{\otimes n}. עבור מצב ברירת המחדל, האופרטור האוניטרי שלנו UR≡IU_R \equiv I. בזכות פשטותו, מצב ברירת המחדל הוא מצב ייחוס תקף שנפוץ בשימוש בתרחישים רבים.

מצב ייחוס קלאסי​

נניח שיש לכם מערכת של שלושה קיוביטים ואתם רוצים להתחיל במצב ∣001⟩|001\rangle במקום במצב ברירת המחדל ∣000⟩|000\rangle. זוהי דוגמה למצב ייחוס קלאסי טהור, וכדי לבנות אותו, פשוט מחילים שער X על הקיוביט 00 (לפי סדר הקיוביטים של Qiskit), שכן ∣001⟩=X0∣000⟩|001\rangle = X_0 |000\rangle.

במקרה זה, האופרטור האוניטרי שלנו הוא UR≡X0U_R \equiv X_0, שמוביל למצב ייחוס ∣ρ⟩≡∣001⟩|\rho\rangle \equiv |001\rangle.

# 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")

פלט של תא הקוד הקודם

מצב ייחוס קוונטי​

נניח שאתם רוצים להתחיל במצב מורכב יותר הכולל סופרפוזיציה ו/או שזירה, כגון 12(∣100⟩+∣111⟩)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

כדי להגיע למצב זה מ-∣000⟩|000\rangle, אחת הגישות היא להשתמש ב-שער Hadamard על קיוביט 00 (H0H_0), בשער CNOT (CX) כאשר קיוביט 00 הוא קיוביט הבקרה וקיוביט 11 הוא קיוביט המטרה (CNOT01CNOT_{01}), ולבסוף שער XX המוחל על קיוביט 22 (X2X_2).

בתרחיש זה, האופרטור האוניטרי שלנו הוא UR≡X2CNOT01H0∣000⟩U_{R} \equiv X_2CNOT_{01}H_0|000\rangle, ומצב הייחוס שלנו הוא ∣ρ⟩≡12(∣100⟩+∣111⟩)|\rho\rangle \equiv \frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

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 הוא סוג של מעגל פרמטרי שניתן להשתמש בו כדי להעביר את נקודות הנתונים שלנו (xx) למפת המאפיינים.

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")

פלט של תא הקוד הקודם

סיכום​

בשיעור זה למדתם כיצד לאתחל את המערכת שלכם באמצעות:

  • מצב ייחוס ברירת מחדל

  • מצבי ייחוס קלאסיים

  • מצבי ייחוס קוונטיים

  • מצבי ייחוס ספציפיים לאפליקציה

באופן כללי, תהליך העבודה הוריאציוני שלנו נראה כך:

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

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