Grafy obliczeniowe
Propagacja wsteczna jest implementowana w strukturach głębokiego uczenia, takich jak Tensorflow, Torch, Theano itp., Przy użyciu wykresów obliczeniowych. Co ważniejsze, zrozumienie propagacji wstecznej na grafach obliczeniowych łączy kilka różnych algorytmów i ich wariacji, takich jak wsteczna prop w czasie i wsteczna ze wspólnymi wagami. Gdy wszystko zostanie przekształcone w graf obliczeniowy, nadal są one tym samym algorytmem - po prostu cofają propagację na grafach obliczeniowych.
Co to jest wykres obliczeniowy
Graf obliczeniowy jest definiowany jako skierowany graf, w którym węzły odpowiadają operacjom matematycznym. Wykresy obliczeniowe są sposobem wyrażania i oceniania wyrażeń matematycznych.
Na przykład tutaj jest proste równanie matematyczne -
$$ p = x + y $$
Możemy narysować wykres obliczeniowy powyższego równania w następujący sposób.
Powyższy wykres obliczeniowy ma węzeł dodawania (węzeł ze znakiem „+”) z dwiema zmiennymi wejściowymi x i y oraz jednym wyjściem q.
Weźmy inny przykład, nieco bardziej złożony. Mamy następujące równanie.
$$ g = \ left (x + y \ right) \ ast z $$
Powyższe równanie przedstawia poniższy wykres obliczeniowy.
Grafy obliczeniowe i wsteczna propagacja
Grafy obliczeniowe i wsteczna propagacja są ważnymi podstawowymi koncepcjami w uczeniu głębokim do uczenia sieci neuronowych.
Podanie do przodu
Przebieg w przód to procedura oceny wartości wyrażenia matematycznego reprezentowanego przez wykresy obliczeniowe. Wykonanie przejścia do przodu oznacza, że przekazujemy wartość ze zmiennych w kierunku do przodu z lewej strony (wejście) do prawej, gdzie znajduje się dane wyjściowe.
Rozważmy przykład, nadając wartość wszystkim wejściom. Załóżmy, że wszystkie dane wejściowe mają następujące wartości.
$$ x = 1, y = 3, z = −3 $$
Podając te wartości wejściom, możemy wykonać przejście do przodu i uzyskać następujące wartości dla wyjść w każdym węźle.
Najpierw używamy wartości x = 1 iy = 3, aby otrzymać p = 4.
Następnie używamy p = 4 iz = -3, aby otrzymać g = -12. Przechodzimy od lewej do prawej, do przodu.
Cele przejścia wstecz
W przejściu wstecz, naszym zamiarem jest obliczenie gradientów dla każdego wejścia w odniesieniu do końcowego wyniku. Te gradienty są niezbędne do uczenia sieci neuronowej przy użyciu gradientu.
Na przykład pragniemy następujących gradientów.
Pożądane gradienty
$$ \ frac {\ częściowe x} {\ częściowe f}, \ frac {\ częściowe y} {\ częściowe f}, \ frac {\ częściowe z} {\ częściowe f} $$
Przejście wstecz (propagacja wsteczna)
Rozpoczynamy przejście wstecz od znalezienia pochodnej wyniku końcowego w odniesieniu do wyniku końcowego (siebie!). W ten sposób spowoduje to wyprowadzenie tożsamości, a wartość będzie równa jeden.
$$ \ frac {\ Part g} {\ Part g} = 1 $$
Nasz wykres obliczeniowy wygląda teraz tak, jak pokazano poniżej -
Następnie wykonamy przejście wstecz przez operację „*”. Obliczymy gradienty przy p i z. Ponieważ g = p * z, wiemy, że -
$$ \ frac {\ part g} {\ some z} = p $$
$$ \ frac {\ part g} {\ part p} = z $$
Znamy już wartości zi p z przejścia do przodu. Stąd otrzymujemy -
$$ \ frac {\ part g} {\ some z} = p = 4 $$
i
$$ \ frac {\ częściowe g} {\ częściowe p} = z = -3 $$
Chcemy obliczyć gradienty przy x i y -
$$ \ frac {\ Part g} {\ Part x}, \ frac {\ Part g} {\ Part y} $$
Chcemy to jednak zrobić efektywnie (chociaż na tym wykresie xig są oddalone tylko o dwa przeskoki, wyobraź sobie, że są bardzo daleko od siebie). Aby skutecznie obliczyć te wartości, użyjemy łańcuchowej reguły różniczkowania. Z reguły łańcucha mamy -
$$ \ frac {\ częściowe g} {\ częściowe x} = \ frac {\ częściowe g} {\ częściowe p} \ ast \ frac {\ częściowe p} {\ częściowe x} $$
$$ \ frac {\ częściowe g} {\ częściowe y} = \ frac {\ częściowe g} {\ częściowe p} \ ast \ frac {\ częściowe p} {\ częściowe y} $$
Ale wiemy już, że dg / dp = -3, dp / dx i dp / dy są łatwe, ponieważ p zależy bezpośrednio od x i y. Mamy -
$$$
Stąd otrzymujemy -
$$ \ frac {\ częściowe g} {\ częściowe f} = \ frac {\ częściowe g} {\ częściowe p} \ ast \ frac {\ częściowe p} {\ częściowe x} = \ left (-3 \ right) .1 = -3 $$
Dodatkowo dla wejścia y -
$$ \ frac {\ częściowe g} {\ częściowe y} = \ frac {\ częściowe g} {\ częściowe p} \ ast \ frac {\ częściowe p} {\ częściowe y} = \ left (-3 \ right) .1 = -3 $$
Głównym powodem robienia tego wstecz jest to, że kiedy musieliśmy obliczyć gradient przy x, używaliśmy tylko już obliczonych wartości i dq / dx (pochodna wyjścia węzła w odniesieniu do wejścia tego samego węzła). Wykorzystaliśmy informacje lokalne do obliczenia wartości globalnej.
Kroki do uczenia sieci neuronowej
Wykonaj następujące kroki, aby wytrenować sieć neuronową -
W przypadku punktu danych x w zbiorze danych wykonujemy przejście do przodu z x jako danymi wejściowymi i obliczamy koszt c jako dane wyjściowe.
Wykonujemy przejście wstecz zaczynając od c i obliczamy gradienty dla wszystkich węzłów na wykresie. Obejmuje to węzły, które reprezentują wagi sieci neuronowych.
Następnie aktualizujemy wagi, wykonując W = W - tempo uczenia się * gradienty.
Powtarzamy ten proces, dopóki nie zostaną spełnione kryteria zatrzymania.