Algorytm propagacji
Algorytm propagacji jest niezbędny do szybkiego trenowania dużych sieci neuronowych. Z tego artykułu dowiesz się, jak działa ten algorytm.
Przewiń w dół...
Prosta sieć neuronowa
Po prawej stronie zobaczysz sieć neuronową z 1 wejściem, 1 węzłem wyjściowym i 2 ukrytymi warstwami po 2 węzły.
Węzły w sąsiednich warstwach są połączone wagami wij, które są parametrami sieci.
Funkcja aktywacji
Każdy węzeł ma łączną łączną liczbę x, funkcję aktywacji f(x)i dane wyjściowe y=f(x).
f(x) musi być funkcją nielinearną. W przeciwnym razie sieć neuronowa będzie mogła uczyć się tylko modele liniowe.
Częstą funkcją aktywacji jest funkcja Sigmoid: f(x)=11+e−x.
Funkcja błędu
Ma to na celu automatyczne poznanie wag sieci na podstawie danych, aby przewidywane dane wyjściowe youtputbyły zbliżone do wartości docelowej ytarget w przypadku wszystkich danych wejściowych xinput.
Do określenia, jak daleko jesteśmy od celu, używamy funkcji błędu E.
Typowa funkcja błędu to E(youtput,ytarget)=12(youtput−ytarget)2.
Przekaż dalej
Zaczniemy od przykładowego wprowadzenia (xinput,ytarget) i zaktualizowania warstwy wejściowej sieci.
Aby zachować spójność, dane wejściowe są uznawane za każdy inny węzeł, ale bez funkcji aktywacji, dlatego dane wyjściowe są takie same jak dane wejściowe, czyli y1=xinput.
Przekaż dalej
Teraz aktualizujemy pierwszą ukrytą warstwę. Sprawdzamy dane wyjściowe y węzłów z poprzedniej warstwy i używamy wag do obliczania ich danych wejściowych x w następnej warstwie.
Przekaż dalej
Następnie aktualizujemy dane wyjściowe węzłów w pierwszej ukrytej warstwie.
Do tego celu używamy funkcji aktywacji f(x).
Przekaż dalej
Korzystając z tych 2 formuł, rozpowszechniamy resztę sieci i pobieramy jej ostateczne dane wyjściowe.
Pochodna błędu
Algorytm propagacji decyduje o tym, jak duża ma być aktualizacja każdej wagi sieci po porównaniu prognozowanej wartości wyjściowej z oczekiwanymi danymi wyjściowymi dla danego przykładu.
W tym celu musimy obliczyć zmianę wagi w poszczególnych wagach. dEdwij
Gdy otrzymamy pochodne błędów, możemy zaktualizować wagi, korzystając z prostej reguły aktualizacji:
gdzie α jest stałą dodatnią, zwaną współczynnikiem nauczania, który musimy dostosować w empiryczny sposób.
[Uwaga] Reguła aktualizacji jest bardzo prosta: jeśli błąd zniknie, gdy waga wzrośnie (dEdwij<0), a następnie zwiększ wagę, a gdy wzrośnie, gdy waga wzrośnie (dEdwij>0), a potem zmniejsz wagę.
Dodatkowe pochodne
Aby ułatwić obliczenie funkcji dEdwij, dodatkowo przechowujemy też dla każdego 2 pochodnych węzłów, w zależności od tego, jak zmienia się błąd:
- łączną liczbę węzłów dEdx i
- dane wyjściowe węzła dEdy.
Propagacja wstecz
Zaczynamy propagować pochodne w błędach.
Zgodnie z prognozą danych wyjściowych z danego przykładu możemy obliczyć, jak zmienia się błąd w tych danych wyjściowych.
Ze względu na funkcję błędów E=12(youtput−ytarget)2 mamy:
Propagacja wstecz
Teraz dEdy możemy dEdx używać reguły łańcuchowej.
gdzie ddxf(x)=f(x)(1−f(x)) jeśli f(x) to funkcja aktywacji Sigmoid.
Propagacja wstecz
Gdy tylko uzyskamy pochodną błędu dotyczącego całkowitej wartości jego węzła, możemy uzyskać jego pochodną wagę względem tego węzła.
Propagacja wstecz
Korzystając z reguły łańcucha, możemy też dEdy uzyskać dostęp do poprzedniej warstwy. Zrobiliśmy już koło
Propagacja wstecz
Musisz tylko powtórzyć 3 poprzednie formuły, dopóki nie obliczymy wszystkich pochodnych błędów.