Katedra Informatyki Stosowanej Politechnika Łódzka Sztuczne Sieci

Transkrypt

Katedra Informatyki Stosowanej Politechnika Łódzka Sztuczne Sieci
Katedra Informatyki Stosowanej
Politechnika Łódzka
Sztuczne Sieci Neuronowe
Ćwiczenie 2.
Neurony liniowe ADALINE. Sieci wielowarstwowe.
Uczenie sieci.
Opracował:
Dr inż. Piotr Urbanek
Ćwiczenie 1. Zapoznanie się z podstawowymi funkcjami do tworzenia perceptronu, neuronu
liniowego, sieci neuronów z warstwami ukrytymi.
W środowisku Matlab wyposażonego w przybornik Neural Network istnieje zestaw funkcji
możliwych do wywołania z poziomu przestrzenia roboczej lub m-pliku. Przykład stosowania
przykładowych funkcji zamieszczony jest poniżej.
Przykład 1. Tworzenie perceptronu.
Dany jest model peceptronu przedstawiony na rys.1
Rys.1. Model perceptronu o R-wejściach z unipolarną funkcją aktywacji.
Do tworzenia pojedynczego perceptronu lub sieci perceptronów służy funkcja percep.
Wywołuje się ją następująco:
gdzie: P – wektor uczący,
T – wektor wzorcowy
Dla tak zdefiniowanych wektorów P i T perceptron będzie miał jedno wejście i
jedno wyjście.
Po wywołaniu funkcji newp tworzony jest w przestrzeni roboczej obiekt net, którego
własności podzielone na wyszczególnione klasy można odczytać wywołując jego
nazwę (net).
Przykładowo:
net =
Neural Network object:
architecture:
•
•
•
•
numInputs: 1
numLayers: 1
biasConnect: [1]
inputConnect: [1]
•
•
•
•
•
layerConnect: [0]
outputConnect: [1]
numOutputs: 1 (read-only)
numInputDelays: 0 (read-only)
numLayerDelays: 0 (read-only)
subobject structures:
•
•
•
•
•
•
inputs: {1x1 cell} of inputs
layers: {1x1 cell} of layers
outputs: {1x1 cell} containing 1 output
biases: {1x1 cell} containing 1 bias
inputWeights: {1x1 cell} containing 1 input weight
layerWeights: {1x1 cell} containing no layer weights
functions:
•
•
•
•
•
•
•
adaptFcn: 'trains'
divideFcn: (none)
gradientFcn: 'calcgrad'
initFcn: 'initlay'
performFcn: 'mae'
plotFcns: {'plotperform','plottrainstate'}
trainFcn: 'trainc'
parameters:
•
•
•
•
•
•
•
adaptParam: .passes
divideParam: (none)
gradientParam: (none)
initParam: (none)
performParam: (none)
trainParam: .show, .showWindow, .showCommandLine, .epochs,
goal, .time
weight and bias values:
•
•
•
IW: {1x1 cell} containing 1 input weight matrix
LW: {1x1 cell} containing no layer weight matrices
b: {1x1 cell} containing 1 bias vector
other:
•
•
name: ''
userdata: (user information)
Jest to najprostszy sposób zdefiniowania sieci perceptronowej. Drugim jest wywołanie funkcji
newp z następującymi parametrami:
newp([wart_min wart_maks;wart_min wart_maks;…] , liczba_neuronów)
Gdzie: wart_min, wart_maks- spowiedziewane zakresy poszczególnych wejść perceptronu,
Liczba_neuronów – liczba perceptronów w sieci.
Zatem definicja
net = newp([-1 1;-1 1],1) – oznacza jeden perceptron o dwóch wejściach, których wartości
zmieniają się w granicach [-1 1].
Zatem program wykorzystujący sieć perceptronową do klasyfikacji dwóch zbiorów mógłby
mieć następującą postać:
Neuron ADALINE.
Przykładowy diagram neuronu liniowego pokazuje rys.2
Rys. 2. Przykładowy neuron dwuwejściowy z liniową funkcję aktywacji.
Neuron taki może podobnie jak perceptron służyć do klasyfikacji zbiorów na płaszczyźnie
kartezjańskiej przedstawionej na rys. 3.
Rys.3. Klasyfikacja punktów na płszczyźnie.
Aby utworzyć neuron liniowy należy skorzystać z funkcji środowiska Matlab realizujących
utworzenie sieci jednego, lub więcej neuronów ADALINE, symulujących ich działanie oraz
realizujących proces nauczania, czyli doboru wag i przesunięcia.
Przykładowy skrypt realizujący tworzenie neuronu liniowego, odczyt i zmianę wag oraz
symulację jego działania.
Znaczenie poszczególnych funkcji oraz sposób wywołania obiektów jest bardzo podobny do
sieci perceptronowej.
Opisy wszystkich funkcji dotyczących sztucznych sieci neuronowych oraz przykładów ich
stosowania znajdują się w pomocy środowiska Matlab. Po wywołaniu polecenia Help
Product Help pojawia się zestaw wszystkich dostępnych narzędzi do tworzenia i
wykorzystywania Sztucznych Sieci Neuronowych wraz z ich szczegółowym opisem.
Rys. 4. Przykładowe okno pomocy środowiska Matlab.
Do nauki neuronu typu ADALINE wykorzystywanych jest metoda minimalizacji błędu
średniokwadratowego. Realizuje ją funkcja newlind.
Przykład 1:
Przykład 2:
Klasyfikacja punktów na płaszczyźnie za pomocą neuronu liniowego. Wykorzystanie funkcji
train.
Niech będą dane następujące punkty na płaszczyźnie kartezjańskiej oraz ich klasyfikatory
Metoda wstecznej propagacji błędów.
Dotyczy sieci wielowarstwowych, jednokierunkowych pokazanych na rys. 5.
Rys. 5. Wielowarstwowa sieć jednokierunkowa.
Jak widać na rys. 5. neurony warstwy ukrytej posiadają sigmoidalną funkcję aktywacji,
natomiast neurony warstwy wyjściowej mogą być neuronami typu ADALINE. Budowa sieci
zawsze zależy od rozwiązywanego problemu.
Przykład 1:
Przykład 2:
Uczenie sieci z wykorzystaniem algorytmu największego spadku.
Ćwiczenia do samodzielnego wykonania:
1. Wykorzystując funkcje środowiska Matlab utworzyć następujące sieci neuronowe:
a. Pojedynczy perceptron realizujący klasyfikację punktów należących do dwóch
zbiorów na płaszczyźnie kartezjańskiej. Porównać wyniki działania
utworzonego perceptronu z wynikami własnego programu. Sprawdzić, czy
perceptron poprawnie klasyfikuje wprowadzone punkty.
b. Neuron liniowy ADALINE realizujący klasyfikację punktów należących do
dwóch zbiorów na płaszczyźnie kartezjańskiej. Porównać działanie
perceptronu i neuronu ADALINE. Wyniki skomentować.
i. Wykorzystując funkcję newlind dokonać aproksymacji funkcji y=2x2-5
oraz y=2x-3. Skomentować otrzymane wyniki.
c. Sieć wielowarstwową wykorzystującą uczenie metodą Wstecznej Propagacji
Błędów. Wygenerować 3 funkcje: y1=sin(x),
y2=sin(x)+0.3*sin(5*x+10*rand(1)) oraz y3=sin(3*pi*atan(x)). Dokonać
odwzorowania wygenerowanych sygnałów. Przeprowadzić test sieci z 3,6, 12
oraz 20 neuronami w warstwie ukrytej. Do optymalizacji uczenia metodą WPB
przyjąć metodę największego spadku i metodę Levenberg-Marquardt’a. Jako
miarę błędu przyjąć sumę kwadratów błędów pomiędzy sygnałami testowymi i
odpowiedzią sieci. Porównać i skomentować otrzymane wyniki.