Eine sehr kleine Boltzmann-Maschine
(eoinmurray.info)- Eine kurze Einführung in Struktur und Zweck der Boltzmann-Maschine
- Die Energiefunktion und die Wahrscheinlichkeitsverteilung werden mit Formeln definiert
- Die Aktualisierungsregeln für Gewichte und Biases werden per Ableitung hergeleitet
- Erläuterung der Methode zur Approximation des Modellerwartungswerts über positive/negative Phase und Gibbs-Sampling
- Abschließend wird der Algorithmus Contrastive Divergence als Ganzes zusammengefasst
Konzepte von Boltzmann-Maschine und Contrastive Divergence
- Eine Boltzmann-Maschine besitzt eine Eingabeschicht (visible layer), eine verborgene Schicht (hidden layer) sowie eine Gewichtsmatrix, die beide verbindet, und jeweils Bias-Vektoren für beide Schichten
Energiefunktion und Wahrscheinlichkeitsverteilung
-
Die Energiefunktion wird in Matrixform wie folgt definiert
E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj- v: Vektor der sichtbaren Schicht, h: Vektor der verborgenen Schicht, w: Gewichte, b/c: Biases der jeweiligen Schichten
-
Die gemeinsame Verteilung der Boltzmann-Maschine ist
P(v, h) = (1/Z) * exp(-E(v, h))- Z (Partitionsfunktion) dient zur Normierung der Wahrscheinlichkeitsverteilung
Log-Likelihood und Ableitung
-
Das Training erfolgt durch Maximierung der Likelihood der Trainingsdaten
log(P(v)) = log(Σh exp(-E(v, h))) - log(Z) -
Die partielle Ableitung der Log-Likelihood nach dem Gewicht wij ist
∂(log P(v))/∂wij = <vi hj>Daten - <vi hj>Modell- < · >Daten: Erwartungswert bezüglich der realen Daten
- < · >Modell: Erwartungswert bezüglich der vom Modell erzeugten Daten
Lernregeln für Gewichte und Biases
- Gewichte und Biases werden wie folgt aktualisiert
- Δwij = η(<vi hj>Daten - <vi hj>Modell)
- Δbi = η(<vi>Daten - <vi>Modell)
- Δcj = η(<hj>Daten - <hj>Modell)
- η ist die Lernrate
Contrastive-Divergence-Algorithmus
- Da sich der Modellerwartungswert < · >Modell nicht direkt berechnen lässt, wird Gibbs-Sampling verwendet
- Contrastive Divergence nähert ihn mit dem folgenden Verfahren an
- Positive Phase: Die verborgene Schicht h(0) wird aus P(h | v(0)=Daten) gesampelt
- Negative Phase: k Wiederholungen von Gibbs-Sampling
- Abwechselnd wird mit v(t+1) ~ P(v | h(t)) und h(t+1) ~ P(h | v(t)) gesampelt
- Für das Update wird die Differenz zwischen Datenerwartungswert und Modellerwartungswert verwendet
- Δwij = η(<vi hj>Daten - <vi hj>Modell)
- Δbi = η(<vi>Daten - <vi>Modell)
- Δcj = η(<hj>Daten - <hj>Modell)
Zusammenfassung
- Das Wesen des Lernens in der Boltzmann-Maschine besteht als energiebasiertes Modell darin, die Differenz der Erwartungswerte zwischen realen Daten und der vom Modell erzeugten Verteilung zu verringern
- Contrastive Divergence ist die zentrale Trainingsmethode, die diese Approximation schnell und effizient ermöglicht
- Über Gibbs-Sampling verbindet sie Modellverteilung und reale Daten; durch Wiederholung dieses Prozesses werden Gewichte und Biases so aktualisiert, dass die Boltzmann-Maschine die Daten gut repräsentieren kann
1 Kommentare
Kommentare auf Hacker News
Erinnert mich an 1990, als wir in reinem C mit Arrays von void-Pointern „Neuronen“ bauten und damit Boltzmann-Maschinen und Perzeptrons erstellten.
Was damals unter „AI“ lief, war etwa, die nächste Note einer MIDI-Melodie vorherzusagen oder auf einem 5×9-Punktraster Formen von ganzen, halben, Viertel- und Achtelnoten zu erkennen; 85 % Genauigkeit galt als „gut genug“.
Noten aus einem linierten Notensystem zu lesen klingt nach einem interessanten Projekt. Besonders, wenn man es von Grund auf selbst baut, ähnlich wie 3Blue1Browns Beispiel eines neuronalen Netzes für Ziffern[1].
Kombiniert mit etwas wie Chuck[2] ließe sich mit heutiger Technik sogar eine Anwendung bauen, die komplett clientseitig läuft.
[1] - https://www.3blue1brown.com/lessons/neural-networks
[2] - https://chuck.stanford.edu/
Ich frage mich, ob die Ausgabe wie Musik klang.
Soweit ich es verstehe, war das Harmonium (Smolensky) die erste eingeschränkte Boltzmann-Maschine, minimierte aber nicht „Energie“, sondern maximierte „Harmonie“.
Als Smolensky, Hinton und Rummelhart zusammenarbeiteten, nannten sie das offenbar „Goodness of Fit“. Das Harmonium-Paper[1] ist wirklich lesenswert; Hinton wurde natürlich zum Superstar, und Smolensky schrieb lange Bücher über Linguistik. Ich frage mich, ob jemand mehr über diese Geschichte weiß.
[1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...
Ein interessanter Artikel über David Ackley: https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
Auch das T2 Tile Project ist unbedingt sehenswert.
Der Wert von Doktoranden wird oft unterschätzt, tatsächlich leisten sie enorme Beiträge und entwickeln die Forschung später weiter. Forschung hat so vieles vorangebracht; ich verstehe nicht, warum die USA sie als Verschwendung betrachten.
Ich habe den Titel fälschlich als „A Tiny Boltzmann Brain“ gelesen[0].
Mein natürliches Denken löste das Rätsel sofort: Ich dachte, es ginge um den Fall, dass man einem sehr kleinen Modell zufällig erzeugte Gewichte gibt und testet, ob es tatsächlich etwas Nützliches tut. Schließlich gilt: Je kleiner das Modell, desto größer ist relativ zur Größe die Chance, dass reine Zufallserzeugung etwas Interessantes hervorbringt.
Die Korrektur akzeptiere ich, aber entmutigen lasse ich mich nicht. Ich schlage eine neue Modellklasse vor: „Unbiased-Architecture Instant Boltzmann Model“ (UA-IBM). Wenn es eines Tages einen ausreichend großen Quantencomputer gibt, könnte man den gesamten Datensatz als klassische Constraints eines Modells definieren, das durch N serialisierte Werte für alle Parameter- und Struktureinstellungen beschrieben ist. Dann ließe man ein Quantensystem mit N Qubits alle möglichen Parameter und Strukturen in Superposition halten und einen Inferenzschritt über alle klassischen Samples ausführen; anschließend kollabiert man das Ergebnis und erhält Parameter und Struktur des besten oder nahezu besten Modells in klassischer Form zurück.
Ich frage mich, ob jemand ein paar Qubits übrig hat, um das auszuprobieren. Die Ironie ist, dass alles quantenmechanisch ist und wir es trotzdem kaum nutzen können, weil es so schwer zu fassen ist.
Als Science-Fiction-Setting könnte man sich vorstellen, dass eine außerirdische Spezies Einweg-Quantensensoren entwickelt hat, was zu einem vollständigen quantenbasierten sensorischen und neuronalen System führte und sich von Anfang an zu einer vollständigen Quantenintelligenz entwickelte. Wie würden eine solche Gesellschaft und ihre technologische Entwicklung aussehen? Damit uns ihr explosionsartiger Fortschritt noch nicht bedroht, hoffe ich, dass sie sich in einer Umlaufbahn nahe eines Schwarzen Lochs befinden. Und dann entkommen sie eines Tages dem Gravitationsbrunnen …
[0] https://en.wikipedia.org/wiki/Boltzmann_brain
Gute Erklärung. Nebenbei: Aus irgendeinem Grund ist das Maus-Scrolling viel zu empfindlich.
Ich vermute, dass Swipen auf Mobilgeräten in Ordnung ist, habe es aber nicht geprüft. Jedes Mal, wenn ich scrollen wollte, sprang ich von der ersten „Seite“ zur letzten „Seite“ und wieder zurück. Zum Glück funktionierte die Tastatureingabe, sodass ich den ganzen Artikel lesen konnte.
Wenn ich es richtig verstanden habe, braucht man für die Berechnung der Gewichts-Updates Gibbs-Sampling, statt wie bei den heute vertrauten neuronalen Netzen gradientenbasierten Forward- und Backpropagation zu verwenden.
Ich frage mich, ob jemand versteht, warum das so ist.
Diese Werte werden benötigt, um den Gradienten der Log-Likelihood zu berechnen, aber das Integrieren über die Verteilung ist schwer handhabbar. Das ähnelt der Verwendung von MCMC, um bei VAEs repräsentative Samples zu ziehen. In Deep-Learning-artigen neuronalen Netzen schätzt man den Gradienten über Batches des Datensatzes, statt eine explizit modellierte Wahrscheinlichkeitsverteilung zu verwenden.
Üblicherweise nutzt man Gibbs, wenn ein direkter Gradient nicht einfach ist oder wenn man nicht nur einen Punktschätzer, sondern die Verteilung selbst reproduzieren möchte. Es ist nützlich, wenn es Rand- oder bedingte Likelihoods gibt, aus denen sich leicht sampeln lässt. Da jeder sichtbare Knoten von jedem versteckten Knoten abhängt und jeder versteckte Knoten alle sichtbaren Knoten beeinflusst, wird der Gradient sehr unübersichtlich; daher ist Gibbs-Sampling auf Basis der Rand-Likelihoods deutlich einfacher.
Deshalb lässt sich der Berechnungsgraph nicht auf dieselbe Weise aufbauen wie bei einem Feedforward-Netz.
Eine klare und gute Erklärung. Sie weckt viele alte Erinnerungen.
Schamlose Eigenwerbung: Vor ein paar Jahren habe ich einmal eine Visualisierung des RBM-Trainings gebaut: https://www.youtube.com/watch?v=lKAy_NONg3g
Coole Demo. Vor 15 Jahren habe ich an der Uni Geoff Hintons Vorlesung über neuronale Netze gehört, und er erklärte über mehrere Vorlesungen hinweg Boltzmann-Maschinen.
Die Formulierung „Eine eingeschränkte Boltzmann-Maschine ist ein Spezialfall, bei dem sichtbare und versteckte Neuronen nicht miteinander verbunden sind“ ist falsch. Das klingt so, als seien sichtbare Neuronen nicht mit versteckten Neuronen verbunden.
Korrekt wäre: „Sichtbare Neuronen sind untereinander nicht verbunden, und versteckte Neuronen sind untereinander ebenfalls nicht verbunden.“ Oder: „Sichtbare und versteckte Neuronen haben jeweils keine Verbindungen innerhalb ihres eigenen Typs.“
Edit: Hat sich erledigt. Mir war nicht klar, dass man nach oben scrollen muss, um die Einführung zu sehen.
Wie im [flagged][dead]-Kommentar von 0xTJ gesagt: Versuche, Scrollen abzufangen oder neu zu erfinden, sind keine gute Idee.