Aller au contenu principal

États de référence

Dans cette leçon, nous allons explorer comment nous pouvons initialiser notre système avec un état de référence pour aider notre algorithme variationnel à converger plus rapidement. Nous apprendrons d'abord à construire un état de référence manuellement, puis à explorer plusieurs options standard qui peuvent être utilisées dans un algorithme variationnel.

Diagramme des options pour les états de référence, y compris l'état par défaut, spécifique à l'application, et quantique.

État par défaut

Un état de référence désigne le point de départ initial et fixe pour notre problème. Pour préparer un état de référence, nous devons appliquer l'unitaire non paramétrisé approprié URU_R au début de notre circuit quantique, de sorte que ρ=UR0|\rho\rangle = U_R |0\rangle. Si tu disposes d'une estimation éclairée ou d'un point de données d'une solution optimale existante, l'algorithme variationnel convergera probablement plus vite si tu l'utilises comme point de départ.

L'état de référence le plus simple possible est l'état par défaut, où l'on utilise l'état initial d'un circuit quantique à nn qubits : 0n|0\rangle^{\otimes n}. Pour l'état par défaut, notre opérateur unitaire URIU_R \equiv I. Du fait de sa simplicité, l'état par défaut est un état de référence valide utilisé dans de nombreux scénarios.

État de référence classique

Supposons que tu aies un système à trois qubits et que tu veuilles démarrer dans l'état 001|001\rangle au lieu de l'état par défaut 000|000\rangle. C'est un exemple d'état de référence purement classique, et pour le construire, il suffit d'appliquer une porte X au qubit 00 (en suivant l'ordre des qubits de Qiskit), puisque 001=X0000|001\rangle = X_0 |000\rangle.

Dans ce cas, notre opérateur unitaire est URX0U_R \equiv X_0, ce qui conduit à l'état de référence ρ001|\rho\rangle \equiv |001\rangle.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.x(0)

qc.draw("mpl")

Sortie de la cellule de code précédente

État de référence quantique

Supposons que tu souhaites démarrer avec un état plus complexe impliquant une superposition et/ou une intrication, comme 12(100+111)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

Pour obtenir cet état à partir de 000|000\rangle, une approche consiste à utiliser une porte de Hadamard sur le qubit 00 (H0H_0), une porte CNOT (CX) avec le qubit 00 comme qubit de contrôle et le qubit 11 comme qubit cible (CNOT01CNOT_{01}), et enfin une porte XX appliquée au qubit 22 (X2X_2).

Dans ce scénario, notre opérateur unitaire est URX2CNOT01H0000U_{R} \equiv X_2CNOT_{01}H_0|000\rangle, et notre état de référence est ρ12(100+111)|\rho\rangle \equiv \frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)

qc.draw("mpl")

Sortie de la cellule de code précédente

Construire des états de référence à l'aide de circuits modèles

Nous pouvons également utiliser divers circuits modèles, comme TwoLocal qui permet d'exprimer facilement de multiples paramètres réglables et des intrications. Nous couvrirons ces circuits modèles plus en détail dans la prochaine leçon, mais nous pouvons les utiliser pour nos états de référence si nous lions les paramètres :

from qiskit.circuit.library import TwoLocal
from math import pi

reference_circuit = TwoLocal(2, "rx", "cz", entanglement="linear", reps=1)
theta_list = [pi / 2, pi / 3, pi / 3, pi / 2]

reference_circuit = reference_circuit.assign_parameters(theta_list)

reference_circuit.decompose().draw("mpl")

Sortie de la cellule de code précédente

États de référence spécifiques à l'application

Apprentissage automatique quantique

Dans le contexte d'un classificateur quantique variationnel (VQC), les données d'entraînement sont encodées dans un état quantique avec un circuit paramétrisé connu sous le nom de feature map, où chaque valeur de paramètre représente un point de données de l'ensemble d'entraînement. La zz_feature_map est un type de circuit paramétrisé qui peut être utilisé pour passer nos points de données (xx) à cette feature map.

from qiskit.circuit.library import zz_feature_map

data = [0.1, 0.2]

zz_feature_map_reference = zz_feature_map(feature_dimension=2, reps=2)
zz_feature_map_reference = zz_feature_map_reference.assign_parameters(data)
zz_feature_map_reference.decompose().draw("mpl")

Sortie de la cellule de code précédente

Résumé

Avec cette leçon, tu as appris à initialiser ton système en utilisant :

  • L'état de référence par défaut
  • Les états de référence classiques
  • Les états de référence quantiques
  • Les états de référence spécifiques à l'application

Notre charge de travail variationnelle de haut niveau se présente comme suit :

Un diagramme de circuit d'un opérateur unitaire préparant un état de référence.

Tandis que les états de référence sont des points de départ initiaux fixes, nous pouvons utiliser une forme variationnelle pour définir un ansatz afin de représenter une collection d'états paramétrisés que notre algorithme variationnel explorera.