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.
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".
Der Matrixproduktzustand heißt MPS und wird wie in der folgenden Abbildung dargestellt dargestellt [1].
Jeder schwarze Kreis wird als "Site" bezeichnet, und wenn es sich um ein N-Qubit-System handelt, werden N Sites erstellt.
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.
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.
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.
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.
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).
Ich habe den Implementierungscode unten angegeben. https://github.com/ryuNagai/MPS/blob/master/TN_ML/MNIST_ML_jax.ipynb
Der Lernprozess ist so.
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.
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.
[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