Deep Learning z Keras - Deep Learning
Jak wspomniano we wstępie, głębokie uczenie się to proces uczenia sztucznej sieci neuronowej z ogromną ilością danych. Po przeszkoleniu sieć będzie mogła przekazywać nam prognozy dotyczące niewidocznych danych. Zanim przejdę dalej do wyjaśnienia, czym jest głębokie uczenie się, przejrzyjmy szybko niektóre terminy używane w szkoleniu sieci neuronowej.
Sieci neuronowe
Idea sztucznej sieci neuronowej wywodzi się z sieci neuronowych w naszym mózgu. Typowa sieć neuronowa składa się z trzech warstw - wejściowej, wyjściowej i ukrytej, jak pokazano na poniższym rysunku.
Nazywa się to również shallowsieć neuronowa, ponieważ zawiera tylko jedną ukrytą warstwę. Dodajesz więcej ukrytych warstw w powyższej architekturze, aby stworzyć bardziej złożoną architekturę.
Deep Networks
Poniższy diagram przedstawia głęboką sieć składającą się z czterech ukrytych warstw, warstwy wejściowej i warstwy wyjściowej.
W miarę dodawania liczby warstw ukrytych do sieci jej uczenie staje się bardziej złożone pod względem wymaganych zasobów i czasu potrzebnego do pełnego przeszkolenia sieci.
Szkolenie sieciowe
Po zdefiniowaniu architektury sieci można ją wyszkolić pod kątem wykonywania określonych rodzajów prognoz. Trenowanie sieci to proces znajdowania odpowiednich wag dla każdego łącza w sieci. Podczas szkolenia dane przepływają z warstw wejściowych do wyjściowych przez różne ukryte warstwy. Ponieważ dane zawsze przemieszczają się w jednym kierunku od wejścia do wyjścia, nazywamy tę sieć siecią sprzężenia zwrotnego, a propagację danych nazywamy propagacją naprzód.
Funkcja aktywacji
Na każdej warstwie obliczamy sumę ważoną danych wejściowych i przekazujemy ją do funkcji aktywacji. Funkcja aktywacji wprowadza nieliniowość do sieci. Jest to po prostu jakaś funkcja matematyczna, która dyskretyzuje wynik. Niektóre z najczęściej używanych funkcji aktywacji to sigmoidalne, hiperboliczne, styczne (tanh), ReLU i Softmax.
Propagacja wsteczna
Propagacja wsteczna to algorytm nadzorowanego uczenia się. W Backpropagation błędy są propagowane wstecz z danych wyjściowych do warstwy wejściowej. Mając funkcję błędu, obliczamy gradient funkcji błędu w odniesieniu do wag przypisanych na każdym połączeniu. Obliczanie gradientu przebiega wstecz przez sieć. Gradient ostatniej warstwy odważników jest obliczany jako pierwszy, a gradient pierwszej warstwy odważników jest obliczany jako ostatni.
Na każdej warstwie częściowe obliczenia gradientu są ponownie wykorzystywane do obliczania gradientu dla poprzedniej warstwy. Nazywa się to opadaniem gradientowym.
W tym samouczku opartym na projekcie zdefiniujesz głęboką sieć neuronową ze sprzężeniem zwrotnym i wyszkolisz ją za pomocą technik wstecznej propagacji i gradientu. Na szczęście Keras zapewnia nam wszystkie interfejsy API wysokiego poziomu do definiowania architektury sieci i trenowania jej przy użyciu gradientu. Następnie dowiesz się, jak to zrobić w Keras.
System rozpoznawania odręcznych cyfr
W tym mini projekcie zastosujesz techniki opisane wcześniej. Utworzysz sieć neuronową do głębokiego uczenia się, która zostanie przeszkolona w zakresie rozpoznawania odręcznych cyfr. W każdym projekcie uczenia maszynowego pierwszym wyzwaniem jest zebranie danych. Szczególnie w przypadku sieci uczenia głębokiego potrzebne są ogromne dane. Na szczęście dla problemu, który próbujemy rozwiązać, ktoś już stworzył zbiór danych do treningu. Nazywa się to mnist, który jest dostępny jako część bibliotek Keras. Zbiór danych składa się z kilku obrazów o wymiarach 28 x 28 pikseli z odręcznymi cyframi. Będziesz trenować swój model na głównej części tego zbioru danych, a reszta danych będzie używana do walidacji wytrenowanego modelu.
Opis Projektu
Plik mnistzbiór danych składa się z 70000 obrazów z odręcznymi cyframi. Poniżej przedstawiono kilka przykładowych obrazów w celach informacyjnych
Każdy obraz ma rozmiar 28 x 28 pikseli, co daje w sumie 768 pikseli o różnych poziomach szarości. Większość pikseli ma tendencję do czarnego odcienia, a tylko kilka z nich jest w kolorze białym. Umieścimy rozkład tych pikseli w tablicy lub wektorze. Na przykład rozkład pikseli dla typowego obrazu cyfr 4 i 5 pokazano na poniższym rysunku.
Każdy obraz ma rozmiar 28 x 28 pikseli, co daje w sumie 768 pikseli o różnych poziomach szarości. Większość pikseli ma tendencję do czarnego odcienia, a tylko kilka z nich jest w kolorze białym. Umieścimy rozkład tych pikseli w tablicy lub wektorze. Na przykład rozkład pikseli dla typowego obrazu cyfr 4 i 5 pokazano na poniższym rysunku.
Wyraźnie widać, że rozkład pikseli (zwłaszcza tych zmierzających do białego odcienia) różni się, co pozwala odróżnić cyfry, które reprezentują. Podamy tę dystrybucję 784 pikseli do naszej sieci jako jej dane wejściowe. Dane wyjściowe sieci będą składać się z 10 kategorii reprezentujących cyfrę od 0 do 9.
Nasza sieć będzie składać się z 4 warstw - jednej warstwy wejściowej, jednej wyjściowej i dwóch ukrytych. Każda ukryta warstwa będzie zawierała 512 węzłów. Każda warstwa jest w pełni połączona z następną warstwą. Kiedy trenujemy sieć, będziemy obliczać wagi dla każdego połączenia. Szkolimy sieć, stosując propagację wsteczną i zniżanie w gradiencie, które omówiliśmy wcześniej.