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.
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.
L'état du produit de la matrice est appelé MPS et est représenté comme le montre la figure ci-dessous [1].
Chaque cercle noir est appelé un "site", et s'il s'agit d'un système à N qubits, N sites seront créés.
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.
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.
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.
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.
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).
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.
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.
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.
[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