Optimiseurs classiques
Qu'est-ce qu'un optimiseur ?
Victoria Lipinska nous parle des optimiseurs classiques et de leur rôle dans VQE.
Tu entendras parler de quelques exemples d'optimiseurs et de leurs performances en présence et en absence de bruit.
Références
Les articles suivants sont référencés dans la vidéo ci-dessus.
- 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.
Coder un optimiseur classique
Dans les leçons précédentes, tu as appris à créer un Hamiltonien adapté à une utilisation sur un ordinateur quantique et à construire un circuit variationnel. Tu as également appris que le circuit variationnel (ou ansatz) contient des paramètres à faire varier, et que le choix optimal des paramètres est celui qui donne la fonction de coût ou l'énergie la plus basse possible. Ainsi, notre problème se réduit à la recherche dans l'espace des paramètres de l'ensemble optimal. La majeure partie du travail sur les optimiseurs classiques a été accomplie pour nous, car d'excellents optimiseurs sont disponibles depuis plusieurs sources.
Dans cette leçon, tu apprendras :
- Comment les optimiseurs classiques s'intègrent dans un calcul VQE
- Quels optimiseurs classiques sont disponibles dans SciPy
- Quels optimiseurs ne sont pas encore disponibles via SciPy et comment les compléter en attendant avec
qiskit.algorithms - Quelles options sont disponibles pour ces optimiseurs et leur importance pour le calcul quantique
SciPy est une bibliothèque Python gratuite et open-source avec des paquets pertinents pour de nombreux domaines du calcul scientifique, notamment l'optimisation. En particulier, SciPy dispose d'un paquet d'optimisation qui inclut minimize :
from scipy.optimize import minimize
Cette fonction minimize possède plusieurs arguments, mais les plus pertinents pour la chimie quantique sont :
- La fonction de coût (
cost_func). Elle est liée au Hamiltonien, mais inclut également certaines complexités, comme la détermination de la valeur d'espérance en utilisant Estimator, et dans le cas des calculs d'états excités, peut inclure des conditions d'orthogonalité. - Un état initial (x0) pour le système, souvent l'état de Hartree-Fock
- D'autres arguments, y compris les arguments de la fonction de coût elle-même
- La méthode définie sur l'optimiseur classique que tu sélectionnes
- Les options pour l'optimiseur classique (à ne pas confondre avec les options de session discutées dans la section suivante)
Un exemple de code est montré ci-dessous. Nous limitons notre discussion ici aux deux derniers arguments.
cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})
SciPy dispose de documentation sur toutes les méthodes minimize disponibles. Voici quelques exemples notables, qui sont tous des méthodes pour minimiser une fonction scalaire d'une ou plusieurs variables :
- cobyla : algorithme d'Optimisation par Approximation Linéaire Contrainte (COBYLA).
- slsqp : Programmation séquentielle par moindres carrés (SLSQP).
- nelder-mead : Algorithme de Nelder-Mead.
La plupart des algorithmes d'optimisation classiques disponibles sont des minimiseurs locaux, en ce sens qu'ils utilisent diverses méthodes pour trouver des minima locaux, mais ne sont pas garantis de trouver des minima globaux. Certains optimiseurs classiques estiment explicitement les gradients et les utilisent pour trouver des minima locaux. D'autres peuvent utiliser des approximations linéaires ou quadratiques successives de la fonction objectif pour trouver des minima.
Ces algorithmes ont plusieurs options en commun, avec de subtiles différences. Par exemple, tous ont l'option de spécifier un nombre maximum d'itérations en utilisant la notation 'maxiter': 200 ci-dessus. Tous ont une option spécifiant un critère d'arrêt différent basé sur les valeurs de fonction ou de variable, bien que ces critères soient légèrement différents selon les algorithmes. COBYLA, par exemple, te permet de spécifier une tolérance (par exemple, 'tol': 0.0001) qui est la borne inférieure d'une « région de confiance ». En comparaison, SLSQP te permet de spécifier un objectif de précision de la fonction utilisée dans le critère d'arrêt ('ftol'). Nelder-Mead te permet de spécifier une tolérance sur la différence entre des estimations successives des paramètres () (xatol) ou une tolérance sur la différence entre des valeurs successives obtenues pour la fonction de coût (fatol) (ou les deux).
Pour une liste complète des algorithmes et options disponibles, consulte la documentation minimize de SciPy.