Implementierung der Eigenwertinversion auf Gate-Ebene in HHL

Dec 28 2020

Ich versuche zu verstehen, wie die Implementierung des Eigenwertinversionsschritts auf Gate-Ebene im HHL-Algorithmus funktioniert.

Ich folge dieser Referenz , wo angegeben wird (Lemma 4), dass dies durch die Verwendung kontrollierter Rotationen erreicht werden kann:

$$ U_\theta: |\widetilde{\theta} \rangle |0 \rangle \rightarrow |\widetilde{\theta} \rangle \left(\cos \widetilde{\theta} |0\rangle + sin \widetilde{\theta} |1 \rangle \right ) $$

$$U_\theta = \sum_{\widetilde{\theta} \in \{0,1\}^n} |\widetilde{\theta}\rangle \langle \widetilde{\theta}| \otimes \exp \left(-i \widetilde{\theta} \sigma_y \right) $$

wo $\widetilde{\theta}$ ist die n-Bit-Darstellung des Winkels mit endlicher Genauigkeit $\theta$, und $\sigma_y$ die Y Pauli Matrix.

Meine Frage ist, wie sind die Drehwinkel $\widetilde{\theta}$ für die Einheit $U_\theta$ berechnet / angewendet ohne a priori Kenntnis der Eigenwerte $\lambda_j$ der Systemmatrix $A$?

Ich verstehe, dass der Zustandsvektor $|\widetilde{\theta} \rangle$ wird im vorherigen Schritt des Algorithmus durch Extrahieren der Eigenwerte erhalten $|\lambda_j \rangle$ von $A$unter Verwendung von QPE (und dann Anwenden einer inversen + Arcsin-Funktion wie hier beschrieben ), aber ich bin nicht sicher, wie diese Winkel auch als Parameter für die Tore mit kontrollierter Rotation angewendet werden (Exponentenparameter in$U_\theta$.)

Zu Ihrer Information, ich habe diesen anderen Beitrag gesehen, in dem es heißt: "Sie ... ... haben (zumindest eine gute Annäherung an) Ihre Eigenwerte in einem Register aufgezeichnet. Wenn Sie dieses Register ausschalten, können Sie es zur Entscheidung verwenden der Drehwinkel für jeden Eigenvektor. "

Meine Frage ist also, wie Sie es verwenden [das Register enthält$|\widetilde{\theta} \rangle$], um den Drehwinkel zu bestimmen [$\widetilde{\theta}$ in dem $\exp$ Die Funktion von $U_\theta$] "?

Vielen Dank!

Antworten

1 Alex Dec 28 2020 at 18:25

Die Verwendung des Registers zur Bestimmung des Drehwinkels bedeutet Folgendes: Sie haben ein Register $|\tilde{\theta}\rangle$ (bestehend aus möglicherweise mehr als einem Qubit) und Sie wenden Rotationen eines anderen Registers an, das auf den Wert der Qubits von gesteuert wird $|\tilde{\theta}\rangle$. Unterschiedliche Rotationen, die Sie anwenden, führen dazu, dass unterschiedliche Funktionen auf Ihren Ancilla-Qubits implementiert werden. Aber das war dir vielleicht schon bekannt.

Die Frage, welche Rotationen zum Anwenden einer bestimmten Funktion durchzuführen sind, ist viel komplizierter, und mir ist keine allgemeine Lösung bekannt. Ausnahmsweise Qiskit hat seine eigene Implementierung der HHL, aber ich weiß nicht , bis zu welchem Punkt es allgemein üblich ist. Es gibt jedoch andere Beispiele, in denen es "einfach" ist, beispielsweise die für HHL erforderliche Eigenwertinversionsfunktion zu implementieren. In diesem Artikel implementieren die Autoren eine Annäherung an die Eigenwertinversions-Subroutine (der Code in Quilbefindet sich im zugehörigen GitLab-Repository) das ist genau im Fall von Eigenwerten, die Potenzen von 2 sind. Der Grund, warum es genau für Potenzen von 2 ist, ist, dass in diesem Fall die Inversion als eine Kombination von Bit-Swaps geschrieben werden kann, so dass das Unterprogramm zur Eigenwertinversion eine Sammlung ist von gesteuerten SWAP-Gattern (eine bildliche Darstellung der Schaltung ist in Fig. 3 in diesem Papier ). Wie ich bereits sagte, sind mir bisher keine allgemeinen Möglichkeiten zur Implementierung großer Funktionsklassen bekannt.