Last Updated on 17 December 2019
Trenując sieci neuronowe, Twoim celem jest stworzenie modelu, który działa naprawdę dobrze.
To ma sens, ponieważ nie ma sensu używać modelu, który nie działa.
Jednakże istnieje stosunkowo wąska równowaga, którą będziesz musiał zachować, próbując znaleźć idealnie dobrze działający model.
Jest to równowaga między niedopasowaniem a przepasowaniem.
Aby uniknąć niedopasowania (posiadania gorszej niż możliwa wydajności predykcyjnej), możesz kontynuować szkolenie, dopóki nie doświadczysz drugiego problemu – przepasowania, a.k.a. bycia zbyt wrażliwym na dane szkoleniowe. Oba utrudniają wydajność modelu.
Czasami zakres, w którym twój model nie jest niedopasowany ani przepasowany, jest naprawdę mały. Na szczęście można go rozszerzyć poprzez zastosowanie tak zwanego regularizera – techniki, która regularyzuje zachowanie modelu podczas treningu, aby opóźnić przepełnienie na jakiś czas.
Dropout jest taką techniką regularyzacji. W tym wpisie na blogu, zajmiemy się tym, przyglądając się kilku rzeczom. Po pierwsze, zanurzamy się w różnicę między underfitting i overfitting w bardziej szczegółowy sposób, abyśmy mogli uzyskać głębsze zrozumienie tych dwóch. Po drugie, wprowadzimy Dropout na podstawie prac akademickich i powiemy Ci, jak to działa. Po trzecie, przyjrzymy się, czy to naprawdę działa, opisując różne eksperymenty przeprowadzone przy użyciu tej techniki. Na koniec porównamy tradycyjny Dropout z Gaussian Dropout – i jak zmienia on trening Twojego modelu.
Gotowy? Zaczynajmy! 😎
- Jak dobrze radzi sobie Twój model? Underfitting i overfitting
- Przerwijmy na chwilę! 👩💻
- Czym jest Dropout i jak działa?
- Zmienne Bernoulliego
- Never miss new Machine Learning articles ✅
- Dlaczego Dropout może zmniejszyć overfitting?
- Trenowanie sieci neuronowych z Dropout
- Czy wyrzucanie rzeczywiście działa? Wyniki eksperymentalne
- Dropout vs brak dropoutu na standardowych zbiorach danych
- Dołącz do setek innych uczących się! 😎
- Dropout vs brak dropoutu z innymi regularyzatorami
- Kiedy Dropout działa najlepiej? O współczynniku zrzutu i rozmiarze zbioru danych
- Jaka jest najlepsza wartość parametru \(p)?
- Jak Dropout radzi sobie w odniesieniu do rozmiaru zbioru danych?
- Pomagamy w uczeniu maszynowym! 🧠
- Gaussian Dropout: Gaussian instead of Bernoulli variables
- 💡 Opanuj ML – sprawdź też te posty:
Jak dobrze radzi sobie Twój model? Underfitting i overfitting
Najpierw przyjrzyjmy się, czym jest underfitting i overfitting.
Podczas rozpoczynania procesu szkolenia wagi neuronów są prawdopodobnie inicjowane losowo lub przy użyciu innej strategii inicjalizacji. Oznacza to, że współczynnik błędu, czyli wartość straty, będzie bardzo wysoki podczas kilku pierwszych epok. Spójrz na ten wykres, gdzie strata maleje bardzo szybko podczas pierwszych kilku epok:
Gdy zarówno strata szkoleniowa, jak i walidacja maleją, mówi się, że model jest niedostosowany: nadal można go szkolić, aby lepiej przewidywał, tj. aby zyskał swoją moc predykcyjną.
Działaniem, które należy wtedy podjąć, jest kontynuowanie szkolenia.
Nie może to jednak trwać wiecznie. Optymalizacja modelu polega na generowaniu przewidywań walidacyjnych z danymi walidacyjnymi, co skutkuje wartościami strat i gradientów dla optymalizacji, która jest następnie wykonywana. Niestety, oznacza to, że niektóre z ideosynkrazji danych są przenoszone do wag modelu. Oznacza to, że ponieważ dane są próbką, a nie pełną populacją, są one zawsze nieco inne niż pełna populacja, którą reprezentują. Kiedy optymalizujesz model przez setki epok z tymi danymi, zawsze otrzymasz przesunięcie w stosunku do tej prawdziwej populacji.
Jeśli kontynuowałbyś szkolenie, twój model coraz bardziej dostosowywałby się do tych ideosynkrazji, czyniąc go mniej odpowiednim dla danych, których nigdy wcześniej nie widział – tj. Innych próbek z populacji. Mówi się wtedy, że model jest nadmiernie dopasowany: jest zbyt dobrze dostosowany do danych treningowych i walidacyjnych.
Przerwijmy na chwilę! 👩💻
Wysyłamy e-maile co najmniej w każdy piątek. Witamy!
Zapisując się, wyrażasz zgodę, aby wszelkie informacje, które otrzymujesz, mogły obejmować usługi i oferty specjalne za pośrednictwem poczty elektronicznej.
Overfitting można wykryć na wykresach takich jak ten powyżej, sprawdzając stratę walidacyjną: gdy ponownie wzrasta, podczas gdy strata szkoleniowa pozostaje stała lub maleje, wiesz, że twój model jest overfitting. Jak widać, sieć ELU powered na powyższym wykresie zaczęła się bardzo nieznacznie przepasowywać.
Należy unikać zarówno niedostosowania, jak i przepasowania, ponieważ model będzie działał gorzej, niż mógłby teoretycznie działać. Na szczęście, pewne techniki – zwane regularizatorami – mogą być użyte do zmniejszenia wpływu przepasowania. Dropout jest jedną z nich – i zajmiemy się nią w tym blogu. Zacznijmy od analizy tego, czym jest Dropout, co robi i jak działa.
Czym jest Dropout i jak działa?
W swoim artykule „Dropout: A Simple Way to Prevent Neural Networks from Overfitting”, Srivastava et al. (2014) opisują technikę Dropout, która jest techniką regularizacji stochastycznej i powinna zmniejszyć overfitting poprzez (teoretycznie) łączenie wielu różnych architektur sieci neuronowych.
W przypadku Dropout, proces szkolenia zasadniczo porzuca neurony w sieci neuronowej. Są one tymczasowo usuwane z sieci, co można zobrazować w następujący sposób:
Zauważ, że połączenia lub synapsy są również usuwane, a zatem żadne dane nie przepływają już przez te neurony.
…ale tylko bardzo krótko! Proces ten powtarza się co epokę (a nawet co minibatch! – Srivastava et al. 2014), a zatem próbkowanie rozrzedzonych sieci zdarza się bardzo często. Powinno to prowadzić do znacznie niższych wskaźników błędu generalizacji (tj. przepasowania), ponieważ „obecność neuronów staje się niewiarygodna” (Srivastava i in., 2014).
To usuwanie neuronów i synaps podczas treningu jest wykonywane losowo, z parametrem \(p), który jest przestrajalny (lub, biorąc pod uwagę testy empiryczne, najlepiej ustawić go na 0.5 dla warstw ukrytych i blisko 1.0 dla warstwy wejściowej). To efektywnie oznacza, że według autorów „rozrzedzona” sieć jest próbkowana z globalnej architektury i używana do treningu.
W czasie testu „nie jest wykonalne wyraźne uśrednienie przewidywań z wykładniczo wielu rozrzedzonych modeli” (Srivastava i in., 2014). To prawda: stałoby się to obciążeniem obliczeniowym, gdy trzeba uśrednić setki tysięcy epok/minibatches, zwłaszcza gdy sieci stają się naprawdę duże.
Na szczęście istnieje rozwiązanie – które jest proste, ale daje ten sam wynik. Używając jednej sieci neuronowej, w której wyjścia wagowe są skalowane w dół w zależności od tego, z jaką jednostką zostały zachowane podczas szkolenia. Oznacza to, że oczekiwane wyjście w czasie treningu jest takie samo jak prawdziwe wyjście w czasie testu, co rozwiązuje problem obliczeniowy i sprawia, że Dropout można wykorzystać w praktyce.
Zmienne Bernoulliego
Przyjrzyjmy się teraz, jak Dropout działa matematycznie. Nie martw się, nie zasypiemy Cię matematyką, ale postaramy się przyjąć bardzo intuicyjny punkt widzenia.
Bardzo upraszczając, wygląda to tak, że neuron otrzymuje swoje dane wejściowe: np. trzy neurony upstream w trzyneuronowej warstwie Dense wysyłają swoje dane wyjściowe do następnej warstwy, gdzie są one odbierane jako dane wejściowe. Zauważ, że dla uproszczenia pomijamy tutaj wartości bias.
Bardzo prosto jest przejść stąd do neuronu Dropout, który wygląda następująco:
Matematycznie wiąże się to z tzw. zmiennymi losowymi Bernoulliego:
W teorii prawdopodobieństwa i statystyce rozkład Bernoulliego, nazwany tak na cześć szwajcarskiego matematyka Jacoba Bernoulliego, jest dyskretnym rozkładem prawdopodobieństwa zmiennej losowej, która przyjmuje wartość 1 z prawdopodobieństwem ∗.
Wikipedia o rozkładzie Bernoulliego
Aby stworzyć Dropout, Srivastava et al. (2014) dołączyli zmienne Bernoulliego do neuronów sieci (mnożąc je z wyjściami neuronów), „z których każda ma prawdopodobieństwo \”bycia 1″. Wartość p jest tutaj wybierana przez inżyniera uczenia maszynowego, zwykle w oparciu o jakiś zestaw walidacyjny lub naiwnie ustawiony na 0,5.
Never miss new Machine Learning articles ✅
Wysyłamy e-maile przynajmniej w każdy piątek. Witamy!
Zapisując się, wyrażasz zgodę, aby wszelkie informacje, które otrzymujesz, mogły obejmować usługi i oferty specjalne za pośrednictwem poczty elektronicznej.
Wewnątrz sieci, zmienna Bernoulliego i jej wartość 1 lub 0 określa, czy neuron jest „porzucony” podczas tej epoki lub minibatch operacji feedforward. To, w efekcie, prowadzi do „rozrzedzonej sieci”, o której mówią Srivastava et al. (2014).
Dlaczego Dropout może zmniejszyć overfitting?
Możesz się teraz zastanawiać: dlaczego zmienne Bernoulliego dołączone do regularnych sieci neuronowych, czyniąc sieć cieńszą, zmniejszają overfitting?
Aby uzyskać odpowiedź na to pytanie, będziemy musieli przyjrzeć się temu, jak szkolone są sieci neuronowe.
Zwykle do tego celu używa się wstecznej propagacji i zejścia gradientowego lub podobnego optymalizatora. Biorąc pod uwagę wartość straty, obliczane są tak zwane „gradienty”, które optymalizator następnie przetwarza na wagi sieci. Dzięki wykorzystaniu tych gradientów (w odniesieniu do poziomu błędu) do zmiany wag, sieć prawdopodobnie osiąga nieco lepsze wyniki podczas kolejnej iteracji procesu szkolenia.
Obliczanie gradientu odbywa się w odniesieniu do błędu, ale również w odniesieniu do tego, co robią wszystkie inne jednostki (Srivastava i in., 2014). Oznacza to, że pewne neurony, poprzez zmiany swoich wag, mogą naprawiać błędy innych neuronów. Te, jak twierdzą Srivastava i inni (2014), prowadzą do złożonych koadaptacji, które mogą nie generalizować się na niewidziane dane, co prowadzi do przepasowania.
Dropout, zatem, zapobiega tym koadaptacjom poprzez – jak pisaliśmy wcześniej – uczynienie obecności innych ukrytych niewiarygodną. Neurony po prostu nie mogą polegać na innych jednostkach, aby poprawić swoje błędy, co zmniejsza liczbę koadaptacji, które nie generalizują do niewidzianych danych, a więc przypuszczalnie zmniejsza również przepasowanie.
Trenowanie sieci neuronowych z Dropout
Trenowanie sieci neuronowych, do których dołączono Dropout, jest całkiem równe trenowaniu sieci neuronowych bez Dropout. Można użyć stochastycznego zejścia gradientowego lub podobnych optymalizatorów. Jedyną różnicę, jak donoszą Srivastava et al. (2014), można znaleźć przy zastosowaniu podejścia mini-batch: zamiast per epoch, rozrzedzone sieci są próbkowane per minibatch.
Dodatkowo, metody, które poprawiają klasyczne SGD – jak momentum – mogą być również używane i wykazują podobną poprawę, jak w przypadku zwykłych sieci neuronowych (Srivastava et al., 2014).
To, co autorzy również uznali za przydatne podczas treningu, to zastosowanie regularyzacji max-normy, co oznacza ograniczenie normy przychodzącej wagi do pewnej maksymalnej wartości \(c). Wartość ta musi być z góry ustalona przez inżyniera i określona przy użyciu zbioru walidacyjnego (Srivastava i in., 2014).
Połączenie Dropout z regularyzacją max-normalną poprawia wydajność w porównaniu z użyciem samego Dropout, ale autorzy odnotowali jeszcze lepsze wyniki, gdy Dropout i regularyzacja max-normalna są połączone z dwoma innymi rzeczami:
- Duży, malejący współczynnik uczenia.
- Wysoki moment pędu.
Według Srivastava et al. (2014), można to ewentualnie uzasadnić następującymi argumentami:
- Konstrukcja wektorów wag umożliwia użycie dużych współczynników uczenia bez eksplodujących wag.
- Szum wyrzucania plus duże współczynniki uczenia pomagają optymalizatorom „eksplorować różne regiony przestrzeni wag, które w przeciwnym razie byłyby trudno dostępne”.
- Zmniejszanie współczynnika uczenia spowalnia skokowość procesu eksploracji, ostatecznie „osiadając w minimum”.
- Wysoki moment pędu pozwala sieci pokonać lokalne minima, zwiększając prawdopodobieństwo znalezienia globalnego minimum.
Czy wyrzucanie rzeczywiście działa? Wyniki eksperymentalne
W przypadku każdego ulepszenia w uczeniu maszynowym, miło jest mieć teoretyczną poprawę – ale ważne jest również, aby przetestować, czy to naprawdę działa. Srivastava et al. (2014) przeprowadzili wiele testów, aby dowiedzieć się, czy Dropout działa. Po pierwsze, użyli różnych standardowych zbiorów danych (takich jak zbiór danych MNIST), aby sprawdzić, czy Dropout poprawia wydajność modelu w szerokim zakresie problemów klasyfikacyjnych.
Po drugie, sprawdzili, jak radzi sobie z różnymi innymi regularyzatorami (uzyskując wgląd w to, że regularyzacja max-normalna wraz z Dropout działa najlepiej – ale przyjrzyjmy się tym wynikom bardziej szczegółowo później), a po trzecie, Srivastava et al. (2014) zbadali, które współczynniki porzucania (tj, który parametr \) działa najlepiej i jak rozmiar danych wpływa na wydajność Dropout. Przyjrzyjmy się temu!
Dropout vs brak dropoutu na standardowych zbiorach danych
Autorzy przetestowali Dropout vs brak dropoutu na tych standardowych zbiorach danych (Srivastava i in., 2014):
- Zbiór danych MNIST, który zawiera tysiące odręcznie pisanych cyfr;
- Zbiór wzorcowy mowy TIMIT do czystego rozpoznawania mowy.
- Zbiory danych CIFAR-10 i CIFAR-100, zawierające maleńkie naturalne obrazy w 10 i 100 klasach.
- Zbiór danych Street View House Numbers (SVHN), zawierający obrazy numerów domów zebrane z Google Street View.
- Zbiór danych ImageNet, który zawiera wiele naturalnych obrazów.
- Zbiór danych Reuters RCV1 newswire articles. Jest to raczej zbiór danych tekstowych niż obrazowych.
W przypadku wszystkich zbiorów danych, Dropout poprawił moc generalizacji modelu. Na MNIST można było odnotować drastycznie różne błędy testowe, z istotną poprawą dla wszystkich różnych architektur, które były testowane.
Dołącz do setek innych uczących się! 😎
Wysyłamy e-maile co najmniej w każdy piątek. Witamy!
Zapisując się, wyrażasz zgodę, aby wszelkie informacje, które otrzymujesz, mogły obejmować usługi i oferty specjalne za pośrednictwem poczty elektronicznej.
Dropout przewyższa również zwykłe sieci neuronowe w przypadku sieci konwencjonalnych wytrenowanych na zbiorach danych CIFAR-100, CIFAR-100 i ImageNet.
W przypadku zbioru danych SVHN można odnotować kolejną interesującą obserwację: gdy Dropout jest stosowany na warstwie konwolucyjnej, wydajność również wzrasta. Według autorów jest to interesujące, ponieważ wcześniej zakładano, że te warstwy nie są wrażliwe na overfitting, ponieważ nie mają wielu parametrów (Srivastava i in., 2014). Argumentuje się, że dodanie Dropout do warstw Conv dostarcza zaszumionych danych wejściowych do następujących po nich warstw Dense, co zapobiega ich dalszemu przepasowaniu.
Wreszcie Dropout działa na wzorcowych zbiorach danych mowy TIMIT i zbiorze danych Reuters RCV1, ale tutaj poprawa była znacznie mniejsza w porównaniu do zbiorów danych wizji i mowy.
Dropout vs brak dropoutu z innymi regularyzatorami
Teraz, gdy autorzy wiedzieli, że Dropout dobrze skaluje się w różnych problemach uczenia maszynowego, zbadali go dalej: jak radzi sobie w odniesieniu do innych regularyzatorów?
W celu zapobieżenia przepasowaniu przetestowano kilka metod regularyzatorów:
- L2 weight decay;
- Lasso;
- KL sparsity;
- Max-norm regularization.
Srivastava et al. (2014) odkryli, że w połączeniu z regularyzacją max-norm, Dropout daje jeszcze niższe błędy generalizacji. W rzeczywistości zapewnił on najniższy zgłoszony błąd, a następnie – w pewnym oddaleniu – Dropout + L2 regularization, a na końcu pozostałe.
Więc, podczas stosowania Dropout, dobrym pomysłem może być również jednoczesne wykonanie max-normalnej regularizacji.
Kiedy Dropout działa najlepiej? O współczynniku zrzutu i rozmiarze zbioru danych
Kolejne pytanie, na które próbowano odpowiedzieć: czy współczynnik zrzutu (tj. parametr \) i/lub rozmiar zbioru danych mają wpływ na wydajność Dropout i sieci neuronowych, do których jest dołączony?
Na to pytanie należy odpowiedzieć twierdząco.
Jaka jest najlepsza wartość parametru \(p)?
Po pierwsze, parametr \(p). Teraz możemy sobie przypomnieć, że jest on przestrajalny i w rzeczywistości musi być ustawiony z góry przez inżyniera uczenia maszynowego. Fakt, że jest on przestrajalny, prowadzi do tych samych błędów, co to, że stałe współczynniki uczenia nie są dobrym pomysłem: po prostu nie wiesz, który parametr najlepiej pasuje do danych.
Stąd, argumentują autorzy, wybór wartości parametru \(p) musi być dokonany przez pewne wstępne testy z zestawem walidacyjnym.
Tak też zrobili – aby sprawdzić, czy można znaleźć interesujące wzorce.
I taki wzorzec znaleźli: w wielu scenariuszach wartość \(p \) dla warstw ukrytych wydaje się skutkować najlepszą wydajnością przy zastosowaniu Dropout (Srivastava i in., 2014). To ostatnie przypuszczalnie ma miejsce, ponieważ warstwa wejściowa przyjmuje dane wejściowe, a trudno jest znaleźć wzorce, gdy dane są upuszczane losowo.
Jak Dropout radzi sobie w odniesieniu do rozmiaru zbioru danych?
Według autorów „dobry regularizator umożliwia uzyskanie dobrego błędu generalizacji z modeli o dużej liczbie parametrów wytrenowanych na małych zbiorach danych”. Oznacza to, że działa on naprawdę dobrze na danych, których wcześniej nie widział – nawet gdy jest wytrenowany na małych danych.
Aby sprawdzić, czy Dropout dobrze regularyzuje w różnych rozmiarach zbiorów danych, Srivastava et al. (2014) przeprowadzili testy z różnymi rozmiarami na zbiorze danych MNIST. Rozmiary te były następujące: „100, 500, 1K, 5K, 10K i 50K wybrane losowo ze zbioru treningowego MNIST” (Srivastava et al., 2014).
Pomagamy w uczeniu maszynowym! 🧠
Wysyłamy e-maile co najmniej w każdy piątek. Witamy!
Zapisując się, wyrażasz zgodę, aby wszelkie informacje, które otrzymujesz, mogły obejmować usługi i oferty specjalne za pośrednictwem poczty elektronicznej.
Autorzy stwierdzili, że istnieje kompromis między tym, kiedy Dropout jest niezbędny, a kiedy nie jest już przydatny. Po pierwsze, aby pokryć przypadek, w którym zbiór danych jest wyjątkowo mały: nawet Dropout nie poprawia wydajności w tym przypadku, po prostu dlatego, że rozmiar zbioru danych jest zbyt mały. To samo odnosi się do zbiorów danych, które są wystarczająco duże: Dropout wtedy już nie poprawia modelu, ale raczej wydajność modelu się pogarsza.
Stąd istnieje słodki punkt, kiedy Dropout jest konieczny, a kiedy mądrze jest go nie używać (lub zwiększyć rozmiar zbioru danych). Według Srivastava et al. (2014), nie ma heurystyki, aby określić ten rozmiar; raczej musi on zostać określony za pomocą zestawu walidacyjnego.
Gaussian Dropout: Gaussian instead of Bernoulli variables
Przypominamy sobie z góry, że Dropout działa ze zmiennymi Bernoulliego, które przyjmują 1 z prawdopodobieństwem \ i 0 z resztą, będącą \(1 – p).
Tę ideę można uogólnić do mnożenia aktywacji ze zmiennymi losowymi z innych rozkładów (Srivastava et al., 2014). W swojej pracy Srivastava i in. stwierdzili, że rozkład gaussowski, a co za tym idzie zmienne gaussowskie, działają równie dobrze – a może nawet lepiej.
Zastosowanie zmiennych gaussowskich można przeprowadzić w podobny sposób: przerzedzając sieci w czasie treningu i stosując ważone aktywacje w czasie testu i produkcji (jak w przypadku zwykłego Dropout). Jednak autorzy zdecydowali się użyć Gaussian Dropout w inny sposób – tzn. multiplikatywnie. Zamiast przerzedzania i ważenia, Gaussian Dropout jest ważony w czasie treningu, kiedy aktywowane wartości, które nie są porzucane, są mnożone przez \(1/p\) zamiast \(1\) (w przypadku zwykłego Bernoulli Dropout). Nie są one modyfikowane w czasie testu. To odpowiada poprzedniemu scenariuszowi.
Gaussian Dropout musi być skonfigurowany przez pewien \(\sigma\), który w eksperymentach Srivastava et al. był ustawiony na \(\sqrt{(1-p)/p}\), gdzie \(p\) jest konfiguracją wariantu Bernoulliego (tj, Przyglądając się temu, czym jest, jak działa i że działa, stwierdziliśmy, że jest to interesująca technika do zastosowania w Twoich modelach deep learningowych.
Mam nadzieję, że czegoś się dzisiaj nauczyłeś – czegoś przydatnego dla Twoich modeli ML 😀 Jeśli tak, lub jeśli masz pytania, nie wahaj się zostawić komentarza poniżej ⬇! W miarę możliwości odpowiem na Twoje pytania 😊
Dziękuję za przeczytanie MachineCurve dzisiaj i szczęśliwej inżynierii! 😎
Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014, June 15). Dropout: A Simple Way to Prevent Neural Networks from Overfitting. Retrieved from http://jmlr.org/papers/v15/srivastava14a.html
Wikipedia. (2003, 20 marca). Rozkład Bernoulliego. Retrieved from https://en.wikipedia.org/wiki/Bernoulli_distribution
💡 Opanuj ML – sprawdź też te posty:
.