[PYTHON] Machine learning d'inspiration quantique avec des réseaux de tenseurs

introduction

Cette fois, je présenterai l'apprentissage automatique inspiré des quantiques, qui est devenu un peu chaud ces dernières années. Pour être plus précis, «l'inspiration quantique» est ici «inspirée des techniques utilisées pour simuler le plus efficacement possible les systèmes quantiques dans les calculs classiques». Plus précisément, il s'agit d'un réseau tenseur.

Contexte

Il existe une tendance de longue date à utiliser des réseaux de tenseurs pour simuler des systèmes quantiques à l'aide de systèmes classiques. Calculez efficacement l'état d'un système quantique multi-corps en utilisant l'état du produit matriciel [1], simulez efficacement le calcul quantique de porte avec une combinaison de graphe non dirigé et de réduction de réseau de tenseurs [2], etc. ..

Comme le montrent ces méthodes, en utilisant le réseau tensoriel, l'espace de très grande dimension du système quantique peut être traité par calcul classique, bien qu'il ne soit qu'approximatif. Être de grande dimension conduit à une expressivité élevée dans l'apprentissage automatique.

L'application de cette fonctionnalité non seulement à la simulation de systèmes quantiques, mais également à des problèmes d'apprentissage automatique classiques est l '«apprentissage automatique inspiré des quantiques» présenté ici.

État du produit Matrix (avis)

L'état du produit de la matrice est appelé MPS et est représenté comme le montre la figure ci-dessous [1].

image.png

Chaque cercle noir est appelé un "site", et s'il s'agit d'un système à N qubits, N sites seront créés. \sigma_iEst"physical index"と呼ばれ、qubitの場合Est0\ (|0\rangle) or 1\ (|1\rangle)を指します。各siteEst通常の2次元行列にphysical indexの次元を加えた3次元行列(tenseur)Je pense.

Vous pouvez également imaginer que chaque site possède une matrice bidimensionnelle correspondant à l'indice physique = 0 et une matrice bidimensionnelle correspondant à l'indice physique = 1. Si $ \ sigma_i = 0 $ pour tout $ i $, alors le produit des matrices bidimensionnelles correspondant à l'indice physique = 0 de tous les sites peut être calculé, et le résultat est $ dans l'état quantique d'origine. | 00 ... 0> $ coefficient.

Comment faire du machine learning

Introduit sur la base d'articles typiques [3] et [4] traitant des problèmes de classification par apprentissage supervisé. Le débit global est indiqué sur la figure.

スクリーンショット 2020-10-20 12.04.03.png

Tout d'abord, encodez les données d'entrée $ x $ dans $ \ sigma_i \ (i \ in 0, ..., n-1) $ dans le diagramme d'état du produit de la matrice.

Prend une réduction de tenseur entre les données encodées et le MPS. De plus, les bords entre les sites MPS sont réduits, mais en l'état, une seule valeur scalaire peut être obtenue, elle ne peut donc pas être utilisée pour la classification. Par conséquent, MPS a un "index d'étiquette" à l'avance pour sortir la valeur correspondant à la probabilité que $ x $ appartienne à chaque classe. L'index d'étiquette doit être attaché à un site existant ou à un site nouvellement ajouté pour conserver l'index d'étiquette. De cette façon, vous pouvez entrer la valeur dans la fonction de perte car le calcul de la réduction de toutes les arêtes de $ \ sigma_i $ et MPS laisse un tenseur avec le même nombre de classes et d'éléments discriminants.

Mettez à jour chaque élément de MPS afin que la sortie de la fonction de perte devienne plus petite pendant l'entraînement. Il existe deux principales politiques de renouvellement. L'une est la méthode adoptée dans [3], qui est une application de la méthode conventionnelle appelée DMRG. Répétez tout en balayant la mise à jour par optimisation locale avec seulement deux sites adjacents comme variables. L'autre est adopté dans [4] et met à jour tous les éléments de MPS en utilisant la méthode de rétropropagation d'erreur.

La première méthode a l'avantage d'ajuster dynamiquement la dimension excédentaire à l'aide de SVD lors de la mise à jour. D'autre part, cette dernière méthode est compatible avec le calcul par le DL existant et le cadre de différenciation automatique, et a probablement une grande liberté dans la définition de la structure du réseau et de la fonction de perte.

la mise en oeuvre

Cette fois, nous avons implémenté l'apprentissage MNIST par la méthode de propagation de retour d'erreur, qui a été effectuée dans [4]. Pour l'implémentation, nous avons utilisé un module python appelé Tensornetwork développé par les auteurs.

Tensornetwork est littéralement une bibliothèque adaptée au calcul de réseaux de tenseurs. Vous pouvez sélectionner "tensorflow" et "jax" comme backend. Si vous sélectionnez "tensorflow", vous pouvez étudier en combinaison avec le framework Tensorflow. Il est pratique de pouvoir utiliser la fonction de différenciation automatique de Tensorflow et les fonctions intégrées, mais d'un autre côté, lors de son écriture, la majeure partie est occupée par des couches personnalisées, il est donc difficile d'écrire en fonction du framework et de la surcharge du framework lui-même. Il y a aussi des aspects préoccupants.

Donc, cette fois, nous utilisons le backend jax. En fait, l'étude [5] qui suit [4] semble utiliser le backend jax. jax est également un framework python, à peu près comme numpy, qui prend en charge les opérations parallèles avec différenciation automatique, JIT et vectorisation. Cela pourrait être une bonne option si vous souhaitez simplement utiliser simplement l'auto-différenciation rapide de Tensorflow (je pense que Julia's Flux est dans une position similaire, et il y a une certaine demande pour cela).

Mon implémentation est légèrement différente de [4] dans les points suivants.

  1. Regroupement moyen 2x2 des données d'image MNIST.
  2. L'optimiseur est une méthode de descente de gradient simple au lieu de l'adam utilisé dans [4](le taux d'apprentissage et le nombre d'époques sont également ajustés en conséquence).

Concernant 1., il était difficile d'apprendre avec la taille d'origine. Lors de la réduction de la contraction, le nombre de matrices est multiplié par le nombre de pixels, et à mesure que le nombre de matrices augmente, la valeur de sortie a tendance à diverger ou à converger vers 0, et le gradient a tendance à disparaître, ce qui est une difficulté pratique. il y a. Je pense que cela dépend de l'ajustement, mais cette fois j'ai fait un compromis. Dans [5], les auteurs mettent également en commun (peut-être parce que la structure du réseau et les tâches sont quelque peu différentes).

  1. est de simplifier la mise en œuvre de l'exemple. Il existe également un historique selon lequel la méthode de descente de gradient n'était pas particulièrement inférieure au résultat d'essayer avec Adam Optimizer lors de l'écriture avec le backend tensorflow à portée de main.

J'ai mis le code d'implémentation ci-dessous. https://github.com/ryuNagai/MPS/blob/master/TN_ML/MNIST_ML_jax.ipynb

Le processus d'apprentissage est comme ça. image.png

Enfin, la précision du train = 0,962 et la précision du test = 0,952. Dans [4], la précision du train atteignait environ 0,98 à environ 50 époques, ce qui n'était pas suffisant pour la reproduire. Dans les coulisses, j'ai essayé un peu de voir si le résultat de [4] pouvait être reproduit, mais c'était difficile, donc je suis content de cette valeur.

Résumé

Implémentation d'un apprentissage automatique inspiré des quantiques à l'aide d'un nouveau réseau de tenseurs (potentiellement). Dans la situation actuelle où il existe de nombreuses restrictions sur le matériel des ordinateurs quantiques, cette méthode peut être exécutée sur un ordinateur classique, elle peut donc gérer de gros problèmes. Je pense qu'il appartient encore à de futures recherches de découvrir des modèles plus utiles que les modèles d'apprentissage automatique conventionnels utilisant cette méthode.

De plus, s'il est possible que cela puisse être vérifié, s'il est possible de voir ou indirectement en utilisant une telle méthode, si l'avantage par rapport à l'apprentissage automatique classique réside ou non dans l'apprentissage automatique utilisant l'espace quantique. Je pense que c'est bien.

Les références

[1] https://arxiv.org/abs/1008.3477 [2] https://arxiv.org/abs/1805.01450 [3] https://papers.nips.cc/paper/6211-supervised-learning-with-tensor-networks [4] https://arxiv.org/abs/1906.06329 [5] https://arxiv.org/abs/2006.02516

Recommended Posts

Machine learning d'inspiration quantique avec des réseaux de tenseurs
L'apprentissage automatique appris avec Pokemon
Apprentissage automatique avec Python! Préparation
Démineur d'apprentissage automatique avec PyTorch
Commencer avec l'apprentissage automatique Python
Essayez le machine learning à la légère avec Kaggle
J'ai essayé l'apprentissage automatique avec liblinear
Apprentissage automatique par python (1) Classification générale
Apprentissage automatique
SVM essayant l'apprentissage automatique avec scikit-learn
Démarrez avec l'apprentissage automatique avec SageMaker
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Prédire la demande de puissance avec l'apprentissage automatique, partie 2
Amplifiez les images pour l'apprentissage automatique avec Python
Sklearn de données déséquilibrées avec apprentissage automatique k-NN
Une histoire sur l'apprentissage automatique avec Kyasuket
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
Construction d'environnement AI / Machine Learning avec Python
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Apprentissage automatique à partir de Python Personal Memorandum Part2
Apprentissage automatique à partir de Python Personal Memorandum Part1
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
Apprentissage automatique à partir de zéro (apprentissage automatique appris avec Kaggle)
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Résumé du didacticiel d'apprentissage automatique
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
Machine learning facile avec AutoAI (partie 4) Jupyter Notebook
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
Points clés de «Machine learning avec Azure ML Studio»
Apprendre Python avec ChemTHEATER 03
"Orienté objet" appris avec python
Apprentissage automatique sur le surapprentissage
Apprendre Python avec ChemTHEATER 05-1
Apprenez le filtrage collaboratif avec les supports Coursera Machine Learning
Apprentissage automatique ⑤ Résumé AdaBoost
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
Régression logistique d'apprentissage automatique
Apprentissage automatique facile avec scikit-learn et flask ✕ Application Web
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Machine de vecteur de support d'apprentissage automatique
Étudier l'apprentissage automatique ~ matplotlib ~
Sentons-nous comme un chercheur en matériaux avec l'apprentissage automatique
Apprendre Python avec ChemTHEATER 02
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Bibliothèque d'apprentissage automatique dlib
Apprendre Python avec ChemTHEATER 01
Apprentissage automatique (TensorFlow) + Lotto 6
Résumé du site pour apprendre l'apprentissage automatique avec une vidéo en anglais
Apprenez en quelque sorte le machine learning
Résumé du flux de base de l'apprentissage automatique avec Python
Bilan du premier défi du machine learning avec Keras
L'apprentissage automatique pratique avec Scikit-Learn et TensorFlow-TensorFlow a abandonné -
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique