[PYTHON] Quanteninspiriertes maschinelles Lernen mit Tensornetzwerken

Einführung

Dieses Mal werde ich das quanteninspirierte maschinelle Lernen vorstellen, das in den letzten Jahren etwas heiß geworden ist. Genauer gesagt ist die "Quanteninspiration" hier "inspiriert von den Techniken, mit denen Quantensysteme in klassischen Berechnungen so effizient wie möglich simuliert werden". Insbesondere handelt es sich um ein Tensornetzwerk.

Hintergrund

Es gibt einen langjährigen Trend, Tensornetzwerke zur Simulation von Quantensystemen mit klassischen Systemen zu verwenden. Berechnen Sie effizient den Zustand eines Mehrkörper-Quantensystems unter Verwendung des Matrixproduktzustands [1], simulieren Sie effizient die Gate-Quantenberechnung mit einer Kombination aus ungerichteter Graph- und Tensornetzwerkreduktion [2] usw. ..

Wie diese Methoden zeigen, kann unter Verwendung des Tensornetzwerks der sehr hochdimensionale Raum des Quantensystems durch klassische Berechnung behandelt werden, obwohl er nur annähernd ist. Hochdimensional zu sein führt zu einer hohen Ausdruckskraft beim maschinellen Lernen.

Die Anwendung dieses Merkmals nicht nur auf die Simulation von Quantensystemen, sondern auch auf klassische Probleme des maschinellen Lernens ist das hier vorgestellte "quanteninspirierte maschinelle Lernen".

Matrix Produktstatus (Überprüfung)

Der Matrixproduktzustand heißt MPS und wird wie in der folgenden Abbildung dargestellt dargestellt [1].

image.png

Jeder schwarze Kreis wird als "Site" bezeichnet, und wenn es sich um ein N-Qubit-System handelt, werden N Sites erstellt. \sigma_iIst"physical index"と呼ばれ、qubitの場合Ist0\ (|0\rangle) or 1\ (|1\rangle)を指します。各siteIst通常の2次元行列にphysical indexの次元を加えた3次元行列(Tensor)Ich denke.

Sie können sich auch vorstellen, dass jede Site eine zweidimensionale Matrix hat, die dem physischen Index = 0 entspricht, und eine zweidimensionale Matrix, die dem physischen Index = 1 entspricht. Wenn $ \ sigma_i = 0 $ für alle $ i $ ist, kann das Produkt der zweidimensionalen Matrizen berechnet werden, die dem physikalischen Index = 0 aller Stellen entsprechen, und das Ergebnis ist $ im ursprünglichen Quantenzustand. | 00 ... 0> $ Koeffizient.

Wie man maschinelles Lernen macht

Eingeführt auf der Grundlage typischer Arbeiten [3] und [4], die sich mit Klassifizierungsproblemen durch überwachtes Lernen befassen. Der Gesamtfluss ist in der Abbildung dargestellt.

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

Codieren Sie zunächst die Eingabedaten $ x $ in $ \ sigma_i \ (i \ in 0, ..., n-1) $ im Matrixproduktzustandsdiagramm.

Führt eine Tensorreduktion zwischen den codierten Daten und dem MPS durch. Darüber hinaus werden die Kanten zwischen MPS-Standorten reduziert, aber so wie es ist, kann nur ein Skalarwert erhalten werden, so dass er nicht für die Klassifizierung verwendet werden kann. Daher hat MPS im Voraus einen "Label-Index", um den Wert auszugeben, der der Wahrscheinlichkeit entspricht, dass $ x $ zu jeder Klasse gehört. Der Etikettenindex sollte an eine vorhandene Site oder eine neu hinzugefügte Site angehängt werden, um den Etikettenindex beizubehalten. Auf diese Weise können Sie den Wert in die Verlustfunktion eingeben, da bei der Berechnung der Reduzierungen von $ \ sigma_i $ und aller Kanten des MPS ein Tensor mit der gleichen Anzahl von Diskriminanzklassen und -elementen verbleibt.

Aktualisieren Sie jedes Element von MPS so, dass die Ausgabe der Verlustfunktion während des Trainings kleiner wird. Es gibt zwei Haupterneuerungsrichtlinien. Eine ist die in [3] angewandte Methode, die eine Anwendung der herkömmlichen Methode namens DMRG ist. Wiederholen Sie diesen Vorgang, während Sie das Update durch lokale Optimierung mit nur zwei benachbarten Standorten als Variablen abrufen. Die andere wird in [4] übernommen und aktualisiert alle Elemente von MPS mithilfe der Fehler-Backpropagation-Methode.

Die erstere Methode hat den Vorteil, dass die überschüssige Dimension beim Aktualisieren mithilfe von SVD dynamisch gekürzt wird. Andererseits ist die letztere Methode mit der Berechnung durch das vorhandene DL- und automatische Differenzierungsframework kompatibel und hat wahrscheinlich einen hohen Freiheitsgrad bei der Definition der Netzwerkstruktur und der Verlustfunktion.

Implementierung

Dieses Mal haben wir das MNIST-Lernen mit der in [4] durchgeführten Fehlerrückvermehrungsmethode implementiert. Für die Implementierung verwendeten wir ein Python-Modul namens Tensornetwork, das von den Autoren entwickelt wurde.

Tensornetwork ist buchstäblich eine Bibliothek, die zur Berechnung von Tensornetzwerken geeignet ist. Sie können "Tensorflow" und "Jax" als Backend auswählen. Wenn Sie "Tensorflow" auswählen, können Sie in Kombination mit dem Tensorflow-Framework studieren. Es ist praktisch, die automatische Differenzierungsfunktion und die integrierten Funktionen von Tensorflow verwenden zu können. Andererseits wird beim Schreiben das meiste davon von benutzerdefinierten Ebenen belegt, sodass es schwierig ist, entsprechend dem Framework und dem Overhead des Frameworks selbst zu schreiben Es gibt auch Aspekte, die Anlass zur Sorge geben.

Diesmal verwenden wir also das Jax-Backend. Tatsächlich scheint die folgende Studie [5] [4] das Jax-Backend zu verwenden. jax ist auch ein Python-Framework, ungefähr wie numpy, das parallele Operationen mit automatischer Differenzierung, JIT und Vektorisierung unterstützt. Es könnte eine gute Option sein, wenn Sie nur die automatische Hochgeschwindigkeitsdifferenzierung von Tensorflow verwenden möchten (ich denke, Julias Flux usw. befindet sich in einer ähnlichen Position, und es besteht eine gewisse Nachfrage danach).

Meine Implementierung unterscheidet sich geringfügig von [4] in den folgenden Punkten.

  1. 2x2 durchschnittliches Pooling von MNIST-Bilddaten.
  2. Der Optimierer ist eine einfache Gradientenabstiegsmethode anstelle des in [4] verwendeten Adams (die Lernrate und die Anzahl der Epochen werden entsprechend angepasst).

In Bezug auf 1. war es schwierig, mit der Originalgröße zu lernen. Beim Reduzieren des Kontrakts wird die Anzahl der Matrizen mit der Anzahl der Pixel multipliziert, und wenn die Anzahl der Matrizen zunimmt, neigt der Ausgabewert dazu, auseinander zu gehen oder gegen 0 zu konvergieren, und der Gradient neigt dazu, zu verschwinden, was eine praktische Schwierigkeit darstellt. es gibt. Ich denke, es hängt von der Anpassung ab, aber diesmal habe ich einen Kompromiss geschlossen. In [5] bündeln die Autoren ebenfalls (möglicherweise, weil die Netzwerkstruktur und die Aufgaben etwas unterschiedlich sind).

  1. soll die Beispielimplementierung vereinfachen. Es gibt auch eine Geschichte, in der die Gradientenabstiegsmethode dem Ergebnis des Versuchs mit Adam Optimizer beim Schreiben mit dem vorliegenden Tensorflow-Backend nicht besonders unterlegen war.

Ich habe den Implementierungscode unten angegeben. https://github.com/ryuNagai/MPS/blob/master/TN_ML/MNIST_ML_jax.ipynb

Der Lernprozess ist so. image.png

Schließlich Zuggenauigkeit = 0,962 und Testgenauigkeit = 0,952. In [4] erreichte die Zuggenauigkeit nach etwa 50 Epochen etwa 0,98, was nicht ausreichte, um sie zu reproduzieren. Hinter den Kulissen habe ich ein wenig versucht zu sehen, ob das Ergebnis von [4] reproduziert werden kann, aber es war schwierig, also bin ich mit diesem Wert zufrieden.

Zusammenfassung

Implementierung eines quanteninspirierten maschinellen Lernens unter Verwendung eines neuen (potenziellen) Tensornetzwerks. In der gegenwärtigen Situation, in der es auf der Hardwareseite von Quantencomputern viele Einschränkungen gibt, kann diese Methode auf einem klassischen Computer ausgeführt werden, um große Probleme zu lösen. Ich denke, es liegt noch an der zukünftigen Forschung, mit dieser Methode nützlichere Modelle als herkömmliche Modelle für maschinelles Lernen zu entdecken.

Wenn die Möglichkeit besteht, dass überprüft werden kann, ob es möglich ist, mit einer solchen Methode zu sehen oder indirekt, ob der Vorteil gegenüber dem klassischen maschinellen Lernen im maschinellen Lernen unter Verwendung des Quantenraums liegt oder nicht. Ich denke es ist gut.

Verweise

[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

Quanteninspiriertes maschinelles Lernen mit Tensornetzwerken
Maschinelles Lernen mit Pokemon gelernt
Maschinelles Lernen mit Python! Vorbereitung
Maschinelles Lernen Minesweeper mit PyTorch
Beginnend mit maschinellem Python-Lernen
Versuchen Sie es mit Kaggle leicht maschinell
Ich habe maschinelles Lernen mit liblinear versucht
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Maschinelles Lernen
SVM versucht maschinelles Lernen mit Scikit-Learn
Beginnen Sie mit dem maschinellen Lernen mit SageMaker
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Vorhersage des Strombedarfs durch maschinelles Lernen Teil 2
Verstärken Sie Bilder für maschinelles Lernen mit Python
Unausgeglichenes Datenlernen mit maschinellem Lernen k-NN
Eine Geschichte über maschinelles Lernen mit Kyasuket
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Aufbau einer KI / maschinellen Lernumgebung mit Python
[Memo] Maschinelles Lernen
Klassifikation des maschinellen Lernens
Beispiel für maschinelles Lernen
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Maschinelles Lernen beginnend mit Python Personal Memorandum Part2
Maschinelles Lernen beginnend mit Python Personal Memorandum Part1
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Maschinelles Lernen von Grund auf neu (maschinelles Lernen mit Kaggle)
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Zusammenfassung des Lernprogramms für maschinelles Lernen
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Einfaches maschinelles Lernen mit AutoAI (Teil 4) Jupyter Notebook
Maschinelles Lernen mit Raspberry Pi 4 und Coral USB Accelerator
Wichtige Punkte von "Maschinelles Lernen mit Azure ML Studio"
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Maschinelles Lernen Über Overlearning
Python lernen mit ChemTHEATER 05-1
Lernen Sie das kollaborative Filtern zusammen mit Coursera-Materialien für maschinelles Lernen
Maschinelles Lernen ⑤ AdaBoost-Zusammenfassung
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Logistische Regression beim maschinellen Lernen
Einfaches maschinelles Lernen mit Scikit-Learn und Flask ✕ Web App
Versuchen Sie, den Wechselkurs (FX) mit nicht tiefem maschinellem Lernen vorherzusagen
Maschinelles Lernen unterstützt Vektormaschine
Maschinelles Lernen studieren ~ matplotlib ~
Fühlen wir uns wie ein Materialforscher mit maschinellem Lernen
Python lernen mit ChemTHEATER 02
Lineare Regression des maschinellen Lernens
Memo zum Kurs für maschinelles Lernen
Prognostizieren Sie das Geschlecht von Twitter-Nutzern durch maschinelles Lernen
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Bibliothek für maschinelles Lernen dlib
Python lernen mit ChemTHEATER 01
Maschinelles Lernen (TensorFlow) + Lotto 6
Site-Zusammenfassung zum Erlernen des maschinellen Lernens mit englischen Videos
Lerne irgendwie maschinelles Lernen
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Aufzeichnung der ersten Herausforderung des maschinellen Lernens mit Keras
Praktisches maschinelles Lernen mit Scikit-Learn und TensorFlow-TensorFlow gab auf-
Bibliothek für maschinelles Lernen Shogun
Maschinelles Lernen Kaninchen Herausforderung