
Uczenie maszynowe i sztuczne sieci neuronowe/Ćwiczenia 4: Różnice pomiędzy wersjami
Z Brain-wiki
m |
|||
Linia 5: | Linia 5: | ||
zaś jej pochoną to: | zaś jej pochoną to: | ||
:<math>f'(x) =f(x)*(1-f(x)) </math> | :<math>f'(x) =f(x)*(1-f(x)) </math> | ||
− | + | Niech nasza sieć uczy się odwzorowania zadanego tabelką: | |
+ | {| class="wikitable" style="text-align:left;" | ||
+ | |- | ||
+ | !X | ||
+ | !Y | ||
+ | |- | ||
+ | | [0,0] | ||
+ | | [0,1] | ||
+ | |- | ||
+ | | [0,1] | ||
+ | | [1,0] | ||
+ | |- | ||
+ | | [1,0] | ||
+ | | [1,0] | ||
+ | |- | ||
+ | |[1,1] | ||
+ | |[0,1] | ||
+ | |- | ||
+ | |} | ||
=XOR= | =XOR= |
Wersja z 16:14, 16 mar 2016
Algorytm wstecznej propagacji błędu
W tym ćwiczeniu zpoznamy się z algorytmem wstecznej propagacji błędu. Zbudujemy sieć złożoną z 3 warstw: wejściowej, ukrytej i wyjściowej. Warstwy ukryta i wyjściowa będą miały nieliniową funkcję aktywacji w postaci funkcji logistycznej. Dla przypomnienia funkcja logistyczna:
- [math]f(x) = \frac{1}{1+exp(-x)}[/math]
zaś jej pochoną to:
- [math]f'(x) =f(x)*(1-f(x)) [/math]
Niech nasza sieć uczy się odwzorowania zadanego tabelką:
X | Y |
---|---|
[0,0] | [0,1] |
[0,1] | [1,0] |
[1,0] | [1,0] |
[1,1] | [0,1] |
XOR
Jako pierwszy przykład z zastosowania sieci nieliniowych proszę skonstruować sieć z jedną warstwą ukrytą, rozwiązującą problem XOR.
Potrzebne nam będą następujące importy:
from pybrain.datasets.supervised import SupervisedDataSet
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer, RPropMinusTrainer
from pybrain.structure import LinearLayer,SigmoidLayer
- do stworzenia ciągu uczącego proszę wykorzystać funkcje addSample obiektu SupervisedDataSet:
ZU = SupervisedDataSet(N_wej,N_wyj)
ZU.addSample((0,0),(0.0,))
ZU.addSample((0,1),(1.0,))
ZU.addSample((1,0),(1.0,))
ZU.addSample((1,1),(0.0,))
- W konstrukcji sieci proszę wykorzystać funkcję: buildNetwork, tak aby wszystkie warstwy były sigmoidalne:
siec = buildNetwork(N_wej, N_hid, N_wyj, outclass=SigmoidLayer)
- Proszę zbadać strukturę wytworzonej sieci:
siec['in']
siec['hidden0']
siec['out']
- sieć uczymy metodą wstecznej propagacji błędu, za pomocą funkcji train obiektu BackpropTrainer. Funkcja ta wykonuje jeden cykl uczenia (jednorazowe przejście przez ciąg uczący, przykłady podawane są w losowej kolejności) i zwraca wartość średniego błędu średniokwadratowego w tym cyklu.
- Proszę wykreślić ewolucje wag i błędu. Ewolucję można zilustrować animacją. W tym celu na początku programu należy ustawić backend dla biblioteki matplotlib przed innymi importami i przełączyć grafikę w tryb interaktywny:
import matplotlib
matplotlib.use('TkAgg')
import pylab as py
py.ion()
Następnie animację robimy analogicznie jak w tym przykładzie.
- Proszę zbadać co dzieje się z wagami wraz ze wzrostem ilości jednostek w warstwie ukrytej.
- Proszę zbadać jak zmienia się zbieżność algorytmu przy zmianie moetody uczenia na Elastyczną propagację wsteczna.
- Uwaga
- w przypadku trenera RPropMinusTrainer należy podać zbiór uczący za pomocą metody setData().
- Proszę powtórzyć analizę dla sieci, której warstwa wyjściowa ma jednostkę liniową.
- Proszę zbadać wpływ regularyzacji (weightdecay w BackpropTrainer) na strukturę sieci.