Uczenie maszynowe #4 Ten z innymi funkcjami aktywacji

3년 전

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.
Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
STEEMKR.COM IS SPONSORED BY
ADVERTISEMENT
Sort Order:  trending

Ja ciągle jestem pod wrażeniem tego, że zamiana funkcji aktywacji z sigmoid na reLU to był taki duży krok do przodu. Tym bardziej, ze reLu 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:

"Rzeczy proste są zawsze najbardziej niezwykłe" ~Paulo Coelho; z książki "Alchemik"

Oo, leci follow i do ogarnięcia na "kiedyś" :D
@tipu upvote this post for 5 sbd

·

Dziękuję uprzejmie! :D

  ·  3년 전

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!

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

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

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

  ·  3년 전

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 :)