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 mit und ohne 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)
Im Folgenden wird Beispielcode gezeigt. Wir beschränken unsere Diskussion hier auf die letzten beiden Argumente.
cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})
SciPy verfügt über eine Dokumentation zu allen verfügbaren Minimierungsmethoden. Hier sind einige bemerkenswerte Beispiele, die alle Methoden zur Minimierung einer skalaren Funktion einer oder mehrerer Variablen sind:
- cobyla: Optimization BY Linear Approximation (COBYLA)-Algorithmus.
- slsqp: Sequential Least Squares Programming (SLSQP).
- nelder-mead Nelder-Mead-Algorithmus.
Die meisten verfügbaren klassischen Optimierungsalgorithmen sind lokale Minimierer, das heißt, sie verwenden verschiedene Methoden, um lokale Minima zu finden, garantieren aber nicht das Finden globaler Minima. Manche klassischen Optimierer schätzen explizit Gradienten und nutzen diese, um lokale Minima zu finden. Andere verwenden sukzessive lineare oder quadratische Näherungen der Zielfunktion, um Minima zu finden.
Diese Algorithmen haben mehrere Optionen gemeinsam, weisen aber feine Unterschiede auf. Zum Beispiel haben alle die Möglichkeit, mit der oben gezeigten Notation 'maxiter': 200 eine maximale Anzahl an Iterationen festzulegen. Alle verfügen über eine Option zur Festlegung eines Abbruchkriteriums basierend auf Funktions- oder Variablenwerten, wobei sich diese Kriterien je nach Algorithmus leicht unterscheiden. COBYLA erlaubt es dir beispielsweise, eine Toleranz anzugeben (zum Beispiel 'tol': 0.0001), die die untere Grenze einer „Trust Region“ darstellt. Im Vergleich dazu kannst du bei SLSQP ein Ziel für die Präzision der im Abbruchkriterium verwendeten Funktion festlegen ('ftol'). Bei Nelder-Mead kannst du eine Toleranz für die Differenz zwischen aufeinanderfolgenden Parameterschätzungen () (xatol) oder eine Toleranz für die Differenz zwischen aufeinanderfolgenden Werten der Kostenfunktion (fatol) angeben (oder beides).
Eine vollständige Liste der verfügbaren Algorithmen und Optionen findest du in der SciPy-Minimierungsdokumentation.