Binboy at Sphere:Sieci neuronowe Hopfielda
Strona 1
Binboy at Sphere
http://binboy.sphere.pl
Sieci neuronowe Hopfielda
Autor: biohazard
Sztuczna sieć neuronowa jest skomputeryzowaną strukturą powstałą dzięki obserwacji biologicznego systemu nerwowego. Jest wiele różnych sieci neuronowych, od trywialnie prostych do bardzo skomplikowanych. Jednowarstwowa sieć neuronowa Hopfielda jest siecią mało skomplikowaną. Nadaje się zatem do zobrazowania podstawowych założeń sieci neuronowych.
Do Sieci Hopfielda potrzebne są:
1. ortogonalne sygnały wzorcowe dla których budujemy sieć,
2. macierz określająca wagi połączeń między neuronami,
3. wektory podawane na wejście,
4. funkcja dyskretyzująca wyniki,
5. znajomość podstaw operacji na macierzach.
Jak większość pamięta z lekcji biologii, neurony przekazują między sobą informację poprzez impulsy elektryczne. My zastąpimy go tzw. wagami między poszczególnymi połączeniami neuronowymi [rys nr 1], które są zależne od sygnałów dla których sieć została zaprojektowana. Część z połączeń otrzyma wagi dodatnie, pozostałe ujemne.
rys nr 1
Naszą sieć projektujemy dla dwóch wektorów: A = (1,0,1,0) i B = (0,1,0,1). Dlaczego akurat tych dwóch? Można użyć jakichkolwiek wektorów, o ile są one ortogonalne.
Kolejnym krokiem jest stworzenie macierzy wag poszczególnych połączeń. Aby to zrobić zapisujemy nasze wektory bipolarnie, czyli w obu wektorach zamieniamy zera na minus jedynki, co daje: P = (1,-1,1,-1) i Q = (-1,1,-1,1). Łączymy tak powstałe wektory w macierz X = 4x2, a następnie ją transponujemy. Ostatecznie mnożymy macierze X i Xt. W macierzy wynikowej zerujemy główną przekątną, co doprowadza nas do macierzy wag W [rys nr 2].
http://binboy.sphere.pl/index.php?show=150&drukuj=true
2007-01-24 21:03:04
Binboy at Sphere:Sieci neuronowe Hopfielda
Strona 2
rys nr 2
Wagę połączenia np. między neuronem nr 1 i 3 (W13 na rys nr 2) obliczamy wyznaczając przecięcie pierwszego wiersza i trzeciej kolumny macierzy wag. W wyniku otrzymujemy 2.
Ciąg wyjściowy uzyskuje się mnożąc ciąg wejściowy, przez kolejne kolumny macierzy wag. Dla przykładu podajmy na wejście ciąg A = (1,0,1,0). Mnożymy jego wyrazy przez pierwszą kolumnę macierzy W, czyli: 1x0 + 0x(-2) + 1x2 + 0x(-2) =
2. Tak samo czynimy z kolejnymi kolumnami. Na wyjście otrzymamy ciąg (2,-4,2,-4).
W tym miejscu należy określić funkcję dyskretyzującą wyniki.
f(x)={0, jeśli x<0 ; 1, jeśli x>=0).
Z założenia, sieć powinna prawidłowo przetworzyć sygnały dla których została zaprojektowana. Sygnał wyjściowy będzie równy (f(2),f(-4),f(2),f(-4)) = (1,0,1,0) = A. Tak samo postępujemy badając ciąg B = (0,1,0,1).
Zastanówmy się co się stanie jeśli przedstawimy sieci wektor C = (0,1,0,0)? Wówczas poszczególne aktywacje dadzą wektor (-2,0,-2,2), co funkcja dyskretyzująca zamieni na (0,1,0,1), czyli wektor B! Znaczy to, że gdyby podczas transmisji informacji nastąpiło po drodze nieznaczne przekłamanie, nasza sieć potrafiłaby odtworzyć pierwotny sygnał. Na tej zasadzie działają programy typu OCR, do rozpoznawania znaków, itd.
Prawidłowy rezultat można osiągnąć tylko kiedy odległość Hamminga (czyli suma różnych par bitów) między wektorem wejściowym a wektorami wzorcowymi jest różna. Wtedy wystarczy zastosować tzw. synchroniczne uzupełnianie danych wejściowych - sieć przetwarza niezmienny ciąg liczb. Kiedy odległości Hamminga są równe, należy użyć asynchronicznego uzupełniania.
Asynchronicznym uzupełnianie występuje, kiedy sieć Hopfielda jest tworzona rekurencyjnie poprzez podanie na wejście sygnałów wyjściowych będących wynikiem poprzednich obliczeń [rys nr 3].
http://binboy.sphere.pl/index.php?show=150&drukuj=true
2007-01-24 21:03:04
Binboy at Sphere:Sieci neuronowe Hopfielda
Strona 3
rys nr 3
Niech ciąg wejściowy jest równy E = (1,0,0,1), którego odległość między A i B jest jednakowa. Przy synchronicznym uzupełnianiu, otrzymalibyśmy wynik F = (0,1,1,0), czyli oscylowalibyśmy między wektorami A i B.
Spójrzmy na tabelę:
krok wektor wejściowy
wartości kolumny wartość wektor wyjściowy info
1 1001
0 -2 2 -2
-3 < 0 0001
Kolumna nr
jeden zamieniona na 0
2 0001
-2 0 -2 2
2 > 0 0101
Kolumna nr
dwa zamieniona na 1
3 0101
2 -2 0 -2
-4 < 0 0101
Kolumna nr
trzy podtrzymana na 0
4 0101
-2 2 -2 0
2 > 0 0101
Kolumna nr
cztery podtrzymana na 1
5 0101
0 -2 2 -2
-4 < 0 0101
Kolumna nr
jeden stabilna = 0
6 0101
-2 0 -2 2
2 > 0 0101
Kolumna nr
dwa stabilna = 1
7 0101
2 -2 0 -2
-4 < 0 0101
Kolumna nr
trzy stabilna = 0
8 0101
-2 2 -2 0
2 > 0 0101
Kolumna nr
cztery stabilna = 1;
stabilny wektor
wyjściowy: 0101
Na wejście dajemy wektor E. Obliczamy wartość pierwszej kolumny i jeśli różni się od wektora wejściowego, zmieniamy ją i podajemy na start nowy wektor. Powtarzamy to, aż otrzymany na wyjściu wektor będzie stabilny, czyli kiedy żadna z kolumn nie ulegnie zamianie.
Widać w powyższym przykładzie, że nasza sieć po przetworzeniu wektora E podała na wyjście wektor B = (0,1,0,1), czyli sygnał przestał oscylować między wektorami wzorcowymi A oraz B.
http://binboy.sphere.pl/index.php?show=150&drukuj=true
2007-01-24 21:03:04
Binboy at Sphere:Sieci neuronowe Hopfielda
Strona 4
Sieci neuronowe potrafią rozwiązać problemy, dla których nie istnieje znany wzór lub nie ma kompletnych danych. Dlatego stosuje się je do rozpoznawania obrazów, oczyszczania dźwięków z szumu, odczytywania zeskanowanego tekstu i wielu innych problemów.
Wyświetleń: 3061
biohazard (O użytkowniku)
Liczba punktów: 68
Użytkownik przyłączył się: 21.10.2005 i opublikował już: 1 artykuł.
Copyright © 2002-2007 by Binboy & Sphere
http://binboy.sphere.pl/index.php?show=150&drukuj=true
2007-01-24 21:03:04