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.