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

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

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

Cirq

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

พื้นฐาน TensorFlow Quantum

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

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

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

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

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

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

ด้วยเหตุผลด้านประสิทธิภาพ Eigen (ไลบรารี C++ ที่ใช้ใน TensorFlow ops จำนวนมาก) ไม่เหมาะสำหรับการจำลองวงจรควอนตัม แต่ตัวจำลองวงจรที่ใช้ในการ ทดลองควอนตัมเหนือกว่าคลาสสิก กลับถูกใช้เป็นตัวตรวจสอบและขยายเป็นพื้นฐานของ TFQ ops (ทั้งหมดเขียนด้วยคำสั่ง 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 หรือส่งผ่านไปยังคอนสตรัคเตอร์ของ tfq.layers.Expectation หรือ tfq.layers.SampledExpectation ในการปรับใช้ตัวสร้างความแตกต่างแบบกำหนดเอง ให้สืบทอดจากคลาส tfq.differentiators.Differentiator ในการกำหนดการดำเนินการไล่ระดับสำหรับการสุ่มตัวอย่างหรือการคำนวณสถานะเวกเตอร์ ให้ใช้ tf.custom_gradient

ชุดข้อมูล

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

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