Uczenie maszynowe #4 Ten z innymi funkcjami aktywacji

Funkcja Sigmoidalna? Tangens hiperboliczny? Funkcja reLU? SoftPlus? A może SoftMax? Co można powiedzieć o tych funkcjach i które z nich są najlepsze?


źródło grafiki

Było już mówione o tym, że bez funkcji aktywacji w sieciach neuronowych to tak jakby odkręcić tubkę z pastą do zębów, ale jej nie wycisnąć - a przecież idziemy myć zęby.  Wiedząc o jej znaczeniu i znając już najprostszą funkcję skokową, przyglądnijmy się również innym najczęściej używanym funkcjom, które aktywują wyjście neuronu.

Na pierwszy ogień idzie funkcja sigmoidalna (sigmoidalna unipolarna).

Funkcja sigmoidalna; źródło grafiki

Prawda, że wygląda jak super-gładka funkcja skokowa? To właśnie jej płynna zmiana (między innymi) przyświecała powszechnemu używaniu tej funkcji. W jej bezkrytycznym używaniu chodziło również, a nawet przede wszystkim o łatwość obliczenia jej różniczki do propagacji wstecznej (ale o tym opowiemy sobie innym razem). Standardową funkcję sigmoidalną, czyli taką jak na powyższej reprezentacji graficznej, można opisać wzorem:

gdzie:

x - argument (wejście) funkcji

exp() - eksponenta, funkcja ekspotencjalna, funkcja wykładnicza o liczbie Eulera w podstawie - nazw nosi z pewnością wiele (zupełnie jak Mithrandir Gandalf z “Władcy Pierścieni”) - faktem jest jednak, że to po prostu “odwrotność” logarytmu naturalnego

Warto zauważyć, że “gładkość” funkcji sigmoidalnej pozwala jej przyjąć oprócz wartości 1 lub 0 - w przeciwieństwie do funkcji skokowej - dowolną liczbę z przedziału między nimi (logika rozmyta, pamiętasz?).

Sprawą konieczną o której trzeba wspomnieć jest fakt, że niestety jest ona “kosztowna” w obliczeniach i z reguły zbiega wolniej do żądanego wyniku niż funkcja reLU (o której za chwilę), co w przypadku większych sieci neuronowych znacznie wydłuża proces uczenia -  sam czas wymienienia nazw eksponenty exp() umieszczonej w mianowniku (pod kreską ułamkową) funkcji sigmoidalnej zajmuje trochę czasu i mimo że wymienianie nazw nie ma żadnego związku z matematyką niech to będzie dla nas metaforyczna wskazówka, gdybyśmy tworzyli wielowarstwowe sieci by nie przesadzać z nadużywaniem tej funkcji :-) 

Funkcją podobną do sigmoidalnej jest tangens hiperboliczny, o którym powiemy bardzo krótko bo praktycznie rzecz biorąc jest on analogią do sigmoidy.

Tangens hiperboliczny; źródło grafiki

Tangens hiperboliczny wyraża się wzorem:

Łatwo zauważyć jego podobieństwo do funkcji sigmoidalnej - jedyne różnice to oczywiście punkt przecięcia w punkcie 0, oraz jej inna “pochyłość”. 

Kolejną, popularną funkcją aktywacji jest reLU (rectifier Linear Unit). Od swojego kształtu w mowie potocznej często nazywana jest funkcją rampy (bo i rzeczywiście - wygląda jak rampa).

Funkcja reLU; źródło grafiki

Powyższą reprezentację można wyrazić wzorem

SUMA_SYGNAŁÓW > 0    y = SUMA_SYGNAŁÓW

SUMA_SYGNAŁÓW ≤ 0    y = 0

lub prościej jako:

MAX(0, SUMA_SYGNAŁÓW)

Gdzie ten drugi zapis jest wykorzystywany w implementacjach w różnych językach programowania i oczywiście znaczy, że wyjście przyjmuje wartość 0 jeśli SUMA_SYGNAŁÓW jest mniejsza bądź równa 0, lub przyjmuje wartość SUMY_SYGNAŁÓW jeśli wartość jest większa od 0.

Funkcja reLU jako aktywacja sieci neuronowych została użyta po raz pierwszy w 2012 roku w konkursowej implementacji nowoczesnego modelu sieci neuronowej - AlexNet - gdzie autorzy uzyskali o wiele lepsze wyniki niż pozostali uczestnicy, opierający swoje sieci o aktywację funkcją sigmoidalną i tanh. Trzeba powiedzieć że autorzy tej sieci - Panowie Alex Krizhevsky, Geoffrey Hinton, and Ilya Sutskever - wywarli ogromny wpływ na współczesną metodykę programowania sieci neuronowych, a ich jeden prosty trik znacznie zwiększył wydajność uczenia maszynowego, względem wcześniejszych rozwiązań.

"Naukowcy ich nienawidzą, zobacz jak jednym prostym trikiem..."; źródło grafiki

Na zakończenie wypada jeszcze wspomnieć o funkcji SoftPlus. Soft znaczy oczywiście “miękki” i rzeczywiście funkcja SoftPlus jest tym czym sigmoida dla funkcji skokowej - czyli super-miękką i super-gładką funkcją reLU. 

Funkcja SoftPlus na tle funkcji reLU; źródło grafiki

Wyrażamy ją poniższym wzorem:

SoftPlus(x) = log(1 + exp(x))

gdzie:

log() - logarytm naturalny

Z kolei inną funkcją z moglibyśmy rzec “tej samej stajni”, również będącą analogią do reLU jest funkcja SoftMax, która normalizuje wynik wyjściowy podając go jako pewne określone prawdopodobieństwo (tzw. forma probabilistyczna) - co sprawiło, że jest chętnie wybieraną funkcją aktywacji ostatniej warstwy współczesnych sieci neuronowych.

Podsumowując - istnieje wiele różnych aktywatorów wyjścia sieci neuronowych, które kiedyś znajdowały lub wciąż znajdują zastosowanie. Obecnie niezaprzeczalnie dominuje stosowanie funkcji reLU w połączeniu z SoftMax, których użycie zapewnia szybszą zbieżność algorytmu w większości przedstawianych sieci neuronowej, problemów. 


Dziękuję za uwagę!


Grafika:

Potwierdzam że użyłem Zaawansowanego szukania grafik Google z zaznaczoną opcją prawa użytkowania treści: "Do swobodnego użytku, udostępniania lub modyfikowania, również komercyjnego"

Bibliografia

  1. R. Tadeusiewicz "Sieci neuronowe" Akademicka Oficyna Wydaw. RM, Warszawa 1993. Seria: Problemy Współczesnej Nauki i Techniki. Informatyka.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now