Conception quantique TensorFlow

TensorFlow Quantum (TFQ) est conçu pour les 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 opérations construits avec TensorFlow utilisent ces primitives pour créer de puissants systèmes hybrides quantiques-classiques.

À l'aide de 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 de calcul. Le résultat des mesures quantiques, conduisant à des événements probabilistes classiques, est obtenu par TensorFlow ops. 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.

Cirq

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 taille variable, 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

En utilisant les 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 à partir de circuits, calculent les valeurs d'attente 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 n'ont pas 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 substituer des nombres différents pour des circuits de tailles différentes. Ces opérations doivent autoriser des tailles dynamiques que le graphe de calcul TensorFlow de taille statique n'autorise 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 qui est 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é après sa création. La prise en charge de ces structures variables est donc nécessaire.
  3. cirq.Circuits Les circuits sont similaires aux graphes de calcul en ce sens qu'ils sont une série d'opérations et que certains 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ée à la simulation de circuits quantiques. Au lieu de cela, les simulateurs de circuit 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 qui utilisent un ordinateur quantique physique. Basculer entre un ordinateur quantique simulé et physique est aussi simple que de changer une seule ligne de code. Ces opérations sont situées dans 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 haut degré 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 des circuits exécutés sur un ordinateur quantique.

Pour résoudre ce problème, le module tfq.differentiators fournit plusieurs techniques de différenciation standard. 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 des échantillons et dans le monde analytique exact. Les méthodes telles que la différence finie sont souvent les plus rapides (temps d'horloge) dans un environnement analytique/exact. Bien que plus lentes (horloge murale), des méthodes plus pratiques comme le décalage de paramètres ou les méthodes stochastiques sont souvent plus efficaces. Un tfq.differentiators.Differentiator est instancié et attaché à un op existant avec generate_differentiable_op , ou passé 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 .

Jeux 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, rendant la comparaison structurée plus difficile. Le module tfq.datasets est utilisé comme source de données pour les tâches d'apprentissage automatique quantique. Il assure 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. Les problèmes soigneusement sélectionnés dans : le contrôle quantique, la simulation fermionique, la classification près des transitions de phase, la détection quantique, etc. sont tous d'excellents candidats pour être ajoutés à tfq.datasets . Pour proposer un nouveau jeu de données, ouvrez un problème GitHub .