Halmagi Dragos 341C1





Proiect SASN


Retele neurale Hopfield








Reteaua neuronala de tip Hopfield este o retea artificiala simpla care este capabila sa stocheze anumite sabloane (pattern-uri) intr-o maniera similara cu cea a creierului astfel incat tot sablonul poate fi reconstituit daca este disponibila doar o informatie partiala. Exista un grad de stabilitate in sistem, daca doar cateva din conexiunile intre noduri (neuroni) sunt intrerupte, totusi reconstituirea nu e prea grav afectata si reteaua poate da un raspuns de tip "best-guess". Nodurile in acest tip de retea sunt simplificari ale neuronilor reali. Pot exista doar in doua stari posibile: firing sau not firing.. Fiecare nod e conectat cu toate celelalte noduri cu o anumita pondere. La orice moment in timp un nod isi va schimba starea (start sau stop firing) acest lucru depinzand de ceea ce primeste ca input de la celelalte noduri. Daca se incepe simularea cu un sablon general de noduri firing si non-firing acest sablon in general se va schimba in timp. Nodurile de tip firing vor trimite semnale la alte noduri prin intermediul conexiunilor si dupa un scurt timp si aceste noduri vor deveni firing. Astfel va aparea o intreaga cascada de sabloane diferite dar principala caracteristica este garantarea ca sablonul din reteaua Hopfield se va stabiliza dupa un timp la un pattern fixat. Mai mult, aceasta proprietate este folosita pentru a face astfel incat aceste pattern-uri stabile sa contina exact informatia pe care dorim sa o stocam.





Programul



Acest program demostreaza functionarea unei retele Hopfield. Pentru a obtine niste rezultate bune setati rata de invatare (learning rate) la 1.0, selectati un numar de imagini pentru memorare, creati un nou set pentru memorare (new memory set) si apoi memorati secventa (learn pattern). Pentru a testa reteaua selectati un procent de zgomot (noise) si apoi testati informatia stocata (test memory).
Butonul ~Pause~ va opri programul pana la o a doua apasare. Un ~x~ langa imagine inseamna ca reteaua a recunoscut corect imaginea. In status bar se pot citi rezultatele ultimei actiuni.





Implementare



Pentru invatare se foloseste algoritmul Hebbian. In timpul invatarii intre doua noduri cu aceeasi stare se intareste legatura dintre ele, iar intre doua noduri cu stari diferite se slabeste. Cum imaginile sunt in alb si negru formula devine simpla:
W' = W * r * n1 * n2, unde W' este ponderea noua, W este ponderea veche, r este rata de invatare, n1 si n2 sunt valorile celor doua noduri (+1 pentru nodurile albe, -1 pentru nodurile negre). Daca n1 = n2, n1 * n2 = +1, pondrea va creste. Daca n1 <> n2, n1 * n2 = -1, si ponderea va scade. Dupa cateva teste, se observa ca rata de invatare nu are o influenta mare. Atata timp cat nu este prea mica, reteaua va invata normal.





Demonstratie







Surse



Programul este constituit dintr-un applet care foloseste un thread pentru a rula reteaua in background

HopfieldLearning.java: Programul principal




HFNode.java: Clase pentru nodurile retelei




HopfieldNetwork.java: Clase pentru retea




OnScreen.java: Clase pentru afisare



1