Optimizer แบบคลาสสิก
Optimizer คืออะไร?
Victoria Lipinska เล่าเกี่ยวกับ classical optimizer และวิธีที่มันทำงานเป็นส่วนหนึ่งของ VQE
คุณจะได้ยินเกี่ยวกับตัวอย่าง optimizer บางตัวและประสิทธิภาพของมันเมื่อมีและไม่มีสัญญาณรบกวน
เอกสารอ้างอิง
บทความต่อไปนี้ถูกอ้างอิงในวิดีโอข้างต้น
- A Comparison of Various Classical Optimizers for a Variational Quantum Linear Solver, Pellow-Jarman, et al.
- The Variational Quantum Eigensolver: A review of methods and best practices, Tilly, et al.
- Quantum computational chemistry, McArdle, et al.
- Barren plateaus in quantum neural network training landscapes, McClean, et al.
- Connecting Ansatz Expressibility to Gradient Magnitudes and Barren Plateaus, Holmes, et al.
- Effect of barren plateaus on gradient-free optimization, Arrasmith, et al.
เขียนโค้ด classical optimizer
ในบทเรียนก่อนหน้า คุณได้เรียนรู้วิธีสร้าง Hamiltonian ที่เหมาะสำหรับใช้บนคอมพิวเตอร์ควอนตัมและวิธีสร้าง variational circuit คุณยังรู้ด้วยว่า variational circuit (หรือ ansatz) มีพารามิเตอร์ที่ต้องปรับ และพารามิเตอร์ที่ดีที่สุดคือสิ่งที่ให้ค่า cost function หรือพลังงานต่ำสุด ดังนั้นปัญหาของเราลดเหลือการค้นหาใน parameter space เพื่อหาชุดที่ดีที่สุด งานส่วนใหญ่ใน classical optimizers ได้ถูกทำเสร็จแล้วสำหรับเรา เนื่องจาก optimizer ที่ยอดเยี่ยมมีให้ใช้จากหลายแหล่ง
ในบทเรียนนี้ คุณจะได้เรียนรู้:
- วิธีที่ classical optimizers เข้าร่วมในการคำนวณ VQE
- classical optimizers ที่มีให้ใช้จาก SciPy มีอะไรบ้าง
- optimizer ใดที่ ยังไม่มี ใน SciPy และวิธีเสริมโดยใช้
qiskit.algorithmsในระหว่างนี้ - ตัวเลือกที่มีสำหรับ optimizer เหล่านี้และความสำคัญสำหรับการคำนวณควอนตัม
SciPy คือ Python library โอเพนซอร์สฟรีที่มีแพ็กเกจสำหรับหลายด้านของการคำนวณทางวิทยาศาสตร์ รวมถึงการ optimization โดยเฉพาะ SciPy มีแพ็กเกจ optimization ที่รวม minimize ไว้ด้วย:
from scipy.optimize import minimize
ฟังก์ชัน minimize นี้มีอาร์กิวเมนต์หลายตัว แต่อาร์กิวเมนต์ที่เกี่ยวข้องมากที่สุดสำหรับการเคมีควอนตัมคือ:
- cost function (
cost_func) ซึ่งสัมพันธ์กับ Hamiltonian แต่ยังรวมถึงความซับซ้อนบางอย่างด้วย เช่น การหาค่า expectation value โดยใช้ Estimator และในกรณีของการคำนวณ excited state อาจรวมถึงเงื่อนไข orthogonality ด้วย - สถานะเริ่มต้น (x0) ของระบบ ซึ่งมักเป็น Hartree-Fock state
- อาร์กิวเมนต์อื่น ๆ รวมถึงอาร์กิวเมนต์ของ cost function เอง
- method ที่ตั้งค่าเป็น classical optimizer ที่คุณเลือก
- ตัวเลือกสำหรับ classical optimizer (อย่าสับสนกับ Session options ที่กล่าวถึงในส่วนถัดไป)
ตัวอย่างโค้ดแสดงไว้ด้านล่าง เราจำกัดการอภิปรายของเราที่นี่ไว้เพียงสองอาร์กิวเมนต์สุดท้าย
cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})
SciPy มีเอกสารประกอบสำหรับ minimize method ที่ใช้ได้ทั้งหมด ต่อไปนี้คือตัวอย่างที่น่าสนใจบางส่วน ซึ่งทั้งหมดเป็น method สำหรับลดค่าฟังก์ชัน scalar ที่มีตัวแปรหนึ่งตัวหรือมากกว่า:
- cobyla: อัลกอริทึม Constrained Optimization BY Linear Approximation (COBYLA)
- slsqp: Sequential Least Squares Programming (SLSQP)
- nelder-mead อัลกอริทึม Nelder-Mead
อัลกอริทึม classical optimization ส่วนใหญ่ที่มีให้ใช้งานเป็น local minimizer กล่าวคือใช้วิธีการต่าง ๆ เพื่อหา local minima แต่ไม่รับประกันว่าจะพบ global minima บาง classical optimizer ประมาณค่า gradient อย่างชัดเจนและใช้สิ่งเหล่านั้นในการหา local minima ส่วนบางตัวอาจใช้การประมาณเชิงเส้นหรือกำลังสองต่อเนื่องของฟังก์ชัน objective เพื่อหา minima
อัลกอริทึมเหล่านี้มีตัวเลือกหลายอย่างที่เหมือนกัน แต่มีความแตกต่างที่ละเอียดอ่อน ตัวอย่างเช่น ทุกตัวมีตัวเลือกในการระบุจำนวนการวนซ้ำสูงสุดโดยใช้สัญกรณ์ 'maxiter': 200 จากด้านบน ทุกตัวมีตัวเลือกบางอย่างที่ระบุเกณฑ์การหยุดที่แตกต่างกันตามค่าฟังก์ชันหรือตัวแปร แม้ว่าเกณฑ์เหล่านี้จะแตกต่างกันเล็กน้อยสำหรับแต่ละอัลกอริทึม ตัวอย่างเช่น COBYLA ช่วยให้คุณระบุ tolerance (เช่น 'tol': 0.0001) ซึ่งเป็นขอบล่างของ "trust region" ในทางตรงกันข้าม SLSQP ช่วยให้คุณระบุเป้าหมายในความแม่นยำของฟังก์ชันที่ใช้ในเกณฑ์การหยุด ('ftol') ส่วน Nelder-Mead ช่วยให้คุณระบุ tolerance ในความแตกต่างระหว่างการคาดเดาพารามิเตอร์ () ที่ต่อเนื่องกัน (xatol) หรือ tolerance ในความแตกต่างระหว่างค่าที่ได้จาก cost function ที่ต่อเนื่องกัน (fatol) หรือทั้งสองอย่าง
สำหรับรายการอัลกอริทึมและตัวเลือกทั้งหมดที่ใช้ได้ โปรดไปที่ เอกสารประกอบ minimize ของ SciPy