Klassische Optimierer
Was ist ein Optimierer?
Victoria Lipinska erklärt klassische Optimierer und ihre Funktion als Teil von VQE.
Du erfährst von einigen Beispieloptimierern und wie sie sich im Vorhandensein und Fehlen von Rauschen verhalten.
Referenzen
Die folgenden Artikel werden im obigen Video referenziert.
- 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.
Einen klassischen Optimierer programmieren
In den vorherigen Lektionen hast du gelernt, einen Hamiltonian zu erstellen, der für den Einsatz auf einem Quantencomputer geeignet ist, und wie man einen variationellen Circuit aufbaut. Du hast auch gelernt, dass der variationelle Circuit (oder Ansatz) Parameter enthält, die variiert werden, und dass die optimale Parameterwahl diejenige ist, die die kleinstmögliche Kostenfunktion oder Energie liefert. Unser Problem reduziert sich also auf die Suche im Parameterraum nach dem optimalen Satz. Den Großteil der Arbeit bei klassischen Optimierern haben andere bereits erledigt, da ausgezeichnete Optimierer aus verschiedenen Quellen verfügbar sind.
In dieser Lektion lernst du:
- Wie klassische Optimierer in eine VQE-Berechnung eingebettet sind
- Welche klassischen Optimierer über SciPy verfügbar sind
- Welche Optimierer noch nicht über SciPy verfügbar sind und wie man diese übergangsweise mit
qiskit.algorithmsergänzen kann - Welche Optionen für diese Optimierer verfügbar sind und was sie für das Quantencomputing bedeuten
SciPy ist eine kostenlose, quelloffene Python-Bibliothek mit Paketen für viele Bereiche des wissenschaftlichen Rechnens, einschließlich Optimierung. Insbesondere enthält SciPy ein Optimierungspaket mit 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)
Some example code is shown below. We restrict our discussion here to the last two arguments.
cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})
SciPy enthält Dokumentation zu allen verfügbaren minimize-Methoden. Hier sind einige nennenswerte Beispiele, die alle Methoden zur Minimierung einer skalaren Funktion einer oder mehrerer Variablen sind:
- cobyla: COBYLA-Algorithmus (Optimization BY Linear Approximation).
- slsqp: Sequential Least Squares Programming (SLSQP).
- nelder-mead: Nelder-Mead-Algorithmus.
Die meisten verfügbaren klassischen Optimierungsalgorithmen sind lokale Minimierer: Sie suchen mit verschiedenen Methoden nach lokalen Minima, ohne dabei garantiert das globale Minimum zu finden. Einige klassische Optimierer schätzen Gradienten explizit und nutzen diese, um lokale Minima zu finden. Andere verwenden sukzessive lineare oder quadratische Näherungen der Zielfunktion zur Minimierung.
Diese Algorithmen haben mehrere gemeinsame Optionen, aber mit feinen Unterschieden. Alle erlauben beispielsweise die Angabe einer maximalen Iterationsanzahl mit der Notation 'maxiter': 200 von oben. Alle haben eine Option zur Festlegung eines anderen Abbruchkriteriums auf Basis von Funktions- oder Variablenwerten, allerdings unterscheiden sich diese Kriterien leicht je nach Algorithmus. COBYLA erlaubt z. B. die Angabe einer Toleranz (zum Beispiel 'tol': 0.0001), die die untere Schranke einer „Vertrauensregion" darstellt. Im Vergleich dazu erlaubt SLSQP die Festlegung eines Genauigkeitsziels für die im Abbruchkriterium verwendete Funktion ('ftol'). Nelder-Mead erlaubt die Angabe einer Toleranz für die Differenz aufeinanderfolgender Parameterschätzungen () (xatol) oder einer Toleranz für die Differenz aufeinanderfolgender Kostenfunktionswerte (fatol) – oder beides.
Eine vollständige Liste der verfügbaren Algorithmen und Optionen findest du in der SciPy-minimize-Dokumentation.