Funkcja aktywacji jest niezbędnym elementem przy projektowaniu sieci neuronowej. Wybór funkcji aktywacji da Ci pełną kontrolę nad procesem uczenia modelu sieciowego. Po dodaniu tych funkcji w warstwach ukrytych, model będzie się efektywnie uczył. Rodzaj predykcji zależy od wyboru funkcji aktywacji. Dlatego powinieneś starannie wybrać funkcję aktywacji dla każdej sieci głębokiego uczenia.

Funkcje aktywacji

Funkcja aktywacji oznacza transformację danych wejściowych za pomocą sumy ważonej do danych wyjściowych. Wykorzystuje ona pojedynczy węzeł lub więcej dla sieci do generowania predykcji. Możesz również odnieść się do funkcji aktywacji jako funkcji transferu. Lub, można nazwać to squashing funkcji, gdy zakres wyjściowy ma ograniczenia. Funkcje aktywacji mogą być również nieliniowe i określane jako nieliniowość projektu sieci. Bez względu na to, jaką funkcję aktywacji wybierzesz, będzie ona miała znaczący wpływ na wydajność i możliwości różnych części modelu uczenia maszynowego.
Lepiej jest używać funkcji aktywacji w ramach i po użyciu wewnętrznego przetwarzania dla każdego węzła w sieci. Jednak konstrukcja modelu zachęca do stosowania identycznych funkcji aktywacji w warstwie. Oto trzy warstwy, które zawiera sieć:

– Warstwy wejściowe.

Warstwy wejściowe zbierają surowe dane wejściowe i wykorzystują je w procesie obliczeniowym.

– Warstwy ukryte

Warstwy ukryte zbierają dane wejściowe z innych warstw i generują dane wyjściowe dla innych warstw.

– Warstwy wyjściowe

Warstwy wyjściowe będą przewidywać wynik.

Każda warstwa ukryta opiera się na tej samej funkcji aktywacji. Warstwa wyjściowa zawiera różne funkcje aktywacji. Zbiera ona informacje z warstw ukrytych. Warstwa ta jest zależna od generowania różnych typów przewidywań, których wymaga model.
Sieci neuronowe uczą się w oparciu o algorytm wstecznej propagacji błędów. Aby zaktualizować wagi warstwy ukrytej, model wymaga pochodnych błędu predykcji. Możesz łatwo rozróżnić funkcje aktywacji, aby obliczyć pochodną pierwszego rzędu dla danej wartości wejściowej. Sieci neuronowe zawierają wiele typów funkcji aktywacji. Ale aby poprawić wydajność warstwy ukrytej i wyjściowej, powinieneś użyć tylko kilku funkcji.

Zalety prostej liniowej funkcji aktywacji (Rectified Linear Activation Function)

Podczas opracowywania różnych typów sieci neuronowych, rektyfikowana liniowa funkcja aktywacji staje się domyślnym wyborem naukowców zajmujących się danymi. Głównymi zaletami funkcji aktywacji Relu są:

1. Prostota obliczeń

Nie ma znaczenia implementacja funkcji prostownika, gdy wymagana jest funkcja max(). Jest to inne niż w przypadku funkcji aktywacji sigmoidalnej i tanh, dla których wymagane jest obliczenie wykładnicze.

2. Rozproszenie reprezentacji

Kolejną zaletą funkcji prostownika jest możliwość generowania wyjścia z prawdziwym zerem. Oznacza to, że ujemne wejścia dadzą na wyjściu prawdziwe zero. W ten sposób w sieciach neuronowych można włączyć warstwy ukryte i uwzględnić jedną lub dodatkowe wartości prawdziwego zera. Można to określić jako reprezentację sparse, ponieważ upraszcza ona model i przyspiesza proces uczenia. Dzięki temu funkcja ta jest pożądana w uczeniu reprezentacyjnym.

3. Zachowanie liniowe

Funkcja prostownika jest podobna do liniowej funkcji aktywacji. Ma taką samą wydajność i działania. Ogólnie rzecz biorąc, można łatwo zoptymalizować zachowanie sieci neuronowych, gdy ich zachowanie jest zbliżone do liniowego.

Jak zakodować funkcję reluAktywacji

Będziemy używać Pythona do implementacji rektyfikowanej liniowej z łatwą i prostą metodą. Najprostszym zastosowaniem użycia tej funkcji byłaby funkcja max(). Oto przykład prawidłowego użycia funkcji:
# rectified linear Funkcja.
def rectified(x):
return max(0.0,x)
Zgodnie z oczekiwaniami, wartość dodatnia powróci bez zmian. Jednak wartość ujemna lub wartość wejściowa 0,0 powróci z powrotem do 0,0. Tutaj możesz znaleźć kilka przykładów wejść i wyjść funkcji aktywacji Relu:
# zademonstruj prostą funkcję liniową

# prostowana funkcja liniowa
def rectified(x):
returnmax(0.0,x)

# zademonstruj z dodatnim wejściem
x=1.0
print(‘rectified(%.1f) is %.1f’%(x,rectified(x)))
x=1000.0
print(‘rectified(%.1f) is %.1f’%(x,rectified(x)))
# demonstracja z zerową wartością wejściową
x=0.0
print(‘rectified(%.1f) is %.1f’%(x,rectified(x)))
# zademonstruj z ujemną wartością wejściową
x=-1.0
print(‘rectified(%.1f) is %.1f’%(x,rectified(x)))
x=-1000.0
print(‘rectified(%.1f) is %.1f’%(x,rectified(x)))
Wykonując powyższe przykłady, możemy zidentyfikować zwracanie wartości dodatnich niezależnie od ich wielkości. Natomiast wartości ujemne będą zwracały wartość 0.0.
1 rectified(1.0) ma wartość 1.0
2 rectified(1000.0) to 1000.0
3 rectified(0.0) jest równe 0.0
4 rectified(-1.0) wynosi 0.0
5 rectified(-1000.0) wynosi 0.0
Po wykreśleniu serii danych wejściowych i obliczonych danych wyjściowych, zrozumiemy związek pomiędzy danymi wejściowymi i wyjściowymi. Oto kilka przykładów generowania serii liczb całkowitych zaczynających się od -10 do 10. Pomaga to w obliczeniu Reluaktywacji dla poszczególnych danych wejściowych. Następnie model wykreśli wyniki.
# wykreślić dane wejściowe i wyjściowe
from matplotlib import pyplot
# wyprostowana funkcja liniowa
def rectified(x):
returnmax(0.0,x)

# zdefiniuj serię danych wejściowych
series_in=[xforxinrange(-10,11)]
# oblicz wyjścia dla naszych danych wejściowych
series_out=[rectified(x)forxinseries_in]
# wykres liniowy surowych danych wejściowych do wyprostowanych danych wyjściowych
pyplot.plot(series_in,series_out)
pyplot.show()

Wnioski

Funkcja Reluaktywacja pomaga sieciom neuronowym tworzyć modele głębokiego uczenia. Ze względu na problemy ze znikającym gradientem w różnych warstwach, nie można używać aktywacji tangensem hiperbolicznym i sigmoidą. Możesz przezwyciężyć problemy z gradientem za pomocą funkcji aktywacji Relu. Dzięki temu model może działać lepiej i uczyć się szybciej. Kiedy rozwijasz perceptron konwencjonalny i wielowarstwowy, sieci neuronowe prostoliniowa funkcja aktywacji będzie domyślną opcją.