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
This minimize function has several arguments, but the most relevant arguments for quantum chemistry are:
- The cost function (
cost_func). This is related to the Hamiltonian, but also includes some complexities, such as determining the expectation value by using Estimator, and in the case of excited state calculations, might include orthogonality conditions. - An initial state (x0) for the system, often the Hartree Fock state
- Other arguments, including arguments of the cost function itself
- The method set to the classical optimizer you select
- Options for the classical optimizer (not to be confused with Session options discussed in the next section)
โค้ดตัวอย่างแสดงไว้ด้านล่าง เราจำกัดการอภิปรายในที่นี้ไว้ที่สองอาร์กิวเมนต์สุดท้าย
cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})
SciPy มีเอกสารประกอบเกี่ยวกับ minimize method ที่มีให้ใช้ทั้งหมด นี่คือตัวอย่างที่น่าสนใจไม่กี่ตัวอย่าง ซึ่งทั้งหมดเป็นวิธีการสำหรับการหาค่าต่ำสุดของฟังก์ชันสเกลาร์ของตัวแปรหนึ่งตัวหรือมากกว่า:
- cobyla: อัลกอริทึม Optimization BY Linear Approximation (COBYLA)
- slsqp: Sequential Least Squares Programming (SLSQP)
- nelder-mead อัลกอริทึม Nelder-Mead
อัลกอริทึม classical optimization ที่มีให้ใช้ส่วนใหญ่เป็น local minimizer กล่าวคือใช้วิธีการต่าง ๆ เพื่อหาค่าต่ำสุดในท้องถิ่น แต่ไม่รับประกันว่าจะหาค่าต่ำสุดทั่วไปได้ classical optimizer บางตัวประเมินค่า gradient อย่างชัดเจนและใช้ค่าเหล่านั้นเพื่อหาค่าต่ำสุดในท้องถิ่น บางตัวอาจใช้การประมาณเชิงเส้นหรือกำลังสองต่อเนื่องกันของฟังก์ชันเป้าหมายเพื่อหาค่าต่ำสุด
อัลกอริทึมเหล่านี้มีตัวเลือกหลายอย่างร่วมกัน แต่มีความแตกต่างเล็กน้อย ตัวอย่างเช่น ทั้งหมดมีตัวเลือกในการระบุจำนวนการวนซ้ำสูงสุดโดยใช้สัญกรณ์ 'maxiter': 200 ตามด้านบน ทั้งหมดมีตัวเลือกบางอย่างในการระบุเกณฑ์การหยุดที่แตกต่างกันตามค่าฟังก์ชันหรือตัวแปร แม้ว่าเกณฑ์เหล่านี้จะแตกต่างกันเล็กน้อยสำหรับแต่ละอัลกอริทึม ตัวอย่างเช่น COBYLA อนุญาตให้คุณระบุค่า tolerance (เช่น 'tol': 0.0001) ซึ่งเป็นขอบเขตล่างของ "trust region" ในทางเปรียบเทียบ SLSQP ให้คุณระบุเป้าหมายในความแม่นยำของฟังก์ชันที่ใช้ในเกณฑ์การหยุด ('ftol') Nelder-Mead ให้คุณระบุค่า tolerance ในความแตกต่างระหว่างค่าประมาณพารามิเตอร์ () ที่ต่อเนื่องกัน (xatol) หรือค่า tolerance ในความแตกต่างระหว่างค่าที่ได้จากฟังก์ชันต้นทุน ที่ต่อเนื่องกัน (fatol) (หรือทั้งสองอย่าง)
สำหรับรายการอัลกอริทึมและตัวเลือกที่มีให้ใช้ทั้งหมด โปรดไปที่ เอกสารประกอบ minimize ของ SciPy