Cette page a été traduite par l'API Cloud Translation.
Switch to English

Conception TensorFlow Quantum

TensorFlow Quantum (TFQ) est conçu pour les problèmes de l'apprentissage automatique quantique de l'ère NISQ. Il apporte des primitives de calcul quantique - comme la construction de circuits quantiques - à l'écosystème TensorFlow. Les modèles et les 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 graphe 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 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.

Cirq

Cirq est un cadre 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 construction 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 : Ceci 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 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 des circuits, calculent les valeurs d'attente et fournissent l'état produit par les circuits donnés. La rédaction 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 substituer des nombres différents pour des circuits de tailles différentes. Ces opérations doivent permettre des tailles dynamiques que le graphe 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 qui est représenté par des modifications du circuit d'origine. Étant donné que les nouveaux points de données sont échangés entre eux et en dehors au moment de l'exécution, le graphe de calcul TensorFlow ne peut pas être modifié après sa création, la prise en charge de ces différentes structures est donc requise.
  3. cirq.Circuits Les cirq.Circuits sont similaires aux graphes de calcul en ce qu'ils sont une série d'opérations - et 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 de suprématie quantique sont utilisés comme vérificateurs et étendus comme base des opérations TFQ (tous écrits avec des instructions AVX2 et SSE). Des opérations avec des signatures fonctionnelles identiques ont été créées qui utilisent un ordinateur quantique physique. Passer d'un ordinateur quantique simulé à un ordinateur physique est aussi simple que de changer une seule ligne de code. Ces opérations se trouvent dans le circuit_execution_ops.py .

Couches

Les couches TensorFlow Quantum présentent 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. En outre, vous pouvez créer une couche avec un haut degré de complexité prenant en charge le circuit de traitement par lots, la valeur des paramètres de contrôle des 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 propose 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 un échantillon et dans le monde exact analytique. Les méthodes telles que la différence finie sont souvent les plus rapides (heure de l'horloge murale) dans un environnement analytique / exact. Bien que plus lentes (heure de l'horloge murale), des méthodes plus pratiques comme le décalage de paramètre 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é, tfq.differentiators.Differentiator 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 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 du modèle et des performances.

On espère qu'avec de grandes 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: 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 aux tfq.datasets de données tfq.datasets . Pour proposer un nouvel ensemble de données, ouvrez un problème GitHub .