sieci dwuwarstwowe
Transkrypt
sieci dwuwarstwowe
sieci dwuwarstwowe w MATLABie LABORKA © Piotr Ciskowski • 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 • 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 = ... function [ W1 , W2 ] = init2 ( S , K1 , K2 ) x0 = −1 x0 = −1 x1 x2 w w w ⋮ yk(1) = xk( 2) ⋮ y (1) = x( 2) K1 S2 X (1) (1) S +1×1 W (1) S +1×K1 1 Y = y1( ) X (1) y2 ⋮ y (1) K1 K1×1 wk( ,0) 2 wk( ,1) 2 ⋮ 1 wk( ,)S ⋮ xS X y1(1) = x1( 2) (1) (1) k ,0 k ,1 (1) k ,2 wk( ,S) 2 ⋮ y1( 2) ⋮ yk( 2) ⋮ yK( 22) 2 ( 2) Y K1 +1×1 W ( 2) K1 +1 × K2 ( 2) = y1( ) ( 2) y2 ⋮ 2 ( ) y K 2 K 2 ×1 2 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 = ... W (1) S +1×K1 W ( 2) K1 +1 × K2 • 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 function [ Y1 , Y2 ] = dzialaj2 ( W1 , W2 , X ) x0 = −1 x0 = −1 x1 x2 w ⋮ yk(1) = xk( 2) wk( ,1) y1( 2) wk( ,S) 2 ⋮ ⋮ yk( 2) ⋮ yK( 22) 2 ⋮ y (1) = x( 2) K1 S2 ⋮ 1 wk( ,)S −1 i wk( ,0) 2 2 w w ⋮ xS X S×1 y1(1) = x1( 2) (1) (1) k ,0 k ,1 (1) k ,2 W( ) S +1×K1 1 X (1) S +1×1 U f ( i) (1) K1 ×1 Y −1 i (1) K1 ×1 X W( ( 2) K1 +1 ×1 2) K1 +1 × K 2 U f (i) ( 2) K 2 ×1 Y ( 2) K 2 ×1 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 X1 = U1 = Y1 = X2 = U2 = Y2 = X S×1 −1 i X = 5 ; ... ... ... ... ... ... W(1) S +1×K1 (1) S +1×1 U f ( i) (1) K1 ×1 Y −1 i (1) K1 ×1 X W ( 2 ) K1 +1 × K2 ( 2) K1 +1 ×1 U f (i) ( 2) K 2 ×1 Y ( 2) K 2 ×1 przykład - XOR - w pliku test2.m • P = [ T = [ 0 0 0 0 1 1 1 0 1 1 1 0 ; ] ] % wejścia sieci % żądane wyjście sieci [ W1przed , W2przed ] = init2 ( 2 , [ Y1 , Y2a ] = dzialaj2 ( W1przed , [ Y1 , Y2b ] = dzialaj2 ( W1przed , [ Y1 , Y2c ] = dzialaj2 ( W1przed , [ Y1 , Y2d ] = dzialaj2 ( W1przed , Yprzed = [ Y2a , Y2b , Y2c , Y2d ] 2 , 1 ) W2przed W2przed W2przed W2przed , , , , P P P P % najmniejsza dobra sieć (:,1) ) ; (:,2) ) ; (:,3) ) ; (:,4) ) ; % [ W1po , W2po ] = ucz2 ( W1przed , W2przed , P , T , 2000 ) % % % % % [ Y1 , Y2a ] = dzialaj2 [ Y1 , Y2b ] = dzialaj2 [ Y1 , Y2c ] = dzialaj2 [ Y1 , Y2d ] = dzialaj2 Ypo = [ Y2a , Y2b , Y2c ( ( ( ( , W1po , W1po , W1po , W1po , Y2d ] W2po W2po W2po W2po , , , , P P P P (:,1) (:,2) (:,3) (:,4) ) ) ) ) ; ; ; ; • 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 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 oblicz błędy na wyjściach warstwy 1 oblicz poprawki wag warstw 1 i 2 dodaj poprawki do wag warstw 1 i 2 % i to wszystko n razy - ważna kolejnosć ! - ważna kolejnosć ! - dowolna kolejność - dowolna kolejność function [ W1po , W2po ] = ucz2 ( W1przed , W2przed , P , T , n ) x0 = −1 x0 = −1 x1 x2 w ⋮ yk(1) = xk( 2) wk( ,1) wk( ,S) 2 ⋮ y1( 2) t1 d1( 2) ⋮ yk( tk d k( ⋮ yK( 22) t K2 d K( 22) 2) 2) 2 ⋮ y (1) = x( 2) K1 S2 ⋮ 1 wk( ,)S −1 i wk( ,0) 2 2 w w ⋮ xS X S×1 y1(1) = x1( 2) (1) (1) k ,0 k ,1 (1) k ,2 W( ) S +1×K1 1 X (1) U S +1×1 f ( i) (1) Y K1 ×1 −1 i (1) dW dW E (1) S +1× K1 f '( i) (1) K1 ×1 D X K1 ×1 W( ( 2) K1 ×1 K1 +1 × K 2 U K1 +1 ×1 ( 2) E K1 +1 × K 2 BP (1) 2) f (i) ( 2) Y K 2 ×1 f '( i) ( 2) K 2 ×1 D ( 2) K 2 ×1 ( 2) K 2 ×1 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 = ... % oblicz błędy na wyjściach warstwy 2 D2 = ... 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 = ... • przykład - XOR - nie każda sieć się nauczy… • przykład - XOR - ale większość się nauczy… do zrobienia • dodaj do funkcji ucz2 rysowanie wykresu błędu średniokwadratowego w kolejnych epokach uczenia do zrobienia • do funkcji ucz2 dodaj parametry: – m - maksymalna liczba kroków 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 kroku - liczba przykładów pokazywanych w jednym kroku uczenia do zrobienia • zobacz, jak będą się uczyły sieci z większą liczbą neuronów ukrytych • dodaj do funkcji ucz2 rysowanie wykresu błędu średniokwadratowego w kolejnych epokach uczenia • do funkcji ucz2 dodaj parametry: m, e, k • 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) • narysuj wykres 3D zależności funkcji celu od dwóch wybranych wag sieci