Co je Dropout? Omezte overfitting ve svých neuronových sítích

Poslední aktualizace 17. prosince 2019

Při trénování neuronových sítí je vaším cílem vytvořit model, který bude fungovat opravdu dobře.

To dává smysl, protože nemá smysl používat model, který nefunguje.

Při pokusu o nalezení dokonale výkonného modelu však musíte zachovat poměrně úzkou rovnováhu.

Jde o rovnováhu mezi underfittingem a overfittingem.

Abyste se vyhnuli underfittingu (mít horší než možnou predikční výkonnost), můžete pokračovat v trénování, dokud nenastane druhý problém – overfitting, neboli přílišná citlivost na tréninková data. Obojí brzdí výkonnost modelu.

Někdy je rozsah, ve kterém váš model není underfit ani overfit, opravdu malý. Naštěstí jej lze rozšířit použitím takzvaného regularizátoru – techniky, která regularizuje chování vašeho modelu během trénování, aby na nějakou dobu oddálila overfitting.

Dropout je takovou regularizační technikou. V tomto příspěvku na blogu se jí budeme zabývat, přičemž se podíváme na několik věcí. Za prvé se podrobněji ponoříme do rozdílu mezi underfittingem a overfittingem, abychom jim hlouběji porozuměli. Za druhé představíme Dropout na základě akademických prací a řekneme vám, jak funguje. Zatřetí se podíváme na to, zda skutečně funguje, tím, že popíšeme různé experimenty provedené s touto technikou. Nakonec porovnáme tradiční Dropout s Gaussovým Dropoutem – a jak se změní trénování vašeho modelu.

Připraveni? Jdeme na to! 😎

Jak dobře si váš model vede? Underfitting a overfitting

Nejprve se podívejme, co je to underfitting a overfitting.

Při zahájení procesu trénování jsou váhy vašich neuronů pravděpodobně inicializovány náhodně nebo pomocí jiné inicializační strategie. To znamená, že chybovost neboli hodnota ztráty bude během několika prvních epoch velmi vysoká. Podívejte se na tento diagram, kde ztráta během prvních několika epoch velmi rychle klesá:

Když ztráta při trénování i validaci klesá, říká se, že model je nedostatečně přizpůsoben: stále jej lze trénovat tak, aby předpovídal lépe, tj. aby získal na své prediktivní síle.

Akce, kterou je třeba podniknout, je pak pokračovat v trénování.

To však nemůže trvat věčně. Optimalizace modelu zahrnuje generování validačních předpovědí s vašimi validačními daty, jejichž výsledkem jsou hodnoty ztrát a gradienty pro optimalizaci, která se následně provádí. To bohužel znamená, že některé ideosynkrazie dat prosakují do vah modelu. To znamená, že vzhledem k tomu, že data jsou spíše vzorkem než celou populací, jsou vždy mírně odlišná od celé populace, kterou reprezentují. Když budete model optimalizovat po stovky epoch s těmito daty, vždy dostanete posun vůči této skutečné populaci.

Pokud byste pokračovali v trénování, váš model by se stále více přizpůsoboval těmto ideosynkrazím, čímž by se stával méně vhodným pro data, která nikdy předtím neviděl – tj. jiné vzorky z populace. O modelu se pak říká, že je overfit: je příliš dobře přizpůsoben trénovacím a validačním datům.

Na chvíli se zastavme! 👩💻

Blogy na MachineCurve učí Machine Learning pro vývojáře. Přihlaste se k bezplatné aktualizaci Machine Learning od MachineCurve ještě dnes! Dozvíte se nové věci a lépe pochopíte koncepty, které již znáte.
Emaily posíláme minimálně každý pátek. Vítejte!

Přihlášením souhlasíte s tím, že veškeré informace, které obdržíte, mohou obsahovat služby a speciální nabídky zasílané e-mailem.

Overfitting lze na grafech, jako je ten výše uvedený, odhalit kontrolou validační ztráty: když opět vzroste, zatímco tréninková ztráta zůstává konstantní nebo klesá, víte, že váš model overfittuje. Jak vidíte, síť napájená ELU ve výše uvedeném grafu začala velmi mírně overfitovat.

Jak underfittingu, tak overfittingu je třeba se vyvarovat, protože váš model bude fungovat hůře, než by teoreticky mohl. Naštěstí lze ke snížení dopadu overfittingu použít určité techniky – tzv. regulátory. Jednou z nich je Dropout – a my se jí budeme věnovat v tomto blogu. Začněme rozborem toho, co je Dropout, co dělá a jak funguje.

Co je Dropout a jak funguje?

V článku „Dropout: Srivastava a další (2014) popisují techniku Dropout, která je stochastickou regularizační technikou a měla by (teoreticky) omezit nadměrné přizpůsobení kombinací mnoha různých architektur neuronových sítí.

Pomocí Dropout se v procesu trénování v podstatě vynechávají neurony v neuronové síti. Ty jsou ze sítě dočasně odstraněny, což lze vizualizovat následovně:

Všimněte si, že jsou odstraněna i spojení nebo synapse, a že tedy přes tyto neurony již neproudí žádná data.

…ale jen velmi krátce! Tento proces se opakuje každou epochu (nebo dokonce každou minidávku! – Srivastava et al. 2014), a proto k vzorkování ztenčených sítí dochází velmi často. To by mělo vést k podstatně nižší chybovosti zobecnění (tj. overfittingu), protože „přítomnost neuronů se stává nespolehlivou“ (Srivastava et al., 2014).

Toto odstraňování neuronů a synapsí během tréninku se provádí náhodně, s parametrem \(p\), který je laditelný (nebo, vzhledem k empirickým testům, nejlépe nastavený na 0,5 pro skryté vrstvy a blízko 1,0 pro vstupní vrstvu). To podle autorů fakticky znamená, že „ztenčená“ síť je vzorkována z globální architektury a použita pro trénink.

V době testování „není možné explicitně zprůměrovat předpovědi z exponenciálně mnoha ztenčených modelů“ (Srivastava a kol., 2014). To je pravda: stalo by se to výpočetní zátěží, když by bylo třeba zprůměrovat statisíce epoch/minibatches, zejména když se sítě stanou opravdu velkými.

Naštěstí existuje řešení – které je jednoduché, ale dává stejný výsledek. Použitím jedné neuronové sítě, kde se výstupy vah škálují podle toho, s jakým \(p\) byla jednotka při trénování zachována. To znamená, že očekávaný výstup v době trénování je stejný jako skutečný výstup v době testu, čímž se vyřeší výpočetní problém a Dropout je použitelný v praxi.

Bernoulliho proměnné

Podívejme se nyní na to, jak Dropout funguje matematicky. Nebojte se, nezasypeme vás matematikou, ale místo toho se pokusíme o velmi intuitivní pohled.

Velmi zjednodušeně lze říci, že neuron přijímá vstup: např. tři neurony nahoře v tříneuronové vrstvě Dense posílají své výstupy do další vrstvy, kde je přijímají jako vstup. Všimněte si, že pro zjednodušení zde vynecháváme hodnoty zkreslení.

Normální neuron (předpokládá se, že je bez zkreslení)

Odtud je velmi jednoduché přejít k Dropoutovu neuronu, který vypadá následovně:

Dropoutův neuron (předpokládá se, že je bez zkreslení)

Matematicky jde o takzvané Bernoulliho náhodné veličiny:

V teorii pravděpodobnosti a statistice je Bernoulliho rozdělení, pojmenované po švýcarském matematikovi Jacobu Bernoullim, diskrétní rozdělení pravděpodobnosti náhodné veličiny, která nabývá hodnoty 1 s pravděpodobností \(p\).

Wikipedia o Bernoulliho rozdělení

S cílem vytvořit Dropout připojili Srivastava a spol. (2014) k neuronům sítě Bernoulliho proměnné (vynásobením neuronových výstupů), „z nichž každá má pravděpodobnost \(p\), že bude 1″. Hodnotu \(p\) zde volí inženýr strojového učení, obvykle na základě nějaké validační množiny nebo naivně nastavené na 0,5.

Nikdy nepropásněte nové články o strojovém učení ✅

Blogy na MachineCurve učí strojové učení pro vývojáře. Přihlaste se k bezplatné aktualizaci Machine Learning od MachineCurve ještě dnes! Dozvíte se nové věci a lépe pochopíte koncepty, které již znáte.
Emaily posíláme minimálně každý pátek. Vítejte!

Přihlášením souhlasíte s tím, že veškeré informace, které obdržíte, mohou obsahovat služby a speciální nabídky zasílané e-mailem.

Vnitř sítě je Bernoulliho proměnná a její hodnota 1 nebo 0 určuje, zda je neuron během této epochy nebo minidávky feedforward operace „vysazen“. To ve svém důsledku vede k „ztenčení sítě“, o kterém hovoří Srivastava et al. (2014).

Proč by Dropout mohl snížit overfitting?

Možná se nyní ptáte: Proč Bernoulliho proměnné připojené k běžným neuronovým sítím, díky nimž je síť tenčí, snižují overfitting?

Pro odpověď na tuto otázku se budeme muset podívat na to, jak se neuronové sítě trénují.

Obvykle se k tomuto účelu používá zpětné šíření a gradientní sestup nebo podobný optimalizátor. Při zadané hodnotě ztráty se vypočítají takzvané „gradienty“, které pak optimalizátor zpracuje do vah sítě. Použitím těchto gradientů (s ohledem na míru chyby) ke změně vah síť pravděpodobně dosáhne o něco lepšího výkonu během další iterace procesu trénování.

Výpočet gradientu se provádí s ohledem na chybu, ale také s ohledem na to, co dělají všechny ostatní jednotky (Srivastava a kol., 2014). To znamená, že některé neurony mohou prostřednictvím změn svých vah napravovat chyby jiných neuronů. Ty, jak tvrdí Srivastava et al (2014), vedou ke složitým koadaptacím, které se nemusí zobecnit na neviděná data, což vede k nadměrnému přizpůsobení.

Dropout tedy zabraňuje těmto koadaptacím tím, že – jak jsme již psali – činí přítomnost jiných skrytých nespolehlivou. Neurony se jednoduše nemohou spoléhat na to, že ostatní jednotky opraví jejich chyby, což snižuje počet koadaptací, které se nezobecní na neviděná data, a tím pravděpodobně snižuje i overfitting.

Trénování neuronových sítí s Dropoutem

Trénování neuronových sítí, ke kterým byl Dropout připojen, se v podstatě rovná trénování neuronových sítí bez Dropoutu. Lze použít stochastický gradientní sestup nebo podobné optimalizátory. Jediný rozdíl, jak uvádí Srivastava et al (2014), lze nalézt při použití minidávkového přístupu: namísto na epochu se ztenčené sítě vzorkují na minidávku.

Dále lze použít i metody, které vylepšují klasický SGD – například momentum – a vykazují podobné zlepšení jako u běžných neuronových sítí (Srivastava et al.,

Co se autorům také osvědčilo při trénování, je použití regularizace max-norm, což znamená omezení normy příchozí váhy tak, aby byla omezena určitou maximální hodnotou \(c\). Tuto hodnotu musí inženýr nastavit předem a určit ji pomocí validační množiny (Srivastava et al., 2014).

Kombinace Dropoutu s regularizací max-norm zlepšuje výkonnost ve srovnání s použitím samotného Dropoutu, ale autoři uvádějí ještě lepší výsledky, když Dropout a regularizaci max-norm zkombinujeme s dalšími dvěma věcmi:

  • Velké, klesající míry učení.
  • Vysokou hybností.

Podle Srivastavy a dalších (2014) to lze případně odůvodnit následujícími argumenty:

  1. Omezování váhových vektorů umožňuje používat velké míry učení bez explodujících vah.
  2. Dropout šum plus velké míry učení pak pomáhají optimalizátorům „prozkoumat různé oblasti váhového prostoru, které by jinak byly obtížně dosažitelné“.
  3. Snížení míry učení pak zpomaluje skokovitost procesu zkoumání, nakonec se „ustálí na minimu“.
  4. Vysoká hybnost umožňuje síti překonávat lokální minima, čímž se zvyšuje pravděpodobnost nalezení globálního minima.

Funguje dropout skutečně? Experimentální výsledky

Při jakémkoli zlepšení strojového učení je hezké mít teoretické zlepšení – ale je také důležité otestovat, zda skutečně funguje. Srivastava a další (2014) provedli několik testů, aby zjistili, zda Dropout funguje. Zaprvé použili různé standardní datové sady (například datovou sadu MNIST), aby otestovali, zda Dropout zlepšuje výkonnost modelu v široké škále klasifikačních problémů.

Druhé ověřili, jak si vede s různými dalšími regularizátory (což přineslo poznatek, že regularizace max-norm spolu s Dropoutem funguje nejlépe – na tyto výsledky se ale podrobněji podíváme později), a zatřetí Srivastava et al. (2014) zkoumali, které míry dropoutu (tj, který parametr \(p\)) funguje nejlépe a jak velikost dat ovlivňuje výkon Dropout. Podívejme se na to!

Vzorky ze souboru dat MNIST

Dropout vs. bez dropoutu na standardních souborech dat

Autoři testovali Dropout vs. No Dropout na těchto standardních souborech dat (Srivastava et al., 2014):

  • Dataset MNIST, který obsahuje tisíce ručně psaných číslic;
  • Srovnávací dataset TIMIT pro rozpoznávání čisté řeči.
  • Datasety CIFAR-10 a CIFAR-100, které obsahují drobné přírodní obrázky v 10 a 100 třídách.
  • Datová sada Street View House Numbers (SVHN), obsahující obrázky čísel domů shromážděné ze služby Google Street View.
  • Datová sada ImageNet, která obsahuje mnoho přirozených obrázků.
  • Datová sada zpravodajských článků Reuters RCV1. Jedná se spíše o textovou než obrazovou datovou sadu.
Vzorky z datové sady CIFAR10

U všech datových sad Dropout zlepšil zobecňující schopnost modelu. V případě MNIST bylo možné vykázat drasticky odlišné chyby testů, přičemž došlo k podstatnému zlepšení u všech různých testovaných architektur.

Připojte se ke stovkám dalších učících se! 😎

Blogy na MachineCurve učí strojové učení pro vývojáře. Přihlaste se k bezplatné aktualizaci Machine Learning na MachineCurve ještě dnes! Dozvíte se nové věci a lépe pochopíte koncepty, které už znáte.
Emaily posíláme minimálně každý pátek. Vítejte!

Přihlášením souhlasíte s tím, že veškeré informace, které obdržíte, mohou obsahovat služby a speciální nabídky zasílané e-mailem.

Dropout také překonává běžné neuronové sítě na konvolučních sítích natrénovaných na datových sadách CIFAR-100, CIFAR-100 a ImageNet.

U datové sady SVHN lze uvést další zajímavé pozorování: při použití Dropoutu na konvoluční vrstvě se také zvyšuje výkon. Podle autorů je to zajímavé, protože dříve se předpokládalo, že tyto vrstvy nejsou citlivé na overfitting, protože nemají mnoho parametrů (Srivastava et al., 2014). Tvrdí, že přidání Dropoutu do konvolučních vrstev poskytuje šumové vstupy do hustých vrstev, které na ně navazují, což jim dále brání v nadměrném přizpůsobování.

Dokonce Dropout funguje i na srovnávacích datových sadách TIMIT pro řeč a Reuters RCV1, ale zde bylo zlepšení mnohem menší ve srovnání s datovými sadami pro vidění a řeč.

Dropout vs. žádný dropout s jinými regularizátory

Když už autoři věděli, že Dropout dobře škáluje v různých problémech strojového učení, zkoumali jej dále: jak si vede vzhledem k jiným regularizátorům?

Testovali několik metod regulátorů, které zabraňují nadměrnému přizpůsobení:

  • L2 weight decay;
  • Lasso;
  • KL sparsity;
  • Max-norm regularizace.

Srivastava a další (2014) zjistili, že v kombinaci s max-norm regularizací poskytuje Dropout ještě nižší generalizační chyby. Ve skutečnosti poskytl nejnižší udávanou chybu, následován – s určitým odstupem – Dropoutem + L2 regularizací a nakonec ostatními.

Při použití Dropoutu by tedy mohlo být dobré provést současně i max-norm regularizaci.

Kdy funguje Dropout nejlépe? O míře dropoutu a velikosti datasetu

Další otázka, na kterou se snažili odpovědět: ovlivňuje míra dropoutu (tj. parametr \(p\)) a/nebo velikost datasetu výkonnost Dropoutu a neuronových sítí, ke kterým je připojen?

Na tuto otázku je třeba odpovědět ano.

Jaká je nejlepší hodnota pro \(p\)?

Nejprve parametr \(p\). Nyní si již můžeme připomenout, že je laditelný a musí být ve skutečnosti předem nastaven inženýrem strojového učení. Skutečnost, že je laditelný, vede ke stejným chybám, kvůli kterým nejsou pevné míry učení dobrým nápadem: jednoduše nevíte, která hodnota \(p\) nejlépe vyhovuje datům.

Proto autoři tvrdí, že výběr hodnoty \(p\) musí být proveden pomocí několika počátečních testů s validační množinou.

To také udělali – aby zjistili, zda lze nalézt zajímavé vzorce.

A takový vzorec skutečně nalezli: ve více scénářích se zdá, že hodnota \(p \přibližně 0,5\) pro skryté vrstvy vede k nejlepšímu výkonu při použití Dropout (Srivastava et al., 2014). To platí pro všechny vrstvy kromě vstupní, kde \(p\) musí být \(\aprox 1,0\). Poslední případ je pravděpodobně dán tím, že vstupní vrstva přebírá vstupní data a je obtížné najít vzory, když jsou data náhodně vypuštěna.

Jak si Dropout vede s ohledem na velikost datové sady?

Podle autorů „dobrý regulátor umožňuje získat dobrou chybu generalizace z modelů s velkým počtem parametrů natrénovaných na malých datových sadách“. To znamená, že si vede opravdu dobře na datech, která předtím neviděl – i když je natrénován na malých datech.

S cílem zjistit, zda Dropout dobře reguluje při různých velikostech datových sad, provedli Srivastava et al. (2014) testy s různými velikostmi na datové sadě MNIST. Velikosti byly následující: „100, 500, 1K, 5K, 10K a 50K náhodně vybraných z trénovací sady MNIST“ (Srivastava et al., 2014).

Pomáháme vám se strojovým učením! 🧠

Blogy na MachineCurve učí Machine Learning pro vývojáře. Přihlaste se k bezplatné aktualizaci Machine Learning od MachineCurve ještě dnes! Dozvíte se nové věci a lépe pochopíte koncepty, které již znáte.
Emaily posíláme minimálně každý pátek. Vítejte!

Přihlášením souhlasíte s tím, že veškeré informace, které obdržíte, mohou obsahovat služby a speciální nabídky zasílané e-mailem.

Autoři zjistili, že existuje kompromis mezi tím, kdy je Dropout nutný a kdy už není užitečný. Nejprve k případu, kdy je soubor dat extrémně malý: ani Dropout v takovém případě nezlepší výkon, jednoduše proto, že velikost souboru dat je příliš malá. Totéž platí pro soubory dat, které jsou dostatečně velké:

Existuje tedy „sweet spot“, kdy je Dropout nezbytný a kdy je rozumné jej nepoužívat (nebo zvětšit velikost datasetu). Podle Srivastavy a dalších (2014) neexistuje žádná heuristika pro určení této velikosti; spíše je třeba ji určit pomocí validační sady.

Gaussian Dropout (předčasné ukončení školní docházky):

Tuto myšlenku lze zobecnit na násobení aktivací náhodnými proměnnými z jiných rozdělení (Srivastava et al., 2014). Srivastava a kol. ve své práci zjistili, že Gaussovo rozdělení, a tedy i Gaussovy proměnné fungují stejně dobře – a možná i lépe.

Použití Gaussových proměnných lze provést podobným způsobem: ztenčení sítí v době trénování a použití vážených aktivací v době testování a produkce (jako u běžného Dropoutu). Autoři se však rozhodli použít Gaussův Dropout jinak – tj. multiplicitně. Namísto prořezávání a vážení je Gaussův Dropout vážen v době tréninku, kdy jsou aktivované hodnoty, které nejsou vypuštěny, násobeny \(1/p\) namísto \(1\) (u běžného Bernoulliho Dropoutu). V čase testu se nemění. To odpovídá předchozímu scénáři.

Gausův Dropout musí být nakonfigurován pomocí určitého \(\sigma\), které bylo v experimentech Srivastavy a spol. nastaveno na \(\sqrt{(1-p)/p}\), kde \(p\) je konfigurace Bernoulliho varianty (tj, v naivních případech \(p \přibližně 0,5\) pro skryté vrstvy a \(\přibližně 1,0\) pro vstupní vrstvu).

Shrnutí

V tomto příspěvku na blogu jsme se zabývali nadměrným přizpůsobováním – a jak se mu vyhnout pomocí funkce Dropout. Tím, že jsme se podívali na to, co to je, jak to funguje a že to funguje, jsme zjistili, že je to zajímavá technika pro použití ve vašich modelech hlubokého učení.

Doufám, že jste se dnes něco naučili – něco užitečného pro vaše ML modely 😀 Pokud ano, nebo když budete mít otázky, neváhejte zanechat komentář níže ⬇! Když to bude možné, odpovím na vaše dotazy 😊

Děkuji, že jste si dnes přečetli MachineCurve a přeji vám šťastné inženýrství! 😎

Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014, 15. června). Dropout: A Simple Way to Prevent Neural Networks from Overfitting (Jednoduchý způsob, jak zabránit neuronovým sítím v nadměrném přizpůsobení). Převzato z http://jmlr.org/papers/v15/srivastava14a.html

Wikipedia. (2003, 20. března). Bernoulliho rozdělení. Získáno z https://en.wikipedia.org/wiki/Bernoulli_distribution

💡 Ovládněte ML – podívejte se i na tyto příspěvky:

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.