ข้ามไปยังเนื้อหาหลัก
โครงการนี้อยู่ในช่วงเบต้า พบข้อผิดพลาด? สร้าง GitHub Issue มีคำถามหรือไอเดีย? ถามใน Discussions — ยินดีรับฟังความคิดเห็น!
คุณภาพการแปลในหน้านี้เป็นอย่างไร?

สถานะอ้างอิง

ในบทเรียนนี้ เราจะสำรวจวิธีที่เราสามารถกำหนดค่าเริ่มต้นของระบบด้วย reference state เพื่อช่วยให้อัลกอริทึม variational ของเรา converge เร็วขึ้น ก่อนอื่น เราจะเรียนรู้วิธีสร้าง reference state ด้วยมือ จากนั้นสำรวจตัวเลือกมาตรฐานหลายอย่างที่สามารถใช้ในอัลกอริทึม variational

Diagram of options for references states including default, application-specific, and quantum.

สถานะดีฟอลต์​

Reference state หมายถึงจุดเริ่มต้นที่คงที่สำหรับปัญหาของเรา ในการเตรียม reference state เราต้องใช้ unitary URU_R ที่เหมาะสมซึ่งไม่มีพารามิเตอร์ที่จุดเริ่มต้นของ Circuit ควอนตัมของเรา โดยที่ ∣ρ⟩=UR∣0⟩|\rho\rangle = U_R |0\rangle หากคุณมีการเดาที่มีเหตุผลหรือจุดข้อมูลจากวิธีแก้ปัญหาที่เหมาะสมที่สุดที่มีอยู่ อัลกอริทึม variational มีแนวโน้มจะ converge เร็วขึ้นหากคุณใช้สิ่งนั้นเป็นจุดเริ่มต้น

reference state ที่ง่ายที่สุดคือสถานะดีฟอลต์ ซึ่งเราใช้สถานะเริ่มต้นของ Circuit ควอนตัม nn-Qubit: ∣0⟩⊗n|0\rangle^{\otimes n} สำหรับสถานะดีฟอลต์ ตัวดำเนินการ unitary ของเรา UR≡IU_R \equiv I เนื่องจากความเรียบง่าย สถานะดีฟอลต์เป็น reference state ที่ถูกต้องซึ่งใช้ในหลายสถานการณ์

สถานะอ้างอิงแบบคลาสสิก​

สมมติว่าคุณมีระบบ 3 Qubit และต้องการเริ่มต้นในสถานะ ∣001⟩|001\rangle แทนสถานะดีฟอลต์ ∣000⟩|000\rangle นี่คือตัวอย่างของ reference state แบบคลาสสิกล้วน ๆ และในการสร้างมัน คุณเพียงแค่ต้องใช้ X gate กับ Qubit 00 (ตามการเรียงลำดับ Qubit ของ Qiskit) เช่นว่า ∣001⟩=X0∣000⟩|001\rangle = X_0 |000\rangle

ในกรณีนี้ ตัวดำเนินการ unitary ของเราคือ UR≡X0U_R \equiv X_0 ซึ่งนำไปสู่ reference state ∣ρ⟩≡∣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")

Output of the previous code cell

สถานะอ้างอิงเชิงควอนตัม​

สมมติว่าคุณต้องการเริ่มต้นด้วยสถานะที่ซับซ้อนกว่าซึ่งเกี่ยวข้องกับ superposition และ/หรือ entanglement เช่น 12(∣100⟩+∣111⟩)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle)

ในการได้สถานะนี้จาก ∣000⟩|000\rangle วิธีหนึ่งคือใช้ Hadamard gate บน Qubit 00 (H0H_0), CNOT (CX) gate ที่มี Qubit 00 เป็น control qubit และ Qubit 11 เป็น target qubit (CNOT01CNOT_{01}) และสุดท้าย XX gate ที่ใช้กับ Qubit 22 (X2X_2)

ในสถานการณ์นี้ ตัวดำเนินการ unitary ของเราคือ UR≡X2CNOT01H0∣000⟩U_{R} \equiv X_2CNOT_{01}H_0|000\rangle และ reference state ของเราคือ ∣ρ⟩≡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")

Output of the previous code cell

การสร้าง Reference States โดยใช้ template circuits​

เราสามารถใช้ template circuits ต่าง ๆ เช่น TwoLocal ซึ่งช่วยให้แสดงพารามิเตอร์ที่ปรับได้หลายตัวและ entanglement ได้อย่างง่ายดาย เราจะกล่าวถึง template circuits เหล่านี้อย่างละเอียดในบทเรียนถัดไป แต่เราสามารถใช้มันเป็น reference states ได้หากเราผูกพารามิเตอร์:

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

Output of the previous code cell

Reference states เฉพาะแอปพลิเคชัน​

การเรียนรู้ของเครื่องเชิงควอนตัม​

ในบริบทของ variational quantum classifier (VQC) ข้อมูลการฝึกจะถูกเข้ารหัสเข้าสู่สถานะควอนตัมด้วย Circuit แบบมีพารามิเตอร์ที่เรียกว่า feature map โดยค่าพารามิเตอร์แต่ละค่าแทนจุดข้อมูลจาก dataset การฝึก zz_feature_map เป็นประเภทของ Circuit แบบมีพารามิเตอร์ที่สามารถใช้ส่งข้อมูลของเรา (xx) ไปยัง 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")

Output of the previous code cell

สรุป​

ในบทเรียนนี้ คุณได้เรียนรู้วิธีกำหนดค่าเริ่มต้นของระบบโดยใช้:

  • Reference state ดีฟอลต์

  • สถานะอ้างอิงแบบคลาสสิก

  • สถานะอ้างอิงเชิงควอนตัม

  • Reference states เฉพาะแอปพลิเคชัน

variational workload ระดับสูงของเราเป็นดังนี้:

A circuit diagram of a unitary operator preparing a reference state.

ในขณะที่ reference states เป็นจุดเริ่มต้นคงที่ เราสามารถใช้ variational form เพื่อกำหนด ansatz เพื่อแทนชุดของสถานะแบบมีพารามิเตอร์สำหรับอัลกอริทึม variational ของเราในการสำรวจ