Der Variational Quantum Eigensolver (VQE)
Diese Lektion stellt den Variational Quantum Eigensolver vor, erläutert seine Bedeutung als grundlegenden Algorithmus im Quantencomputing und untersucht seine Stärken und Schwächen. VQE allein, ohne ergänzende Methoden, wird für moderne Quantenberechnungen auf Utility-Skala wahrscheinlich nicht ausreichen. Er ist dennoch wichtig als archetypische klassisch-quantenmechanische Hybridmethode und bildet ein wesentliches Fundament, auf dem viele fortgeschrittenere Algorithmen aufbauen.
Dieses Video gibt einen Überblick über VQE und die Faktoren, die seine Effizienz beeinflussen. Der folgende Text ergänzt dies um weitere Details und implementiert VQE mit Qiskit.
1. Was ist VQE?
Der Variational Quantum Eigensolver ist ein Algorithmus, der klassisches und quantenmechanisches Computing gemeinsam einsetzt, um eine Aufgabe zu lösen. Eine VQE-Berechnung besteht aus vier Hauptkomponenten:
- Ein Operator: Oft ein Hamiltonoperator, den wir nennen, der eine Eigenschaft des Systems beschreibt, die du optimieren möchtest. Anders ausgedrückt: Du suchst den Eigenvektor dieses Operators, der dem minimalen Eigenwert entspricht. Diesen Eigenvektor nennen wir oft den „Grundzustand".
- Ein „Ansatz" (ein deutsches Wort): Ein Quanten-Circuit, der einen Quantenzustand vorbereitet, der den gesuchten Eigenvektor annähert. Genau genommen ist ein Ansatz eine Familie von Quanten-Circuits, weil einige der Gates im Ansatz parametrisiert sind – ihnen wird also ein Parameter übergeben, den wir variieren können. Diese Familie von Circuits kann eine Familie von Quantenzuständen erzeugen, die den Grundzustand approximieren.
- Ein Estimator: Ein Mittel zur Schätzung des Erwartungswerts des Operators über den aktuellen variationellen Quantenzustand. Manchmal ist dieser Erwartungswert – die sogenannte Kostenfunktion – unser eigentliches Ziel. Manchmal interessiert uns eine komplexere Funktion, die sich dennoch aus einem oder mehreren Erwartungswerten zusammensetzt.
- Ein klassischer Optimierer: Ein Algorithmus, der Parameter variiert, um die Kostenfunktion zu minimieren.
Schauen wir uns jede dieser Komponenten genauer an.
1.1 Der Operator (Hamiltonoperator)
Im Mittelpunkt eines VQE-Problems steht ein Operator, der ein System von Interesse beschreibt. Wir nehmen hier an, dass der kleinste Eigenwert und der zugehörige Eigenvektor dieses Operators für einen wissenschaftlichen oder praktischen Zweck nützlich sind. Beispiele hierfür sind ein chemischer Hamiltonoperator, der ein Molekül beschreibt, bei dem der kleinste Eigenwert der Grundzustandsenergie des Moleküls entspricht und der zugehörige Eigenzustand die Geometrie oder Elektronenkonfiguration des Moleküls beschreibt. Oder der Operator beschreibt die Kosten eines zu optimierenden Prozesses, und die Eigenzustände entsprechen Routen oder Vorgehensweisen. In manchen Fachgebieten wie der Physik bezeichnet ein „Hamiltonoperator" fast immer einen Operator, der die Energie eines physikalischen Systems beschreibt. Im Quantencomputing ist es jedoch üblich, quantenmechanische Operatoren, die ein betriebswirtschaftliches oder logistisches Problem beschreiben, ebenfalls als „Hamiltonoperator" zu bezeichnen. Diese Konvention übernehmen wir hier.
Die Abbildung eines physikalischen oder Optimierungsproblems auf Qubits ist typischerweise keine triviale Aufgabe, aber diese Details stehen nicht im Mittelpunkt dieses Kurses. Eine allgemeine Diskussion der Abbildung eines Problems auf einen Quantenoperator findet sich in Quantum computing in practice. Ein detaillierterer Blick auf die Abbildung chemischer Probleme auf Quantenoperatoren bietet Quantum Chemistry with VQE.
Für die Zwecke dieses Kurses nehmen wir an, dass die Form des Hamiltonoperators bekannt ist. Ein Hamiltonoperator für ein einfaches Wasserstoffmolekül (unter bestimmten Aktivraum-Annahmen und mit dem Jordan-Wigner-Mapper) lautet beispielsweise:
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime scipy
from qiskit.quantum_info import SparsePauliOp
hamiltonian = SparsePauliOp(
[
"IIII",
"IIIZ",
"IZII",
"IIZI",
"ZIII",
"IZIZ",
"IIZZ",
"ZIIZ",
"IZZI",
"ZZII",
"ZIZI",
"YYYY",
"XXYY",
"YYXX",
"XXXX",
],
coeffs=[
-0.09820182 + 0.0j,
-0.1740751 + 0.0j,
-0.1740751 + 0.0j,
0.2242933 + 0.0j,
0.2242933 + 0.0j,
0.16891402 + 0.0j,
0.1210099 + 0.0j,
0.16631441 + 0.0j,
0.16631441 + 0.0j,
0.1210099 + 0.0j,
0.17504456 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
],
)
Beachte, dass der obige Hamiltonoperator Terme wie ZZII und YYYY enthält, die nicht miteinander kommutieren. Um ZZII auszuwerten, müsste man unter anderem den Pauli-Z-Operator auf Qubit 3 messen. Um jedoch YYYY auszuwerten, muss man den Pauli-Y-Operator auf demselben Qubit 3 messen. Zwischen dem Y- und dem Z-Operator auf demselben Qubit besteht eine Unschärferelation; beide Operatoren lassen sich nicht gleichzeitig messen. Auf diesen Punkt werden wir weiter unten und im weiteren Verlauf des Kurses noch zurückkommen.
Der obige Hamiltonoperator ist eine -Matrixoperator. Die Diagonalisierung des Operators zur Bestimmung seines kleinsten Energieeigenwerts ist nicht schwierig.
import numpy as np
A = np.array(hamiltonian)
eigenvalues, eigenvectors = np.linalg.eigh(A)
print("The ground state energy is ", min(eigenvalues), "hartrees")
The ground state energy is -1.1459778447627311 hartrees
Klassische Brute-Force-Eigenlöser können nicht skalieren, um die Energien oder Geometrien sehr großer Atomsysteme wie Medikamente oder Proteine zu beschreiben. VQE ist einer der frühen Versuche, Quantencomputing für dieses Problem nutzbar zu machen.
In dieser Lektion werden wir auf deutlich größere Hamiltonoperatoren stoßen als den obigen. Es wäre jedoch verfrüht, die Grenzen von VQE auszuloten, bevor wir später in diesem Kurs einige der fortgeschritteneren Werkzeuge vorstellen, die VQE ergänzen oder ersetzen können.
1.2 Ansatz
Das Wort „Ansatz" ist deutsch. Der korrekte Plural im Deutschen lautet „Ansätze", obwohl man häufig auch „ansatzes" oder „ansatze" findet. Im Kontext von VQE ist ein Ansatz der Quanten-Circuit, mit dem du eine Mehr-Qubit-Wellenfunktion erzeugst, die den Grundzustand des untersuchten Systems möglichst gut annähert und damit den kleinsten Erwartungswert deines Operators liefert. Dieser Circuit enthält variationelle Parameter (oft im Parametervektor zusammengefasst).
Es wird ein Anfangssatz von Werten der variationellen Parameter gewählt. Die unitäre Operation des Ansatzes auf dem Circuit nennen wir . Standardmäßig werden alle Qubits in IBM®-Quantencomputern im Zustand initialisiert. Wenn der Circuit ausgeführt wird, ist der Zustand der Qubits:
Wenn wir nur die niedrigste Energie benötigten (in der Sprache physikalischer Systeme), könnten wir diese schätzen, indem wir die Energie viele Male messen und den kleinsten Wert nehmen. Wir wollen aber typischerweise auch die Konfiguration kennen, die diese niedrigste Energie oder diesen kleinsten Eigenwert liefert. Der nächste Schritt ist daher die Schätzung des Erwartungswerts des Hamiltonoperators durch Quantenmessungen. Darin steckt einiges. Qualitativ lässt sich dieser Prozess damit verstehen, dass die Wahrscheinlichkeit , eine Energie zu messen (wieder in der Sprache physikalischer Systeme), mit dem Erwartungswert durch folgende Beziehung verknüpft ist:
Die Wahrscheinlichkeit ist außerdem mit der Überlappung zwischen dem Eigenzustand und dem aktuellen Systemzustand verknüpft:
Durch viele Messungen der Pauli-Operatoren, aus denen unser Hamiltonoperator besteht, können wir den Erwartungswert des Hamiltonoperators im aktuellen Systemzustand schätzen. Der nächste Schritt besteht darin, die Parameter zu variieren und sich dem Grundzustand des Systems mit der niedrigsten Energie noch weiter anzunähern. Wegen der variationellen Parameter im Ansatz wird er manchmal auch als Variationsform bezeichnet.
Bevor wir uns diesem Variationsprozess zuwenden, ist es oft nützlich, von einem „guten Ausgangszustand" zu starten. Wenn du genug über dein System weißt, kannst du eine bessere Anfangsschätzung als machen. Zum Beispiel ist es in chemischen Anwendungen üblich, Qubits im Hartree-Fock-Zustand zu initialisieren. Dieser Ausgangszustand ohne variationelle Parameter heißt Referenzzustand. Den Circuit zur Erzeugung des Referenzzustands nennen wir . Wann immer es wichtig ist, den Referenzzustand vom restlichen Ansatz zu unterscheiden, verwende: Äquivalent gilt:
1.3 Estimator
Wir brauchen eine Möglichkeit, den Erwartungswert unseres Hamiltonoperators in einem bestimmten variationellen Zustand zu schätzen. Könnten wir den gesamten Operator direkt messen, wäre dies so einfach wie viele (sagen wir ) Messungen durchzuführen und die gemessenen Werte zu mitteln:
Das -Symbol erinnert uns daran, dass dieser Erwartungswert nur im Grenzfall exakt wäre. Mit tausenden von Messungen an einem Circuit ist der Stichprobenfehler des Erwartungswerts jedoch recht gering. Für sehr präzise Berechnungen spielen andere Faktoren wie Rauschen eine Rolle.
Es ist jedoch im Allgemeinen nicht möglich, auf einmal zu messen. kann mehrere nicht-kommutierende Pauli-X-, Y- und Z-Operatoren enthalten. Daher muss der Hamiltonoperator in Gruppen von Operatoren aufgeteilt werden, die gleichzeitig gemessen werden können, und jede solche Gruppe muss separat geschätzt werden; anschließend werden die Ergebnisse kombiniert, um einen Erwartungswert zu erhalten. Wir werden dies in der nächsten Lektion, wenn wir die Skalierung klassischer und quantenmechanischer Ansätze besprechen, ausführlicher behandeln. Diese Komplexität bei der Messung ist ein Grund, warum wir hocheffizienten Code für diese Art von Schätzung benötigen. In dieser und den folgenden Lektionen verwenden wir dafür das Qiskit-Runtime-Primitiv Estimator.
1.4 Klassische Optimierer
Ein klassischer Optimierer ist ein klassischer Algorithmus, der darauf ausgelegt ist, Extremwerte einer Zielfunktion zu finden (typischerweise ein Minimum). Er durchsucht den Raum möglicher Parameter nach einem Satz, der eine interessierende Funktion minimiert. Grob lassen sich solche Algorithmen in gradientenbasierte Methoden, die Gradienteninformationen nutzen, und gradientenfreie Methoden einteilen, die als Black-Box-Optimierer arbeiten. Die Wahl des klassischen Optimierers kann die Leistung eines Algorithmus erheblich beeinflussen, insbesondere in Gegenwart von Rauschen in Quantenhardware. Zu den gängigen Optimierern in diesem Bereich gehören Adam, AMSGrad und SPSA, die in verrauschten Umgebungen vielversprechende Ergebnisse gezeigt haben. Zu den traditionelleren Optimierern zählen COBYLA und SLSQP.
Ein typischer Workflow (wie in Abschnitt 3.3 gezeigt) besteht darin, einen dieser Algorithmen als Methode innerhalb eines Minimierers wie SciPys minimize-Funktion zu verwenden. Diese nimmt als Argumente entgegen:
- Eine zu minimierende Funktion. Oft ist das der Erwartungswert der Energie. Im Allgemeinen werden diese als „Kostenfunktionen" bezeichnet.
- Einen Satz von Startparametern für die Suche. Häufig als oder bezeichnet.
- Argumente, einschließlich der Argumente der Kostenfunktion. Im Quantencomputing mit Qiskit umfassen diese den Ansatz, den Hamiltonoperator und das Estimator-Primitiv, das im nächsten Unterabschnitt näher beschrieben wird.
- Eine Minimierungsmethode (
method). Dies ist der spezifische Algorithmus, der den Parameterraum durchsucht. Hier würde man zum Beispiel COBYLA oder SLSQP angeben. - Optionen (
options). Die verfügbaren Optionen können je nach Methode unterschiedlich sein. Ein Beispiel, das praktisch alle Methoden beinhalten, ist die maximale Anzahl von Iterationen des Optimierers vor dem Abbruch:maxiter.
Bei jedem iterativen Schritt wird der Erwartungswert des Hamiltonoperators durch viele Messungen geschätzt. Dieser geschätzte Energiewert wird von der Kostenfunktion zurückgegeben, und der Minimierer aktualisiert seine Information über die Energielandschaft. Wie genau der Optimierer den nächsten Schritt wählt, hängt von der Methode ab. Manche nutzen Gradienten und wählen die Richtung des steilsten Abstiegs. Andere berücksichtigen Rauschen und verlangen, dass die Kosten um eine große Marge sinken, bevor sie akzeptieren, dass die wahre Energie in dieser Richtung abnimmt.
# Example syntax for minimization
# from scipy.optimize import minimize
# res = minimize(cost_func, x0, args=(ansatz, hamiltonian, estimator), method="cobyla", options={'maxiter': 200})
1.5 Das Variationsprinzip
Das Variationsprinzip ist in diesem Kontext von zentraler Bedeutung: Es besagt, dass keine variationelle Wellenfunktion einen Energie- (oder Kosten-)Erwartungswert liefern kann, der kleiner ist als der der Grundzustandswellenfunktion. Mathematisch ausgedrückt:
Dies lässt sich leicht nachweisen, wenn man beachtet, dass die Menge aller Eigenzustände von eine vollständige Basis für den Hilbertraum bilden. Mit anderen Worten: Jeder Zustand, insbesondere , lässt sich als gewichtete (normierte) Summe dieser Eigenzustände von schreiben: