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?
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).
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 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).
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ń.
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.
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
- R. Tadeusiewicz "Sieci neuronowe" Akademicka Oficyna Wydaw. RM, Warszawa 1993. Seria: Problemy Współczesnej Nauki i Techniki. Informatyka.
Ja ciągle jestem pod wrażeniem tego, że zamiana funkcji aktywacji z
sigmoid
nareLU
to był taki duży krok do przodu. Tym bardziej, zereLu
wygląda tak "prosto" i nie ma w niej żadnej magii.Prawda? :-) To jest jeden z tych momentów, gdzie zawsze mi się przypomina ten cytat:
Oo, leci follow i do ogarnięcia na "kiedyś" :D
@tipu upvote this post for 5 sbd
Dziękuję uprzejmie! :D
This post is supported by $7.26 @tipU upvote funded by @cardboard :)
@tipU voting service guide | STEEM Monsters Lottery | For investors.
Congratulations @callmejoe! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of upvotes
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP
To support your work, I also upvoted your post!
Bardzo dobrze wytłumaczone. Machine learning to jedna z tych dziedzin, o której każdy słyszał, ale nie każdy wie jak tak naprawdę działa. Dobrze, że artykuły takie jak ten przybliżają cały temat. Pozdrawiamy :)
Congratulations @callmejoe! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :
You got your First payout
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP
Czy takie metody można zastosować żeby stworzyć bota do tradingu giełdowego?
Wyżej wymienione funkcje to tylko sposoby aktywacji pojedynczych neuronów, są one pewnymi "częściami składowymi" sieci neuronowych i same w sobie nie wystarczą. Innymi słowy używając "tylko i wyłącznie" metod wymienionych w tym artykule, nie uzyskalibyśmy żądanego efektu. Tworząc jednak bota w oparciu o "pełnoprawną" sieć neuronową (gdzie każdy pojedynczy neuron korzystałby z metod aktywacji wymienionych w tym artykule) - jak najbardziej tak, moglibyśmy zastosować takiego bota do np. właśnie analizy kursów giełdowych z przeszłości, po to by z jakąś (mniejszą lub większą) skutecznością przewidzieć czy dla przyszłości nadchodzi tendencja zwyżkowa czy spadkowa.
Ludzie skąd wy się bierzecie? Szacun że ogarniacie takie tematy :) Nic kompletnie z tego artykułu nie czaję :) ale ja tam prostym fotografem tylko jestem :)