• Nie Znaleziono Wyników

Laboratorium nr 4 LINIOWE SIECI NEURONOWE

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium nr 4 LINIOWE SIECI NEURONOWE "

Copied!
7
0
0

Pełen tekst

(1)

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i

Telekomunikacji

Instytut Sterowania i Systemów Informatycznych

ELEMENTY SZTUCZNEJ INTELIGENCJI Semestr letni 2010

Laboratorium nr 4 LINIOWE SIECI NEURONOWE

Prowadzący: ………..

Cele ćwiczeń:

1. Celem ćwiczenia jest poznanie struktur sieci neuronowych zbudowanych przy użyciu neuronów liniowych jak również poznanie metod ich uczenia oraz zbadanie zalet oraz ograniczeń niniejszych struktur.

Struktura liniowych sieci neuronowych pod wieloma względami przypomina sieci

perceptronowe, jedyna różnica polega na wykorzystaniu w liniowych neuronach liniowej funkcji aktywacji w zamian za funkcję skokową (Rys. 1). Dzięki liniowej funkcji aktywacji neurony są w stanie generować sygnały wyjściowe o dowolnej wartości jednakże nie są wolne od ograniczenia znanego dla perceptronów a mianowicie mogą rozwiązywać jedynie problemy, które są liniowo separowalne.

=

=

n

i i iw u

0

ϕ

y = a ϕ

Rys. 1 Struktura neuronu z liniową funkcją aktywacji gdzie u1, u2, ..., un - sygnały wejściowe, w1, w2, ..., wn - wartości wag, y - sygnał wyjściowy

u

u

u w w

w

ϕ y

Blok aktywa w

1

(2)

Rys. 2 Granica decyzyjne neuronu z liniową funkcją aktywacji

Neuron o strukturze przedstawionej na rysunku 1 może być tak uczony, aby realizował funkcje liniowe lub by aproksymował za pomocą funkcji liniowych funkcje nieliniowe jednakże neuron liniowy w żadnym wypadku nie jest w stanie realizować odwzorowań nieliniowych. Podobnie jak dla perceptronu można w przestrzeni zmiennych wejściowych wyznaczyć dla liniowego neuronu granicę decyzyjną, dla której neuron generuje sygnał o wartości 0 na wyjściu.

Sygnałom wejściowym znajdującym się na rysunku w jego górnej ciemniejszej części odpowiada na wyjściu neuronu sygnał większy od zera dla wartości wejść z obszaru jaśniejszego uzyskujemy na wyjściu neuronu sygnał ujemny. Takie działanie neuronu może zostać wykorzystane w celu klasyfikacji danych do dwóch zbiorów, przy czym należy pamiętać, że zbiory te muszą być liniowo separowalne.

Proces uczenia liniowej sieci neuronowej przebiega podobnie jak sieci perceptronowej, a mianowicie na wstępie należy przygotować zbiór uczący składający się z par wektorów reprezentujących wejścia p oraz oczekiwane dla nich sygnały wyjściowe t

{p1,t1}, {p2,t2}, ...,{pq,tq}

Następnie kolejne elementy zbioru uczącego podawane są na wejścia sieci i wyznaczana jest odpowiedź sieci a. W kolejnym kroku odpowiedź sieci a porównywana jest z wartością, jaka była oczekiwana na wyjściu sieci t i wyznaczana jest wartość błędu e=t-a. Następnie wagi neuronów modyfikowane są tak, aby wartość błędu średniokwadratowego (ang. mean squared error) była jak najmniejsza.

( ) ∑ ( ( ) ( ) )

=

=

=

=

q

k q

k

k a k q t k q e mse

1

2

1

2 1

1

Ponieważ funkcja błędu średniokwadratowego dla sieci z liniowymi neuronami jest funkcją kwadratową względem wag, więc posiada tylko jedno minimum globalne lub nie posiada minimum albo posiada minimum tzw. słabe, opcja z jaką mamy do czynienia zależy od konkretnych danych uczących. Zadanie wyznaczenia wag w takiej sytuacji sprowadza się do znalezienia wartości wag, dla których funkcja błędu przyjmuje najmniejszą wartość.

Sprowadza się to do rozwiązania odpowiedniego układu równań, co oznacza, że odpowiednie wagi wyznaczane są bezpośrednio w jednym kroku algorytmu uczącego.

Jednakże nie zawsze takie rozwiązanie jest możliwe do zastosowania ze względu na pojawiające się przy nim problemy numeryczne. W takiej sytuacji z pomocą przychodzi algorytm uczenia Widrowa-Hoffa, który bazuje na procedurze największego spadku. W niniejszym podejściu błąd średniokwadratowy jest zastępowany przez błąd kwadratowy, który jest liczony w kolejnych iteracjach algorytmu a modyfikacje wag liczone są jako

(3)

pochodne cząstkowe z funkcji błędu względem odpowiednich wag. Po wyznaczeniu odpowiednich pochodnych wzór na modyfikację wag przyjmuje następującą postać:

w(k+1)=w(k)+2αααe(k)p(k), α

gdzie k to numer iteracji , w to wagi, e to błędy uczenia, p wzorce uczące, ααα krok uczenia. α Jeżeli krok uczenia jest odpowiednio duży to proces uczenia przebiega szybko jednak zbyt duża wartość tego parametru może powodować destabilizowanie procesu uczenia i zwiększenie błędu w kolejnych iteracjach zamiast zmniejszenia. Liniowe sieci neuronowe posiadają najczęściej tylko jedną warstwę neuronów, ponieważ dowolna wielowarstwowa sieć z neuronami liniowymi może zostać przekształcona do sieci jednowarstwowej bez modyfikacji jej działania.

Praktyczne wskazówki odnośnie symulacji liniowych sieci neuronowych w programie Matlab

Tworzenie liniowej sieci neuronowej

W celu stworzenia liniowej sieci neuronowej należy posłużyć się funkcją newlin, która posiada następującą strukturę

net=newlin(PR,S,lr),

gdzie net to obiekt opisujący stworzoną sieć, PR macierz z wartościami minimalnymi I maksymalnymi dla kolejnych wejść, S liczba neuronów, lr krok uczenia.

Przykład:

net = newlin([-1 1],1)

Dostęp do wag i biasów sieci odbywa się identycznie jak w sieci perceptronowej.

Projektowanie sieci poprzez bezpośrednie wyznaczanie jej wag za pomocą funkcji newlind, która posiada następującą strukturę

net=newlind(P,T)

gdzie P i T to dane uczące.

Przykład

P = [1 2 3];

T = [2.0 4.1 5.9];

net = newlind(P,T);

Uczenie metodą Widrowa-Hoffa za pomocą funkcji train lub adapt, których struktura przedstawia się następująco:

net=train(P,T), net=adapt(P,T),

(4)

gdzie P i T to dane uczące, różnica w działaniu obu funkcji jest taka sam jak dla sieci perceptronowych.

Przykład:

net = newlin([-1 1],1);

P= {0 -1 1 1 0 -1 1 0 0 1};

T = {0 -1 0 2 1 -1 0 1 0 1};

net = adapt(net,P,T);

P = [P];

T = [T];

net.trainParam.epochs = 200;

net.trainParam.goal = 0.1;

net = train(net,P,T);

Symulacja liniowych sieci neuronowych odbywa się identycznie jak sieci perceptronowych za pomocą funkcji sim.

Aby wyznaczyć maksymalny dopuszczalny krok uczenia należy użyć funkcji maxlinlr, której struktura przedstawia się następująco

lr = maxlinlr(P,'bias')

gdzie P to wejściowe wzorce uczące:

Przykład

P = [1 2 -4 7; 0.1 3 10 6];

lr = maxlinlr(P,'bias')

Przedstawienie wykresu funkcji błędu w funkcji wag (tylko dla przypadków gdy dany jest jeden neuron z tylko jednym wejściem) można zrealizować za pomocą następującej sekwencji instrukcji

Przykład

P = [1 –1.2]

T = [0.5 1]

w_range=-1:0.1:1;

b_range=-1:0.1:1;

ES=errsurf(P,T,w_range,b_range,’purelin’) plotes(w_range,b_range,ES)

Symulacja liniowych sieci neuronowych z opóźnieniami (czyli z wejściami zdefiniowanymi jako opóźnione wartości wejść już istniejących, Rys. 3) wymaga następującej sekwencji instrukcji

u(k)

u(k-1)

w1

w2

wn

ϕ y

Blok aktywacji w0

1

(5)

Rys. 3 Liniowy neuron z opóźnionymi sygnałami wejściowymi, gdzie k numer próbki sygnału wejściowego

Przykład

P={3 4 5 6}

net=newline([1 10],1)

net.inputWeights{1,1}.delays=[0 1 2] <- definicja opóźnionych wejść 0 - u(k), 1 – u(k-1), 2 – u(k-2)

pi={1 2} <– startowe wartości dla wejść u(k-1) i u(k-2) A=sim(net,P,pi) <-symulacja sieci z opóźnieniami

Zadania

(Przed rozpoczęciem rozwiązywania zadań można obejrzeć przykładowe problemy rozwiązane za pomocą liniowych sieci neuronowych uruchamiając skrypty demolin1, demolin2, demolin4, demolin5, demolin6, demolin,7 demolin8 i demolin9)

Przeprowadzić uczenie neuronu z liniową funkcją aktywacji z jednym wejściem dla danych przedstawionych poniżej. Porównać wagi nauczonego neuronu przy użyciu reguły Widrowa- Hoffa (za pomocą funkcji train) z wagami wyliczonymi bezpośrednio, zbadać czy nauczony neuron dobrze działa dla danych, które służyły jako wzorce uczące (wykorzystać instrukcje sim)

P=[1 –1.2] T=[1 0.5]

P=[-3.2 4.5 5.6 3] T=[-4 5 6.1 3.9]

P=[1 2 3 4 5 6 7] T=[3 5 7 9 11 13 15]

Przeprowadzić uczenie liniowej sieci jednowarstwowej przy użyciu funkcji adapt oraz train dla następujących danych, zbadać czy nauczony neuron dobrze działa dla danych, które służyły jako wzorce uczące).

1.0000 1.5000 1.2000 -0.3000 P= -1.0000 2.0000 3.0000 -0.5000 2.0000 1.0000 -1.6000 0.9000 0.5000 3.0000 -2.2000 1.4000 T= 1.1000 -1.2000 1.7000 -0.4000 3.0000 0.2000 -1.8000 -0.4000

Dla zadań z punktu pierwszego wyznaczyć wykresy funkcji błędu wraz z zaznaczonym punktem określającym wartości nauczonych wag oraz błędu jaki został osiągnięty dla tych wag. (Wskazówka: sprawdzić jak jest to zrealizowane w pliku demolin1)

(6)

Dane są następujące funkcje y=2x-3

y=2x^2-5

dokonać ich aproksymacji w przedziale (–10;10) przy użyciu liniowego neuronu. (Wybrać dane uczące dla każdej z funkcji i na ich podstawie przeprowadzić uczenie neuronu, następnie porównać wartości wyjściowe z neuronu i wartości aproksymowanej funkcji przedstawiając je na jednym wykresie dla każdej z funkcji) Zbadać właściwości uogólniające neuronu.

Zbadać czy liniowy neuron ma takie same ograniczenia jak perceptron (Znaleźć zadanie klasyfikacji, które liniowy neuron nie potrafi rozwiązać)

Zbadać jak liniowy neuron uczy się dla różnych wielkości kroku ucznia dla następujących danych P = [1.0 -1.2] T = [0.5 1.0], zbadać uczenie się dla następujących wielkości kroku uczenia 0.01, 0.1, 5, 10, 50. Porównać otrzymane wyniki z uczeniem przy użyciu kroku uczenia wyznaczonego przez funkcję maxlinlr.

Identyfikacja systemu liniowego za pomocą funkcji adaptwh

%Ustalenie czasu symulacji ze zmianą cech identyfikowanego systemu liniowego w 4 sekundzie

time1=0:0.005:4;

time2=4.005:0.005:6;

time=[time1 time2];

%zadany sygnał wejściowy dla systemu liniowego w celu przygotowania próbek do adaptacyjnej identyfikacji systemu

X=sin(sin(time*4).*time*8);

%liczba próbek dla systemu liniowego do 4 sekundy eksperymentu steps1=length(time1);

% system liniowy zdefiniowany jako filtr liniowy o skończonej odpowiedzi impulsowej [T1,state] = filter([1 -0.5],1,X(1:steps1));

% od 4 sekundy właściwości filtru zmieniają się sprawdzamy czy sieć zadoptuje się do zmienionych warunków

steps2 = length(time2);

T2 = filter([0.9 -0.6],1,X((1:steps2) + steps1),state);

T = [T1 T2];

plot(time,X)

alabel('Czas','Sygnał wejsciowy','Sygnal wejsciowy dla filtra') plot(time,T)

alabel('Czas','Sygnal wyjsciowy','Sygnal wyjsciowy z filtra')

%Przygotowanie danych dla sieci neuronowej z opóźnionymi próbkami sygnału wejściowego

P = delaysig(X,0,1);

% konstrukcja sieci [w,b] = initlin(P,T);

lr = 0.5;

%adaptacja sieci

[a,e,w,b] = adaptwh(w,b,P,T,lr);

(7)

% porównanie sygnału wyjściowego z filtra z odpowiedzią liniowej sieci neuronowej plot(time,a,time,T,'--')

alabel('Czas','Siec \_\_\_ Filter \_ \_','Odpowiedz liniowej sieci neuronowej i filtra')

Literatura:

1. Korbicz J., Obuchowicz A., Uciński D., „Sztuczne sieci neuronowe. Podstawy i zastosowanie”, Warszawa 1994.

Cytaty

Powiązane dokumenty

Każdą permutację rozkładamy na

Korzystając z zadania poprzedniego, pokazać, że istnieje ciąg operatorów ogranic- zonych na ` 2 , który jest słabo zbieżny, ale nie jest silnie

6–57: Liczby różnorodności porostów (LDV) taksonów referencyjnych i wskaźników eutrofizacji oraz suma częstości występowania taksonów na wybranych forofitach

The high-frequency electronic ballast output stage as a resonance half-bridge class-D converter is analyzed. A stage mathematical model as dependence of voltages and currents in

[r]

[r]

Wtedy, prawa strona to macierz odwrotna

Jaka jest fizyczna interpretacja tej