Wykorzystanie pochodnych w sieciach neuronowych służy do procesu szkoleniowego zwanego propagacją wsteczną . Ta technika wykorzystuje opadanie gradientu w celu znalezienia optymalnego zestawu parametrów modelu w celu zminimalizowania funkcji utraty. W twoim przykładzie musisz użyć pochodnej sigmoidu, ponieważ jest to aktywacja, której używają twoje poszczególne neurony.
Funkcja straty
Istotą uczenia maszynowego jest optymalizacja funkcji kosztów, tak abyśmy mogli zminimalizować lub zmaksymalizować niektóre funkcje docelowe. Zazwyczaj nazywa się to funkcją straty lub kosztu. Zazwyczaj chcemy zminimalizować tę funkcję. Funkcja kosztu, , wiąże pewną karę na podstawie błędów wynikowych podczas przesyłania danych przez model jako funkcję parametrów modelu.C
Spójrzmy na przykład, w którym próbujemy oznaczyć, czy obraz zawiera kota czy psa. Jeśli mamy idealny model, możemy dać modelowi zdjęcie i powie nam, czy jest to kot czy pies. Jednak żaden model nie jest idealny i popełni błędy.
Kiedy trenujemy nasz model, aby móc wywnioskować znaczenie z danych wejściowych, chcemy zminimalizować liczbę popełnianych przez niego błędów. Używamy więc zestawu treningowego, dane te zawierają wiele zdjęć psów i kotów i mamy przypisaną do tego etykietę naziemną prawdę. Za każdym razem, gdy przeprowadzamy iterację treningową modelu, obliczamy koszt (liczbę błędów) modelu. Będziemy chcieli zminimalizować ten koszt.
Istnieje wiele funkcji kosztów, z których każda służy swojemu celowi. Często stosowaną funkcją kosztu jest koszt kwadratowy, który jest zdefiniowany jako
.C=1N∑Ni=0(y^−y)2
Jest to kwadrat różnicy między etykietą przewidywaną a etykietą prawdziwej ziemi dla obrazów , nad którymi trenowaliśmy. Będziemy chcieli jakoś to zminimalizować.N
Minimalizowanie funkcji utraty
Rzeczywiście większość uczenia maszynowego to po prostu rodzina platform, które są w stanie określić rozkład poprzez minimalizację niektórych funkcji kosztów. Pytanie, które możemy zadać, brzmi „w jaki sposób możemy zminimalizować funkcję”?
Zminimalizujmy następującą funkcję
.y=x2−4x+6
Jeśli wykreślimy to, zobaczymy, że jest minimum przy . Aby to zrobić analitycznie, możemy przyjąć pochodną tej funkcji jakox=2
dydx=2x−4=0
.x=2
Często jednak analityczne znalezienie globalnego minimum nie jest możliwe. Zamiast tego używamy niektórych technik optymalizacji. Tutaj również istnieje wiele różnych sposobów, takich jak: Newton-Raphson, wyszukiwanie siatki itp. Wśród nich jest opadanie gradientu . Jest to technika stosowana przez sieci neuronowe.
Spadek gradientu
Użyjmy znanej analogii, aby to zrozumieć. Wyobraź sobie problem minimalizacji 2D. Jest to równoważne z górską wędrówką po pustyni. Chcesz wrócić do wioski, o której wiesz, że jest w najniższym punkcie. Nawet jeśli nie znasz głównych kierunków wioski. Wszystko, co musisz zrobić, to stale schodzić stromo w dół, aż w końcu dotrzesz do wioski. Zejdziemy więc po powierzchni w oparciu o nachylenie zbocza.
Weźmy naszą funkcję
y=x2−4x+6
określimy dla którego y jest zminimalizowane. Algorytm spadku gradientu najpierw mówi, że wybierzemy losową wartość dla x . Zainicjujmy przy x = 8 . Następnie algorytm wykona następujące czynności iteracyjnie, aż do osiągnięcia konwergencji.xyxx=8
xnew=xold−νdydx
gdzie jest współczynnikiem uczenia się, możemy ustawić tę wartość na dowolną wartość, jaką chcemy. Istnieje jednak sprytny sposób na wybranie tego. Za duży i nigdy nie osiągniemy naszej minimalnej wartości, a za duży zmarnujemy tak dużo czasu, zanim tam dotrzemy. Jest to analogiczne do wielkości kroków, które chcesz zjechać ze stromego zbocza. Małe kroki, a umrzesz na górze, nigdy nie zejdziesz. Zbyt duży krok i ryzykujesz nadestrzeleniem wioski i wylądowaniem po drugiej stronie góry. Pochodna to sposób, w jaki podróżujemy w dół tego zbocza w kierunku naszego minimum.ν
dydx=2x−4
ν=0.1
Iteracja 1:
x n e w = 6,8 - 0,1 ( 2 ∗ 6,8 - 4 ) = 5,84 x n e w = 5,84 - 0,1 ( 2 ∗ 5,84 - 4 ) = 5,07 x n e w = 5,07 - 0,1xnew=8−0.1(2∗8−4)=6.8
xnew=6.8−0.1(2∗6.8−4)=5.84
xnew=5.84−0.1(2∗5.84−4)=5.07
x n e w = 4,45 - 0,1 ( 2 ∗ 4,45 - 4 ) = 3,96 x n e w = 3,96 - 0,1 ( 2 ∗ 3,96 - 4 ) = 3,57 x n e w = 3,57 - 0,1 ( 2 ∗ 3,57 - 4 )xnew=5.07−0.1(2∗5.07−4)=4.45
xnew=4.45−0.1(2∗4.45−4)=3.96
xnew=3.96−0.1(2∗3.96−4)=3.57
x n e w = 3,25 - 0,1 ( 2 ∗ 3,25 - 4 ) = 3,00 x n e w = 3,00 - 0,1 ( 2 ∗ 3,00 - 4 ) = 2,80 x n e w = 2,80 - 0,1 ( 2 ∗ 2,80 - 4 ) = 2,64 x n e w =xnew=3.57−0.1(2∗3.57−4)=3.25
xnew=3.25−0.1(2∗3.25−4)=3.00
xnew=3.00−0.1(2∗3.00−4)=2.80
xnew=2.80−0.1(2∗2.80−4)=2.64
x n e w = 2,51 - 0,1 ( 2 ∗ 2,51 - 4 ) = 2,41 x n e w = 2,41 - 0,1 ( 2 ∗ 2,41 - 4 ) = 2,32 x n e w = 2,32 - 0,1 ( 2 ∗ 2,32xnew=2.64−0.1(2∗2.64−4)=2.51
xnew=2.51−0.1(2∗2.51−4)=2.41
xnew=2.41−0.1(2∗2.41−4)=2.32
x n e w = 2,26 - 0,1 ( 2 ∗ 2,26 - 4 ) = 2,21 x n e w = 2,21 - 0,1 ( 2 ∗ 2,21 - 4 ) = 2,16 x n e w = 2,16 - 0,1 ( 2 ∗ 2,16 - 4 ) = 2,13 x nxnew=2.32−0.1(2∗2.32−4)=2.26
xnew=2.26−0.1(2∗2.26−4)=2.21
xnew=2.21−0.1(2∗2.21−4)=2.16
xnew=2.16−0.1(2∗2.16−4)=2.13
x n e w =2,10-0,1(2∗2,10-4)=2,08 x n e w =2,08-0,1(2∗2,08-4)=2,06 x n e w =2,06-0,1(xnew=2.13−0.1(2∗2.13−4)=2.10
xnew=2.10−0.1(2∗2.10−4)=2.08
xnew=2.08−0.1(2∗2.08−4)=2.06
x n e w = 2,05 - 0,1 ( 2 ∗ 2,05 - 4 ) = 2,04 x n e w = 2,04 - 0,1 ( 2 ∗ 2,04 - 4 ) = 2,03 x n e w = 2,03 - 0,1 ( 2 ∗ 2,03 - 4 ) =xnew=2.06−0.1(2∗2.06−4)=2.05
xnew=2.05−0.1(2∗2.05−4)=2.04
xnew=2.04−0.1(2∗2.04−4)=2.03
x n e w = 2,02 - 0,1 ( 2 ∗ 2,02 - 4 ) = 2,02 x n e w = 2,02 - 0,1 ( 2 ∗ 2,02 - 4 ) = 2,01 x n e w = 2,01 - 0,1 ( 2 ∗ 2,01 - 4 ) = 2,01 x n e w = 2,01xnew=2.03−0.1(2∗2.03−4)=2.02
xnew=2.02−0.1(2∗2.02−4)=2.02
xnew=2.02−0.1(2∗2.02−4)=2.01
xnew=2.01−0.1(2∗2.01−4)=2.01
x n e w = 2,01 - 0,1 ( 2 ∗ 2,01 - 4 ) = 2,00 x n e w = 2,00 - 0,1 ( 2 ∗ 2,00 - 4 ) = 2,00 x n e w = 2,00 - 0,1 ( 2 ∗ 2,00 -xnew=2.01−0.1(2∗2.01−4)=2.01
xnew=2.01−0.1(2∗2.01−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
x n e w = 2,00 - 0,1 ( 2 ∗ 2,00 - 4 ) = 2,00 x n e w = 2,00 - 0,1 ( 2 ∗ 2,00 - 4 ) = 2,00xnew=2.00−0.1(2∗2.00−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
xnew=2.00−0.1(2∗2.00−4)=2.00
Widzimy, że algorytm jest zbieżny przy ! Znaleźliśmy minimum.x=2
Stosowany do sieci neuronowych
Pierwsze sieci neuronowe miał tylko jeden neuron która miała wejść w pewnych , a następnie dostarczania sygnału wyjściowego y . Często stosowaną funkcją jest funkcja sigmoidalnaxy^
σ(z)=11+exp(z)
y^(wTx)=11+exp(wTx+b)
gdzie jest powiązaną wagą dla każdego wejścia x, a my mamy odchylenie b . Następnie chcemy zminimalizować naszą funkcję kosztówwxb
.C=12N∑Ni=0(y^−y)2
Jak trenować sieć neuronową?
Użyjemy metoda gradientu prostego trenować wagi oparte na wyjściu funkcji esicy i będziemy korzystać z niektórych funkcji kosztu i pociągu na partiach danych o rozmiarze N .CN
C=12N∑Ni(y^−y)2
jest przewidywany klasa uzyskane z funkcji esicy iYjest etykieta ziemia prawda. Wykorzystamy gradient opadający, aby zminimalizować funkcję kosztów w odniesieniu do wagw. Aby ułatwić życie, podzielimy pochodną w następujący sposóby^yw
.∂C∂w=∂C∂y^∂y^∂w
∂C∂y^=y^−y
y^=σ(wTx)∂σ(z)∂z=σ(z)(1−σ(z))
∂y^∂w=11+exp(wTx+b)(1−11+exp(wTx+b))
Możemy więc zaktualizować wagi poprzez opadanie gradientu jako
wnew=wold−η∂C∂w
η