- 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
Hacker-News-Kommentare
Meinem Verständnis nach war Harmonium (Smolensky) die erste Restricted Boltzmann Machine und verfolgte das Konzept, statt „energy“ zu minimieren, „harmony“ zu maximieren. Als Smolensky, Hinton und Rumelhart zusammenarbeiteten, nannten sie es „goodness of fit“. Das Harmonium-Paper ist wirklich äußerst lesenswert. Hinton wurde zum Superstar der KI-Welt, und Smolensky schrieb ein langes Buch zur Linguistik. Mich würde interessieren, ob jemand mehr über diese Geschichte weiß.
Interessanter Artikel über David Ackley. Das T2 Tile Project ist ebenfalls einen Blick wert.
Ich bin der Autor. Vielen Dank für die vielen Kommentare, ich hätte nicht erwartet, dass das so populär wird. Ich behebe gerade Tippfehler, Abstände, Scroll-Probleme usw., danke für die Hinweise.
Ich habe den Titel als "A Tiny Boltzmann Brain" fehlgelesen. Mein natürliches Gehirn hat diese Verwirrung sofort aufgelöst. Ich nahm an, es gehe um ein Experiment, bei dem man einem winzigen Modell zufällige Gewichte gibt, um zu testen, ob es etwas Sinnvolles tun kann. Je kleiner das Modell, desto höher schien mir die relative Wahrscheinlichkeit, dass aus der Zufallsgenerierung etwas Interessantes entsteht. Meine Vermutung war zwar falsch, aber ich bleibe trotzdem zuversichtlich. Ich schlage eine neue Modellfamilie namens „Unbiased-Architecture Instant Boltzmann Model“ (UA-IBM) vor. Irgendwann wird es vielleicht ausreichend große Quantencomputer geben, mit denen man den gesamten Datensatz zusammen mit allen Parametern und Architekturen des Modells in einem Quantenzustand überlagert und alles auf einmal inferieren kann. Hat zufällig jemand ein paar freie Qubits für so ein Experiment? (Nebenbei ist es ironisch, dass zwar alles quantenmechanisch ist, sich das in der Praxis aber noch nicht richtig nutzen lässt. Und ich frage mich, welchen gesellschaftlichen und technologischen Entwicklungspfad eine außerirdische Zivilisation hätte, die sich von einzelnen Quantensensoren zu Wesen mit einem vollständig quantenbasierten Nervensystem entwickelt.)
Sehr gute Erklärung. Nur als Hinweis: Das Scrollen mit der Maus ist überempfindlich (vermutlich ist es auf Mobilgeräten okay). Bei jedem Scrollen sprang es zur ersten oder letzten Seite, was ziemlich störend war. Zum Glück konnte ich mit der Tastatur alles normal lesen.
Wenn ich das richtig verstehe, braucht man hier im Unterschied zu den heute üblichen neuronalen Netzen für die Weight-Updates Gibbs-Sampling statt gradientenbasierter Forward-/Backward-Passes. Weiß jemand, warum das so ist?
Dieser Artikel weckt Erinnerungen. 1990 habe ich in C mit void pointers neuronale Netzwerkknoten als Array gebaut und damit eine Boltzmann Machine und ein Perzeptron implementiert. Damals bestand der Einsatz von „AI“ darin, aus einer MIDI-Melodie die nächste Note vorherzusagen oder Notenformen wie minim, crotchet und quaver in einem 5x9-Pixelraster zu erkennen. Eine Erkennungsrate von 85 % galt schon als völlig „gut“.
Der Artikel war leicht verständlich und klar. Er hat viele alte Erinnerungen geweckt. Schamlose Eigenwerbung, aber ich habe vor einiger Zeit einmal ein Video erstellt, das den Trainingsprozess eines RBM visualisiert.
Wirklich eine sehr saubere Demo. Ich erinnere mich daran, früher mehrere Vorlesungen von Geoff Hinton über Boltzmann Machines in einem Kurs zu neuronalen Netzen gesehen zu haben. Ein Punkt zur Korrektur: Eine Erklärung wie „Bei einer restricted Boltzmann machine sind visible und hidden Neuronen nicht miteinander verbunden“ ist missverständlich. Das könnte so wirken, als seien sichtbare und versteckte Knoten untereinander gar nicht verbunden. Gemeint ist genauer, dass es keine Verbindungen innerhalb desselben Typs gibt, also weder zwischen visible-Knoten noch zwischen hidden-Knoten. Man kann auch sagen, dass visible und hidden Knoten keine internen Verbindungen innerhalb ihres jeweiligen Typs haben.