Diagonalisation quantique de Krylov
Dans cette leçon sur la diagonalisation quantique de Krylov (DQK), nous répondrons aux questions suivantes :
- Qu'est-ce que la méthode de Krylov, en général ?
- Pourquoi la méthode de Krylov fonctionne-t-elle et dans quelles conditions ?
- Quel rôle joue l'informatique quantique dans ce contexte ?
La partie quantique des calculs est largement basée sur les travaux de la Réf. [1].
La vidéo ci-dessous donne un aperçu des méthodes de Krylov en informatique classique, en motive l'utilisation, et explique comment l'informatique quantique peut s'y intégrer. Le texte qui suit propose plus de détails et implémente une méthode de Krylov à la fois de façon classique et sur un ordinateur quantique.
1. Introduction aux méthodes de Krylov
Une méthode de sous-espace de Krylov peut désigner l'une des nombreuses méthodes construites autour de ce qu'on appelle le sous-espace de Krylov. Un tour d'horizon complet de ces méthodes dépasse le cadre de cette leçon, mais les Réf. [2-4] offrent toutes un contexte bien plus approfondi. Ici, nous nous concentrerons sur ce qu'est un sous-espace de Krylov, comment et pourquoi il est utile pour résoudre des problèmes aux valeurs propres, et enfin comment il peut être implémenté sur un ordinateur quantique.
Définition : Étant donné une matrice symétrique et semi-définie positive , le sous-espace de Krylov d'ordre est l'espace engendré par les vecteurs obtenus en multipliant des puissances croissantes de la matrice , jusqu'à , par un vecteur de référence .
Bien que les vecteurs ci-dessus engendrent ce qu'on appelle un sous-espace de Krylov, rien ne garantit qu'ils seront orthogonaux. On utilise souvent un processus d'orthonormalisation itératif similaire à l'orthogonalisation de Gram-Schmidt. Ici, le processus est légèrement différent, car chaque nouveau vecteur est rendu orthogonal aux autres au fur et à mesure qu'il est généré. Dans ce contexte, on parle d'itération d'Arnoldi. En partant du vecteur initial , on génère le vecteur suivant , puis on s'assure que ce second vecteur est orthogonal au premier en lui soustrayant sa projection sur . C'est-à-dire :
On vérifie facilement que , puisque
On fait de même pour le vecteur suivant, en s'assurant qu'il est orthogonal aux deux précédents :
Si on répète ce processus pour les vecteurs, on obtient une base orthonormée complète d'un sous-espace de Krylov. Remarque : le processus d'orthogonalisation donnera zéro dès que , car vecteurs orthogonaux engendrent nécessairement l'espace complet. Le processus donnera aussi zéro si l'un des vecteurs est un vecteur propre de , car tous les vecteurs suivants seront des multiples de ce vecteur.
1.1 Un exemple simple : Krylov à la main
Parcourons étape par étape la génération d'un sous-espace de Krylov sur une matrice délibérément petite, afin de bien comprendre le processus. On commence avec une matrice initiale qui nous intéresse :
Pour ce petit exemple, on peut déterminer les vecteurs propres et les valeurs propres facilement, même à la main. Voici la solution numérique.
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime scipy sympy
# One might use linalg.eigh here, but later matrices may not be Hermitian. So we use linalg.eig in this lesson.
import numpy as np
A = np.array([[4, -1, 0], [-1, 4, -1], [0, -1, 4]])
eigenvalues, eigenvectors = np.linalg.eig(A)
print("The eigenvalues are ", eigenvalues)
print("The eigenvectors are ", eigenvectors)
The eigenvalues are [2.58578644 4. 5.41421356]
The eigenvectors are [[ 5.00000000e-01 -7.07106781e-01 5.00000000e-01]
[ 7.07106781e-01 1.37464400e-16 -7.07106781e-01]
[ 5.00000000e-01 7.07106781e-01 5.00000000e-01]]
On les note ici pour comparaison ultérieure :
Nous souhaitons étudier comment ce processus fonctionne (ou échoue) à mesure qu'on augmente la dimension de notre sous-espace de Krylov, . À cet effet, on va appliquer ce processus :
- Générer un sous-espace de l'espace vectoriel complet en partant d'un vecteur choisi aléatoirement (appelé s'il est déjà normalisé, comme ci-dessus).
- Projeter la matrice complète sur ce sous-espace, et trouver les valeurs propres de la matrice projetée .
- Augmenter la taille du sous-espace en générant plus de vecteurs, en veillant à ce qu'ils soient orthonormés, via un processus similaire à l'orthogonalisation de Gram-Schmidt.
- Projeter sur le sous-espace élargi et trouver les valeurs propres de la matrice résultante .
- Répéter jusqu'à convergence des valeurs propres (ou, dans ce cas jouet, jusqu'à avoir généré des vecteurs qui couvrent l'espace vectoriel complet de la matrice originale ).
Une implémentation normale de la méthode de Krylov n'aurait pas besoin de résoudre le problème aux valeurs propres pour la matrice projetée à chaque sous-espace de Krylov lors de sa construction. On pourrait construire le sous-espace de la dimension souhaitée, projeter la matrice sur ce sous-espace, et diagonaliser la matrice projetée. Projeter et diagonaliser à chaque dimension de sous-espace n'est fait ici que pour vérifier la convergence.
Dimension :
On choisit un vecteur aléatoire, par exemple :
S'il n'est pas déjà normalisé, on le normalise.
On projette maintenant notre matrice sur le sous-espace de ce seul vecteur :
C'est notre projection de la matrice sur notre sous-espace de Krylov lorsqu'il ne contient qu'un seul vecteur, . La valeur propre de cette matrice est trivialement 4. On peut voir cela comme notre estimation d'ordre zéro des valeurs propres (ici une seule) de . Bien que ce soit une mauvaise estimation, elle est du bon ordre de grandeur.
Dimension :
On génère maintenant le vecteur suivant dans notre sous-espace en appliquant au vecteur précédent :
On soustrait ensuite la projection de ce vecteur sur notre vecteur précédent pour garantir l'orthogonalité.
S'il n'est pas déjà normalisé, on le normalise. Dans ce cas, le vecteur était déjà normalisé, donc
On projette maintenant notre matrice A sur le sous-espace de ces deux vecteurs :
Il reste tout de même à déterminer les valeurs propres de cette matrice. Mais cette matrice est légèrement plus petite que la matrice complète. Pour des problèmes impliquant de très grandes matrices, travailler dans ce sous-espace plus petit peut être très avantageux.
Bien que ce ne soit toujours pas une bonne estimation, c'est mieux que l'estimation d'ordre zéro. On va poursuivre pour une itération supplémentaire, afin de s'assurer que le processus est bien compris. Cela dit, cela va à l'encontre de l'intérêt de la méthode, puisqu'on va finir par diagonaliser une matrice 3x3 à l'itération suivante, sans gain de temps ni de puissance de calcul.
Dimension :
On génère maintenant le vecteur suivant dans notre sous-espace en appliquant A au vecteur précédent :