To jest stara wersja strony!
Laboratorium 6 - Sztuczne sieci neuronowe
Lista i opis plików
ex4.m - Skrypt pomagający przejść przez laboratorium
ex4data1.mat - Dane uczące zawierające pismo odręczne
ex4weights.mat - Parametry sieci neuronowej
displayData.m - funkcja wizualizująca zbiór danych
fmincg.m - Funkcja wyznaczająca minimum (podobna do fminunc)
sigmoid.m - funkcja sigmoidalna
computeNumericalGradient.m - Numerycznie oblicza gradienty
checkNNGradients.m - Funkcja sprawdzajaca gradienty
debugInitializeWeights.m - Funkcja inicjalizujaca wagi początkowe
predict.m - Funkcja predykcji dla sieci neuronowej
sigmoidGradient.m - Obliczanie gradientów dla funkcji sigmoidalnej
randInitializeWeights.m - Losowa inicjalizacja wag sieci neuronowej
nnCostFunction.m - funkcja kosztu dla sieci neuronowej
Wstęp
Celem ćwiczeń laboratoryjnych jest nauczenie sieci neuronowej rozpoznawania cyfr.
Sieć neuronowa będzie składać się z 3 warstw. Ilość neuronów w warstwie wyjściowej będzie równa ilości klasyfikowanych wzorców (czyli w naszym przypadku 10).
Struktura sieci neuronowej przedstawiona jest na rysunku poniżej. Pierwsza warstwa zawiera 400 perceptronów, warstwa ukryta zabiera 25 neuronów, a warstwa wyjściowa 10.
Funkcja kosztu
Uzupełnij plik nnCostFunction.m wyznaczając koszt i gradient dla sieci neuronowej.
Uwaga Macierz X, zawierająca zbiór uczący, zbudowana jest w taki sposób, że poszczególne elementy uczące znajdują się w wierszach. Aby dostać się do i-tego przykładu uczącego należy zatem odwołać się do niego w następujący sposób: X(i,:).
Uwaga Macierz X nie zawiera elementów biasu, dlatego w funkcji nnCostFunction.m konieczne jest dodanie tych elementów!
Uwaga Parametry dla poszczególnych warstw sieci znajdują się w zmiennych Theta1 oraz Theta2. Theta1 ma rozmiar 25 x 401. Theta2 ma rozmiar 10 x 26.
Wartość funkcji kosztu obliczany jest za pomocą wzoru:
Gdzie to ilość przykładów w zbiorze uczącym, a to ilość etykiet (w naszym przypadku 10).
Uwaga Pamiętaj aby poprawnie obliczyć wartość , która w przypadku sieci neuronowej polega na wymnożeniu współczynników wag Theta i danych wejściowych - zobacz rysunek powyżej.
Uwaga Sieć neuronowa ma 10 neuronów w warstwie wyjściowej. Zatem wyjście sieci oznaczające, że rozpoznano np liczbę 3, będzie wyglądać następująco:
Sprawdź działanie funkcji za pomocą skrypty check.m.
Uruchom skrypt ex4.m. Powinieneś zobaczyć koszt równy około 0.287629.
Funkcja kosztu z regularyzacją
Wartość funkcji kosztu obliczany jest za pomocą wzoru:
Gdzie
Uwaga Pamiętaj, żeby we wzorze na remaskularyzację nie uwzględniać biasu.
Przetestuj działanie funkcji za pomocą skryptu check.m.
Przetestuj działanie funkcji za pomocą skryptu ex4.m. Powinieneś otrzymać wynik funkcji kosztu na poziomie około 0.383770.
Backpropagation
Dla każdego elementu t ze zbioru uczącego wykonaj następujące kroki (tutaj nie da się uniknąć pętli for t=1:m … end).
Ustaw wartości perceptronów (warstwa wejściowa
na
t-ty element ze zbioru uczącego
. Wykonaj propagacje wprzód (patrz
rysunek pierwszy), obliczając poszczególne wartości dla warstw wewnętrznych (
). Pamiętaj o uwzględnieniu biasu w zmiennych
oraz
. Np.
a_1 = [1; a_1].
Dla każdego neuronu z warstwy wyjściowej oblicz
Dla ukrytej warstwy
, ustaw:
Oblicz zakumulowany gradient dla danego elementu
t. Pamiętaj żeby pominąć
:
Wyznacz niezregularyzowany gradient:
Uruchom skrypt ex4.m i sprawdź poprawność działania algorytmu.