Implémentation au niveau de la porte de l'inversion des valeurs propres dans HHL

Dec 28 2020

J'essaie de comprendre comment fonctionne l'implémentation au niveau de la porte de l'étape d'inversion des valeurs propres dans l'algorithme HHL.

Je suis cette référence , où il est indiqué (Lemme 4) que cela peut être accompli par l'utilisation de rotations contrôlées:

$$ 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) $$

$\widetilde{\theta}$ est la représentation de précision finie sur n bits de l'angle $\theta$, et $\sigma_y$ la matrice Y Pauli.

Ma question est, comment sont les angles de rotation $\widetilde{\theta}$ pour l'unité $U_\theta$ calculé / appliqué sans connaissance a priori des valeurs propres $\lambda_j$ de la matrice système $A$?

Je comprends que le vecteur d'état $|\widetilde{\theta} \rangle$ est obtenu à l'étape précédente de l'algorithme en extrayant les valeurs propres $|\lambda_j \rangle$ de $A$en utilisant QPE (puis en appliquant une fonction inverse + arcsin comme décrit ici ), mais je ne sais pas comment ces angles sont également appliqués en tant que paramètres pour les portes à rotation contrôlée (paramètre d'exposant dans$U_\theta$.)

Pour info, j'ai vu cet autre article où il est dit: "Vous ... ... avez (au moins une bonne approximation de) vos valeurs propres enregistrées sur un registre. Si vous contrôlez ce registre, vous pouvez l'utiliser pour décider l'angle de rotation pour chaque vecteur propre. "

Ma question est donc de savoir comment "l'utilisez-vous [le registre contenant$|\widetilde{\theta} \rangle$] pour décider de l'angle de rotation [$\widetilde{\theta}$ dans le $\exp$ fonction de $U_\theta$] "?

Merci!

Réponses

1 Alex Dec 28 2020 at 18:25

Utiliser le registre pour décider de l'angle de rotation signifie ce qui suit: vous avez un registre $|\tilde{\theta}\rangle$ (composé de potentiellement plus d'un qubit) et vous appliquez des rotations d'un autre registre contrôlé sur la valeur des qubits de $|\tilde{\theta}\rangle$. Différentes rotations que vous appliquez entraînent l'implémentation de différentes fonctions sur vos qubits ancilla. Mais vous le saviez peut-être déjà.

La question de savoir quelles rotations effectuer pour appliquer une fonction spécifique est beaucoup plus compliquée et je ne connais aucune solution générale. Pour une fois, Qiskit a sa propre implémentation de HHL, mais je ne sais pas jusqu'à quel point c'est général. Il existe cependant d'autres exemples dans lesquels il est "facile" d'implémenter, par exemple, la fonction d'inversion des valeurs propres requise pour HHL. Dans cet article , les auteurs implémentent une approximation du sous-programme d'inversion des valeurs propres (le code dans Quilpeut être trouvé dans le référentiel GitLab associé) qui est exacte dans le cas des valeurs propres qui sont des puissances de 2. La raison pour laquelle il est exact pour les puissances de 2 est que dans ce cas l'inversion peut être écrite comme une combinaison de permutations de bits, donc le sous-programme d'inversion des valeurs propres est une collection des portes SWAP contrôlées (une représentation graphique du circuit est sur la figure 3 de cet article ). Mais, comme je l'ai déjà dit, je ne suis pas au courant des moyens généraux d'implémenter de grandes classes de fonctions, jusqu'à présent.