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
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)
Un exemple de code est présenté 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 d'une documentation sur toutes les méthodes de minimisation disponibles. Voici quelques exemples notables, qui sont toutes des méthodes permettant de minimiser une fonction scalaire d'une ou plusieurs variables :
- cobyla : algorithme Optimization BY Linear Approximation (COBYLA).
- slsqp : Sequential Least Squares Programming (SLSQP).
- nelder-mead algorithme Nelder-Mead.
La plupart des algorithmes d'optimisation classique disponibles sont des minimiseurs locaux, en ce sens qu'ils utilisent diverses méthodes pour trouver des minima locaux, mais ils ne garantissent pas de trouver des minima globaux. Certains optimiseurs classiques estiment explicitement des 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, mais avec de subtiles différences. Par exemple, tous ont l'option permettant de spécifier un nombre maximal d'itérations en utilisant la notation 'maxiter': 200 ci-dessus. Tous disposent d'une option spécifiant un critère d'arrêt différent basé sur les valeurs de la fonction ou des variables, 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 limite inférieure d'une « région de confiance ». En comparaison, SLSQP te permet de spécifier un objectif dans la 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 dans la différence entre les estimations successives des paramètres () (xatol) ou une tolérance dans la différence entre les 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 de minimize de SciPy.