Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:dydaktyka:ml:lab6 [2016/04/19 11:38]
esimon [Funkcja kosztu]
pl:dydaktyka:ml:lab6 [2017/07/17 10:08]
Linia 1: Linia 1:
-====== Laboratorium 6 - Sztuczne sieci neuronowe ====== 
-Ćwiczenia bazujące na materiałach Andrew Ng.\\ 
-Przed zajęciami przejrzyj wykłady [[https://​class.coursera.org/​ml/​lecture/​preview|VIII i IX]] \\ 
-{{:​pl:​dydaktyka:​ml:​ex4.pdf|Instructions}} in English. 
- 
-Ćwiczenia do pobrania (files to download): {{:​pl:​dydaktyka:​ml:​neural-networks.zip|Neural Networks}} 
- 
- 
-===== 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 
-===== Rozgrzewka ===== 
-Zanim zaczniemy właściwą część zajęć, poświeć chwilę na obejrzeniu jak działa prosta sieć neuronowa w akcji: http://​playground.tensorflow.org/​ 
- 
-Zastanów się co wpływa na jakość klasyfikacji: ​ 
-  * ilość neuronów w warstwie ukrytej? 
-  * funkcja aktywacji neuronu? 
-  * cechy, które podajemy na wejściu? 
-  * ilość danych wejśćiowych?​ 
-  * współczynnik regularyzacji lub learning rate? 
-  * ilość warstw ukrytych? 
- 
-===== 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. 
- 
-{{:​pl:​dydaktyka:​ml:​digit-nn.png?​700|Struktura sieci neuronowej do rozpoznawania cyfr}} 
-===== 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 $\Theta$ 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: 
-$$J(\theta)= \frac{1}{m}\sum_{i=1}^{m}\sum_{k=1}^{K}\left [  -y_k^{(i)}log((h_\theta(x^{(i)}))_k)-(1-y_k^{(i)})log(1-(h_\theta(x^{(i)}))_k \right ]$$ 
- 
-Gdzie $m$ to ilość przykładów w zbiorze uczącym, a $K$ to ilość etykiet (w naszym przypadku 10). 
- 
-**Uwaga** Pamiętaj aby poprawnie obliczyć wartość $h(x)$, 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 (cyfrę **zero** reprezentować będzie 10 indeks wektora //y//): 
- 
-$$y = \begin{bmatrix} 
-0\\  
-0\\  
-1\\  
-0\\  
-...\\  
-0 
-\end{bmatrix}$$ 
- 
-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: 
-$$ 
-J(\theta)= \frac{1}{m}\sum_{i=1}^{m}\sum_{k=1}^{K}\left [  -y_k^{(i)}log((h_\theta(x^{(i)}))_k)-(1-u_k^{(i)})log(1-(h_\theta(x^{(i)}))_k \right ] + R(\theta) 
-$$ 
- 
-Gdzie 
-$$ 
-R(\theta) = \frac{\lambda}{2m}\left [ \sum_{j=1}^{25}\sum_{k=1}^{400}(\Theta_{j,​k}^{(1)})^2+\sum_{j=1}^{10}\sum_{k=1}^{25}(\Theta_{j,​k}^{(2)})^2 \right ] 
-$$ 
- 
-**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. 
- 
-===== Gradient funkcji sigmoidalnej ===== 
-Do wykonania następnego zadnia konieczne jest wyznaczenie gradientu funkcji sigmoidalnej. ​ 
-Uzupełnij plik //​sigmoidGradient.m//​. Gradient dla funkcji sigmoidalnej obliczany jest wg. wzoru: 
-$$ 
-g'(z) = \frac{d}{dz}g(z) = g(z)(1-g(z)) 
-$$ 
- 
-Sprawdź poprawność działania funkcji za pomocą skryptu //​check.m//​. 
-===== Backpropagation ===== 
-{{:​pl:​dydaktyka:​ml:​nn-backpropagation.png?​700|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 $a^{(1)})$ na //t-ty// element ze zbioru uczącego $x^{(t)}$. Wykonaj propagacje wprzód (patrz {{:​pl:​dydaktyka:​ml:​digit-nn.png?​linkonly|rysunek pierwszy}}),​ obliczając poszczególne wartości dla warstw wewnętrznych ($z^{(2)}, a^{(2)},​z^{(3)},​a^{3)}$). Pamiętaj o uwzględnieniu biasu w zmiennych $a^{(1)}$ oraz $a^{(2)}$. Np. //a_1 = [1; a_1]//. 
-  - Dla każdego neuronu z warstwy wyjściowej oblicz $$\delta_k^{(3)} = (a_k^{(3)}-y_k)$$ ​ 
-  - Dla ukrytej warstwy $l = 2$, ustaw: $$\delta^{(2)}=(\Theta^{(2)})^T\delta^{(3)}.*g'​(z^{(2)})$$ 
-  - Oblicz zakumulowany gradient dla danego elementu //t//. Pamiętaj żeby pominąć $\delta_0^{(2)}$:​$$\Delta^{(l)} = \Delta^{(l)} + \delta^{(l+1)}(a^{(l)})^T$$ 
-  - Wyznacz niezregularyzowany gradient:​$$\frac{\partial}{\partial\Theta_{i,​j}^{(l)})}J(\Theta) = \frac{1}{m}\Delta_{ij}^{(l)}$$ 
- 
-Uruchom skrypt //ex4.m// i sprawdź poprawność działania algorytmu. 
-Sprawdź działanie algorytmu za pomocą skryptu //check.m// 
- 
-===== Regularyzowane backpropagation ===== 
-Regularyzacja gradientu polega na następującej modyfikacji wzoru: 
-$$\frac{\partial}{\partial\Theta_{i,​j}^{(l)})}J(\Theta) = \frac{1}{m}\Delta_{ij}^{(l)}+\frac{\lambda}{m}\Theta_{ij}^{(l)}$$ 
- 
-**Uwaga** Pamiętaj aby pominąć bias! 
- 
-Przetestuj działanie algorytmu przy pomocy skryptu //check.m// oraz //ex4.m//. 
-===== Uwagi ===== 
- 
  
pl/dydaktyka/ml/lab6.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0