KWIM-sieæ Hopfielda
Download
Report
Transcript KWIM-sieæ Hopfielda
Komputerowe Wspomaganie w
Inżynierii Materiałowej
Wprowadzenie do sieci
rekurencyjnych – sieć Hopfielda
Sieci rekurencyjne
Sieci rekurencyjne
W dotychczas omawianych sieciach nie rozważaliśmy przypadku, w którym
sygnał otrzymany na wyjściu trafiał powtórnie na wejścia sieci. Taki obieg
sygnału nazywamy sprzężeniem zwrotnym, a sieci w których to występuje
nazywamy sieciami rekurencyjnymi. Najbardziej znane sieci rekurencyjne to:
sieć Hopfielda
siec Hamminga
sieć RTRN (ang. Real Time Recurrent Network)
sieć Elmana
sieć BAM (ang. Bidirectional Associative Memory)
Przykład sieci rekurencyjnej
w11
w12
S, f
y1
w13
w21
w22
S, f
y2
w23
w31
w32
S, f
y3
w33
Na rysunku widać jednowarstwową sieć ze sprzężeniem zwrotnym. Widać, że
wyjścia z poszczególnych neuronów mogą być także kierowane na wejścia (tych
samych jak i innych neuronów). Na rysunku nie zaznaczono sygnałów wejściowych,
x1, x2, x3, gdyż są one podawane do sieci tylko raz.
Model sieci Hopfielda (n=3)
w12
S
1
S
1
S
1
y1
-1
w13
w21
y2
-1
w23
w31
w32
y3
-1
Klasyczna sieć Hopfielda nie posiada sprzężenia neuronu z samym sobą, tzn. waga takiego
połączenia jest równa zero, wii=0. Dlatego często na rysunkach z tymi sieciami nie jest w ogóle
rysowane połączenie i—i.
Klasyczna sieć Hopfielda jest więc siecią jednowarstwową składającą się z
neuronów połączonych każdy z każdym z wyjątkiem sprzężenia neuronu
samego ze sobą. Poniższe trzy warunki są charakterystyczne dla klasycznej
sieci Hopfielda:
1)
w ii 0 dla i 1,
, n.
2) Wagi tej sieci są symetryczne:
w ij w ji .
Zatem waga łącząca neuron j-ty z i-tym jest taka sama, jak waga łącząca i-ty z jtym.
3) Funkcje aktywacji w sieci Hopfielda są dwustanowe (np. bipolarna {-1, +1}
lub unipolarna {0,+1}).
Sposób funkcjonowania sieci Hopfielda jest odmienny od dotychczas
poznanych modeli sieci jednokierunkowych. Po pierwsze uczenie (czyli
dobór wag) polega na jednorazowym przypisaniu im odpowiednich
wartości (nie trzeba stosować jakichś skomplikowanych procedur jak
np. wsteczna propagacja). W trybie odtworzeniowym wagi nie ulegają
modyfikacjom, natomiast sygnał wejściowy inicjuje pobudzenie sieci,
która dzięki mechanizmowi sprzężenia zwrotnego wielokrotnie
przyjmuje na swoje wejście zmodyfikowany sygnał pierwotny, aż do
ustabilizowania odpowiedzi.
W trybie odtworzeniowym sygnał wielokrotnie przechodzi przez sieć
aż do ustabilizowania się odpowiedzi, tzn. do momentu w którym
sygnał nie ulega już dalszej zmianie. Ta ustabilizowana odpowiedź
jest przyjmowana jako wynik działania sieci.
Dobieranie wag w sieci Hopfielda
Jedną z metod uczenia sieci Hopfielda jest uogólniona metoda Hebba.
Zgodnie z tą regułą wagi definiowane są następująco
0
w ij 1
n
dla i j ,
T
(t )
dla i j ,
(t )
xi x j
t 1
gdzie
(1)
x ,x
(2)
,
,x
(T )
,
jest ciągiem wektorów uczących, a n jest liczbą neuronów w sieci. Taki tryb
uczenia sprawia, że wagi przyjmują wartości wynikające z uśrednienia wielu
próbek uczących.
Niestety ta prosta reguła nie daje zbyt dobrych rezultatów, gdyż pojemność
sieci przy takim sposobie uczenia stanowi tylko 13,8% liczby neuronów.
Ponadto prowadzi do licznych przekłamań. Dlatego częściej stosuje się metodę
pseudoinwersji.
Dobieranie wag w sieci Hopfielda (c.d.)
W zapisie macierzowym wzory na wagi wg uogólnionej reguły Hebba można zapisać
następująco
W
1
n
X
X
T
T I ,
gdzie I jest macierzą jednostkową (jedynki na przekątnej, poza nią zera), X jest
macierzą której kolumnami są wektory ciągu uczącego, XT oznacza transponowanie
macierzy X, stała T jest liczbą wektorów uczących).
Jak już wiemy funkcje aktywacji w sieci Hopfielda są dwustanowe. W praktyce
używa się funkcji bipolarnej {-1, 1} lub unipolarnej {0, 1}. Podobnie jest z wektorami
sygnałów: składają się z współrzędnych bipolarnych lub unipolarnych. Jeżeli
stosujemy wektory unipolarne, to uogólniona reguła Hebba (formuła powyżej lub
poprzedni slajd) przyjmie postać
0
w ij 1
n
dla i j ,
T
t 1
(t )
(2 x i
1)(2 x j 1)
(t )
dla i j ,
Przykład
(regułą Hebba dla sieci Hopfielda)
Dany jest zbiór wektorów (wzorców) kodowanych bipolarnie ({-1,+1})
x
(1)
(1, 1,1,1, 1), x
(2)
( 1, 1,1,1,1), x
(3)
(1,1,1, 1, 1).
Stosując omawiane już wzory na macierz wag
W
1
n
X
X
T
T I lub
0
w ij 1
n
dla i j ,
T
x
(t )
i
dla i j ,
(t )
xj
t 1
gdzie T=3, n=5 otrzymujemy
0
1
1
W 1
5
1
3
1
1
1
0
1
3
1
0
1
3
1
0
1
1
1
3
0
1
0.2
1 0.2
1 0.2
0 0.6
0.2
0.2
0.2
0
0.2
0.6
0.2
0
0.2
0.6
0.2
0
0.2
0.2
0.2
0.6
0.2
0.2 .
0.2
0
Podkreślmy, że uzyskana
macierz
wag
została
zbudowana wg uogólnionej
reguły
Hebba.
Dalej
pokażemy inny sposób
nadawania wag dla sieci
Hopfileda
Metoda pseudoinwersji dla sieci Hopfielda
Punktem wyjścia w tej metodzie jest założenie, że przy właściwie dobranych
wagach wij każdy wzorzec x(t) z ciągu uczącego podany na wejście generuje na
wyjściu samego siebie, prowadząc zatem do natychmiastowego stanu ustalonego.
Mamy więc warunek Wx(t)=x(t) co można zapisać tak:
n
w ij x j x i
(t )
dla i 1,
(t )
, n , t 1,
,T .
j 1
Jeżeli wprowadzimy pomocniczą macierz X, której kolumnami są kolejne
wektory uczące
X [x ,
(1)
,x
(T )
],
to warunki Wx(t)=x(t) można zapisać w postaci następującego równania
macierzowego
WX X ,
gdzie W jest macierzą wag o wymiarach n x n, a X jest macierzą prostokątną o
wymiarach n x T.
Rozwiązanie takiego układu (pamiętajmy, że macierz X jest dana a szukana jest
macierz W) jest następującej postaci
W XX ,
gdzie X+ oznacza tzw. pseudoinwersję (pseudoodwrotność) macierzy X.
Jeżeli wektory uczące
x
(1 )
,x
(2)
,
,x
(T )
są liniowo niezależne, to macierz W może być wyrażona przy pomocy
zwykłej odwrotności (nie musimy używać pseudoinwersji):
W X (X
T
X)
1
X .
T
Przykład
Użyjemy sieci Hopfielda do rozpoznawania trzech cyfr: 1, 4 i 7. Cyfry są
definiowane na matrycy 3x4:
Ciąg uczący tworzymy wg kodowania: biały piksel = -1; czarny piksel = +1 ma
postać
x (1) ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
x(
2)
( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
x(
3)
( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1).
x (1) ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
Wektory
kodujące cyfry
1, 4, 7
Wektory zapisane
kolumnowo i macierz
X zawierająca te
wektory jako kolejne
kolumny
x
(1 )
x(
2)
( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
x(
3)
( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1).
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
, x ( 2 ) , x ( 3 ) 1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
X
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
.
1
1
1
1
1
1
1
T
X X
1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1 1
1 1
Mnożymy macierz transponowaną XT przez macierz X
i otrzymujemy macierz kwadratową (wymiaru
takiego, jakiego była liczba wektorów uczących – w
tym przypadku 3).
X TX
Teraz macierz
musimy odwrócić (jest to możliwe,
gdyż wektory x(1), x(2), x(3) są liniowo niezależne).
T
(X X )
1
12
6
8
6
12
6
8
6
12
1
0.1607
0.0357
0.0893
0.0357
0.1190
0.0357
1
1
1
1
1
1
1
1
1
1
1
1
0.0893
0.0357
0.1607
1
1
1
1
1
1
1
1
1
1
1
1
1 12
1 6
1 8
1
1
1
1
1
1
1
1
1
6
12
6
8
6 .
12
T
1
X (X X ) X
T
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0.1607
0.0357
0.0893
0.0357
0.1190
0.0357
0.0893 1
0.0357
1
0.1607 1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1
1 1
1 1
1 1
Po wykonaniu mnożeń macierzy uzyskamy ostatecznie macierz wag W=X(XTX)-1XT dla
przykładowej sieci. Jest to macierz kwadratowa wymiaru 12x12 (liczba wejść do
sieci – w przykładzie jest to związane z liczbą pikseli matrycy).
W X (X X )
T
1
X
T
0,404762 0,190476
0,02381
0,190476 0,404762
0,02381
-0,02381
-0,02381
0,02381
-0,02381
-0,02381
0,02381
0,190476 0,619048
-0,04762
-0,38095
0,190476
-0,04762
0,047619 0,047619
-0,04762
0,047619 0,047619
-0,04762
0,02381
-0,04762
0,119048
-0,04762
0,02381
0,119048
-0,11905
-0,11905
0,119048
-0,11905
-0,11905
0,119048
0,190476
-0,38095
-0,04762
0,619048 0,190476
-0,04762
0,047619 0,047619
-0,04762
0,047619 0,047619
-0,04762
0,404762 0,190476
0,02381
0,190476 0,404762
0,02381
-0,02381
-0,02381
0,02381
-0,02381
-0,02381
0,02381
0,02381
-0,04762
0,119048
-0,04762
0,02381
0,119048
-0,11905
-0,11905
0,119048
-0,11905
-0,11905
0,119048
-0,02381
0,047619
-0,11905
0,047619
-0,02381
-0,11905
0,119048 0,119048
-0,11905
0,119048 0,119048
-0,11905
-0,02381
0,047619
-0,11905
0,047619
-0,02381
-0,11905
0,119048 0,119048
-0,11905
0,119048 0,119048
-0,11905
0,02381
-0,04762
0,119048
-0,04762
0,02381
0,119048
-0,11905
-0,11905
0,119048
-0,11905
-0,11905
0,119048
-0,02381
0,047619
-0,11905
0,047619
-0,02381
-0,11905
0,119048 0,119048
-0,11905
0,119048 0,119048
-0,11905
-0,02381
0,047619
-0,11905
0,047619
-0,02381
-0,11905
0,119048 0,119048
-0,11905
0,119048 0,119048
-0,11905
0,02381
-0,04762
0,119048
-0,04762
0,02381
0,119048
-0,11905
0,119048
-0,11905
0,119048
-0,11905
-0,11905
Przykład (c.d.)
Teraz zaszumimy (ang. noise) trzy cyfry: 1, 4 i 7, aby sprawdzić jaka będzie
odpowiedź sieci.
Obrazy kodujemy wg schematu: biały piksel = -1; czarny piksel = +1.
x sz(1) ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
x sz( 2 ) ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
x sz( 3 ) ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1).
Po kilku iteracjach sieć prawidłowo rozpoznaje cyfrę 1 i cyfrę 4.
Natomiast pojawiają się problemy z rozpoznawaniem zaburzonej
cyfry 7. W tym przypadku wektor kodujący zaburzoną cyfrę, czyli
x sz( 3 ) ( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
podany na wejście sieci generuje na wyjściu samego siebie. Jest to
punkt stały sieci.
Oczywiście przykład jest bardzo prosty, gdyż użyliśmy małej matrycy,
3x4. W praktyce musimy stosować większą liczbę pikseli.
Opis działania sieci Hopfielda w trybie odtworzeniowym
Część liniowa i-tego neuronu w kroku t+1:
n
s i ( t 1)
w ij y j ( t ) w i 0 ,
j 1, j i
gdzie y(t) jest wartością na wyjściu j-tego neurony w kroku t (tzn. poprzednim).
Oczywiście wyjście z części sumacyjnej jest jak poddawane dalej działaniu
funkcji aktywacji f, więc ostatecznie sygnał wyjściowy jest dany przez
y i ( t ) f ( s i ( t )),
Zakładamy, że wszystkie neuronu mają taką samą funkcję aktywacji f(s).
Wprowadzając jak zwykle pomocniczy sygnał polaryzacji y0(k)=1 dla progu,
możemy zapisać powyższe wzory w sposób bardziej zwarty następująco:
y i ( t 1) f
w ij y j ( t ) ,
j 0, j i
n
gdzie sumowanie zaczyna się od zera, a t=0,1,… (kolejne iteracje pętli
pobudzenia).
Ponadto należy jeszcze wprowadzić sygnał wejściowy początkowy, który
inicjalizuje pobudzenie sieci. Tak więc mamy
y i (0) x i dla i 0,1,
przy czym x0=1.
, n,
Sieć jest ustabilizowana, jeżeli dla pewnego kroku t zachodzi warunek
y i ( t 1) y i ( t ) dla i 1,
, n,
dla każdego neuronu, i=1,…,n.
Oczywiście zachodzi podstawowe pytanie: czy powyższy warunek stabilizacji
zostanie osiągnięty? W ogólnym przypadku warunek stabilizacji oznacza, że
wartości sygnałów yi(k) dążą (w sensie granicy matematycznej) do jakiejś
wartości
lim y i ( k ) y i ,
k
co sugerowałoby słabszy warunek zakończenia obliczeń, a mianowicie
y i ( k 1) y i ( k ).
Okazuje się, że w ogólności taka stabilność nie musi zachodzić dla dowolnej
sieci rekurencyjnej. Wszystko zależy od struktury sieci, wartości wag wij oraz
od postaci funkcji aktywacji. Także wybór wektorów sygnałów początkowych
może mieć wpływ na końcową stabilność.
Omawiana sieć Hopfielda z podanymi dwiema metodami uczenia zapewnia
stabilizację pobudzonej sieci.
Przypomnijmy podstawowe założenia tej sieci rekurencyjnej:
1 gdy s 0,
f ( s ) sgn( s )
1 gdy s 0,
W W ,
T
wi ,i 0 .
Przykład
Wykorzystamy sieć Hopfielda do zapamiętania i rozpoznawania cyfr 0-9. Wzorcowe cyfry
są zdefiniowane na matrycy o wymiarach 7x7 pikseli. Przedstawione są poniżej – zostały
ona użyte do uczenia sieci metodą pseudoinwersji. Liczba neuronów sieci jest równa
liczbie pikseli matrycy: 7·7=49. W kodowaniu użyto schematu: → (-1), → (+1).
Pierwszy wiersz – wzorce.
Drugi wiersz – przykładowe zaburzone cyfry poprawnie rozpoznane.
Trzeci wiersz – przykładowe obrazy, które nie zostały zakwalifikowane do kategorii z
pierwszego wiersza. W przypadku cyfry 2 wydaje się to poprawne (mimo, że zaburzenie jest
minimalne, ale dla cyfry 4 raczej uznalibyśmy to z błąd sieci.
Cyfry
wzorcowe
`
Wzorce
Rozpoznane
Wzorce
klasyfikowane
do innych
kategorii
`