Głębokie pojęcia dotyczące sieci neuronowej

Ukończone

Przed rozpoczęciem trenowania modelu uczenia maszynowego głębokiej sieci neuronowej (DNN) rozważmy, co próbujemy osiągnąć. Uczenie maszynowe dotyczy przewidywania etykiety na podstawie niektórych cech konkretnej obserwacji. Mówiąc prosto, model uczenia maszynowego to funkcja, która oblicza wartość y (etykietę) z wartości x (funkcje): f(x)=y.

Prosty przykład klasyfikacji

Załóżmy na przykład, że obserwacja składa się z niektórych pomiarów pingwina.

A penguin with a ruler and weighing scales

W szczególności pomiary to:

  • Długość rachunku pingwina.
  • Głębokość rachunku pingwina.
  • Długość flippera pingwina.
  • Waga pingwina.

W tym przypadku funkcje (x) są wektorem czterech wartości lub matematycznie, x=[x1,x 2,x 3,x 4].

Załóżmy, że etykieta, którą próbujemy przewidzieć (y) jest gatunkiem pingwina i że istnieją trzy możliwe gatunki, które mogą być:

  1. Adelie
  2. Gentoo
  3. Chinstrap

Jest to przykład problemu klasyfikacji , w którym model uczenia maszynowego musi przewidzieć najbardziej prawdopodobną klasę, do której należy obserwacja. Model klasyfikacji pozwala przewidzieć etykietę składającą się z prawdopodobieństwa dla każdej klasy. Innymi słowy, y jest wektorem trzech wartości prawdopodobieństwa; jeden dla każdej z możliwych klas: y=[P(0),P(1),P(2)].

Model uczenia maszynowego jest trenowany przy użyciu obserwacji, dla których już znasz prawdziwą etykietę. Na przykład mogą istnieć następujące pomiary cech dla okazu Adelie :

x=[37.3, 16.8, 19.2, 30.0]

Wiesz już, że jest to przykład klasy Adelie (klasa 0), więc idealna funkcja klasyfikacji powinna spowodować etykietę wskazującą 100% prawdopodobieństwa dla klasy 0, a prawdopodobieństwo 0% dla klas 1 i 2:

y=[1, 0, 0]

Głęboki model sieci neuronowej

Jak więc za pomocą uczenia głębokiego utworzyć model klasyfikacji dla modelu klasyfikacji pingwinów? Przyjrzyjmy się przykładowi:

A neural network with four neurons in an input layer, two hidden layers, and three neurons in an output layer

Głęboki model sieci neuronowej dla klasyfikatora składa się z wielu warstw sztucznych neuronów. W tym przypadku istnieją cztery warstwy:

  • Warstwa wejściowa z neuronem dla każdej oczekiwanej wartości wejściowej (x).
  • Dwie tak zwane warstwy ukryte , z których każda zawiera pięć neuronów.
  • Warstwa wyjściowa zawierająca trzy neurony — jedną dla każdej wartości prawdopodobieństwa (y) klasy, która ma być przewidywana przez model.

Ze względu na warstwową architekturę sieci tego rodzaju model jest czasami określany jako wielowarstwowy perceptron. Ponadto zwróć uwagę, że wszystkie neurony w warstwach wejściowych i ukrytych są połączone ze wszystkimi neuronami w kolejnych warstwach — jest to przykład w pełni połączonej sieci.

Podczas tworzenia modelu takiego jak ten należy zdefiniować warstwę wejściową, która obsługuje liczbę funkcji, które będą przetwarzane przez model, oraz warstwę danych wyjściowych, która odzwierciedla liczbę danych wyjściowych, których oczekujesz. Możesz zdecydować, ile warstw ukrytych chcesz uwzględnić i ile neuronów znajduje się w każdej z nich; ale nie masz kontroli nad wartościami wejściowymi i wyjściowymi dla tych warstw — są one określane przez proces trenowania modelu.

Trenowanie głębokiej sieci neuronowej

Proces trenowania głębokiej sieci neuronowej składa się z wielu iteracji nazywanych epokami. W pierwszej epoki należy zacząć od przypisania losowych wartości inicjowania dla wartości wagi (w) i stronniczych b. Następnie proces jest następujący:

  1. Funkcje obserwacji danych ze znanymi wartościami etykiet są przesyłane do warstwy wejściowej. Ogólnie rzecz biorąc, te obserwacje są pogrupowane w partie (często nazywane minisadami).
  2. Neurony następnie stosują swoją funkcję, a jeśli są aktywowane, przekazują wynik do następnej warstwy, aż warstwa wyjściowa utworzy przewidywanie.
  3. Przewidywanie jest porównywane z rzeczywistą znaną wartością, a obliczana jest wielkość wariancji między wartościami przewidywanymi i rzeczywistymi (które nazywamy stratą).
  4. Na podstawie wyników skorygowane wartości wag i stronniczości są obliczane w celu zmniejszenia utraty, a te korekty są z powrotempropagowane do neuronów w warstwach sieciowych.
  5. Kolejna epoka powtarza przekazywanie trenowania wsadowego z poprawionymi wartościami wagi i stronniczości, miejmy nadzieję, że poprawi dokładność modelu (zmniejszając utratę).

Uwaga

Przetwarzanie funkcji trenowania w ramach partii zwiększa wydajność procesu trenowania przez przetwarzanie wielu obserwacji jednocześnie jako macierz cech z wektorami wag i uprzedzeń. Funkcje algebraiczne liniowe, które działają z macierzami i wektorami, mają również funkcję przetwarzania grafiki 3D, dlatego komputery z procesorami graficznymi (GPU) zapewniają znacznie lepszą wydajność trenowania modelu uczenia głębokiego niż tylko komputery z procesorem centralnym (CPU).

Bliżej przyjrzyj się funkcjom utraty i propagacji wstecznej

Poprzedni opis procesu trenowania uczenia głębokiego wspomniał, że utrata modelu jest obliczana i używana do dostosowywania wartości wagi i stronniczości. Jak dokładnie to działa?

Obliczanie straty

Załóżmy, że jeden z próbek przekazanych przez proces trenowania zawiera cechy okazu Adelie (klasa 0). Poprawne dane wyjściowe z sieci to [1, 0, 0]. Teraz załóżmy, że dane wyjściowe generowane przez sieć to [0.4, 0.3, 0.3]. Porównując te wartości, możemy obliczyć bezwzględną wariancję dla każdego elementu (innymi słowy, jak daleko jest przewidywana wartość od tego, co powinno być) jako [0,6, 0,3, 0,3].

W rzeczywistości, ponieważ w rzeczywistości mamy do czynienia z wieloma obserwacjami, zwykle agregujemy wariancję — na przykład przez kwadratowanie poszczególnych wartości wariancji i obliczanie średniej, więc kończymy się pojedynczą, średnią wartością straty, na przykład 0,18.

Optymalizatory

Teraz, oto sprytny kawałek. Utrata jest obliczana przy użyciu funkcji, która działa na wynikach z końcowej warstwy sieci, która jest również funkcją. Ostatnia warstwa sieci działa na danych wyjściowych z poprzednich warstw, które są również funkcjami. W efekcie cały model z warstwy wejściowej bezpośrednio do obliczenia straty to tylko jedna duża funkcja zagnieżdżona. Funkcje mają kilka naprawdę przydatnych cech, w tym:

  • Funkcję można koncepcyjnie określić jako kreśliną linię porównującą jej dane wyjściowe z poszczególnymi zmiennymi.
  • Możesz użyć różnicowego rachunku, aby obliczyć pochodną funkcji w dowolnym momencie w odniesieniu do jej zmiennych.

Weźmy pierwszą z tych funkcji. Możemy wykreślić wiersz funkcji, aby pokazać, w jaki sposób pojedyncza wartość wagi porównuje się z utratą, i oznaczać w tym wierszu punkt, w którym bieżąca wartość wagi jest zgodna z bieżącą wartością straty.

A chart showing a loss function with the current weight and loss values plotted as a point

Teraz zastosujmy drugą cechę funkcji. Pochodna funkcji dla danego punktu wskazuje, czy nachylenie (lub gradient) danych wyjściowych funkcji (w tym przypadku utrata) zwiększa się lub zmniejsza w odniesieniu do zmiennej funkcji (w tym przypadku wartość wagi). Dodatnia pochodna wskazuje, że funkcja rośnie, a ujemna pochodna wskazuje, że spada. W tym przypadku w punkcie kreślonym dla bieżącej wartości wagi funkcja ma gradient w dół. Innymi słowy, zwiększenie wagi będzie miało wpływ na zmniejszenie utraty.

Używamy optymalizatora , aby zastosować tę samą sztuczkę dla wszystkich zmiennych wagi i stronniczości w modelu i określić, w jakim kierunku musimy je dostosować (w górę lub w dół), aby zmniejszyć ogólną ilość utraty w modelu. Istnieje wiele powszechnie używanych algorytmów optymalizacji, w tym stochastyczny spadek gradientu (SGD), adaptacyjny współczynnik Edukacja (ADADELTA), adaptacyjne szacowanie momentu (Adam) i inne; wszystkie z nich mają na celu ustalenie, jak dostosować wagi i uprzedzenia w celu zminimalizowania utraty.

Tempo nauki

Teraz, oczywiste następne pytanie jest, o ile optymalizator powinien dostosować wagi i wartości stronniczość? Jeśli spojrzysz na wykres dla naszej wartości wagi, zobaczysz, że zwiększenie wagi o niewielką ilość będzie podążać za linią funkcji w dół (zmniejszenie utraty), ale jeśli zwiększymy ją o zbyt wiele, wiersz funkcji zacznie iść w górę ponownie, więc możemy rzeczywiście zwiększyć utratę; i po następnej epoki możemy stwierdzić, że musimy zmniejszyć wagę.

Rozmiar korekty jest kontrolowany przez parametr ustawiony na potrzeby trenowania nazywany współczynnikiem uczenia. Niska szybkość nauki powoduje niewielkie korekty (dzięki czemu może zająć więcej epok, aby zminimalizować utratę), podczas gdy wysoki wskaźnik uczenia skutkuje dużymi korektami (więc możesz całkowicie przegapić minimum).