W poprzednim ćwiczeniu zauważyłeś, że dodawanie nie wystarczają do reprezentowania nieliniowości. Operacje liniowe wykonywane na operacjach linearnych są nadal liniowe.
Jak skonfigurować sieć neuronowa, aby uczyć się nieliniowe zależności między wartościami? Potrzebujemy sposobu na wstawienie obiektu nieliniowego w modelu przy użyciu operacji matematycznych.
Jeśli wydaje się to znajome, oznacza to, że zastosowaliśmy nieliniowych operacji matematycznych na wyjściu modelu liniowego, w ramach kursu. Raport Regresja logistyczna dostosowaliśmy model regresji liniowej, aby uzyskać ciągłą wartość od 0. do 1 (reprezentujące prawdopodobieństwo), przekazując dane wyjściowe modelu przez funkcję funkcja sigmoidalna.
Tę samą zasadę możemy zastosować do naszej sieci neuronowej. Spójrzmy jeszcze raz na model z Ćwiczenia 2 wcześniej, ale tym razem przed na wyjściu wartości każdego węzła, zastosujemy najpierw funkcję sigmoidalną:
Spróbuj wykonać obliczenia dla każdego węzła, klikając przycisk >|. (po prawej stronie przycisku odtwarzania). Przeanalizuj wykonane działania matematyczne aby obliczyć każdą wartość węzła w panelu Obliczenia pod wykresem. Zwróć uwagę, że dane wyjściowe każdego węzła są teraz sigmoidalną transformacją liniową połączenia węzłów w poprzedniej warstwie, a wartości wyjściowe to mieści się w zakresie od 0 do 1.
W tym przykładzie sigmoida jest funkcji aktywacji dla sieci neuronowej, nieliniowe przekształcenie wartości wyjściowej neuronu przed przekazaniem tej wartości jako danych wejściowych w obliczeniach kolejnego warstwa sieci neuronowej.
Po dodaniu funkcji aktywacji dodawanie warstw ma większy wpływ na skuteczność. Nakładanie warstw nieliniowych pozwala nam tworzyć bardzo złożone modele zależności między danymi wejściowymi a prognozowanymi danymi wyjściowymi. Krótko mówiąc, każda warstwa uczy się bardziej złożonej funkcji wyższego poziomu na podstawie danych wejściowych. Jeśli chcesz dowiedzieć się więcej, zobacz świetny post Chrisa Olaha.
Typowe funkcje aktywacyjne
Trzy funkcje matematyczne, które są powszechnie używane jako funkcje aktywacji to sigmoid, tanh i ReLU.
Funkcja sigmoidalna (omówiona powyżej) wykonuje następujące przekształcenie na danych wejściowych $x$, otrzymując wartość wyjściową z zakresu od 0 do 1:
\[F(x)=\frac{1} {1+e^{-x}}\]
Oto schemat tej funkcji:
![Rysunek 4. Wykres funkcji sigmoidalnej: krzywa w kształcie litery S
asyptotycznie zbliża się do osi X, gdy x zbliża się do wartości ujemnej
nieskończoność i 1, gdy x zbliża się do nieskończoności.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/sigmoid.png?authuser=19&hl=pl)
Funkcja tanh (skrót od „tangens hiperboliczny”) przekształca dane wejściowe $x$ na dają wartość wyjściową z zakresu od –1 do 1:
\[F(x)=tanh(x)\]
Oto schemat tej funkcji:
![Rysunek 5. Wykres funkcji tanh: nieco
stroma w kształcie litery s niż funkcja sigmoidalna, która
przybliżenia – 1 jak zbliża się do ujemnej nieskończoności x, a 1 – gdy zbliża się do osi x
nieskończoność.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/tanh.png?authuser=19&hl=pl)
Funkcja aktywacji wyprostowanej jednostki liniowej (lub ReLU w przypadku krótko) przekształca dane wyjściowe za pomocą następującego algorytmu:
- Jeśli wartość wejściowa $x$ jest mniejsza niż 0, zwraca 0.
- Jeśli wartość wejściowa $x$ jest większa niż lub równa 0, zwraca wartość wejściową.
ReLU można przedstawić matematycznie przy użyciu funkcji max():
Oto schemat tej funkcji:
![Rysunek 6. Wykres funkcji ReLU: linia pozioma
wzdłuż osi X, od nieskończoności ujemnej do 0, co tworzy ukośną linię
w górę i w prawo z nachyleniem 1 (y=x) od 0 do nieskończoności.](https://developers.google.cn/static/machine-learning/crash-course/neural-networks/images/relu.png?authuser=19&hl=pl)
Funkcja aktywująca ReLU często działa trochę lepiej niż takie jak sigmoid lub tanh, ponieważ jest mniej podatny na problem z znikającym gradientem podczas trenowania sieci neuronowych. ReLU jest też znacznie łatwiejsza niż te funkcje.
Inne funkcje aktywacji
W praktyce każda funkcja matematyczna może pełnić funkcję funkcji aktywującej. Załóżmy, że \(\sigma\) reprezentuje naszą funkcję aktywacji. Wartość węzła w sieci jest określona przez: wzór:
Keras oferuje gotowe wsparcie dla wielu funkcjach aktywacyjnych. Zalecamy jednak, aby zacząć od ReLU.
Podsumowanie
Poniższy film zawiera podsumowanie informacji zdobytych do tej pory. na temat tego, jak zbudowane są sieci neuronowe:
Nasz model zawiera teraz wszystkie standardowe komponenty tego, co ludzie zwykle mają znaczenie, gdy odnoszą się do sieci neuronowej:
- Zbiór węzłów analogicznych do neuronów i ułożonych w warstwy.
- Zbiór wag reprezentujących połączenia między każdą siecią neuronowa i warstwy pod nią. Warstwa poniżej może być warstwa sieci neuronowej czy inny rodzaj warstwy.
- Zbiór odchylenia, po jednym dla każdego węzła.
- Funkcja aktywacji, która przekształca dane wyjściowe każdego węzła w warstwie. Różne warstwy mogą mieć różne funkcje aktywacji.
Uwaga: sieci neuronowe nie zawsze są lepsze od ale sieci neuronowe oferują elastyczną alternatywę, dobrze w wielu przypadkach.