====== Wieso, weshalb warum? - Das Hopfield Netz ======
Das Hopfield-Netz ist eine besondere Form eines künstlichen neuronalen Netzes. Dieses Netzwerk wurde 1982 von dem Physiker John Hopfield entwickelt. Eine der Hauptanwendungen von Hopfieldnetzen ist die Fähigkeit dieser Netze, als autoassoziativer Speicher zu wirken. Deswegen erklären wir erst einmal was ein (auto)assoziativer Speicher ist.
|Das John Hopfield Physiker war, ist kein Zufall. Tatsächlich ist dieses Netzwerk physikalisch motiviert und bietet interessante Analogien zur statistischen Physik. Wir interessieren uns hier aber nur für die grundlegende Arbeitsweise dieses Netzes und werden daher diese Aspekte nicht weiter vertiefen. In seinem Originalartikel verwendete Hopfield die Werte 0 und 1 (**binäre Werte**) für die Neuronen. Wir verwenden in diesem Abschnitt -1 und 1 (**bipolare Werte**) als Werte für die Neuronen. |{{ :inf:ki:hopield82.png? |}}
Die erste Seite von Hopfields 1982 erschienenem Artikel:\\
[[https://www.informatics4kids.de/addons-i4k/doc/article/hopfield82.pdf|Neural networks and physical systems with emergent collective computational abilities.]]
|
==== Aufgabe ====
{{:inf:aufgabe.gif?|}}
Denken Sie sich eine Funktion aus, um binäre Werte {0,1} in bipolare {-1,1} Werte umzurechnen!
{{:inf:tipp.gif?|}}
Es muss gelten: $f(0) = -1 $ und $ f(1)=1$
===== Muster als Vektoren =====
Mathematisch betrachtet, bedient sich unser Gehirn der Vektorrechnung, wenn es darum geht, Bilder (Muster; engl. 'pattern') zu speichern oder wiederzuerkennen. Wir betrachten hier zweifarbige Muster und kodieren diese so, dass man jedes Muster eindeutig einem Vektor zuordnen kann.
Muster als Vektor darstellen:
* Schwarzen Pixeln (Punkte) werden eine 1 zugeordnet
* Weiße Pixel werden mit -1 kodiert.
* Wir fangen oben links an und schreiben die Werte zeilenweise auf.
==== Beispiel ====
|{{ :inf:ki:bildschirmfoto3.png?230 |}}| **v= {1,1,1,1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,1}**\\
4x4 = 16 Komponenten |
|{{ :inf:ki:bildschirmfoto2.png?230 |}}| **v={-1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,-1}**\\
4x4 = 16 Komponenten |
|{{ :inf:ki:gorilla-black-white.jpg? |}} | **v={-1,-1,-1,... , -1, -1}**\\ \\ \\
Dieses Bild hat 300x300 Pixel also 90.000 Punkte. Diejenigen, die es ganz genau wissen wollen, könnten die Grafik in ein Bildbearbeitungsprogramm laden und die Pixel auszählen...\\
[[https://www.informatics4kids.de/addons-i4k/doc/misc/gorilla.txt|...so haben wir es ja auch gemacht]] :-x
|
==== ...die eigentliche Stärke des Hopfieldnetzes ====
Die eigentliche Stärke des Netzwerkes liegt darin, dass selbst wenn das Eingangsmuster fehlerhaft ist, das entsprechende Ausgabemuster zugeordnet werden kann. Dabei verwendet das Netzwerk das Ausgabemuster zur erneuten Eingabe und nähert sich so schrittweise der Lösung an.
Manchmal kann es vorkommen, dass das Netz sich nicht entscheiden kann, also zwischen verschiedenen Mustern oszilliert, oder aber das Netzwerk konvergiert zu einem Muster, das dem ursprünglichen entgegengesetzt ist... doch davon später. Auch die spannende Frage, wieviel Muster ein Hopfieldnetz überhaupt zuverlässig speichern kann, verschieben wir vorerst auf einen späteren Abschnitt.
|{{ :inf:ki:memory3.png? |}}|
| Die Spinne (stark verrauschtes Bild) wurde dem Netzwerk als Eingabemuster präsentiert. Das Netzwerk findet automatisch das Muster, das dem Eingabemuster am ehesten entspricht.|
|{{ :inf:ki:palmer.png? |}} |
|Alle Bilder haben eine Größe von 130 x 180 Bildpunkten. \\ In der **linken Spalte** sind die stark verrauschten Eingabemuster zu sehen. \\ Die **mittlere Spalte** zeigt Zwischenstadien. \\ In der **rechten Spalte** sind die Bilder zu sehen, nachdem das Netzwerk sich stabilisiert (konvergiert) hat. \\ Dieses Netzwerk hatte ursprünglich sieben Bilder gespeichert|
|//Quelle: Introduction To The Theory Of Neural Computation, Krogh, Palmer.// |