====== Aufbau des Hopfield-Netzes ======
Hopfield-Netze sind sogenannt Feedback-Netze (Netze mit Rückkopplung). Bei einem Hopfield-Netz existiert nur eine Schicht, die gleichzeitig als Ein- und Ausgabeschicht ist.\\ Die Gewichte \(w_{ij} \) sind symmetrisch, außerdem sind alle \(w_{ii} = 0\).
{{ :inf:ki:hopield16.png? |}}
Die Abbildung zeigt ein Hopfield-Netz mit 16 Neuronen. \\ **Alle Neuronen sind mit allen anderen Neuronen verbunden, aber kein Neuron ist mit sich selbst verbunden.** \\ Für Hopfieldnetze gilt, dass die Verbindungsstärken $w_{ij}$ zwischen dem Neuron xi und dem Neuronxj genauso groß ist, wie zwischen Neuron $x_j$ und dem Neuronxi, d.h, für ein Hopfield Netz gilt: $w_{ij} = w_{ji}$. Die Tatsache, dass kein Neuron mit sich selbst verbunden ist, bedeutet, dass $w_{ii} = 0$ gilt.
=====Aufbau =====
Das Hopfield Netz ist ein Netz mit Rückkopplung (Feedback-Netz). Es besitzt nur eine Schicht, welche gleichzeitig als Ein- und Ausgabeschicht zur Verfügung steht. \\ Weiterhin sind die benötigten Vektoren für Ein- und Ausgabe gleich lang (autoassoziative Mustererkennung).\\
Die** Neurone können die Werte 1 und -1 annehmen**, die alle, bis auf $w_{ii}=0$, miteinander in Verbindung stehen. Bei rückgekoppelten Netzen müssen die Zustände der Neurone solange neu berechnet werden, bis das Netz in einem Ruhezustand ist (konvergiert), d.h. bis sich keine Änderung der Aktivierungszustände mehr ergeben.
==== Verbindungen ====
Die synaptischen Gewichte sind symmetrisch, d.h. es gilt:
\begin{equation} w_{ij}= w_{ji}\;\; \text{mit}\;\; w_{ii} = 0\end{equation}
Man achte auf die Indizes: Die Indizes $ij$ bedeuten eine Verbindung zwischen Neuron $x_i$ und Neuron $x_j$, wohingegen die Indizes $ji$ bedeuten, dass die Verbindung zwischen dem Neuron $x_j$ und Neuron $x_i$ gemeint ist. Demnach bedeutet $w{ii}$ eine Verbindung (das Gewicht) zwischen ein und demselben Neuron, die beim Hopfieldnetz nicht vorhanden ist.
==== Speicherkapazität====
**Wie viele Muster kann man jetzt mit einem Hopfield-Netz speichern?**\\
Die Speicherkapazität ist abhängig von der Zahl der Neuronen N im Netzwerk. Umso mehr Neuronen zur Verfügung stehen, desto mehr Muster M können zuverlässig gespeichert und wiedergegeben werden.
* M ~ N
Abschätzungen ergeben:
* M ≈ 0.13 · N bis M ≈ 0.15 · N
Angenommen wir haben ein Netz mit 100 Neuronen zur Verfügung, dann können wir 13 Muster speichern. Dies setzt allerdings voraus, dass sich die Muster auch gut unterscheiden lassen, d.h. die Muster dürfen einander nicht zu ähnlich sein.\\ Da wir Muster durch Vektoren repräsentieren, bedeutet das, dass die Vektoren möglichst orthogonal (senkrecht) aufeinander stehen sollten. Unter orthogonalen Mustern verstehen wir Muster, die sich von allen Möglichkeiten am stärksten unterscheiden.
==== Aktivierungsfunktion im Hopfield Netz====
Hopfield-Netze sind gekennzeichnet durch die Aktivierungsfunktion:
|{{ :inf:ki:sign.png? |}} |{{ :inf:ki:sign1.png? |}} |
|Wenn x größer oder gleich null ist, nimmt f den Funktionswert 1 an. Ansonsten ist der Funktionswert -1.|Graphische Darstellung der Aktivierungsfunktion.|
Dies ist eine Schwellenwertfunktion. Jedes Neuron $x_i$ berechnet zunächst die gewichtete Summe aller Eingangsverbindungen. Die Ausgabe beträgt **1**, wenn die Aktivierung größer als der Schwellenwert ist. Sie nimmt den Wert ** -1** an, wenn die Aktivierung kleiner als der Schwellenwert ist.
==== Updateregel====
Um den nächsten Zustand der Neurone zu ermitteln, gibt es zwei grundsätzlich verschiedene Verfahren:
* Asynchrone Aktivierung
* Zu jedem Zeitpunkt ändert nur ein einziges Neuron seinen Aktivierungszustand (dieses Neuron wird zufällig ausgewählt)
* Synchrone Aktivierung
* Alle Neurone ändern ihren Zustand gleichzeitig (paralleles Update)
Unabhängig von diesen beiden Verfahren, muss zuerst die Netzeingabe $net_i$ des Neurons bestimmt werden, welches 'upgedatet' werden soll. Mithilfe dieser Netzeingabe kann dann anhand der Aktivierungsfunktion der nächste Zustand bestimmt werden.
==== Beispiel ====
{{:inf:aufgabe.gif?|}}
Gegeben ist ein Hopfield-Netz mit 3 Neuronen.\\ \\
Die Gewichte sind:\\
\( w_{11} = w_{22} = w_{33} = 0 \) und \\
\( w_{12} = w_{21} = -1 \),\\
\( w_{13} = w_{31} = 1 \),\\
\( w_{23} = w_{32} = -1 \),
Die Neuronen haben folgende Werte:\\
\(x_1 = -1, x_2 = 1 \) und \( x_3 = -1 \).
**Berechnen Sie den nächsten Zustand des Neurons \( x_2 \).**
{{:inf:solution.gif?|}}
**Step 1:**\\
Wir müssen zuerst die gewichtete Summe ( \( net_2) \) für das Neuron \( x_2 \)berechnen.
\[ net_2 = \sum_{i=1}^3 w_{i2} \cdot x_i = w_{12} \cdot x_1 + w_{22} \cdot x_2 + w_{32} \cdot x_3 \]
\[ net_2 = (-1) \cdot (-1) + 0 \cdot 1 + (-1) \cdot (-1) = 2 \]
**Step 2:**\\
Mithilfe der gewichteten Summe und der Aktivierungsfunktion läßt sich jetzt der nächste Zustand des Neurons \( x_2 \) bestimmen.
\[ x_2 = f( net_2 ) = f( 2) = 1 \]
**Das heißt der Zustand des Neurons ändert sich nicht (es feuert weiterhin).**