Sieci neuronowe Skrypt rozdzial 10


Ćwiczenie 10
SIECI NEURONOWE I  SIECI JEDNOKIERUNKOWE
Celem ćwiczenia jest zaznajomienie studentów z podstawowymi
pojęciami z zakresu sieci neuronowych, takimi jak: neuron, sieć neuronowa,
funkcja aktywacji, struktura sieci neuronowej, uczenie sieci neuronowej.
Podczas ćwiczenia badana jest wielowarstwowa jednokierunkowa sieć
neuronowa (wielowarstwowy perceptron) wraz z jej algorytmem uczenia -
algorytmem propagacji wstecz. W szczególności badana jest możliwość
aproksymacji dowolnej funkcji za pomocą tego typu sieci.
I. WSTP
Początki badań nad modelami biologicznych (naturalnych) sieci
neuronowych sięgają lat czterdziestych dwudziestego wieku, kiedy to
sformułowano matematyczny model pojedynczego neuronu. Od tego czasu do
chwili obecnej dziedzina wiedzy zajmująca się modelami sieci neuronowych
(sztucznymi sieciami neuronowymi) rozwinęła się w sposób, który z pewnością
zadziwił wielu luminarzy współczesnej nauki. Rozwój ten dotyczy zarówno
samej teorii sztucznych sieci neuronowych, a więc ich struktur i algorytmów
uczenia, jak również dziedzin ich zastosowania. Prawdopodobnie łatwiej
obecnie wymienić obszary nauki, w których sieci neuronowych nie usiłowano
jeszcze zastosować niż te, w których z mniejszym lub większym powodzeniem
sztuczne sieci neuronowe są wykorzystywane.
Obecnie w wyrażeniu "sztuczne sieci neuronowe", określającym
software'ową lub (rzadziej) hardware'ową implementację matematycznego
modelu sieci neuronowej, najczęściej pomija się przymiotnik "sztuczne",
mówiąc po prostu "sieci neuronowe". My również w niniejszej instrukcji
przyjmiemy taką konwencję.
II. PODSTAWOWE POJCIA
1. Sieć neuronowa i jej elementy składowe
Sieć neuronowa
Siecią neuronową nazywamy układ wzajemnie połączonych
podstawowych elementów nazywanych neuronami.
Model neuronu
Neuron jest elementem statycznym posiadającym N wejść i jedno wyjście.
Został przedstawiony na rysunku 1a. Sygnał wyjściowy neuronu zależy od
sygnałów wejściowych i wyraża się następującym wzorem 1:
N
# ś#
y = f wj x + b (1)
"1 j #
ś# ź#
# j=
gdzie:
y - sygnał wyjściowy neuronu,
x1, x2 ,K, xN - sygnały wejściowe neuronu,
f (") - funkcja aktywacji neuronu,
w1,w2 ,K,wN - wagi neuronu,
b - składnik stały (przesunięcie).
Wielkość występująca we wzorze (1) w nawiasie, będąca ważoną sumą
sygnałów wejściowych i składnika stałego, nazywana jest pobudzeniem neuronu
i oznaczana tutaj będzie symbolem v.
a)
b)
x1 w1
x2 w2
v v
y y
f
f
x
wT
"
M
b
xN wN
b
Rys.1. Model neuronu
1
W literaturze spotykane są również inne, bardziej złożone, modele neuronu.
Dla uproszczenia wzoru (1) często zakłada się istnienie dodatkowego sygnału x0
stale równego jedności, który wchodzi do ważonej sumy z wagą w0 = b. Mamy
wtedy
N
# ś#
y = f " w x
ś# ź#
j j
# j =0 #
Przesunięcie b można więc traktować jako zerową wagę neuronu.
Po wprowadzeniu zapisu wektorowego sygnałów wejściowych i wag
xT = [x1, x2,KxN ], wT = [w1,w2 ,K,wN ] uzyskamy następującą postać wzoru
(1):
y = f (wT x + b) (2)
Graficznie zależność (2) została przedstawiona na rysunku 1b. Sygnał
wektorowy x został na nim zaznaczony pogrubioną linią.
Funkcja aktywacji
Funkcja aktywacji neuronu może być dowolną (w ogólności nieliniową)
funkcją przekształcającą pobudzenie neuronu v w sygnał wyjściowy y
y = f (v). (3)
Przykłady takich funkcji zostały przedstawione na rys. 2
W sieciach neuronowych uczonych przy użyciu metod gradientowych
wykorzystuje się neurony, których funkcje aktywacji są różniczkowalne ze
względu na v. Spośród prezentowanych na rys.2. funkcji aktywacji cechę taką
posiadają funkcje a), e) i f ), a więc funkcja liniowa, tangens hiperboliczny i
funkcja sigmoidalna. Funkcje te ponadto charakteryzują się cechą wygodną ze
względów obliczeniowych. Mianowicie wartości ich pochodnych w prosty
sposób zależą od wartości tych funkcji. Dla funkcji a), e) i f ) mamy
odpowiednio:
2
y = f (v) = v ! f (v) = 1
1
2
y = f (v) = th(v) ! f (v) = (1+ y)(1- y) (4)
2
1
2
y = f (v) = ! f (v) = y(1- y)
1+ e-v
y y
a) d)
1
-1
v v
1
00
-1
y = v ż#-1 gdy v < -1
#
#
y = v gdy v d" 1
#
1 gdy v > 1
#
y y
b) e)
1
1
v v
00
-1
-1
ż#-1 gdy v < 0
1- e-v
#
y = sgn(v) =
y = th(v) =
1 gdy v e" 0
#
1+ e-v
y y
c) f )
1
1
05
,
v v
00
ż#0 gdy v < 0
1
y =
#
y = 1(v) =
1 gdy v e" 0
# 1+ e-v
Rys. 2. Przykłady funkcji aktywacji neuronu
Warstwa neuronów
Często wygodnie jest wydzielić spośród wszystkich neuronów sieci
pewne grupy nazywane warstwami. Cechą wspólną neuronów należących do
jednej warstwy jest to, że posiadają te same sygnały wejściowe.
Rozpatrzmy warstwę złożoną z M neuronów - rysunek 3a.
a)
x1 f y1
"
b1
b)
v
x2 f y2
"
f y
x
W
b2
b
M MM
xN f yM
"
bM
Rys.3. Warstwa neuronów
Sygnał wyjściowy i-tego neuronu dany jest wzorem
N
# ś#
,
yi = f ś# wij x + bi ź#, i = 12,K, M. (5)
"
j
j=0
# #
Podobnie jak wcześniej możemy zastosować zapis macierzowy. Jeśli
wprowadzimy oznaczenia:
x1 y1 b1
Ą# ń# Ą# ń# Ą# w11 w12 L w1N ń# Ą# ń#
ó# Ą# ó# Ą# ó# ó# Ą#
x2 y2 w21 w22 L w2N Ą# b2
x = (6)
ó# Ą#, y = ó# Ą#, W = ó# Ą#, b = ó# Ą#
MM M M O M M
ó# Ą# ó# Ą# ó# Ą# ó# Ą#
xN yMwM1 wM 2 L wMN bM
Ł# Ś# Ł# Ś# Ł# Ś# Ł# Ś#
uzyskamy macierzową postać równania (5)
y = f (Wx + b). (7)
Ilustruje to rysunek 3b.
2. Projektowanie sieci neuronowych
Zanim przystąpi się do wykorzystania sieci neuronowej do konkretnego
celu należy ją zaprojektować. Projektowanie sieci neuronowej można podzielić
na dwa etapy: określenie struktury sieci neuronowej oraz uczenie sieci
neuronowej.
Określenie struktury sieci neuronowej
Polega ono na:
a) określeniu liczby neuronów sieci,
b) określeniu dla każdego neuronu postaci funkcji aktywacji,
c) określeniu dla każdego neuronu sygnałów wejściowych,
Jeżeli sygnały wejściowe grupy neuronów są jednakowe, można je
traktować jako warstwę neuronów. Z reguły dla neuronów jednej warstwy
przyjmuje się taką samą funkcję aktywacji.
Uczenie sieci neuronowej
Uczenie sieci neuronowej polega na takim doborze wag tej sieci, aby
spełniała ona wymagania stawiane przed nią przez jej projektanta.
W praktyce zdarza się, że wyodrębnione powyżej fazy pracy sieci
neuronowej nie są rozdzielne. W szczególności podczas wykorzystywania
(stosowania) sieci neuronowej do konkretnego celu może następować jej
"douczanie". Ponadto w niektórych algorytmach podczas uczenia sieci
neuronowej możliwa jest modyfikacja jej struktury.
II. WIELOWARSTWOWA JEDNOKIERUNKOWA SIEĆ NEURONO-
WA (WIELOWARSTWOWY PERCEPTRON)
1. Struktura sieci
Wielowarstwowa jednokierunkowa sieć neuronowa została przedstawiona
na rysunku 4a.
Struktura takiej sieci posiada następujące cechy:
a) neurony podzielone są na P warstw,
b) sygnałami wejściowymi k-tej (następnej) warstwy są sygnały wyjściowe
warstwy k - 1-szej (poprzedniej),
c) zewnętrzne sygnały wejściowe podawane są na wejścia neuronów
warstwy pierwszej,
d) sygnały wyjściowe warstwy P-tej (ostatniej) są sygnałami wyjściowymi
całej sieci.
Przyjęło się nazywać wszystkie warstwy sieci, za wyjątkiem ostatniej,
warstwami ukrytymi.
Wielowarstwowa jednokierunkowa sieć neuronowa nazywana jest
również wielowarstwowym perceptronem 2.
a)
L
warstwa 1 warstwa 2 warstwa P
1
2 P
1 2
y1 w11
y1 w11
w11
1 2 P P
L
x1 w12 " f " f f y1
"
1 2 P
w12 2 w12
1
b1 b1
b1P
1 2
y2 y2
2
1 P P
L
" f
x2 " f " f y2
1
P
2
b2
b2
b2
M MM M M
M M M
M
2 P P
1
L
xN " f f yLP
" f "
y1 y2
L1 L2
2
P
b1 bL2
bLP
L1
b)
P
y2 y P-1 v
y1
v1
v2
1 2 P P
2 P
1
L
x f f f y
W W
W
b1 b2
bP
Rys.4. Wielowarstwowy perceptron
Przyjmujemy konwencję, zgodnie z którą indeks górny oznacza numer
warstwy. Sygnał wyjściowy i-tego neuronu k-tej warstwy dany jest wzorem:
Lk-1
#ś#
k
ś#ź#
yik = f wik yk -1 + bik (8)
" j j
ś#ź#
j=1
# #
gdzie:
k
wij - waga połączenia i-tego neuronu k-tej warstwy z j-tym
neuronem warstwy wcześniejszej,
bik - przesunięcie i-tego neuronu k-tej warstwy,
k
f - funkcja aktywacji neuronów k-tej warstwy,
Lk - liczba neuronów w warstwie k-tej.
2
Niekiedy nazwa ta jest rezerwowana jedynie dla wielowarstwowych jednokierunkowych
sieci neuronowych, których neurony mają funkcje aktywacji w postaci skoku jednostkowego.
Wejściami pierwszej warstwy są sygnały x1, x2 ,K, xN . Stąd aby wzór (8)
obowiązywał również dla warstwy pierwszej przyjmuje się yi0 = xi dla
i = 12,K, N .
,
Wykorzystując jak poprzednio zapis macierzowy otrzymamy postać
macierzową wzoru (8):
k
yk = f (W yk -1 + bk ) (9)
Odpowiada temu graficzna reprezentacja przedstawiona na rysunku 4b.
2. Algorytm propagacji wstecz
Zadaniem algorytmu uczenia wielowarstwowego perceptronu jest taki
dobór wag neuronów sieci aby dla danego sygnału wejściowego sieci x sygnał
P
na jej wyjściu y był równy sygnałowi zadanemu d. Aby to osiągnąć definiuje
P
się wskaznik jakości wyrażający miarę niedopasowania wektorów y i d
LP
1
J = (yiP - di )2 . (10)
"
2
i=1
Par {x,d} jest oczywiście więcej. Wszystkie one tworzą tzw. zbiór uczący.
W kolejnych iteracjach algorytmu uwzględnia się jedną parę ze zbioru uczącego.
Doboru wag sieci dokonuje się przy użyciu iteracyjnej metody gradientowej
nazywanej algorytmem propagacji wstecz (ang. backpropagation):
"J
k k
wij (t + 1) = wij (t) -  , (11)
k
"wij (t)
"J
bik (t + 1) = bik (t) -  (12)
"bik (t)
gdzie t oznacza numer iteracji algorytmu propagacji wstecz. "Nowa" wartość
wagi sieci neuronowej zależy od jej "starej" wartości oraz od pochodnej
wskaznika jakości względem tej wagi. Zmiana wagi następuje w kierunku
"malenia" wskaznika jakości J. Współczynnik  jest małą dodatnią liczbą i
nazywany jest współczynnikiem nauki.
Idea algorytmu polega na sposobie wyznaczenia pochodnych
występujących we wzorach (11), (12). Wyprowadzimy obecnie wzory służące
do ich wyznaczania. Dla uproszczenia dalszych rozważań będziemy pomijać
numer iteracji t. Ponadto założymy (co nie wpłynie na ogólność rozważań), że
funkcje aktywacji wszystkich neuronów sieci są jednakowe.
"J
Aby wyznaczyć pochodną spójrzmy jeszcze raz na rysunek 4. Waga
k
"wij
k
wij wpływa na wartość wskaznika jakości jedynie poprzez pobudzenie vik .
Poszukiwana pochodna równa jest zatem
"vik
"J "J
= . (13)
k k
"wij "vik "wij
"vik
Zauważmy, że drugi czynnik w otrzymanym wzorze = yk -1. Wprowadzmy
k
"wij j
"J
k
ponadto oznaczenie i = . Otrzymamy wzór
"vik
"J
k
= i yk -1, (14)
j
k
"wij
k
w którym nieznana jest wielkość i . Dla ostatniej (wyjściowej) warstwy sieci
otrzymamy
"yiP
"J "J
iP = = . (15)
"viP "yiP "viP
Korzystając z (10) możemy wyznaczyć pierwszy czynnik prawej strony
równania (15):
"J
= yiP - di. (16)
"yiP
Drugi czynnik jest natomiast pochodną funkcji aktywacji f 2 (viP ). Dla ostatniej
warstwy sieci otrzymujemy więc ostatecznie
iP = f 2 (viP )(yiP - di ). (17)
Dla neuronów warstw wcześniejszych (ukrytych) dostajemy natomiast
"yik "J
"J "J
k
i = = = f 2 (vik ). (18)
"vik "yik "vik "yik
Ponieważ yik wpływa na wskaznik jakości poprzez stany pobudzeń
k
wszystkich neuronów warstwy następnej vm+1, pierwszy czynnik prawej strony
równania (18) możemy rozpisać następująco
Lk+1
k
"vm+1 Lk+1 k k +1
"J "J
== m+1wmi . (19)
""
k
"yik "vm+1 "yik
m=1 m=1
k
Podstawiając (19) do (18) otrzymamy ostatecznie wzór na i dla warstw
wcześniejszych
Lk +1
k k k +1
i = f 2 (vik ) m+1wmi ; k = 1,K, P - 1. (20)
"
m=1
"J
Pozostaje jeszcze wyznaczenie pochodnych występujących we
"bik
wzorze (12). Aatwo wykazać, że
"J
k
= i . (21)
"bik
Sprawdzenie tego pozostawiamy czytelnikowi.
Jak widać ze wzoru (20) odpowiednie pochodne wyznaczane są w
kierunku przeciwnym do kierunku przepływu sygnałów w sieci - stąd nazwa
algorytmu.
Podobnie jak poprzednio możemy wprowadzić oznaczenia macierzowe:
Ą# "J "J "J ń#
Ą# ń#
"J
L
kk k k
Ą# ń#
k
ó#
ó# Ą#
"w11 "w12 "w1Lk-1 Ą# 1
"y1
ó# Ą#
"J "J
ó# Ą#
ó# Ą#
= MM O M , = M , k = M
k
ó# Ą#
"W ó# Ą# "yk "J
ó# Ą#
"J "J "J k
Ł# Ś#
Lk
k k k k
ó#"wL 1 "wLk 2 L
ó#"yL Ą#
"wLk Lk-1 Ą#
Ł# Ś#
Ł# Ś#
k k
(22)
k
Ą# ń#
f 2 (v1 ) 0 L 0
ó# k Ą#
0 f 2
(v2 ) L 0
ó# Ą#
f 2 (vk ) = .
MM O M
ó# Ą#
k
00 L f 2 (vLk )Ś#
Ł#
Uzyskamy wtedy zwięzłe macierzowe postaci wzorów (11), (12), (14), (16) i
(21).
"J
kk
W (t + 1) = W (t) -  (23)
k
W (t)
"J
bk (t + 1) = bk (t) -  (24)
bk (t)
"J
= k ( yk -1)T (25)
k
"W
"J
= k (26)
"bk
P P
P = f 2 (v )( y - d) (27)
k +1
k = f 2 (vk )(W )T k +1; k = 1,K, P - 1 (28)
Propagację wstecz opisaną wzorami (23) - (28) można przedstawić w
postaci schematu blokowego przedstawionego na rysunku 5.
P
P-1


1
P
P-1 P-1 P P
y - d
L
f 2 (v1) (W )T f 2 (v ) (W )T f 2 (v )
T
P-2 P-1
xT
( y )T ( y )
"J
"J
"J "J "J
"J
1
P-1 P-1 P
P
"W
"b1
"W "b "W
"b
Rys.5. Graficzna reprezentacja algorytmu propagacji wstecz
Podsumowując wszystkie wcześniejsze rozważania możemy teraz
przedstawić algorytm uczenia wielowarstwowego perceptronu.
Algorytm propagacji wstecz
1. Ustaw wszystkie wagi sieci jako małe losowe liczby.
2. Podaj na wejście sieci kolejny sygnał uczący x.
3. Dokonaj propagacji wprzód zgodnie z (9) wyznaczając wszystkie sygnały
sieci.
P
4. Porównaj sygnał wyjściowy sieci y z zadanym sygnałem wejściowym d.
5. Dokonaj propagacji błędu wstecz zgodnie z (27) i (28).
6. Wyznacz nowe wartości wag korzystając z (23) - (26).
7. Wróć do punktu 2.
Początkowa randomizacja wag jest konieczna gdyż dla zerowych wartości
wag odpowiednie pochodne byłyby również zerowe, co uniemożliwiłoby
skuteczną naukę sieci.
2
Pochodną funkcji aktywacji f (") występującą we wzorach (27), (28)
wygodnie jest obliczyć korzystając z zależności (4).
3. Własności wielowarstwowego perceptronu i algorytmu propagacji wstecz
Podstawową własnością wielowarstwowego perceptronu, która
zadecydowała o tym, że jest to obecnie najchętniej i najczęściej
wykorzystywana sieć neuronowa, jest jej zdolność do aproksymacji dowolnych
nieliniowych funkcji.
Zdolności te są poparte odpowiednimi twierdzeniami. W szczególności
dowodzi się, że za pomocą dwuwarstwowej jednokierunkowej sieci neuronowej
można z dowolną dokładnością aproksymować dowolną ciągłą nieliniową
funkcję nad dowolnym domkniętym i ograniczonym obszarem, przy czym
dokładność tej aproksymacji zależy od liczby neuronów w warstwie pierwszej
(ukrytej).
Niestety fakt, że dana sieć neuronowa o określonej strukturze posiada
możliwość aproksymacji zadanej funkcji nie oznacza, że stosując algorytm
propagacji wstecz zawsze uda się to osiągnąć. Przeszkodą może być zbyt duża
wartość współczynnika nauki  co może spowodować destabilizację algorytm.
Innym powodem może okazać się osiągnięcie przez algorytm tzw. lokalnego
minimum. Algorytm propagacji wstecz jest bowiem algorytmem gradientowym
minimalizującym wskaznik jakości w przestrzeni wag. Wymiar tej przestrzeni
jest równy liczbie wszystkich wag sieci neuronowej. Oprócz globalnego
minimum wskaznika jakości w przestrzeni tej mogą wystąpić minima lokalne,
po osiągnięciu których algorytm zatrzymuje się. Rozwiązaniem tego problemu
może być "wytrącenie" algorytmu z tego punktu równowagi poprzez niewielką
zmianę wag lub ponowne zainicjowanie algorytmu dla innych początkowych
wartości wag. Inną wadą standardowego algorytmu propagacji wstecz jest jego
stosunkowo wolna zbieżność.
Reasumując, w przypadku gdy uczenie sieci nie zakończyło się sukcesem
należy wykonać jedną z poniższych czynności:
" zmienić wartość współczynnika nauki ,
" zainicjować algorytm startując od innych początkowych wartości wag,
" w przypadku gdy powyższe działania nie przynoszą pozytywnego skutku
zmienić strukturę sieci.
Nadmienić w tym miejscu wypada, że dużą rolę odgrywa doświadczenie
projektanta sieci neuronowej.
4. Warianty algorytmu propagacji wstecz
Aby wyeliminować lub zmniejszyć wpływ wymienionych wyżej wad
algorytmu propagacji wstecz stosuje się różne jego modyfikacje mające na celu
usprawnienie procesu uczenia. Zainteresowanych odsyłamy do podanej
literatury, w szczególności do [5]. Wymienimy tutaj jedynie dwa warianty
omawianego algorytmu  uczenie ze współczynnikiem momentum oraz
kumulacyjną propagację wsteczną.
Uczenie ze współczynnikiem momentum
Polega ono na uzupełnieniu wzorów (23) i (24) o składniki wnoszące
informację o zmianie wag w poprzedniej iteracji algorytmu
"J
kk kk
W (t + 1) = W (t) -  + ą(W (t) - W (t - 1)). (29)
k
W (t)
"J
bk (t + 1) = bk (t) -  + ą(bk (t) - bk (t - 1)) (30)
bk (t)
Współczynnik ą dobierany jest z przedziału [0 ,1). Modyfikacja ta sprawia, że
trajektoria w przestrzeni wag sieci neuronowej "wygładza się", a dla obszarów
przestrzeni wag w których moduł gradientu wskaznika jakości jest mały i
uczenie przebiegałoby powoli, następuje przyśpieszenie procesu uczenia.
Kumulacyjny algorytm propagacji wstecz
Polega on na tym, że modyfikacji wag nie dokonuje się w każdym kroku
algorytmu ale pochodne występujące we wzorach (23) i (24) sumuje się dla
całego zbioru uczącego. Dopiero otrzymana suma jest wykorzystywana do
modyfikacji wag.
III. PRZEBIEG ĆWICZENIA
1. Napisać program realizujący proces uczenia metodą propagacji wstecz
wielowarstwowego perceptronu zadanej przez prowadzącego funkcji.
2. Zbadać wpływ:
a) liczby warstw sieci,
b) postaci funkcji aktywacji neuronów poszczególnych warstw sieci,
c) liczby neuronów w poszczególnych warstwach,
d) wartości współczynnika nauki i momentum,
na:
a) przebieg procesu uczenia sieci,
b) jakość aproksymacji zadanej funkcji.
IV. SPRAWOZDANIE
Sprawozdanie powinno zawierać pełną dokumentację z przeprowadzenia
ćwiczenia zgodnie z zadanym jego przebiegiem oraz omówienie uzyskanych
rezultatów.
LITERATURA
1. J. Hertz, A. Krogh, R.G. Palmer, Wstęp do teorii obliczeń neuronowych,
WNT, Warszawa 1993,
2. R. Tadeusiewicz, Sieci neuronowe, Akademicka Oficyna wydawnicza,
Warszawa 1993,
3. J. Korbicz, A. Obuchowicz, D. Uciński, Sztuczne sieci neuronowe - podstawy
i zastosowania, Akademicka Oficyna Wydawnicza, Warszawa 1994,
4. S. Osowski, Sieci neuronowe, Oficyna Wydawnicza Politechniki
Warszawskiej, Warszawa 1996,
5. S. Osowski, Sieci neuronowe w ujęciu algorytmicznym, WNT, Warszawa
1996.


Wyszukiwarka

Podobne podstrony:
Ontogeniczne sieci neuronowe skrypt(1)
Rozdział 10
03 Rozdzial 10 13
Zadania do rozdzialu 10
Rozdział2 (10)
StatSoft Wprowadzenie do sieci neuronowych
Nieeuklidesowe sieci neuronowe
rozdzial (10)
rozdzial (10)
SIECI NEURONOWE
Zastosowanie sieci neuronowych w ekonomi
S Johansson, Origins of language (rozdział 10)

więcej podobnych podstron