Neuronale QuantenzustÀnde - Darstellung einer Wellenfunktion durch ein neuronales Netzwerk

In diesem Artikel werden wir die ungewöhnliche Anwendung neuronaler Netze im Allgemeinen und begrenzte Boltzmann-Maschinen im Besonderen zur Lösung zweier komplexer Probleme der Quantenmechanik betrachten - das Finden der Grundzustandsenergie und die AnnÀherung der Wellenfunktion eines Vielkörpersystems.


Wir können sagen, dass dies eine kostenlose und vereinfachte NacherzÀhlung eines Artikels [2] ist, der 2017 in Science veröffentlicht wurde, sowie einiger nachfolgender Arbeiten. Ich fand keine populÀrwissenschaftlichen Darstellungen dieser Arbeit in russischer Sprache (und nur in dieser englischen Version), obwohl sie mir sehr interessant erschien.

Minimale wesentliche Konzepte aus der Quantenmechanik und dem tiefen Lernen
Ich möchte sofort darauf hinweisen , dass diese Definitionen extrem vereinfacht sind . Ich bringe sie fĂŒr diejenigen, fĂŒr die das beschriebene Problem ein dunkler Wald ist.

Ein Zustand ist einfach eine Reihe physikalischer GrĂ¶ĂŸen, die ein System beschreiben. FĂŒr ein im Weltraum fliegendes Elektron sind es beispielsweise seine Koordinaten und sein Impuls, und fĂŒr ein Kristallgitter ist es eine Reihe von Spins von Atomen, die sich in seinen Knoten befinden.

Die Wellenfunktion des Systems ist eine komplexe Funktion des Systemzustands. Eine bestimmte Blackbox, die eine Eingabe akzeptiert, z. B. eine Reihe von Drehungen, aber eine komplexe Zahl zurĂŒckgibt. Die fĂŒr uns wichtige Haupteigenschaft der Wellenfunktion ist, dass ihr Quadrat der Wahrscheinlichkeit dieses Zustands entspricht:

 Psi(s) Psi(s)∗=P(s)

Es ist logisch, dass das Quadrat der Wellenfunktion auf Eins normiert werden sollte (und dies ist auch eines der wesentlichen Probleme).

Hilbert-Raum - in unserem Fall ist eine solche Definition ausreichend - der Raum aller möglichen ZustĂ€nde des Systems. FĂŒr ein System mit 40 Drehungen, das die Werte +1 oder -1 annehmen kann, ist beispielsweise der Hilbert-Raum alles 240mögliche Bedingungen. FĂŒr Koordinaten, die Werte annehmen können [− infty,+ infty]ist die Dimension des Hilbert-Raumes unendlich. Es ist die enorme Dimension des Hilbert-Raums fĂŒr alle realen Systeme, die das Hauptproblem darstellt, das es nicht erlaubt, Gleichungen analytisch zu lösen: Dabei gibt es Integrale / Summationen ĂŒber den gesamten Hilbert-Raum, die nicht „frontal“ berechnet werden können. Eine merkwĂŒrdige Tatsache: WĂ€hrend des gesamten Lebens des Universums kann man nur einen kleinen Teil aller möglichen ZustĂ€nde treffen, die im Hilbert-Raum enthalten sind. Dies wird sehr gut durch ein Bild aus einem Artikel ĂŒber Tensor Networks [1] veranschaulicht, der schematisch den gesamten Hilbert-Raum und jene ZustĂ€nde darstellt, die nach einem Polynom aus der Eigenschaft der KomplexitĂ€t des Raums (Anzahl von Körpern, Partikeln, Spins usw.) erfĂŒllt werden können.

Bild


Eine begrenzte Boltzmann-Maschine - wenn auch schwer zu erklĂ€ren, handelt es sich um ein ungerichtetes grafisches Wahrscheinlichkeitsmodell, dessen EinschrĂ€nkung die bedingte UnabhĂ€ngigkeit der Wahrscheinlichkeiten von Knoten einer Schicht von Knoten derselben Schicht ist. Wenn auf einfache Weise, dann ist dies ein neuronales Netzwerk mit einer Eingabe und einer verborgenen Schicht. Die Werte der Ausgabe von Neuronen in der verborgenen Schicht können 0 oder 1 sein. Der Unterschied zum ĂŒblichen neuronalen Netzwerk besteht darin, dass die Ausgaben der Neuronen der verborgenen Schicht Zufallsvariablen sind, die mit einer Wahrscheinlichkeit ausgewĂ€hlt werden, die dem Wert der Aktivierungsfunktion entspricht:

Pi(1)= sigma(bi+ sumjWijsj)

wo  sigma- Sigmoid-Aktivierungsfunktion , bi- Offset fĂŒr das i-te Neuron, W- das Gewicht des neuronalen Netzes, sj- sichtbare Schicht. Begrenzte Boltzmann-Maschinen gehören zu den sogenannten "Energiemodellen", da wir die Wahrscheinlichkeit eines bestimmten Zustands einer Maschine mit der Energie dieser Maschine ausdrĂŒcken können:

E(v,h)=−aTv−bTh−vTWh


wobei v und h die sichtbaren und verborgenen Schichten sind, a und b die Verschiebungen der sichtbaren und verborgenen Schichten sind, W die Gewichte sind. Dann ist die Wahrscheinlichkeit des Zustands in folgender Form darstellbar:

P(v,h)= frac1Ze−E(v,h)


Dabei ist Z der Normalisierungsterm, auch statistische Summe genannt (dies ist erforderlich, damit die Gesamtwahrscheinlichkeit gleich Eins ist).

EinfĂŒhrung


Heute gibt es unter den Spezialisten fĂŒr tiefes Lernen eine Meinung, die begrenzt ist
Boltzmann-Maschinen (im Folgenden - OMB) sind ein veraltetes Konzept, das bei realen Aufgaben praktisch nicht anwendbar ist. 2017 erschien jedoch ein Artikel [2] in Science, der den sehr effizienten Einsatz von OMB bei Problemen der Quantenmechanik zeigte.

Die Autoren bemerkten zwei wichtige Tatsachen, die offensichtlich erscheinen mögen, aber noch nie jemandem in den Sinn gekommen waren:
  1. OMB ist ein neuronales Netzwerk, das nach dem universellen Theorem von Tsybenko theoretisch jede Funktion mit beliebig hoher Genauigkeit approximieren kann (es gibt immer noch viele EinschrĂ€nkungen, aber Sie können sie ĂŒberspringen).
  2. OMB ist ein System, dessen Wahrscheinlichkeit fĂŒr jeden Zustand eine Funktion der Eingabe (sichtbare Schicht), der Gewichte und der Verschiebungen des neuronalen Netzwerks ist.

Gut und weiter sagten die Autoren: Lassen Sie unser System vollstÀndig durch die Wellenfunktion beschreiben, die die Wurzel der OMB-Energie ist, und die OMB-Eingaben sind die Merkmale unseres Systemzustands (Koordinaten, Drehungen usw.):

 Psi(s)= frac1Z sqrteE(s,h)


Dabei sind s die Eigenschaften des Zustands (z. B. Backs), h die AusgÀnge der verborgenen Schicht von OMB, E die Energie von OMB, Z die Normalisierungskonstante (statistische Summe).

Das war's, der Artikel in Science ist fertig, dann bleiben nur noch wenige kleine Details ĂŒbrig. Zum Beispiel ist es notwendig, das Problem der nicht berechenbaren Partitionsfunktion aufgrund der großen GrĂ¶ĂŸe des Hilbert-Raums zu lösen. Und der Satz von Tsybenko besagt, dass ein neuronales Netzwerk jede Funktion approximieren kann, aber es sagt ĂŒberhaupt nichts darĂŒber aus, wie ein geeigneter Satz von Netzwerkgewichten und -versĂ€tzen dafĂŒr gefunden werden kann. Nun, und wie immer beginnt der Spaß hier.

Modelltraining


Jetzt gibt es einige Modifikationen des ursprĂŒnglichen Ansatzes, aber ich werde nur den Ansatz aus dem ursprĂŒnglichen Artikel betrachten [2].

Herausforderung


In unserem Fall lautet die Trainingsaufgabe wie folgt: eine AnnĂ€herung der Wellenfunktion zu finden, die den Zustand mit minimaler Energie am wahrscheinlichsten macht. Dies ist intuitiv klar: Die Wellenfunktion gibt uns die Wahrscheinlichkeit eines Zustands, der Eigenwert des Hamilton-Operators (der Energieoperator oder noch einfachere Energie - dieses VerstĂ€ndnis reicht im Rahmen dieses Artikels) fĂŒr die Wellenfunktion ist Energie. Alles ist einfach.

In Wirklichkeit werden wir uns bemĂŒhen, eine andere GrĂ¶ĂŸe zu optimieren, die sogenannte lokale Energie, die immer grĂ¶ĂŸer oder gleich der Energie des Grundzustands ist:

Eloc( sigma)=Re sum sigma sigmaâ€ČH sigma sigmaâ€Č frac Psi( sigmaâ€Č) Psi( sigma)


hier  sigmaIst unser Zustand  sigmaâ€Č- alle möglichen ZustĂ€nde des Hilbert-Raums (in Wirklichkeit werden wir einen nĂ€heren Wert betrachten), H sigma sigmaâ€ČIst das Matrixelement des Hamiltonian. Dies hĂ€ngt zum Beispiel stark vom spezifischen Hamilton-Operator ab, beispielsweise fĂŒr das Ising-Modell f( sigma)wenn  sigma= sigmaâ€Čund −constin allen anderen FĂ€llen. Hören Sie jetzt hier nicht auf; Es ist wichtig, dass diese Elemente fĂŒr verschiedene populĂ€re Hamiltonianer gefunden werden können.

Optimierungsprozess


Probenahme


Ein wichtiger Teil des Ansatzes aus dem Originalartikel war der Stichprobenprozess. Eine modifizierte Variante des Metropolis-Hastings- Algorithmus wurde verwendet. Das Fazit lautet:

  • Wir gehen von einem zufĂ€lligen Zustand aus.
  • Wir Ă€ndern das Vorzeichen eines zufĂ€llig ausgewĂ€hlten Spins in das Gegenteil (fĂŒr die Koordinaten gibt es andere Modifikationen, aber sie existieren auch).
  • Mit einer Wahrscheinlichkeit von P (\ sigma '| \ sigma) = \ Big | {\ frac {\ Psi (\ sigma')} {\ Psi (\ sigma)} \ Big | ^ 2 in einen neuen Zustand wechseln.
  • N-mal wiederholen.

Als Ergebnis erhalten wir eine Reihe von ZufallszustĂ€nden, die gemĂ€ĂŸ der Verteilung ausgewĂ€hlt werden, die unsere Wellenfunktion uns gibt. Sie können die Energiewerte in jedem Zustand und die mathematische Energieerwartung berechnen  mathbbE(Eloc).

Es kann gezeigt werden, dass die SchÀtzung des Energiegradienten (genauer gesagt der erwartete Wert des Hamilton-Operators) gleich ist:

Gk(x)=2∗(Eloc(x)− mathbbE(Eloc))∗Dk∗(x)


Fazit
Dies geht aus einem Vortrag von G. Carleo im Jahr 2017 fĂŒr die Advanced School on Quantum Science and Quantum Technology hervor. Es gibt EintrĂ€ge auf Youtube.

Bezeichnen:

Dk∗(x)= frac partiellepk Psi(x) Psi(x)


Dann:

 partiellepk mathbbE(H)=


 partielle frac sumxxâ€Č Psi∗(x)Hxxâ€Č Psi(xâ€Č) sumx| Psi(x)|2=


 frac sumxxâ€Č Psi∗(x)Hxxâ€ČDk(xâ€Č) Psi(xâ€Č) sumx| Psi(x)|2+ frac sumxxâ€Č Psi∗(x)Dk∗(x)Hxxâ€Č Psi(xâ€Č) sumx| Psi(x)|2−


 frac sumxxâ€Č Psi∗(x)Hxxâ€Č Psi(xâ€Č) sumx| Psi(x)|2 frac sumx| Psi(x)|2(Dk(x)−Dk∗(x)) sumx| Psi(x)|2=


 frac sumxxâ€Č frac Psi∗(x) Psi∗(xâ€Č)Hxxâ€ČDk(xâ€Č)| Psi(xâ€Č)|2+ sumxxâ€Č| Psi(x)|2Hxxâ€ČDk∗(xâ€Č) frac Psi(xâ€Č) Psi(x) sumx| Psi(x)|2−


 mathbbE(H) frac sumx| Psi(x)|2(Dk(x)+Dk∗(x)) sumx| Psi(x)|2 ca.


 mathbbE(ElocDk∗)− mathbbE(Eloc) mathbbE(Dk∗)+C




Dann lösen wir einfach das Optimierungsproblem:

  • Wir probieren ZustĂ€nde aus unserer OMB aus.
  • Wir berechnen die Energie jedes Zustands.
  • SchĂ€tzen Sie den Gradienten.
  • Wir aktualisieren das Gewicht von OMB.

Infolgedessen tendiert der Energiegradient gegen Null, der Energiewert nimmt ab, ebenso wie die Anzahl der eindeutigen neuen ZustÀnde im Metropolis-Hastings-Prozess, da wir durch Abtasten aus der wahren Wellenfunktion fast immer den Grundzustand erhalten. Intuitiv erscheint dies logisch.

In der ursprĂŒnglichen Arbeit wurden fĂŒr kleine Systeme die Werte der Grundzustandsenergie erhalten, die sehr nahe an den genauen analytisch erhaltenen Werten liegen. Es wurde ein Vergleich mit den bekannten AnsĂ€tzen zum Ermitteln der Energie des Grundzustands durchgefĂŒhrt, und NQS gewann, insbesondere angesichts der relativ geringen RechenkomplexitĂ€t von NQS im Vergleich zu den bekannten Methoden.

NetKet - eine Bibliothek aus dem Ansatz der "Erfinder"


Einer der Autoren des Originalartikels [2] entwickelte mit seinem Team die hervorragende NetKet-Bibliothek [3], die einen (meiner Meinung nach) sehr gut optimierten C-Kernel sowie die Python-API enthÀlt, die mit Abstraktionen auf hoher Ebene arbeitet.

Die Bibliothek kann ĂŒber pip installiert werden. Windows 10-Benutzer mĂŒssen das Linux-Subsystem fĂŒr Windows verwenden.

Betrachten wir die Arbeit mit der Bibliothek als Beispiel fĂŒr eine Kette von 40 Drehungen mit den Werten + -1 / 2. Wir werden das Heisenberg-Modell betrachten, das benachbarte Wechselwirkungen berĂŒcksichtigt.

NetKet verfĂŒgt ĂŒber eine hervorragende Dokumentation, mit der Sie schnell herausfinden können, was und wie zu tun ist. Es gibt viele eingebaute Modelle (RĂŒcken, Bosonen, Ising, Heisenberg-Modelle usw.) und die Möglichkeit, das Modell selbst vollstĂ€ndig zu beschreiben.

Anzahl Beschreibung


Alle Modelle sind grafisch dargestellt. FĂŒr unsere Kette ist das eingebaute Hypercube-Modell mit einer Dimension und periodischen Randbedingungen geeignet:

import netket as nk graph = nk.graph.Hypercube(length=40, n_dim=1, pbc=True) 

Beschreibung von Hilbert Space


Unser Hilbert-Raum ist sehr einfach - alle Drehungen können entweder +1/2 oder -1/2 annehmen. FĂŒr diesen Fall ist das eingebaute Modell fĂŒr Spins geeignet:

 hilbert = nk.hilbert.Spin(graph=graph, s=0.5) 

Beschreibung des Hamiltonianers


Wie ich bereits schrieb, ist in unserem Fall der Hamiltonianer der Heisenberg-Hamiltonianer, fĂŒr den es einen eingebauten Operator gibt:

 hamiltonian = nk.operator.Heisenberg(hilbert=hilbert) 

Beschreibung des RBM


In NetKet können Sie eine vorgefertigte RBM-Implementierung fĂŒr Spins verwenden - dies ist nur unser Fall. Aber im Allgemeinen gibt es viele Autos, man kann verschiedene ausprobieren.

 nk.machine.RbmSpin(hilbert=hilbert, alpha=4) machine.init_random_parameters(seed=42, sigma=0.01) 

Hier ist Alpha die Dichte der Neuronen in der verborgenen Schicht. FĂŒr 40 Neuronen des sichtbaren und des Alpha 4 gibt es 160 davon. Es gibt eine andere Möglichkeit, direkt durch die Zahl anzuzeigen. Der zweite Befehl initialisiert Gewichte zufĂ€llig aus N(0, sigma). In unserem Fall betrĂ€gt Sigma 0,01.

Samler


Ein Sampler ist ein Objekt, das uns von einem Sample aus unserer Distribution zurĂŒckgegeben wird, das durch die Wellenfunktion im Hilbert-Raum gegeben ist. Wir werden den oben beschriebenen Metropolis-Hastings-Algorithmus verwenden, der fĂŒr unsere Aufgabe modifiziert wurde:

 sampler = nk.sampler.MetropolisExchangePt( machine=machine, graph=graph, d_max=1, n_replicas=12 ) 

Um genau zu sein, ist der Sampler ein schwierigerer Algorithmus als der oben beschriebene. Hier prĂŒfen wir gleichzeitig bis zu 12 Optionen parallel, um den nĂ€chsten Punkt auszuwĂ€hlen. Aber das Prinzip ist im Allgemeinen dasselbe.

Optimierer


Dies beschreibt den Optimierer, der zum Aktualisieren der Modellgewichte verwendet wird. Basierend auf persönlichen Erfahrungen mit neuronalen Netzen in Bereichen, die ihnen „vertrauter“ sind, ist die beste und zuverlĂ€ssigste Option der gute alte stochastische Gradientenabstieg mit einem Moment (hier gut beschrieben):

 opt = nk.optimizer.Momentum(learning_rate=1e-2, beta=0.9) 

Schulung


NetKet hat eine Ausbildung sowohl ohne Lehrer (unser Fall) als auch mit einem Lehrer (zum Beispiel die sogenannte „Quantentomographie“, dies ist jedoch das Thema eines separaten Artikels). Wir beschreiben einfach die "Lehrer" und das wars:

 vc = nk.variational.Vmc( hamiltonian=hamiltonian, sampler=sampler, optimizer=opt, n_samples=1000, use_iterative=True ) 

Die Variation Monte Carlo gibt an, wie wir den Gradienten der Funktion bewerten, die wir optimieren. n_smaples ist die GrĂ¶ĂŸe des Samples aus unserer Distribution, das der Sampler zurĂŒckgibt.

Ergebnisse


Wir werden das Modell wie folgt ausfĂŒhren:

 vc.run(output_prefix=output, n_iter=1000, save_params_every=10) 

Die Bibliothek wird mit OpenMPI erstellt, und das Skript muss folgendermaßen ausgefĂŒhrt werden: mpirun -n 12 python Main.py (12 ist die Anzahl der Kerne).

Die Ergebnisse, die ich erhalten habe, sind wie folgt:



Links ist der Energiediagramm aus der Zeit des Lernens, rechts die Streuung der Energie aus der Zeit des Lernens.
Es ist zu sehen, dass 1000 Epochen eindeutig ĂŒberflĂŒssig sind, 300 wĂ€ren genug gewesen. Im Allgemeinen funktioniert es sehr cool, konvergiert schnell.

Literatur


  1. OrĂșs R. Eine praktische EinfĂŒhrung in Tensornetzwerke: MatrixproduktzustĂ€nde und projizierte verschrĂ€nkte PaarzustĂ€nde // Annals of Physics. - 2014 - T. 349. - S. 117-158.
  2. Carleo G., Troyer M. Lösung des Quanten-Vielteilchen-Problems mit kĂŒnstlichen neuronalen Netzen // Wissenschaft. - 2017. - T. 355. - Nr. 6325. - S. 602-606.
  3. www.netket.org

Source: https://habr.com/ru/post/de445516/


All Articles