Předpokládejme, že máme nějakou tréninkovou sadu $ (x _ {(i)}, y _ {(i)}) $ pro $ i = 1, \ dots, m $ . Předpokládejme také, že na tréninkové sestavě spustíme nějaký typ supervidovaného algoritmu učení. Hypotézy jsou reprezentovány jako $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . Musíme najít parametry $ \ mathbf {\ theta} $ , které minimalizují „vzdálenost“ mezi $ y _ {(i )} $ a $ h _ {\ theta} (x _ {(i)}) $ . Nechť $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$
Pak chceme najít $ \ theta $ , které minimalizuje $ J (\ theta) $ . V sestupném gradientu inicializujeme každý parametr a provádíme následující aktualizaci: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ částečné} {\ částečné \ theta_ {j}} J (\ theta) $$
Jaký je hlavní rozdíl mezi sestupem sestupného přechodu a stochastickým sestupem?
Oba používají výše uvedené pravidlo aktualizace. Je ale jedno lepší než druhé?
Odpověď
Použitelnost dávkového nebo stochastického gradientního sestupu skutečně závisí na očekávané rozmanitosti chyb.
Dávkové klesání sestupu vypočítá přechod pomocí celé datové sady. To je skvělé pro konvexní nebo relativně plynulé chybové potrubí. V tomto případě přesuneme několik přímo k optimálnímu řešení, ať už lokálnímu nebo globálnímu. Navíc dávkový gradientový gradient, vzhledem k rychlosti žíhání, nakonec najde minimum umístěné v jeho přitažlivé oblasti.
Stochastický gradientní gradient (SGD) vypočítá gradient pomocí jediného vzorku. Většina aplikací SGD ve skutečnosti používá minibatch několika vzorků, a to z důvodů, které budou vysvětleny o něco později. SGD funguje dobře (předpokládám, že ne dobře, ale lepší než dávkový gradient) u chybových potrubí, která mají spoustu lokálních maxim / minim. V tomto případě má poněkud hlučnější gradient vypočítaný pomocí sníženého počtu vzorků tendenci vytrhnout model z místních minim do oblasti, která je, doufejme, optimálnější. Jednotlivé vzorky jsou opravdu hlučné, zatímco minibatchy mají tendenci průměrně trochu vyrušovat. , množství trhnutí se sníží při použití minibatchů. Dobré vyvážení se dosáhne, když je velikost minibatchu dostatečně malá, aby se vyhnula některým špatným místním minimům, ale dostatečně velká, aby se nevyhýbala globálním minimům nebo výkonnějším oční minima. (Mimochodem, toto předpokládá, že nejlepší minima mají větší a hlubší povodí přitažlivosti, a proto se do nich snadněji spadá.)
Jednou z výhod SGD je, že je výpočetně mnohem rychlejší. Velký datové soubory často nemohou být uchovávány v paměti RAM, což činí vektorizaci mnohem méně efektivní. Spíše je třeba načíst každý vzorek nebo dávku vzorků, pracovat s nimi, uložit výsledky atd. Minibatch SGD, na druhé straně, je obvykle záměrně dostatečně malý na to, aby byl výpočetně využitelný.
Tato výpočetní výhoda je obvykle využívána provedením mnohem více iterací SGD, což znamená mnohem více kroků než u konvenčního sestupu dávkového gradientu . To obvykle vede k modelu, který je velmi blízký modelu, který by byl nalezen pomocí dávkového gradientového sestupu, nebo lépe.
Způsob, jakým bych rád přemýšlel o tom, jak SGD funguje, je představit si, že mám jeden bod, který představuje moji distribuci vstupů. Můj model se pokouší naučit distribuci vstupů. Okolí vstupní distribuce je zastíněná oblast, která představuje vstupní distribuce všech možných minibatchů, které jsem mohl vyzkoušet. Obvykle se jedná o spravedlivý předpoklad, že distribuce vstupů minibatchů jsou blízko v blízkosti skutečného rozdělení vstupů. Sestupování gradientu dávky ve všech krocích vede nejstrmější cestou k dosažení skutečného rozdělení distribucí. SGD na druhé straně zvolí náhodný bod ve stínované oblasti a jde nejstrmější cestou k tomuto bodu. Při každé iteraci však zvolí nový bod. Průměr všech těchto kroků bude aproximovat skutečné rozdělení vstupů, obvykle docela dobře.
Komentáře
- V praxi nikdo nepoužívá Batch Gradient Descent. Je to ‚ prostě příliš výpočetně nákladné za to ne tolik zisku div> gradient.) Pokud máte vysoce nekonvexní funkci ztráty, stačí vykročit většinou správným směrem a nakonec ‚ ll konvergujete o n místní minimum. Tedy minibatch SGD.
- @Jason_L_Bens máte nějaké reference (dokumenty nebo online texty), kde si mohu přečíst více o těchto algoritmech?
- @ user110320 ne z hlavy, ne, i když ‚ jsou velmi běžné algoritmy, a proto by na toto téma měla být k dispozici spousta zdrojů s trochou hledání. Pokud ‚ hledáte obecný přístup, doporučuji ‚ d přečíst si část Yoshua Bengio ‚ s Learning Deep Architectures for AI. Je to ‚ kde jsem začal.
Odpovědět
Jak naznačuje další odpověď, hlavním důvodem použití SGD je snížit výpočetní náklady přechodu a přitom do značné míry zachovat směr přechodu, když je průměr z mnoha mini-dávek nebo vzorků – což jistě pomůže přivést vás k místním minimům.
- Proč funguje minibatch .
Za tím stojí matematika že “ true “ gradient nákladové funkce (gradient pro chybu generalizace nebo pro nekonečně velkou sadu vzorků) je očekávání přechodu $ g $ nad skutečnou distribucí generující data $ p_ {data} $ ; skutečný gradient $ \ hat {g} $ vypočítaný na dávce vzorků je vždy aproximací skutečného přechodu s empirickou distribucí dat $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {data}} ({\ partial J (\ theta) \ over \ partial \ theta}) $$ Sestupné dávkové spádování vám může přinést možný “ optimální “ přechod s ohledem na všechny vaše vzorky dat, nejedná se o “ true “ přechod. Menší dávka (tj. Minibatch) pravděpodobně není tak optimální jako celá dávka, ale obě jsou přibližné – stejně tak i minibatch s jedním vzorkem (SGD).
Za předpokladu, že neexistuje závislost mezi $ m $ vzorky v jedné minibatchi, vypočítaný $ \ hat {g} (m) $ je nestranný odhad skutečného gradientu. (Čtvercové) standardní chyby odhadů s různými velikostmi minibatch jsou nepřímo úměrné velikostem minibatch. To znamená, $$ {SE ({\ hat {g} (n)}) \ over SE ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Tj., snížení standardní chyby je druhá odmocnina nárůstu velikosti vzorku. To znamená, že pokud je velikost minibatch malá, musí být také malá rychlost učení, aby se dosáhlo stability při velkém rozptylu. Pokud vzorky nejsou nezávislé, vlastnost objektivního odhadu již není zachována. To vyžaduje, abyste před tréninkem zamíchali vzorky, pokud jsou vzorky sekvenovány nedostatečně náhodně.
- Proč může minibatch pracovat lépe .
Za prvé, minibatch umožňuje, aby některé problémy s učením byly technicky neřešitelné, aby byly zvládnutelné kvůli snížené potřebě výpočtu s menší velikostí dávky.
Zadruhé, zmenšená velikost dávky nemusí nutně znamenat sníženou přesnost přechodu. Mnoho vzorků školení má spoustu zvuků nebo odlehlých hodnot nebo vychýlení. Náhodně vzorkovaná minibatch může odrážet distribuci generující skutečná data lépe (nebo ne horší) než původní plná dávka. Pokud vám některé iterace aktualizací gradientu minibatch poskytnou lepší odhad, může být průměrovaný výsledek jedné epochy celkově lepší než gradient vypočítaný z celé dávky.
Zatřetí, minibatch nepomůže pouze při řešení nepříjemných vzorky dat, ale také pomáhají vypořádat se s nepříjemnou nákladovou funkcí, která má mnoho místních minim. Jak uvádí Jason_L_Bens, někdy může být snazší zachytit běžný gradient do lokálních minim, když je obtížnější zachytit dočasný náhodný přechod vypočítaný pomocí minibatch.
Nakonec s přechodem sestupu nejste dosažení globálních minim v jednom kroku, ale iterace na chybovém potrubí. Přechod vám do značné míry dává pouze směr k iteraci. S minibatchem můžete iterovat mnohem rychleji. V mnoha případech platí, že čím více iterací, tím lepší bod můžete dosáhnout. Nezáleží vám vůbec na každém počasí, bod je optimální globálně nebo dokonce lokálně. Chtěli byste pouze dosáhnout rozumného modelu, který vám přináší přijatelnou chybu generalizace. Minibatch to usnadňuje.
Knihu “ Deep learning “ od Iana Goodfellowa et al. má docela dobré diskuse na toto téma, pokud si ho pečlivě přečtete.
Komentáře
- Co se týká konvexních optimalizačních problémů, je to v pořádku.Ale pro použití metod přechodu na nekonvexní funkce vám chyběl velmi kritický důvod, že SGD je lepší než dávkový GD. Viz moje odpověď datascience.stackexchange.com/questions/16807/…
- @horaceT Děkuji za Váš komentář. Vzhledem k tomu, že bod, který jste zmínili, popsal Jason_L_Bens výše s podrobnostmi, neobtěžoval jsem se opakovat, ale s náležitou úctou odkazoval na jeho odpověď v posledním třetím odstavci. K přechodu na problém s optimalizací sestupu se nekonvexní projeví místními minimy včetně sedlového bodu (viz poslední třetí odstavec); a kvůli popisu moje odpověď popisuje SGD jako minibatch, ale s velikostí dávky 1 (viz třetí odstavec).
- Proč jste řekli prakticky v * konečně v jedné epochě, pracujete prakticky na počítači průměr gradientů na základě všech daných vzorků. *? Nemyslíte si ‚, že toto tvrzení je nesprávné kvůli aktualizaci vah v každém kroku?
- @Media Máte pravdu. ‚ Odstranil jsem poslední odstavec. Děkuji.
Odpověď
Dávkový přechod pro mě připomíná přechod přechodu na chudý. V chudém přechodu je zvolena velikost dávky, takže každý parametr, který má být aktualizován, se také v dávce mění nezávisle, ale ne nutně ortogonálně. Pokud například dávka obsahuje 10 experimentů, 10 řádků, je možné vytvořit nezávislé sloupce $ 2 ^ {10-1} = 512 $. 10 řádků umožňuje nezávislou, ale ne ortogonální aktualizaci 512 parametrů.