Last Updated on 17 December 2019
A neurális hálózatok képzésekor az a cél, hogy olyan modellt állítsunk elő, amely nagyon jól teljesít.
Ez teljesen logikus, hiszen nincs értelme olyan modellt használni, amely nem teljesít.
Viszont van egy viszonylag szűk egyensúly, amelyet fenn kell tartanunk, amikor megpróbálunk egy tökéletesen jól teljesítő modellt találni.
Ez az alul- és túlillesztés közötti egyensúly.
Az alulillesztés (a lehetségesnél rosszabb előrejelző teljesítmény) elkerülése érdekében folytathatja a képzést, amíg meg nem tapasztalja a másik problémát – a túlillesztést, vagyis azt, hogy túl érzékeny a képzési adatokra. Mindkettő hátráltatja a modell teljesítményét.
Néha tényleg kicsi az a tartomány, amelyben a modellje nem alul- és nem túlilleszkedik. Szerencsére ez kiterjeszthető egy úgynevezett regularizátor alkalmazásával – egy olyan technika, amely regularizálja a modell viselkedését a képzés során, hogy egy ideig késleltesse a túlilleszkedést.
A dropout egy ilyen regularizációs technika. Ebben a blogbejegyzésben foglalkozunk vele, néhány dolgot megvizsgálva. Először is, részletesebben elmerülünk az alulillesztés és a túlillesztés közötti különbségben, hogy mélyebben megértsük a kettőt. Másodszor, bemutatjuk a Dropoutot tudományos munkák alapján, és elmondjuk, hogyan működik. Harmadszor, megnézzük, hogy valóban működik-e, leírva az ezzel a technikával végzett különböző kísérleteket. Végül összehasonlítjuk a hagyományos Dropoutot a Gauss Dropouttal – és azt, hogyan változtatja meg a modell képzését.
Készen állsz? Gyerünk! 😎
- Hogyan teljesít a modelled? Alul- és túlillesztés
- Tartsunk egy pillanatnyi szünetet! 👩💻
- Mi a Dropout és hogyan működik?
- Bernoulli-változók
- Never miss new Machine Learning articles ✅
- Miért csökkentheti a Dropout a túlillesztést?
- Neurális hálók képzése Dropouttal
- A kiesés valóban működik? Kísérleti eredmények
- Dropout vs. nincs dropout standard adatkészleteken
- Lépjen be több száz másik tanulóhoz! 😎
- Dropout vs. nincs dropout más regularizátorokkal
- Mikor működik a legjobban a Dropout? A Dropout arányról és az adathalmaz méretéről
- Melyik a legjobb érték az \(p\) számára?
- Hogyan teljesít a Dropout az adathalmaz méretének függvényében?
- We help you with Machine Learning! 🧠
- Gaussian Kiesés: Bernoulli-változók helyett Gaussian
- Összefoglaló
- 💡 Master your ML – check out these posts also:
Hogyan teljesít a modelled? Alul- és túlillesztés
Először nézzük meg, mi az az alul- és túlillesztés.
A képzési folyamat megkezdésekor a neuronjaid súlyait valószínűleg véletlenszerűen vagy valamilyen más inicializálási stratégiával inicializálod. Ez azt jelenti, hogy a hibaarány vagy veszteségérték az első néhány epocha alatt nagyon magas lesz. Nézzük meg ezt az ábrát, ahol a veszteség nagyon gyorsan csökken az első néhány epocha alatt:
Amikor mind a képzési veszteség, mind a validáció csökken, a modellről azt mondjuk, hogy alulilleszkedett: még mindig lehet úgy képezni, hogy jobb előrejelzéseket készítsen, azaz javuljon az előrejelző képessége.
Az ekkor elvégzendő művelet a képzés folytatása.
Ez azonban nem folytatódhat örökké. A modell optimalizálása magában foglalja a validációs előrejelzések létrehozását a validációs adatokkal, ami veszteségértékeket és gradienseket eredményez az optimalizáláshoz, amit aztán végre kell hajtani. Sajnos ez azt jelenti, hogy az adatok néhány ideoszinkráziája átszivárog a modell súlyaiba. Azaz, mivel az adatok nem teljes populáció, hanem minta, mindig kissé eltérnek az általuk képviselt teljes populációtól. Ha több száz epochán keresztül optimalizálod a modellt ezekkel az adatokkal, mindig lesz egy eltolódás ehhez a valódi populációhoz képest.
Ha folytatnád a képzést, a modelled egyre jobban alkalmazkodna ezekhez az ideoszinkráziákhoz, így egyre kevésbé lesz alkalmas olyan adatokra, amelyeket még soha nem látott – azaz a populáció más mintáira. A modellről ekkor azt mondjuk, hogy túlilleszkedett: túl jól alkalmazkodott a képzési és validálási adatokhoz.
Tartsunk egy pillanatnyi szünetet! 👩💻
Minimum minden pénteken küldünk e-maileket. Üdvözöljük!
A feliratkozással hozzájárul ahhoz, hogy a kapott információk tartalmazhatnak szolgáltatásokat és különleges ajánlatokat e-mailben.
A fentihez hasonló ábrákon a validációs veszteség vizsgálatával észlelhető a túlillesztés: ha az ismét emelkedik, miközben a képzési veszteség állandó marad vagy csökken, akkor tudjuk, hogy a modellünk túlilleszkedik. Mint látható, a fenti ábrán látható ELU powered network nagyon enyhén elkezdett túlilleszkedni.
Az alul- és túlilleszkedést egyaránt el kell kerülni, mivel a modellünk rosszabbul fog teljesíteni, mint ahogy elméletileg teljesíthetne. Szerencsére bizonyos technikák – úgynevezett regularizátorok – segítségével csökkenthető a túlillesztés hatása. A kieséscsökkentés az egyik ilyen – és ebben a blogban foglalkozunk vele. Kezdjük azzal, hogy elemezzük, mi a Dropout, mit csinál és hogyan működik.
Mi a Dropout és hogyan működik?
A Dropout: A Simple Way to Prevent Neural Networks from Overfitting” című cikkében Srivastava et al. (2014) leírják a Dropout technikát, amely egy sztochasztikus regularizációs technika, és a túlillesztést hivatott csökkenteni azáltal, hogy (elméletileg) sok különböző neurális hálózati architektúrát kombinál.
A Dropout segítségével a képzési folyamat során a neurális hálózat neuronjai lényegében kiesnek. Átmenetileg eltávolítjuk őket a hálózatból, ami a következőképpen szemléltethető:
Megjegyezzük, hogy a kapcsolatok vagy szinapszisok is eltávolításra kerülnek, és így ezeken a neuronokon már nem folyik át adat.
…de csak nagyon rövid ideig! Ez a folyamat minden epochában (vagy akár minden minibatchben! – Srivastava et al. 2014) megismétlődik, és így a ritkított hálózatok mintavétele nagyon gyakran megtörténik. Ennek jelentősen alacsonyabb általánosítási hibaarányokhoz (azaz túlillesztéshez) kell vezetnie, mivel “a neuronok jelenléte megbízhatatlanná válik” (Srivastava et al., 2014).
A neuronok és szinapszisok ilyen eltávolítása a képzés során véletlenszerűen történik, egy hangolható \(p\) paraméterrel (vagy empirikus tesztek alapján a legjobb, ha 0,5-re állítjuk a rejtett rétegeknél és közel 1,0-ra a bemeneti rétegnél). Ez gyakorlatilag azt jelenti, hogy a szerzők szerint a “ritkított” hálózatot a globális architektúrából mintavételezik, és a képzéshez használják.
Tesztidőben “nem kivitelezhető az exponenciálisan sok ritkított modell előrejelzéseinek explicit átlagolása” (Srivastava et al., 2014). Ez igaz: számítási teherré válna, ha több százezer epochát/minibatchet kellene átlagolni, különösen, ha a hálózatok valóban nagyok lesznek.
Szerencsére van megoldás – ami egyszerű, de ugyanazt az eredményt hozza. Egy neurális hálózat használatával, ahol a súlyok kimenetei lefelé skálázódnak aszerint, hogy milyen \(p\) értékkel maradt meg egy egység a képzés során. Ez azt jelenti, hogy a képzéskor várható kimenet megegyezik a tesztidőszakban várható valódi kimenettel, ami megoldja a számítási problémát, és a gyakorlatban is használhatóvá teszi a Dropoutot.
Bernoulli-változók
Most nézzük meg, hogyan működik a Dropout matematikailag. Ne aggódjatok, nem temetünk el benneteket matematikával, ehelyett megpróbálunk egy nagyon intuitív szemléletet alkalmazni.
Nagyon leegyszerűsítve, így kapja egy neuron a bemenetet: pl. egy három neuronból álló sűrű rétegben három feljebb lévő neuron küldi a kimenetét a következő rétegnek, ahol azt bemenetként megkapja. Megjegyezzük, hogy az egyszerűség kedvéért itt kihagyjuk az előfeszítési értékeket.
Eljutni innen nagyon egyszerűen egy Dropout neuronhoz, amely így néz ki:
Matematikailag itt úgynevezett Bernoulli véletlen változókról van szó:
A valószínűségelméletben és a statisztikában a Bernoulli-eloszlás, amelyet Jacob Bernoulli svájci matematikusról neveztek el, egy olyan véletlen változó diszkrét valószínűségi eloszlása, amely \(p\) valószínűséggel veszi fel az 1 értéket.
Wikipedia a Bernoulli-eloszlásról
A Dropout létrehozásához Srivastava és munkatársai (2014) Bernoulli-változókat csatoltak a hálózat neuronjaihoz (a neurális kimenetekkel való szorzással), “amelyek mindegyike \(p\) valószínűséggel 1″. Az \(p\) értéket itt a gépi tanulással foglalkozó mérnök választja ki, általában valamilyen validációs halmaz alapján, vagy naivan 0,5-re állítva.
Never miss new Machine Learning articles ✅
Minimum minden pénteken küldünk e-maileket. Üdvözöljük!
A feliratkozással hozzájárul ahhoz, hogy a kapott információk tartalmazhatnak szolgáltatásokat és különleges ajánlatokat e-mailben.
A hálózaton belül a Bernoulli-változó és annak 1 vagy 0 értéke határozza meg, hogy egy neuron “kiesik-e” az adott epocha vagy minibatch feedforward művelet során. Ez tulajdonképpen a Srivastava et al. (2014) által említett “ritkított hálózathoz” vezet.
Miért csökkentheti a Dropout a túlillesztést?
Ezután elgondolkodhat: miért csökkenti a szabályos neurális hálózatokhoz csatolt Bernoulli-változók, amelyek vékonyabbá teszik a hálózatot, a túlillesztést?
A kérdés megválaszolásához meg kell néznünk, hogyan történik a neurális hálózatok képzése.
Általában backpropagációt és gradiens ereszkedést vagy hasonló optimalizálót használnak erre a célra. Adott veszteségérték esetén úgynevezett “gradienseket” számolnak ki, amelyeket az optimalizáló ezután a hálózat súlyaiba dolgoz fel. Azáltal, hogy ezeket a gradienseket (a hibaarányhoz viszonyítva) a súlyok módosítására használják, a hálózat valószínűleg valamivel jobban teljesít a képzési folyamat következő iterációja során.
A gradiens kiszámítása a hibához viszonyítva történik, de annak figyelembevételével is, hogy az összes többi egység mit csinál (Srivastava et al., 2014). Ez azt jelenti, hogy bizonyos neuronok a súlyaik változtatásával kijavíthatják más neuronok hibáit. Ezek Srivastava et al. (2014) szerint komplex koadaptációkhoz vezetnek, amelyek nem biztos, hogy általánosíthatók a nem látott adatokra, ami túlillesztéshez vezet.
A kiesés tehát megakadályozza ezeket a koadaptációkat azzal, hogy – ahogy korábban írtuk – megbízhatatlanná teszi a többi rejtett jelenlétét. A neuronok egyszerűen nem számíthatnak arra, hogy más egységek kijavítják a hibáikat, ami csökkenti a nem látott adatokra nem általánosító koadaptációk számát, és így feltehetően csökkenti a túlillesztést is.
Neurális hálók képzése Dropouttal
A neurális hálók képzése, amelyekhez Dropoutot csatoltunk, nagyjából megegyezik a Dropout nélküli neurális hálók képzésével. Stochasztikus gradiens ereszkedés vagy hasonló optimalizátorok használhatók. Az egyetlen különbség – Srivastava et al. (2014) beszámolója szerint – a mini-batch megközelítés használatakor tapasztalható: a ritkított hálózatokat nem epochánként, hanem minibatchonként mintavételezik.
Kiegészítésképpen a klasszikus SGD-t javító módszerek – például a momentum – is használhatók, és hasonló javulást mutatnak, mint a hagyományos neurális hálózatok esetében (Srivastava et al., 2014).
Azt is hasznosnak találták a szerzők a képzés során, hogy max-norm regularizációt alkalmaznak, ami azt jelenti, hogy a bejövő súly normáját valamilyen maximális \(c\) értékkel korlátozzák. Ezt az értéket a mérnöknek előre be kell állítania, és egy validációs halmaz segítségével kell meghatározni (Srivastava et al., 2014).
A Dropout és a max-norm regularizáció kombinálása javítja a teljesítményt a Dropout önmagában történő alkalmazásához képest, de a szerzők még jobb eredményekről számoltak be, ha a Dropoutot és a max-norm regularizációt két másik dologgal kombinálják:
- Nagy, csökkenő tanulási sebesség.
- Nagy lendület.
Srivastava et al. (2014) szerint ez esetleg a következő érvekkel indokolható:
- A súlyvektorok megszorítása lehetővé teszi nagy tanulási ráták használatát anélkül, hogy a súlyok felrobbannának.
- A kiesési zaj plusz a nagy tanulási ráták ezután segítik az optimalizálókat abban, hogy “felfedezzék a súlytér különböző régióit, amelyeket egyébként nehéz lenne elérni”.
- A tanulási ráta csökkenése ezután lelassítja a felfedezési folyamat ugrásszerűségét, végül “megállapodnak egy minimumban”.
- A nagy lendület lehetővé teszi, hogy a hálózat legyőzze a lokális minimumokat, növelve a globális minimum megtalálásának valószínűségét.
A kiesés valóban működik? Kísérleti eredmények
A gépi tanulásban minden fejlesztésnél jó, ha van elméleti javulás – de azt is fontos tesztelni, hogy valóban működik-e. Srivastava és munkatársai (2014) több tesztet is elvégeztek, hogy kiderítsék, működik-e a Dropout. Először is, különböző standard adatkészleteket használtak (például az MNIST adatkészletet), hogy teszteljék, hogy a Dropout javítja-e a modell teljesítményét az osztályozási problémák széles skáláján.
Másodszor, ellenőrizték, hogyan teljesít különböző más regularizátorokkal (azt a felismerést hozva, hogy a max-norm regularizáció a Dropouttal együtt működik a legjobban – de ezeket az eredményeket később részletesebben is megnézzük), harmadszor pedig Srivastava et al. (2014) azt vizsgálta, hogy milyen dropout arányok (ill, melyik paraméter \(p\)) működik a legjobban, és hogyan befolyásolja az adatméret a Dropout teljesítményét. Nézzük meg!
Dropout vs. nincs dropout standard adatkészleteken
A szerzők a Dropout vs. nincs dropoutot tesztelték ezeken a standard adatkészleteken (Srivastava et al., 2014):
- Az MNIST adathalmaz, amely több ezer kézzel írt számjegyet tartalmaz;
- A TIMIT beszéd benchmark adathalmaz a tiszta beszédfelismeréshez.
- A CIFAR-10 és CIFAR-100 adathalmazok, amelyek apró természetes képeket tartalmaznak 10 és 100 osztályban.
- A Street View House Numbers (SVHN) adathalmaz, amely a Google Street View-ból gyűjtött házszámok képeit tartalmazza.
- Az ImageNet adathalmaz, amely sok természetes képet tartalmaz.
- A Reuters RCV1 newswire cikkek adathalmaza. Ez nem képi, hanem szöveges adathalmaz.
A Dropout minden adathalmaz esetében javította a modell általánosítási képességét. Az MNIST-en drasztikusan eltérő tesztelési hibákról lehetett beszámolni, jelentős javulással az összes tesztelt különböző architektúra esetében.”
Lépjen be több száz másik tanulóhoz! 😎
Minimum minden pénteken küldünk e-maileket. Üdvözöljük!
A feliratkozással hozzájárul ahhoz, hogy a kapott információk tartalmazhatnak szolgáltatásokat és különleges ajánlatokat e-mailben.
A Dropout a CIFAR-100, a CIFAR-100 és az ImageNet adathalmazokon képzett ConvNet-eken is felülmúlja a hagyományos neurális hálózatok teljesítményét.
A SVHN adathalmaz esetében egy másik érdekes megfigyelésről is beszámolhatunk: ha a Dropoutot a konvolúciós rétegen alkalmazzuk, a teljesítmény is nő. A szerzők szerint ez azért érdekes, mert korábban azt feltételezték, hogy ezek a rétegek nem érzékenyek a túlillesztésre, mivel nincs sok paraméterük (Srivastava et al., 2014). Azzal érvelnek, hogy a Dropout hozzáadása a Conv rétegekhez zajos bemenetet biztosít az őket követő Dense rétegek számára, ami tovább akadályozza a túlillesztést.
A Dropout végül a TIMIT beszéd benchmark adathalmazokon és a Reuters RCV1 adathalmazon is működik, de itt a látás és beszéd adathalmazokhoz képest sokkal kisebb volt a javulás.
Dropout vs. nincs dropout más regularizátorokkal
Most, hogy a szerzők tudták, hogy a Dropout jól skálázódik különböző gépi tanulási problémákon, tovább vizsgálták: hogyan teljesít más regularizátorokhoz képest?
Teszteltek több regularizáló módszert a túlillesztés megakadályozására:
- L2 weight decay;
- Lasso;
- KL sparsity;
- Max-norm regularization.
Srivastava et al. (2014) azt találták, hogy max-norm regularizációval kombinálva a Dropout még alacsonyabb általánosítási hibát ad. Valójában ez szolgáltatta a legalacsonyabb hibát a jelentések szerint, majd – némi távolsággal – a Dropout + L2 regularizáció, végül a többi.
Ezért a Dropout alkalmazásakor érdemes lehet egyidejűleg max-norm regularizációt is végezni.
Mikor működik a legjobban a Dropout? A Dropout arányról és az adathalmaz méretéről
Egy másik kérdésre próbáltak választ adni: a Dropout arány (azaz az \(p\) paraméter) és/vagy az adathalmaz mérete befolyásolja-e a Dropout és a hozzá kapcsolt neurális hálózatok teljesítményét?
A kérdésre igennel kell válaszolni.
Melyik a legjobb érték az \(p\) számára?
Először is, az \(p\) paraméter. Mostanra már felidézhetjük, hogy ez hangolható, és valójában a gépi tanulással foglalkozó mérnöknek kell előre beállítania. Az a tény, hogy hangolható, ugyanazokhoz a hibákhoz vezet, mint amiért a rögzített tanulási ráták nem jó ötlet: egyszerűen nem tudjuk, hogy melyik \(p\) illeszkedik a legjobban az adatokhoz.
A szerzők szerint tehát az \(p\) értékének kiválasztását néhány kezdeti, validációs készlettel végzett teszteléssel kell elvégezni.
Ezt ők is megtették – annak érdekében, hogy lássák, találnak-e érdekes mintákat.
És találtak is egy ilyen mintát: több forgatókönyvön keresztül úgy tűnik, hogy a rejtett rétegek \(p \ kb. 0,5\) értéke a legjobb teljesítményt eredményezi a Dropout alkalmazásakor (Srivastava et al., 2014). Ez minden rétegre igaz, kivéve a bemeneti réteget, ahol \(p\) \(\ kb. 1,0\) kell, hogy legyen. Ez utóbbi feltehetően azért van így, mert a bemeneti réteg veszi át a bemeneti adatokat, és nehéz mintákat találni, ha az adatokat véletlenszerűen dobjuk ki.
Hogyan teljesít a Dropout az adathalmaz méretének függvényében?
A szerzők szerint “egy jó regularizátor lehetővé teszi, hogy kis adathalmazokon képzett, nagy számú paraméterrel rendelkező modellekből jó általánosítási hibát kapjunk”. Vagyis olyan adatokon teljesít igazán jól, amelyeket korábban még nem látott – még akkor is, ha kis adathalmazon képezték ki.
Azért, hogy kiderüljön, hogy a Dropout jól regularizál-e különböző méretű adathalmazokon, Srivastava et al. (2014) különböző méretű teszteket végeztek az MNIST adathalmazon. A méretek a következők voltak: “100, 500, 1K, 5K, 10K és 50K véletlenszerűen kiválasztva az MNIST képzési halmazból” (Srivastava et al., 2014).
We help you with Machine Learning! 🧠
Minimum minden pénteken küldünk e-maileket. Üdvözöljük!
A feliratkozással hozzájárul ahhoz, hogy a kapott információk tartalmazhatnak szolgáltatásokat és különleges ajánlatokat e-mailben.
A szerzők megállapították, hogy van egy kompromisszum aközött, hogy mikor van szükség a Dropoutra, és mikor már nem hasznos. Először is, hogy lefedjük azt az esetet, amikor az adathalmaz rendkívül kicsi: ebben az esetben még a Dropout sem javítja a teljesítményt, egyszerűen azért, mert az adathalmaz mérete túl kicsi. Ugyanez igaz azokra az adathalmazokra is, amelyek elég nagyok: Ekkor a Dropout már nem javítja a modellt, sőt, a modell teljesítménye romlik.
Ezért létezik egy édes pont, amikor a Dropout szükséges, és amikor okos dolog nem használni (vagy növelni az adathalmaz méretét). Srivastava et al. (2014) szerint nincsenek heurisztikák ennek a méretnek a meghatározására, inkább egy validációs készlettel kell meghatározni.
Gaussian Kiesés: Bernoulli-változók helyett Gaussian
A fentiekből felidézzük, hogy a Dropout Bernoulli-változókkal működik, amelyek \(p\) valószínűséggel 1-et vesznek fel, a többivel pedig 0-t, ami \(1 – p\).
Ez az elképzelés általánosítható az aktivációk más eloszlásokból származó véletlen változókkal való szorzására (Srivastava et al., 2014). Munkájukban Srivastava et al. azt találták, hogy a Gauss-eloszlás és így a Gauss-változók ugyanolyan jól – sőt, talán még jobban is – működnek.
A Gauss-változók alkalmazása hasonló módon történhet: a hálózatok ritkítása a képzés idején, és súlyozott aktivációk használata a tesztelés és a termelés idején (mint a hagyományos Dropout esetében). A szerzők azonban úgy döntenek, hogy a Gauss Dropoutot másképp – azaz multiplikatív módon – alkalmazzák. A ritkítás és a súlyozás helyett a Gauss Dropout a képzés idején súlyoz, amikor az el nem ejtett aktivált értékeket \(1/p\) helyett \(1\) (a hagyományos Bernoulli Dropout esetében) \(1\) értékkel szorozzuk meg. A tesztidőszakban nem módosulnak. Ez megegyezik az előző forgatókönyvvel.
A Gauss-kiesést valamilyen \(\sigma\) értékkel kell beállítani, amely Srivastava et al. kísérleteiben \(\sqrt{(1-p)/p}\) volt, ahol \(p\) a Bernoulli-változat konfigurációja (azaz, naiv esetben \(p \approx 0.5\) a rejtett rétegeknél és \(\approx 1.0\) a bemeneti rétegnél).
Összefoglaló
Ebben a blogbejegyzésben a túlillesztést vizsgáltuk – és azt, hogyan lehet elkerülni, a Dropout segítségével. Megnézve, hogy mi ez, hogyan működik, és hogy működik, rájöttünk, hogy ez egy érdekes technika, amit alkalmazhatsz a mélytanulási modelljeidben.
Remélem, ma tanultál valamit – valami hasznosat az ML modelljeidhez 😀 Ha igen, vagy ha kérdésed van, kérlek, ne habozz, hagyj egy kommentet alább ⬇! Ha lehetséges, válaszolok a kérdéseidre 😊
Köszönöm, hogy olvastad ma a MachineCurve-ot és jó mérnöki munkát! 😎
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, március 20.). Bernoulli-eloszlás. Retrieved from https://en.wikipedia.org/wiki/Bernoulli_distribution
💡 Master your ML – check out these posts also:
.