background image

sieci dwuwarstwowe

w MATLABie

LABORKA © Piotr Ciskowski

background image

trzy funkcje do obsługi sieci dwuwarstwowej…:

init2.m

- tworzy sieć, inicjuje wagi

(losowo)

dzialaj2.m

– symuluje działanie sieci

(na pojedynczym przykładzie)

ucz2.m

- uczy sieć na zadanym ciągu uczącym

…i jeden skrypt:

test2.m

- sieć  2-2-1, przykład: XOR

background image

init2.m

- tworzy sieć, czyli macierz wag obu warstw

i wypełnia je wartościami losowymi z zakresu -0.1 ÷ 0.1

- w sieciach jednowarstwowych

korzystamy

z wejścia zerowego – biasu

function [ W1 , W2 ] = init2 ( S , K1 , K2 )

% funkcja tworzy sieć dwuwarstwową
% i wypełnia jej macierze wag wartościami losowymi
% z zakresu od -0.1 do 0.1
% parametry: S  – liczba wej
ść do sieci         / liczba wejść warstwy 1
%            K1 – liczba neuronów w warstwie 1
%            K2 – liczba neuronów w warstwie 2  / liczba wyj
ść sieci
% wynik:     W1 – macierz wag warstwy 1 sieci
%            W2 – macierz wag warstwy 2 sieci

W1 = ...

W2 = ...

background image

function [ W1 , W2 ] = init2 ( S , K1 , K2 ) 

( )

1

1 1

+ ×

X

( )

1

1

1

S

K

+ ×

W

( )

( )

( )

( )

1

1

1

1

1

1

2

1

1

K

K

y

y

y

×

=

Y



X

1

x

2

x

S

x





( )

1

,1

k

w

( )

1

,2

k

w

( )

1

,

k S

w

( )

( )

1

2

k

k

y

x

=

( )

( )

1

2

1

1

y

x

=





( )

( )

1

2

1

2

K

S

y

x

=

0

1

= −

( )

1

,0

k

w

0

1

= −



( )

2

,1

k

w

( )

2

2

,

k S

w

( )

2

k

y

( )

2

1

y





( )

2

2

K

y

( )

2

,0

k

w

( )

1

2

2

1

K

K

+ ×

W

( )

( )

( )

( )

2

2

2

2

1

2

2

2

1

K

K

y

y

y

×

=

Y



( )

1

2

1 1

+ ×

X

background image

function [ W1 , W2 ] = init2 ( S , K1 , K2 )

% funkcja tworzy sieć dwuwarstwową
% i wypełnia jej macierze wag wartościami losowymi
% z zakresu od -0.1 do 0.1
% parametry: S  – liczba wej
ść do sieci         / liczba wejść warstwy 1
%            K1 – liczba neuronów w warstwie 1
%            K2 – liczba neuronów w warstwie 2  / liczba wyj
ść sieci
% wynik:     W1 – macierz wag warstwy 1 sieci
%            W2 – macierz wag warstwy 2 sieci

W1 = ...

W2 = ...

( )

1

1

1

S

K

+ ×

W

( )

1

2

2

1

K

K

+ ×

W

background image

dzialaj2.m

- dla sieci o danych macierzach wag  W1 i W2

dla podanego na wejście wektora  X 
oblicza wektory wyjść warstw Y1 i Y2

- neurony obu warstw mają sigmoidalną funkcję aktywacji

function [ Y1 , Y2 ] = dzialaj2 ( W1 , W2 , X )

% funkcja symuluje działanie sieci dwuwarstwowej
% parametry: W1 – macierz wag pierwszej warstwy sieci
%            W2 – macierz wag  drugiej  warstwy sieci 
%            X  – wektor wej
ść do sieci
%                 sygnał podany na wej
ście ( sieci / warstwy 1 )
% wynik:     Y1 – wektor wyj
ść warstwy 1   ( przyda się podczas uczenia )
%            Y2 – wektor wyj
ść warstwy 2   / sieci
%                 sygnał na wyj
ściu sieci

background image

function [ Y1 , Y2 ] = dzialaj2 ( W1 , W2 , X ) 

( )

1

1 1

+ ×

X

( )

1

1

1

S

K

+ ×

W

( )

1

1

1

×

Y

1

S×

X

( )

1

2

1 1

+ ×

X

( )

1

2

2

1

K

K

+ ×

W

( )

2

2

1

×

Y

( )

1

1

1

×

U

( )

i

1

i

1

i

( )

2

2

1

×

U

( )

i

1

x

2

x

S

x





( )

( )

1

2

k

k

y

x

=

( )

( )

1

2

1

1

y

x

=





( )

( )

1

2

1

2

K

S

y

x

=

0

1

x

= −

0

1

x

= −



( )

2

k

y

( )

2

1

y





( )

2

2

K

y

( )

1

,1

k

w

( )

1

,2

k

w

( )

1

,

k S

w

( )

1

,0

k

w

( )

2

,1

k

w

( )

2

2

,

k S

w

( )

2

,0

k

w

background image

function [ Y1 , Y2 ] = dzialaj2 ( W1 , W2 , X ) 

% funkcja symuluje działanie sieci dwuwarstwowej
% parametry: W1 – macierz wag pierwszej warstwy sieci
%            W2 – macierz wag  drugiej  warstwy sieci 
%            X  – wektor wej
ść do sieci
%                 sygnał podany na wej
ście ( sieci / warstwy 1 )
% wynik:     Y1 – wektor wyj
ść warstwy 1   ( przyda się podczas uczenia )
%            Y2 – wektor wyj
ść warstwy 2   / sieci
%                 sygnał na wyj
ściu sieci

beta = 5 ;

X1 = ...

U1 = ...

Y1 = ...

X2 = ...

U2 = ...

Y2 = ...

( )

1

1 1

+ ×

X

( )

1

1

1

S

K

+ ×

W

( )

1

1

1

×

Y

1

S×

X

( )

1

2

1 1

+ ×

X

( )

1

2

2

1

K

K

+ ×

W

( )

2

2

1

×

Y

( )

1

1

1

×

U

( )

i

1

i

1

i

( )

2

2

1

×

U

( )

i

background image

przykład  - XOR  - w pliku 

test2.m

P = [    0    0

1    1

;

% wejścia sieci

0    1    0    1  ]

T = [    0    1    1

0  ]

żądane wyjście sieci

[ W1przed , W2przed ] = init2 ( 2 , 2 , 1 ) 

% najmniejsza dobra sieć

[ Y1 , Y2a ] = dzialaj2 ( W1przed , W2przed , P (:,1) ) ;

[ Y1 , Y2b ] = dzialaj2 ( W1przed , W2przed , P (:,2) ) ;

[ Y1 , Y2c ] = dzialaj2 ( W1przed , W2przed , P (:,3) ) ;

[ Y1 , Y2d ] = dzialaj2 ( W1przed , W2przed , P (:,4) ) ;

Yprzed = [ Y2a , Y2b , Y2c , Y2d ]

% [ W1po , W2po ] = ucz2 ( W1przed , W2przed , P , T , 2000 ) 

% [ Y1 , Y2a ] = dzialaj2 ( W1po , W2po , P (:,1) ) ;

% ...

Ypo = [ Y2a , Y2b , Y2c , Y2d ]

background image

ucz2.m

- dla sieci o danych macierzach wag  W1 i W2

uczy sieć przez zadaną liczbę epok
na podanym ciągu uczącym – macierze P i T

function [ W1po , W2po ] = ucz2 ( W1przed , W2przed , P , T , n )

% funkcja uczy sieć dwuwarstwową
% na podanym ciągu uczącym (P,T)
% przez zadan
ą liczbę epok (n)
% parametry: W1przed – macierz wag warstwy 1 przed uczeniem
%            P       – ci
ąg uczący – przykłady - wejścia
%            T       - ci
ąg uczący – żądane wyjścia
%                                   dla poszczególnych przykładów
%            n       - liczba epok
% wynik:     W1po    – macierz wag warstwy 1 po uczeniu
%            W2po    – macierz wag warstwy 2 po uczeniu

background image

function [ W1po , W2po ] = ucz2 ( W1przed , W2przed , P , T , n ) 

% schemat funkcji:

% losuj numer przykładu
% podaj przykład na wej
ścia i oblicz wyjścia
% oblicz bł
ędy na wyjściach warstwy 2

-

ważna  kolejnosć !

% oblicz błędy na wyjściach warstwy 1 

-

ważna  kolejnosć !

% oblicz poprawki    wag warstw 1 i 2 

- dowolna kolejność

% dodaj  poprawki do wag warstw 1 i 2

- dowolna kolejność

% i to wszystko n razy

background image

function [ W1po , W2po ] = ucz2 ( W1przed , W2przed , P , T , n ) 

( )

1

1 1

+ ×

X

( )

1

1

1

S

K

+ ×

W

( )

1

1

1

×

Y

1

S×

X

( )

1

2

1 1

+ ×

X

( )

1

2

2

1

K

K

+ ×

W

( )

2

2

1

×

Y

( )

1

1

1

×

U

( )

i

1

i

1

i

( )

2

2

1

×

U

( )

i

( )

2

2

1

×

D

( )

2

2

1

×

E

( )

'

f

i

( )

1

1

1

×

D

BP

( )

1

1

1

×

E

( )

1

2

2

1

K

K

+ ×

dW

( )

1

1

1

S

K

+ ×

dW

1

x

2

x

S

x





( )

( )

1

2

k

k

y

x

=

( )

( )

1

2

1

1

y

x

=





( )

( )

1

2

1

2

K

S

y

x

=

0

1

x

= −

0

1

x

= −



( )

2

k

y

( )

2

1

y





( )

2

2

K

y

( )

1

,1

k

w

( )

1

,2

k

w

( )

1

,

k S

w

( )

1

,0

k

w

( )

2

,1

k

w

( )

2

2

,

k S

w

( )

2

,0

k

w

1

t

k

t

2

K

t

( )

2

1

d

( )

2

k

d

( )

2

2

K

d

( )

'

f

i

background image

function [ W1po , W2po ] = ucz2 ( W1przed , W2przed , P , T , n )

liczbaPrzykladow = ...

W1 = ...

W2 = ... ;  S2 = ...

wspUcz = ... 

beta = 5

for i = 1 : n ,

los = ...
nrPrzykladu = ...

X = ...

X1 = ...

[ Y1 , Y2 ] = ...

X2 = ...

D2 = ...                          

% oblicz błędy na wyjściach warstwy 2

E2 = ...                          

% błąd „wewnętrzny” warstwy 2

D1 = ...                          

% oblicz błędy na wyjściach warstwy 1

- BACKPROPAGATION

E1 = ...                          

% błąd „wewnętrzny” warstwy 1 

dW1 = ...                         

% oblicz poprawki wag warstwy 1 z uwzgl. pochodnej

dW2 = ...                

% oblicz poprawki wag warstwy 2 z uwzgl. pochodnej

W1 = ...       

% dodaj  poprawki do wag warstwy 1

W2 = ...       

% dodaj  poprawki do wag warstwy 2

end

% i to wszystko n razy

W1po = ...

W2po = ...

background image

przykład  - XOR
- nie każda sieć

się nauczy…

background image

przykład  - XOR
- ale większość

się nauczy…

background image

do funkcji ucz1 dodaj parametry:

m - maksymalna liczba epok uczenia

e

- błąd, który sieć ma osiągnąć
- sieć będzie się uczyć do osiągnięcia zadanego błędu,

ale nie dłużej niż przez maksymalną liczbę epok

k

- liczba pokazów w epoce
- liczba przykładów pokazywanych w jednej epoce uczenia

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2b-testXOR2b

funkcja ucz2b rysuje wykres błędu średniokwadratowego podczas uczenia

(w kolejnych epokach)

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2c-testXOR2c

funkcja ucz2c rysuje wykres błędu średniokwadratowego podczas uczenia

i wykres błędu klasyfikacji CE

funkcja ucz2c przyjmuje parametry: m, e, n i k

dla drugiej warstwy sieci funkcja ucz2c pokazuje błąd
na przykładach pokazanych w danej epoce
oraz na wszystkich przykładach z ciągu uczącego

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2d-testXOR2d

funkcja ucz2d rysuje wykres błędu średniokwadratowego podczas uczenia

i wykres błędu klasyfikacji CE
i wykres wszystkich wag sieci

reszta jak w funkcji ucz2c

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2dd-testXOR2dd

funkcja ucz2dd rysuje wykres błędu średniokwadratowego podczas uczenia

i wykres błędu klasyfikacji CE
i wykresy wag poszczególnych neuronów

reszta jak w funkcji ucz2d

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2e-testXOR2e

funkcja ucz2e rysuje wykres błędu średniokwadratowego podczas uczenia

i wykres błędu klasyfikacji CE
i wykresy wag poszczególnych neuronów
i wykres uproszczonych granic decyzyjnych sieci

(przy użyciu plot3 – klasy dla punktów z ciągu sprawdzającego)

reszta jak w funkcji ucz2d

w skrypcie testXOR2e oprócz XORa jest do wyboru kilka innych zestawów danych

podział ciągów na uczący, sprawdzający i testujący

tylko dla sieci o dwóch wejściach i jednym wyjściu

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2ee-testXOR2ee

funkcja ucz2ee rysuje wykres błędu średniokwadratowego podczas uczenia

i wykres błędu klasyfikacji CE
i wykresy wag poszczególnych neuronów
i wykres dokładnych granic decyzyjnych sieci

(przy użyciu surf – odpowiedzi sieci dla całego zakresu wejść)

reszta jak w funkcji ucz2e i test2e

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2eee-testXOR2eee

funkcja ucz2eee rysuje wykres błędu średniokwadratowego podczas uczenia

i wykres błędu klasyfikacji CE
i wykresy wag poszczególnych neuronów
i wykres dokładnych granic decyzyjnych sieci

(przy użyciu surf – odpowiedzi sieci dla całego zakresu wejść)

oraz poszczególnych neuronów

reszta jak w funkcji ucz2ee i test2ee

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2f-testFun2f

funkcja ucz2f rysuje wykres błędu średniokwadratowego podczas uczenia

i wykresy wszystkich wag sieci
i wykres funkcji przybliżanej przez sieć

dla sieci o jednym wejściu i jednym wyjściu

sieć uczy się aproksymować funkcję

do zrobienia

background image

opracowany na zajęciach zestaw init2-dzialaj2-ucz2-test2
nazwij init2-dzialaj2-ucz2a-testXOR2a

opracuj kolejne:

init2-dzialaj2-ucz2g-testCzas2g

funkcja ucz2g rysuje wykres błędu średniokwadratowego podczas uczenia

i wykresy wszystkich wag sieci
i wykres szeregu czasowego

sieć uczy się predykcji szeregu czasowego

do zrobienia

background image

zobacz, jak będą się uczyły sieci z większą liczbą neuronów ukrytych

zmodyfikuj algorytm uczenia:

dodaj momentum

zastosuj adaptacyjny współczynnik uczenia

po zakończonym uczeniu narysuj wykres
zależności funkcji celu od wybranej wagi sieci
(przy pozostałych wagach takich, jak po zakończeniu uczenia)

w trakcie uczenia rysuj wykres zależności funkcji celu od wybranej wagi
i pokaż proces minimalizacji funkcji celu

narysuj wykres 3D zależności funkcji celu od dwóch wybranych wag sieci

do zrobienia