# Boltzmann-Maschine

Eine Boltzmann-Maschine ist ein neuronales Netz, das nach dem österreichischen Wissenschaftler Ludwig Boltzmann benannt wurde. Boltzmann-Maschinen sind eine spezielle Art energiebasiertes Modell. Entwickelt wurde sie von Geoffrey Hinton und Terrence J. Sejnowski im Jahre 1985. Die Boltzmann-Maschine wird auch stochastisches Hopfield-Netz mit versteckten Einheiten genannt.
Beschränkt man die Verbindungen zwischen den Neuronen, lässt sich der Lernvorgang stark vereinfachen – diese Boltzmann-Maschinen werden Beschränkte Boltzmann-Maschinen („restricted Boltzmann machines“) genannt.
Der Nobelpreis für Physik im Jahre 2024 ging an John Hopfield und Hinton für ihren fundamentalen Beitrag zum Maschinellen Lernen, insbesondere der Boltzmann-Maschine.

## Funktionsweise

Die Funktionsweise der Boltzmann-Maschine basiert auf der Boltzmann-Verteilung, die besagt, dass der aktuelle Zustand eines physikalischen Systems von der Energie und der Temperatur des Systems abhängt. Um Boltzmann-Maschinen als neuronale Netze zu implementieren, verwendet man daher die Energiemodelle. Der Energie entspricht die Abweichung von der tatsächlichen Antwort. Je höher die Energie, desto größer die Abweichung. Es ist daher wichtig, das Modell zu trainieren, bis es einen Niedrigenergiepunkt erreicht. Ein solches theoretisches Modell leidet unter dem Problem lokaler Minima und liefert weniger genaue Ergebnisse. Dieses Problem wurde gelöst, indem dem Modell erlaubt wurde, periodische Sprünge zu einem höheren Energiezustand zu machen und dann zurück zu den Minima zu konvergieren, was schließlich zu den globalen Minima führt.
Wenn Boltzmann-Maschinen beim Lernen eingesetzt werden, versuchen sie, wichtige Merkmale aus der Eingabe abzuleiten, diese Eingabe zu rekonstruieren und sie durch parallele Aktualisierung von Gewichten als Ausgabe wiederzugeben.
Boltzmann-Maschinen eignen sich gut, um ein Problem der Erfüllung von Einschränkungen zu lösen, selbst wenn es schwache Einschränkungen hat. Ein Problem mit schwachen Einschränkungen versucht, eine Lösung zu erhalten, die nahe genug an einer Lösung sein kann, die alle Einschränkungen vollständig erfüllt, d. h. die Lösung muss nicht alle Einschränkungen vollständig erfüllen.
Boltzmann-Maschinen haben keine klare Abgrenzung zwischen Eingabeschicht und Ausgabeschicht. Die Knoten in Boltzmann-Maschinen werden einfach als sichtbare und unsichtbare Knoten kategorisiert. Die sichtbaren Knoten nehmen die Eingabe auf. Dieselben Knoten, die die Eingabe aufnehmen, geben die rekonstruierte Eingabe als Ausgabe zurück. Dies wird durch bidirektionale Gewichtungen erreicht, die sich rückwärts ausbreiten und die Ausgabe auf den sichtbaren Knoten rendern. Ein wesentlicher Vorteil der Architektur besteht darin, dass jeder Knoten mit allen anderen Knoten verbunden ist. Alle Verbindungen sind bidirektional und die Gewichtungen sind symmetrisch.

## Aufbau

Eine Boltzmann-Maschine hat das Lernziel eine parametrisierte Wahrscheinlichkeitsverteilung $P_{s_{v}}(\{w_{ij}\})$ über den sichtbaren Zuständen $s_{v}$ durch Lernen von Parametern $w_{ij}$ zu approximieren. Die parametrisierte Wahrscheinlichkeitsverteilung ist die Boltzmannverteilung (siehe unten). Die Parameter $w_{ij}$ werden durch Minimierung der Kullback-Leibler-Divergenz zwischen der vom Modell vorhergesagten Wahrscheinlichkeitsverteilung $P_{s_{v}}(\{w_{ii}\})$ und der in den Trainingsdaten gefundenen Verteilung $P_{s_{v}}^{+}$ gefunden:
    $G=\sum _{v}{P_{s_{v}}^{+}\ln \left({\frac {P_{s_{v}}^{+}}{P_{s_{v}}}}\right)}$.
Die Struktur der Boltzmann-Maschine ist (wie ein Hopfield-Netz) ein Netz von Neuronen (Zuständen), in dem ein Energieniveau definiert ist. Wie bei Hopfield-Netzen nehmen die Neuronen nur binäre Werte (0 oder 1) an, verhalten sich im Gegensatz jedoch stochastisch. Das Energieniveau $E$ einer Boltzmann-Maschine wird benötigt, um die Wahrscheinlichkeitsverteilung $P_{s_{v}}$ der Zustände zu parametrisieren. Die Energie ist so definiert wie bei einem Hopfield-Netz oder einem Ising-Modell:
    $E=-{\frac {1}{2}}\sum _{i}\sum _{j}{s_{i}}{w_{ij}{s_{j}}}+\sum _{i}{\theta _{i}s_{i}}$
wobei gilt:
* $w_{ij}$ ist das Gewicht der Verbindung zwischen Neuron $i$ und $j$.
* $s_{i}$ ist der Zustand $s_{i}\in \{0,1\}$ des Neurons $i$.
* $\theta _{i}$ ist der Schwellwert eines Neurons $i$. ($-\theta _{i}$ ist der Wert ab dem ein Neuron aktiviert wird.)
Die Verbindungen einer Boltzmann-Maschine haben zwei Beschränkungen:
* $w_{ii}=0\qquad \forall i$. (Kein Neuron hat eine Verbindung mit sich selbst.)
* $w_{ij}=w_{ji}\qquad \forall i,j$. (Alle Verbindungen sind symmetrisch.)
Die Gewichtungen lassen sich in Form einer symmetrischen Matrix $W$ darstellen, deren Hauptdiagonale aus Nullen besteht.
Die Veränderung des Energieniveaus, die sich ergibt, wenn ein einzelnes Neuron $i$ vom Zustand $s_{i}=1$ zum Zustand $s_{i}=0$ wechselt, beträgt
    $\Delta E_{i}=E_{s_{i}=1}-E_{s_{i}=0}=\sum _{j\neq i}(w_{ij}{s_{j}}-\theta _{i})$
Mit den Größen der Boltzmann-Verteilung kann dies wie folgt geschrieben werden:
    $\Delta E_{i}=-k_{B}T\ln(P_{s_{i}=1})-(-k_{B}T\ln(P_{s_{i}=0}))$
Daraus folgt
    ${\frac {\Delta E_{i}}{k_{B}T}}=\ln(P_{s_{i}=1})-\ln(P_{s_{i}=0})=\ln(P_{s_{i}=1})-\ln(1-P_{s_{i}=1})$
Aufgelöst nach der Wahrscheinlichkeit, dass das Neuron $i$ den Zustand $s_{i}=1$ hat, folgt daraus
    $P_{s_{i}=1}={\frac {1}{1+e^{-{\frac {\Delta E_{i}}{k_{B}T}}}}}$
Das bedeutet, dass die Wahrscheinlichkeit, dass ein Neuron den Wert 1 annimmt, ist eine logistische Funktion der skalierten Veränderung des Energieniveaus zwischen seinem aktiven und inaktiven Zustand ist.
Genau wie beim Hopfield-Netz tendiert die Boltzmann-Maschine dazu, den Wert der so definierten Energie bei aufeinanderfolgenden Aktualisierungen zu verringern, letztendlich also zu minimieren, bis ein stabiler Zustand erreicht ist.

## Beschränkte Boltzmann-Maschinen

Eine sog. Restricted Boltzmann Machine (RBM) besteht aus sichtbaren Einheiten (engl. visible units) und versteckten Einheiten (hidden units). An die sichtbaren Einheiten wird der Feature-Vektor angelegt.
Das „restricted“ (englisch für „beschränkt“) bezeichnet die Tatsache, dass weder die sichtbaren Einheiten noch die versteckten Einheiten innerhalb dieser Gruppen untereinander verbunden sind. Allerdings sind die sichtbaren Einheiten mit den versteckten Einheiten vollständig verbunden. Sie bilden also einen bipartiten ungerichteten Graphen. Dies ist im Folgenden dargestellt:
Die zu lernenden Parameter sind die Gewichte der Kanten zwischen sichtbaren und versteckten Einheiten sowie die Bias-Vektoren $b_{h},b_{v}$ der versteckten und der sichtbaren Einheiten. Diese werden über den Contrastive-Divergence-Algorithmus gelernt.
Restricted Boltzmann Machines wurden zum kollaborativen Filtern auf Netflix eingesetzt.