Stochastic vs Mini-batch školení v strojovém učení pomocí Tensorflow a python

V nejjednodušším termínu provádí stochastický výcvik trénink na jednom náhodně vybraném příkladu najednou, zatímco mini-dávkový trénink je výcvik na části celkových příkladů.

Velikost mini-šarže se může lišit v závislosti na velikosti vašich dat. V pozdějším tutoriálu vám ukážu několik osvědčených postupů při výběru dobré velikosti malé dávky.

Poznámka: Budeme implementovat a vizualizovat toto školení pomocí Tensorflow a python. Začněme stochastickým tréninkem.

Stochastický trénink

V tomto příkladu budeme vzorkovat náhodná čísla z normální distribuce se střední hodnotou 1 a směrodatnou odchylkou 0,1. Pak na ni použijeme jednoduchou lineární operaci, tj. Vynásobíme ji proměnnou W, pak použijeme ztrátovou funkci (L2 norma) mezi výstupem a cílem, kterou pro tento příklad nastavíme na konstantu 10.

Dále optimalizujeme naši ztrátu pomocí optimalizačního algoritmu. Optimalizační algoritmy musí vědět, jak daleko v každé iteraci postoupit. Tato vzdálenost je řízena rychlostí učení. Pokud je naše rychlost učení příliš velká, náš algoritmus by mohl překročit minimum a pokud je naše rychlost učení příliš malá, může náš algoritmus trvat příliš dlouho, než se sblíží; to souvisí s problémem mizejícího a explodujícího gradientu.

V níže uvedeném kódu zaškolíme náš model několikrát opakováním algoritmu. Aktualizovaný výsledek vytiskneme pro každou 20. iteraci. Pro trénink použijeme trénink sestupu stochastického gradientu náhodným výběrem hodnoty ze vstupu a cíle a jejich vložením do grafu.

Tensorflow automaticky vypočítá ztrátu a aktualizuje proměnnou W, aby minimalizovala ztrátu.
....................
# Výsledek za posledních šest výtisků
Krok # 75 W = [[0.]]
Ztráta = [2.2099369]
Krok # 80 W = [[0.]]
Ztráta = [0,31921482]
Krok # 85 W = [[0.]]
Ztráta = [0,51661664]
Krok # 90 W = [[0.]]
Ztráta = [0,00483979]
Krok # 95 W = [[0.]]
Ztráta = [2.0451872]
Krok # 100 W = [[0.]]
Ztráta = [0,07890321]

Mini-Batch školení

Provádění minidávkového tréninku se provádí stejným způsobem jako výše, jediným zásadním rozdílem je, že místo jednoho použijeme šarže příkladů školení. Zde vybereme velikost dávky. To je, kolik pozorování dat bude vloženo do výpočetního grafu jednou.

Dále deklarujeme data, proměnné a placholdery. Kvůli velikosti šarže z nich uděláme 2 rozměrné.

První dimenze bude držet velikost dávky, nyní ji nastavíme na „Žádná“. „Žádný“ je jednoduše zástupný symbol, což znamená, že může přijmout jakoukoli dimenzi později, zatímco druhá dimenze je počet prvků / bodů, které konkrétní data mají.

A nakonec přidáme naši operaci do grafu.

Poznámka: Operace bude nyní násobením matic namísto pravidelného násobení, protože vektorizujeme více vzorků najednou.

Nezapomeňte, že násobení matic není komutativní, takže musíme do funkce matmul () Tensorflow zadat matice ve správném pořadí.

Protože provádíme aktualizaci dávky, naše funkce ztráty (v tomto případě norma L2) se změní, protože musíme průměrovat všechny ztráty L2 každého datového bodu v dávce. Děláme to tak, že zabalíme naši normální funkci ztráty L2 do funkce Tensorflowova redu_mean ():

Nakonec definujeme naši tréninkovou smyčku a iterujeme krok tréninku, abychom optimalizovali algoritmus. Zde uložíme výsledné ztráty za každých 20 intervalů do seznamu, abychom mohli vykreslit a porovnat výsledek se stochastickým výcvikem.

....................
# Výsledek za posledních pět výtisků.
Krok # 80 W = [[9.511334]]
Ztráta = 2,1 000686
Krok # 85 W = [[9.578172]]
Ztráta = 1,021298
Krok # 90 W = [[9.592099]]
Ztráta = 0,54921734
Krok # 95 W = [[9.635986]]
Ztráta = 0,8693684
Krok # 100 W = [[9.696052]]
Ztráta = 0,9552757

Abychom viděli, jak se konvergence liší mezi oběma metodami tréninku, chystáme se vykreslit mini-dávkovou ztrátu proti stochastické ztrátě.

Z výše uvedeného grafu si všimnete, že mini-dávková ztráta je plynulá, zatímco stochastický spiknutí je hlučné.

Obecně se stochastické školení může snadno vyhnout místním minimům kvůli náhodnosti každého vstupu, ale obecně trvá delší dobu, než se konverguje, zatímco mini-dávkové školení najde minimum rychle, ale může vyžadovat více výpočetní síly, pokud je vybraná velikost dávky velká. V pozdějším tutoriálu se podělím o několik tipů, jak vybrat nejlepší velikost dávky.

Tady to máš! Stochastické vs Mini-šarže školení

Side Note: Batch training je prostě trénink na všechny vaše příklady najednou. Obvykle se doporučuje, pokud máte méně než 1000 příkladů.

Můžete si prohlédnout celý notebook Jupyter tohoto a dalšího tutoriálu na githubu

Neváhejte se mě na něco zeptat - najděte mě na Twitteru, Instagramu