Conception quantique TensorFlow

TensorFlow Quantum (TFQ) est conçu pour répondre aux problèmes d'apprentissage automatique quantique de l'ère NISQ. Il apporte des primitives d'informatique quantique, comme la construction de circuits quantiques, à l'écosystème TensorFlow. Les modèles et les opérations créés avec TensorFlow utilisent ces primitives pour créer de puissants systèmes hybrides quantiques-classiques.

Grâce à TFQ, les chercheurs peuvent construire un graphique TensorFlow à l'aide d'un ensemble de données quantiques, d'un modèle quantique et de paramètres de contrôle classiques. Ceux-ci sont tous représentés sous forme de tenseurs dans un seul graphe informatique. Le résultat des mesures quantiques, conduisant à des événements probabilistes classiques, est obtenu par les opérations TensorFlow. La formation se fait avec l'API Keras standard. Le module tfq.datasets permet aux chercheurs d’expérimenter de nouveaux ensembles de données quantiques intéressants.

Cirque

Cirq est un framework de programmation quantique de Google. Il fournit toutes les opérations de base (telles que les qubits, les portes, les circuits et les mesures) pour créer, modifier et invoquer des circuits quantiques sur un ordinateur quantique ou un ordinateur quantique simulé. TensorFlow Quantum utilise ces primitives Cirq pour étendre TensorFlow pour le calcul par lots, la création de modèles et le calcul de gradient. Pour être efficace avec TensorFlow Quantum, c'est une bonne idée d'être efficace avec Cirq.

Primitives TensorFlow Quantum

TensorFlow Quantum implémente les composants nécessaires pour intégrer TensorFlow au matériel informatique quantique. À cette fin, TFQ introduit deux primitives de type de données :

  • Circuit quantique : cela représente les circuits quantiques définis par Cirq ( cirq.Circuit ) dans TensorFlow. Créez des lots de circuits de différentes tailles, similaires à des lots de différents points de données à valeur réelle.
  • Somme de Pauli : Représente des combinaisons linéaires de produits tensoriels d'opérateurs de Pauli définis dans Cirq ( cirq.PauliSum ). Comme pour les circuits, créez des lots d'opérateurs de taille variable.

Opérations fondamentales

À l'aide des primitives de circuit quantique dans un tf.Tensor , TensorFlow Quantum implémente des opérations qui traitent ces circuits et produisent des sorties significatives.

Les opérations TensorFlow sont écrites en C++ optimisé. Ces opérations échantillonnent des circuits, calculent les valeurs attendues et génèrent l'état produit par les circuits donnés. L'écriture d'opérations flexibles et performantes présente certains défis :

  1. Les circuits ne sont pas de la même taille. Pour les circuits simulés, vous ne pouvez pas créer d'opérations statiques (comme tf.matmul ou tf.add ) puis remplacer des nombres différents pour des circuits de différentes tailles. Ces opérations doivent autoriser des tailles dynamiques que le graphique de calcul TensorFlow de taille statique ne permet pas.
  2. Les données quantiques peuvent induire une structure de circuit complètement différente. C'est une autre raison de prendre en charge les tailles dynamiques dans les opérations TFQ. Les données quantiques peuvent représenter un changement structurel de l'état quantique sous-jacent, représenté par des modifications du circuit d'origine. Étant donné que de nouveaux points de données sont échangés au moment de l'exécution, le graphique de calcul TensorFlow ne peut pas être modifié une fois créé. La prise en charge de ces différentes structures est donc requise.
  3. cirq.Circuits sont similaires aux graphiques de calcul dans la mesure où ils constituent une série d'opérations et certaines peuvent contenir des symboles/espaces réservés. Il est important de rendre cela aussi compatible que possible avec TensorFlow.

Pour des raisons de performances, Eigen (la bibliothèque C++ utilisée dans de nombreuses opérations TensorFlow) n'est pas bien adapté à la simulation de circuits quantiques. Au lieu de cela, les simulateurs de circuits utilisés dans l’ expérience quantique au-delà du classique sont utilisés comme vérificateurs et étendus comme base des opérations TFQ (tous écrits avec les instructions AVX2 et SSE). Des opérations avec des signatures fonctionnelles identiques ont été créées et utilisent un ordinateur quantique physique. Passer d’un ordinateur quantique simulé à un ordinateur physique est aussi simple que de modifier une seule ligne de code. Ces opérations sont situées dans le circuit_execution_ops.py .

Couches

Les couches TensorFlow Quantum exposent l'échantillonnage, les attentes et le calcul d'état aux développeurs à l'aide de l'interface tf.keras.layers.Layer . Il est pratique de créer une couche de circuit pour les paramètres de contrôle classiques ou pour les opérations de lecture. De plus, vous pouvez créer une couche avec un degré élevé de complexité prenant en charge le circuit par lots, la valeur des paramètres de contrôle par lots et effectuer des opérations de lecture par lots. Voir tfq.layers.Sample pour un exemple.

Différenciateurs

Contrairement à de nombreuses opérations TensorFlow, les observables dans les circuits quantiques n'ont pas de formules de gradients relativement faciles à calculer. En effet, un ordinateur classique ne peut lire que des échantillons provenant des circuits exécutés sur un ordinateur quantique.

Pour résoudre ce problème, le module tfq.differentiators propose plusieurs techniques de différenciation standards. Les utilisateurs peuvent également définir leur propre méthode pour calculer les gradients, à la fois dans le cadre du « monde réel » du calcul des attentes basé sur un échantillon et dans le monde analytique exact. Les méthodes telles que les différences finies sont souvent les plus rapides (temps d'horloge murale) dans un environnement analytique/exact. Bien que plus lentes (horloge murale), les méthodes plus pratiques telles que le changement de paramètres ou les méthodes stochastiques sont souvent plus efficaces. Un tfq.differentiators.Differentiator est instancié et attaché à une opération existante avec generate_differentiable_op , ou transmis au constructeur de tfq.layers.Expectation ou tfq.layers.SampledExpectation . Pour implémenter un différenciateur personnalisé, héritez de la classe tfq.differentiators.Differentiator . Pour définir une opération de gradient pour l'échantillonnage ou le calcul de vecteur d'état, utilisez tf.custom_gradient .

Ensembles de données

À mesure que le domaine de l’informatique quantique se développe, davantage de données quantiques et de combinaisons de modèles apparaîtront, ce qui rendra les comparaisons structurées plus difficiles. Le module tfq.datasets est utilisé comme source de données pour les tâches d'apprentissage automatique quantique. Il garantit des comparaisons structurées pour le modèle et les performances.

On espère qu'avec d'importantes contributions de la communauté, le module tfq.datasets se développera pour permettre une recherche plus transparente et reproductible. Des problèmes soigneusement sélectionnés dans les domaines suivants : contrôle quantique, simulation fermionique, classification proche des transitions de phase, détection quantique, etc. sont tous d'excellents candidats à ajouter à tfq.datasets . Pour proposer un nouvel ensemble de données, ouvrez un ticket GitHub .