Používám Python Keras package
pro neuronovou síť. Toto je odkaz . Je batch_size
roven počtu zkušebních vzorků? Z Wikipedie máme toto informace:
V jiných případech však vyhodnocení součtu gradientu může vyžadovat nákladné vyhodnocení přechodů ze všech funkcí součtu. Když je tréninková sada enormní a neexistují žádné jednoduché vzorce, vyhodnocení součtů přechodů se stává velmi nákladným, protože vyhodnocení přechodu vyžaduje vyhodnocení všech přechodových funkcí součtu. Chcete-li ušetřit výpočetní náklady při každé iteraci, stochastický gradientní sestup vzorkuje podmnožinu součtových funkcí na každém kroku. To je velmi účinné v případě rozsáhlých problémů se strojovým učením.
Výše uvedené informace popisují testovací data? Je to stejné jako batch_size
v KERAS (počet vzorků na aktualizaci přechodu)?
Komentáře
- Je ‚ dobré vidět class.coursera.org/ml-005/lecture/preview kurz, zejména pro týden 4-6 + 10. Wikipedia nemusí být tak cenným zdrojem pro učení neuronových sítí.
Odpověď
Velikost dávky definuje počet vzorků, které budou šířeny sítí.
Například , řekněme, že máte 1050 tréninkových vzorků a chcete nastavit batch_size
rovnou 100. Algoritmus vezme prvních 100 vzorků (od 1. do 100.) z tréninkové datové sady a trénuje síť. Dále vezme druhých 100 vzorků (od 101. do 200.) a znovu trénuje síť. Tento postup můžeme provádět, dokud nepropagujeme všechny vzorky sítí. P s poslední sadou vzorků se může stát roblem. V našem příkladu jsme použili 1050, které není dělitelné 100 beze zbytku. Nejjednodušším řešením je získat konečných 50 vzorků a trénovat síť.
Výhody použití velikosti dávky < počet všech vzorků:
-
Vyžaduje méně paměti. Jelikož trénujete síť pomocí méně vzorků, vyžaduje celková procedura tréninku méně paměti. „Je to obzvláště důležité, pokud nejste schopni vejít do paměti celého souboru dat do paměti vašeho počítače.
-
Sítě se obvykle trénují rychleji s minidávkami. Je to proto, že aktualizujeme váhy po každém šíření. V našem příkladu jsme „rozmnožili 11 dávek (10 z nich mělo 100 vzorků a 1 50 vzorků) a po každé z nich jsme„ aktualizovali parametry naší sítě. Pokud bychom během šíření použili všechny vzorky, provedli bychom pouze 1 aktualizaci pro parametr sítě.
Nevýhody použití velikosti dávky < počtu všech vzorků:
- Čím menší je dávka, tím méně přesný bude odhad gradientu. Na obrázku níže vidíte, že směr minidávkového přechodu (zelená barva) kolísá mnohem více ve srovnání se směrem úplného dávkového přechodu (modrá barva).
Stochastic je jen mini-dávka s batch_size
rovný 1. V takovém případě změní gradient svůj směr ještě častěji než mini-dávkový přechod.
Komentáře
- Ne, ‚ t. Toto je populární technika v neuronových sítích a tuto terminologii můžete vidět v různých knihovnách, knihách a článcích. Chcete zkontrolovat chybu testovacích dat v každé epochě nebo jen ověřit model po tréninku?
- Síť také konverguje rychleji, protože počet aktualizací je značně vyšší. Nastavení velikosti mini dávky je trochu umění, příliš malé a riskujete, že se vaše učení stane příliš stochastickým, rychlejším, ale bude konvergovat na nespolehlivé modely, příliš velké a nebude zapadat do paměti a stále bude trvat věky.
- Znamená to, že
batch_size=<size of dataset>
jsou považovány za online učení, nebo spíšebatch_size=1
? A zůstává toto vše pravdivé i pro RNN? Při použitíbatch_size
v RNN je dávka považována za jakýsi virtuální timestep v tom, že všechny instance v této dávce budou počítány, jako by k nim došlo najednou ? - Když lidé řeknou online učení, mají obvykle na mysli
batch_size=1
. Myšlenkou online učení je, že svůj model aktualizujete, jakmile uvidíte příklad. S větší velikostí dávky to znamená, že si nejprve prohlédnete několik vzorků před provedením aktualizace. V RNN může mít velikost dávky různé významy.Obvykle je ‚ běžné rozdělit tréninkovou sekvenci na okno pevné velikosti (například 10 slov). V takovém případě bude zahrnutí 100 těchto oken během školení znamenat, že mátebatch_size=100
. - @Oleg Melnikov, pokud má vaše poslední dávka podstatně menší velikost (ať ‚ s říká, že by to bylo 1 místo 50), pak by odhad pro gradient byl méně přesný a může to trochu zmást vaše váhy. Na obrázku výše si představte, že provádíte 10 aktualizací s mini dávkou 100 (zelené čáry) a jednou s mini dávkou 1 (červená čára). Což znamená, že v příští epochě může několik prvních iterací začít řešit problém s poslední aktualizací mini dávky 1 z předchozí epochy.
Odpovědět
V terminologii neuronových sítí:
- jedna epoch = jeden průchod vpřed a jeden zpětný průchod všech ukázek tréninku
- velikost dávky = počet příkladů tréninku v jednom průchodu vpřed / vzad. Čím vyšší je velikost dávky, tím více místa v paměti budete potřebovat.
- počet iterací = počet průchodů, každý průchod pomocí [velikost dávky] počet příkladů. Aby bylo jasno, jeden průchod = jeden průchod vpřed + jeden průchod vzad (nepočítáme průchod vpřed a vzad jako dva různé průchody).
Příklad: Pokud máte 1 000 tréninkových příkladů a velikost vaší dávky je 500, bude dokončení 1 epochy trvat 2 iterace.
FYI: Velikost dávky kompromisu vs. počet iterací pro trénování neuronové sítě
Komentáře
- Jaký je však rozdíl mezi pomocí [velikosti dávky] čísel příkladů a trénujte síť v každém příkladu a pokračujte dalšími příklady čísel [velikosti dávky]. Protože předáte jeden příklad sítí a použijete SGD a vezmete si další příklad atd., udělá ne rozdíl, pokud je velikost dávky 10 nebo 1000 nebo 100000. Po [batc h size] počty příkladů jsou hotové, následuje další příklad další dávky. Rozdíl je pouze v tom, jestli [velikost dávky] počty příkladů projdou [počet iterací] krát sítí a poté budou pokračovat další příklady [velikosti dávky].
- Důležitým rozdílem je, že krok učení (jeden krok) se aplikuje jednou pro každou dávku, zatímco musíte procházet všemi dávkami, abyste vytvořili jednu epochu. Rozdíl je tedy také algoritmický nejen v paměti: větší dávky znamenají, že průměrujete gradient více vzorků.
- Jaký je rozdíl mezi epochou a iteracemi ‚ ?
- @Goldname 1 epocha zahrnuje všechny příklady tréninku, zatímco 1 iterace zahrnuje pouze [velikost dávky] počet tréninkových příkladů.
- Takže: Je-li počet epoch konstantní a my ‚ Při vykreslování konvergenčního grafu s každým bodem představujícím výsledek po každé epochě můžeme očekávat, že výsledný graf bude ‚ hladší ‚ (a školení pomalejší), jak snižujeme
batch_size
?
odpověď
Při řešení problému s optimalizací pomocí CPU nebo GPU iterativně použijete Algoritmus na některá vstupní data. V každé z těchto iterací obvykle aktualizujete metriku vašeho problému provedením některých výpočtů na datech. Nyní, když je velikost vašich dat velká, může potřebovat značné množství času na dokončení každé iterace a může spotřebovat spoustu prostředků. Někdy se tedy rozhodnete použít tyto iterativní výpočty na část dat, abyste ušetřili čas a výpočetní zdroje. Tato část je batch_size a proces se nazývá (v Neural Network Lingo) dávkové zpracování dat. Když použijete výpočty na všechna svá data, provedete online zpracování dat. Myslím, že terminologie pochází ze 60. let a ještě dříve. Pamatuje si někdo soubory .bat DOS? Ale koncept se vtělil samozřejmě tak, že znamená vlákno nebo část dat, která mají být použita.
Odpověď
Dokumentaci pro Keras
o velikosti dávky naleznete pod fit
funkce na stránce Modely (funkční API)
batch_size
: Celé číslo nebo Žádné. Počet vzorků na aktualizaci přechodu. Pokud nespecifikováno, batch_size bude mít výchozí hodnotu 32.
Pokud máte malou datovou sadu, bylo by nejlepší, aby se velikost dávky rovnala velikosti tréninková data. Nejprve to zkuste s malou dávkou a poté zvyšte, abyste ušetřili čas. Jak již bylo zmíněno itdxer , dochází k kompromisu mezi přesností a rychlostí.
Odpověď
Velikost dávky je hyperparametr, který definuje počet vzorků, které je třeba zpracovat před aktualizací interních parametrů modelu.