การออกแบบควอนตัม TensorFlow

TensorFlow Quantum (TFQ) ได้รับการออกแบบมาสำหรับปัญหาของการเรียนรู้ของเครื่องควอนตัมในยุค NISQ โดยนำการคำนวณควอนตัมแบบดั้งเดิม เช่น การสร้างวงจรควอนตัม มาสู่ระบบนิเวศ TensorFlow โมเดลและการดำเนินการที่สร้างด้วย TensorFlow ใช้พื้นฐานเหล่านี้เพื่อสร้างระบบไฮบริดควอนตัมคลาสสิกอันทรงพลัง

เมื่อใช้ TFQ นักวิจัยสามารถสร้างกราฟ TensorFlow โดยใช้ชุดข้อมูลควอนตัม แบบจำลองควอนตัม และพารามิเตอร์ควบคุมแบบคลาสสิก สิ่งเหล่านี้ทั้งหมดแสดงเป็นเทนเซอร์ในกราฟคำนวณเดียว ผลลัพธ์ของการวัดควอนตัม ซึ่งนำไปสู่เหตุการณ์ความน่าจะเป็นแบบดั้งเดิม ได้มาจาก TensorFlow ops การฝึกอบรมเสร็จสิ้นด้วย Keras API มาตรฐาน โมดูล tfq.datasets ช่วยให้นักวิจัยทดลองชุดข้อมูลควอนตัมใหม่ๆ ที่น่าสนใจได้

ซีอาร์คิว

Cirq เป็นเฟรมเวิร์กการเขียนโปรแกรมควอนตัมจาก Google โดยให้การดำเนินการพื้นฐานทั้งหมด เช่น คิวบิต เกต วงจร และการวัด เพื่อสร้าง แก้ไข และเรียกใช้วงจรควอนตัมบนคอมพิวเตอร์ควอนตัม หรือคอมพิวเตอร์ควอนตัมจำลอง TensorFlow Quantum ใช้ Cirq ดั้งเดิมเหล่านี้เพื่อขยาย TensorFlow สำหรับการคำนวณแบบกลุ่ม การสร้างโมเดล และการคำนวณแบบไล่ระดับ เพื่อให้มีประสิทธิภาพกับ TensorFlow Quantum เป็นความคิดที่ดีที่จะมีประสิทธิภาพกับ Cirq

ดั้งเดิมควอนตัม TensorFlow

TensorFlow Quantum ใช้ส่วนประกอบที่จำเป็นในการผสานรวม TensorFlow เข้ากับฮาร์ดแวร์การประมวลผลควอนตัม ด้วยเหตุนี้ TFQ จึงแนะนำประเภทข้อมูลดั้งเดิมสองประเภท:

  • วงจรควอนตัม : สิ่งนี้แสดงถึงวงจรควอนตัมที่กำหนดโดย Cirq ( cirq.Circuit ) ภายใน TensorFlow สร้างชุดวงจรที่มีขนาดแตกต่างกัน คล้ายกับชุดของจุดข้อมูลมูลค่าจริงที่แตกต่างกัน
  • ผลรวมของ Pauli : แสดงถึงผลรวมเชิงเส้นของผลิตภัณฑ์เทนเซอร์ของตัวดำเนินการ Pauli ที่กำหนดใน Cirq ( cirq.PauliSum ) เช่นเดียวกับวงจร สร้างชุดตัวดำเนินการที่มีขนาดแตกต่างกัน

ปฏิบัติการขั้นพื้นฐาน

การใช้วงจรควอนตัมดั้งเดิมภายใน tf.Tensor นั้น TensorFlow Quantum จะใช้การดำเนินการที่ประมวลผลวงจรเหล่านี้และสร้างเอาต์พุตที่มีความหมาย

การดำเนินการของ TensorFlow เขียนด้วยภาษา C++ ที่ปรับให้เหมาะสม ตัวอย่างการดำเนินการเหล่านี้จากวงจร คำนวณค่าคาดหวัง และส่งออกสถานะที่สร้างโดยวงจรที่กำหนด การเขียนที่ยืดหยุ่นและมีประสิทธิภาพมีความท้าทายบางประการ:

  1. วงจรมีขนาดไม่เท่ากัน สำหรับวงจรจำลอง คุณไม่สามารถสร้างการดำเนินการแบบคงที่ได้ (เช่น tf.matmul หรือ tf.add ) แล้วแทนที่ตัวเลขที่แตกต่างกันสำหรับวงจรที่มีขนาดต่างกัน การดำเนินการเหล่านี้ต้องอนุญาตสำหรับขนาดไดนามิกที่กราฟการคำนวณ TensorFlow ที่มีขนาดคงที่ไม่อนุญาต
  2. ข้อมูลควอนตัมสามารถกระตุ้นให้เกิดโครงสร้างวงจรที่แตกต่างกันโดยสิ้นเชิง นี่เป็นอีกเหตุผลหนึ่งที่สนับสนุนขนาดไดนามิกในการดำเนินการ TFQ ข้อมูลควอนตัมสามารถแสดงถึงการเปลี่ยนแปลงเชิงโครงสร้างของสถานะควอนตัมที่ซ่อนอยู่ ซึ่งแสดงโดยการดัดแปลงวงจรดั้งเดิม เมื่อมีการสลับจุดข้อมูลใหม่เข้าและออกในขณะรันไทม์ กราฟการคำนวณ TensorFlow จะไม่สามารถแก้ไขได้หลังจากสร้างขึ้นแล้ว ดังนั้นจึงต้องมีการรองรับโครงสร้างที่แตกต่างกันเหล่านี้
  3. cirq.Circuits คล้ายกับกราฟคำนวณตรงที่เป็นชุดของการดำเนินการ และบางอันอาจมีสัญลักษณ์/ตัวยึดตำแหน่ง สิ่งสำคัญคือต้องทำให้สิ่งนี้เข้ากันได้กับ TensorFlow มากที่สุด

ด้วยเหตุผลด้านประสิทธิภาพ Eigen (ไลบรารี C++ ที่ใช้ใน TensorFlow ops จำนวนมาก) ไม่เหมาะอย่างยิ่งสำหรับการจำลองวงจรควอนตัม แต่ตัวจำลองวงจรที่ใช้ใน การทดลองควอนตัมนอกเหนือจากแบบคลาสสิกกลับ ถูกใช้เป็นตัวตรวจสอบและขยายเป็นรากฐานของการดำเนินการ TFQ (ทั้งหมดเขียนด้วยคำสั่ง AVX2 และ SSE) Ops ที่มีลายเซ็นการทำงานเหมือนกันถูกสร้างขึ้นโดยใช้คอมพิวเตอร์ควอนตัมจริง การสลับระหว่างคอมพิวเตอร์ควอนตัมจำลองและกายภาพนั้นง่ายดายพอๆ กับการเปลี่ยนโค้ดเพียงบรรทัดเดียว ops เหล่านี้อยู่ใน circuit_execution_ops.py

เลเยอร์

เลเยอร์ TensorFlow Quantum เปิดเผยการสุ่มตัวอย่าง ความคาดหวัง และการคำนวณสถานะแก่นักพัฒนาโดยใช้อินเทอร์เฟซ tf.keras.layers.Layer สะดวกในการสร้างเลเยอร์วงจรสำหรับพารามิเตอร์ควบคุมแบบคลาสสิกหรือสำหรับการดำเนินการอ่านค่า นอกจากนี้ คุณสามารถสร้างเลเยอร์ที่มีความซับซ้อนระดับสูงซึ่งรองรับวงจรแบทช์ ค่าพารามิเตอร์การควบคุมแบทช์ และดำเนินการอ่านข้อมูลแบทช์ ดู tfq.layers.Sample สำหรับตัวอย่าง

ตัวสร้างความแตกต่าง

สิ่งที่สังเกตได้ในวงจรควอนตัมต่างจากการดำเนินการของ TensorFlow หลายอย่างตรงที่ไม่มีสูตรสำหรับการไล่ระดับสีที่คำนวณได้ง่าย เนื่องจากคอมพิวเตอร์คลาสสิกสามารถอ่านได้เฉพาะตัวอย่างจากวงจรที่ทำงานบนคอมพิวเตอร์ควอนตัมเท่านั้น

เพื่อแก้ไขปัญหานี้ โมดูล tfq.differentiators จัดเตรียมเทคนิคการสร้างความแตกต่างมาตรฐานหลายประการ ผู้ใช้ยังสามารถกำหนดวิธีการของตนเองในการคำนวณการไล่ระดับสี ทั้งในการตั้งค่า "โลกแห่งความจริง" ของการคำนวณความคาดหวังตามตัวอย่าง และโลกแห่งการวิเคราะห์ที่แน่นอน วิธีการเช่นผลต่างอันจำกัดมักจะเป็นวิธีที่เร็วที่สุด (เวลานาฬิกาแขวน) ในสภาพแวดล้อมเชิงวิเคราะห์/ที่แน่นอน แม้ว่าจะช้ากว่า (เวลานาฬิกาแขวน) แต่วิธีการที่เป็นประโยชน์มากกว่า เช่น การเปลี่ยนพารามิเตอร์ หรือ วิธีสุ่ม มักจะมีประสิทธิภาพมากกว่า tfq.differentiators.Differentiator ได้รับการสร้างอินสแตนซ์และแนบไปกับ op ที่มีอยู่ด้วย generate_differentiable_op หรือส่งต่อไปยัง Constructor ของ tfq.layers.Expectation หรือ tfq.layers.SampledExpectation หากต้องการใช้ตัวสร้างความแตกต่างที่กำหนดเอง ให้สืบทอดจากคลาส tfq.differentiators.Differentiator หากต้องการกำหนดการดำเนินการไล่ระดับสีสำหรับการสุ่มตัวอย่างหรือการคำนวณเวกเตอร์สถานะ ให้ใช้ tf.custom_gradient

ชุดข้อมูล

เมื่อสาขาคอมพิวเตอร์ควอนตัมเติบโตขึ้น ข้อมูลควอนตัมและการรวมกันของโมเดลก็จะเกิดขึ้นมากขึ้น ทำให้การเปรียบเทียบแบบมีโครงสร้างทำได้ยากขึ้น โมดูล tfq.datasets ใช้เป็นแหล่งข้อมูลสำหรับงานการเรียนรู้ของเครื่องควอนตัม ช่วยให้มั่นใจได้ถึงการเปรียบเทียบที่มีโครงสร้างสำหรับรุ่นและประสิทธิภาพ

หวังว่าด้วยการสนับสนุนจากชุมชนจำนวนมาก โมดูล tfq.datasets จะเติบโตขึ้นเพื่อให้สามารถวิจัยที่โปร่งใสและทำซ้ำได้มากขึ้น ปัญหาที่ได้รับการดูแลอย่างระมัดระวังใน: การควบคุมควอนตัม, การจำลองเฟอร์มิโอนิก, การจำแนกประเภทใกล้การเปลี่ยนเฟส, การตรวจจับควอนตัม ฯลฯ ล้วนเป็นตัวเลือกที่ยอดเยี่ยมสำหรับการเพิ่ม tfq.datasets หากต้องการเสนอชุดข้อมูลใหม่ ให้เปิด ปัญหา GitHub