Základy AI

Co je Gradient Descent?

mm
Přidejte Unite.AI mezi své preferované zdroje na Google

Co je Gradient Descent?

Pokud jste četli o tom, jak jsou trénovány neuronové sítě, jste téměř jistě narazili na termín “gradient descent” dříve. Gradient descent je primární metoda optimalizace výkonu neuronové sítě, snižující chybu/selhání sítě. Gradient descent však může být pro ty, kteří jsou noví v oblasti strojového učení, trochu těžké pochopit, a tento článek se bude snažit vám dát dobré pochopení toho, jak gradient descent funguje.

Gradient descent je algoritmus optimalizace. Používá se ke zlepšení výkonu neuronové sítě provedením úprav parametrů sítě, aby se minimalizovala chyba mezi předpověďmi sítě a skutečnými/expected hodnotami sítě (označované jako chyba). Gradient descent bere počáteční hodnoty parametrů a používá operace založené na kalkulu k úpravě jejich hodnot směrem k hodnotám, které budou dělat síť co nejpreciznější. Není nutné znát mnoho kalkulu, aby se pochopilo, jak gradient descent funguje, ale je nutné mít pochopení gradientů.

Co jsou Gradients?

Předpokládejme, že existuje graf, který reprezentuje množství chyby, kterou neuronová síť dělá. Spodní část grafu reprezentuje body s nejnižší chybou, zatímco horní část grafu je tam, kde je chyba nejvyšší. Chceme se pohybovat ze špičky grafu dolů k základně. Gradient je pouze způsob, jak kvantifikovat vztah mezi chybou a váhami neuronové sítě. Vztah mezi těmito dvěma věcmi může být graficky znázorněn jako sklon, s nesprávnými váhami produkujícími více chyby. Strmost sklonu/gradientu reprezentuje, jak rychle se model učí.

Strmější sklon znamená velké snížení chyby a model se učí rychle, zatímco pokud je sklon nulový, model je na plošině a neučí se. Můžeme se pohybovat dolů po sklonu směrem k menší chybě tím, že vypočítáme gradient, směr pohybu (změna parametrů sítě) pro náš model.

Přepneme metaforu trochu a představme si řadu kopců a údolí. Chceme se dostat na dno kopce a najít část údolí, která reprezentuje nejnižší chybu. Když začneme na vrcholu kopce, můžeme udělat velké kroky dolů po kopci a být si jisti, že se pohybujeme směrem k nejnižšímu bodu v údolí.

Jenže, jak se blížíme k nejnižšímu bodu v údolí, naše kroky musí být menší, nebo bychom mohli přeskočit skutečný nejnižší bod. Podobně je možné, že při úpravě váhy sítě, úpravy mohou skutečně vést k tomu, že se síť dostane dále od bodu nejnižší chyby, a proto úpravy musí být menší s časem. V kontextu sestupu z kopce směrem k bodu nejnižší chyby, gradient je vektor/instrukce, které nám říkají, jakou cestu máme zvolit a jak velké kroky máme udělat.

Nyní, když víme, že gradienty jsou instrukce, které nám říkají, kterým směrem se máme pohybovat (které koeficienty mají být aktualizovány) a jak velké kroky máme udělat (jak moc mají být koeficienty aktualizovány), můžeme prozkoumat, jak se gradient vypočítává.

Výpočet Gradientů & Gradient Descent

Gradient descent začíná v místě s vysokou chybou a prostřednictvím několika iterací, dělá kroky ve směru nejnižší chyby, snažící se najít optimální konfiguraci váhy. Foto: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Abychom provedli gradient descent, musíme nejprve vypočítat gradienty. K výpočtu gradientu potřebujeme znát funkci chyby/ceny. Použijeme funkci ceny k určení derivace. V kalkulu derivace prostě označuje sklon funkce v daném bodě, takže vlastně jen vypočítáme sklon kopce na základě funkce chyby. Určíme chybu tím, že provedeme koeficienty funkcí chyby. Pokud funkci chyby označíme jako “f”, můžeme říci, že rovnice pro výpočet chyby je následující (prostě provedeme koeficienty naší zvolené funkce ceny):

Chyba = f(koeficient)

Pak vypočítáme derivaci, nebo určíme sklon. Získání derivace chyby nám řekne, kterým směrem je nahoru nebo dolů po sklonu, tím, že nám poskytne příslušný znak pro úpravu našich koeficientů. Označíme příslušný směr jako “delta”.

delta = derivative_function(chyba)

Nyní jsme určili, kterým směrem je dolů po sklonu směrem k bodu nejnižší chyby. To znamená, že můžeme aktualizovat koeficienty v parametrech sítě a doufáme, že snížíme chybu. Aktualizujeme koeficienty na základě předchozích koeficientů minus příslušná změna hodnoty, jak je určeno směrem (delta) a argumentem, který kontroluje velikost změny (velikost našeho kroku). Argument, který kontroluje velikost aktualizace, se nazývá “learning rate” a označíme ho jako “alpha”.

koeficient = koeficient – (alpha * delta)

Pak prostě opakujeme tento proces, dokud síť nekonverguje kolem bodu nejnižší chyby, který by měl být blízko nule.

Je velmi důležité zvolit správnou hodnotu pro learning rate (alpha). Zvolená hodnota learning rate musí být ani příliš malá, ani příliš velká. Připomeňme si, že když se blížíme k bodu nejnižší chyby, naše kroky musí být menší, nebo bychom mohli přeskočit skutečný bod nejnižší chyby a skončit na druhé straně. Bod nejnižší chyby je malý a pokud je naše míra změny příliš velká, chyba může opět vzrůst. Pokud jsou kroky příliš velké, výkon sítě bude pokračovat v pohybu kolem bodu nejnižší chyby, přeskočením na jedné straně a pak na druhé. Pokud se to stane, síť se nikdy nekonverguje na skutečnou optimální konfiguraci váhy.

Naopak, pokud je learning rate příliš malý, síť může potenciálně trvat velmi dlouho, než se konverguje na optimální váhu.

Typy Gradient Descent

Nyní, když rozumíme, jak gradient descent funguje obecně, pojďme se podívat na některé z různých typů gradient descent.

Batch Gradient Descent: Tento typ gradient descent proběhne všechny trénovací vzorky, než aktualizuje koeficienty. Tento typ gradient descent je pravděpodobně nejvíce výpočetně efektivním typem gradient descent, protože váhy jsou aktualizovány pouze jednou, když je celý batch zpracován, což znamená, že existuje méně aktualizací celkem. Nicméně, pokud dataset obsahuje velké množství trénovacích příkladů, pak batch gradient descent může učinit trénování dlouhou.

Stochastic Gradient Descent: V Stochastic Gradient Descent je zpracován pouze jeden trénovací příklad pro každou iteraci gradient descent a aktualizaci parametrů. To se opakuje pro každý trénovací příklad. Protože je zpracován pouze jeden trénovací příklad, než jsou parametry aktualizovány, tendence konvergovat rychleji než batch gradient descent, protože aktualizace jsou provedeny dříve. Nicméně, protože proces musí být proveden na každém prvku v trénovacím souboru, může to trvat poměrně dlouho, pokud je dataset velký, a proto se upřednostňuje použití jednoho z ostatních typů gradient descent.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent funguje tak, že rozdělí celý trénovací dataset na menší mini-batche. Vytvoří menší mini-batche, které jsou zpracovány sítí, a když je mini-batch zpracován, jsou koeficienty aktualizovány. Mini-Batch Gradient Descent nachází střední cestu mezi Stochastic Gradient Descent a Batch Gradient Descent. Model je aktualizován častěji než v případě Batch Gradient Descent, což znamená mírně rychlejší a robustnější konvergenci na optimální parametry modelu. Je také výpočetně efektivnější než Stochastic Gradient Descent

Blogger a programátor se specializací na Machine Learning a Deep Learning témata. Daniel doufá, že pomůže ostatním využít sílu AI pro sociální dobro.