Koncepty hluboké neurální sítě
Než se podíváme na to, jak trénovat model strojového učení hluboké neurální sítě (DNN), podívejme se, čeho se snažíme dosáhnout. Strojové učení se zabývá predikcí popisku na základě některých funkcí určitého pozorování. Model strojového učení je jednoduše funkce, která vypočítá y (popisek) z x (funkce): f(x)=y.
Příklad jednoduché klasifikace
Předpokládejme například, že vaše pozorování se skládá z měření tučňáka.
Konkrétně jsou tato měření:
- Délka tučňákovy faktury.
- Hloubka tučňákovy faktury.
- Délka tučňákova flipperu.
- Tučňák je váhou.
V tomto případě jsou funkce (x) vektorem čtyř hodnot nebo matematicky x=[x1,x 2,x 3,x 4].
Předpokládejme, že popisek, který se snažíme předpovědět (y), je druh tučňáka a že existují tři možné druhy, které by mohly být:
- Adelie
- Gentoo
- Chinstrap
Toto je příklad klasifikačního problému, ve kterém musí model strojového učení předpovědět nejpravděpodobnější třídu, do které patří pozorování. Klasifikační model toho dosahuje predikcí popisku, který se skládá z pravděpodobnosti pro každou třídu. Jinými slovy, y je vektor tří hodnot pravděpodobnosti; jeden pro každou z možných tříd: y=[P(0);P(1);P(2)].
Model strojového učení vytrénujete pomocí pozorování, pro které už znáte skutečný popisek. Můžete mít například následující rozměry funkcí pro vzor Adelie :
x=[37,3, 16,8, 19,2, 30,0]
Už víte, že se jedná o příklad Adelie (třída 0), takže dokonalá klasifikační funkce by měla mít za následek popisek, který označuje 100% pravděpodobnost třídy 0 a 0% pravděpodobnost pro třídy 1 a 2:
y=[1, 0, 0]
Model hluboké neurální sítě
Jak bychom tedy pomocí hlubokého učení vytvořili klasifikační model pro model klasifikace tučňáků? Podívejte se na příklad:
Model hluboké neurální sítě klasifikátoru se skládá z několika vrstev umělých neuronů. V tomto případě existují čtyři vrstvy:
- Vstupní vrstva s neuronem pro každou očekávanou vstupní hodnotu (x).
- Dvě tzv . skryté vrstvy, z nichž každý obsahuje pět neuronů.
- Výstupní vrstva obsahující tři neurony – jednu pro každou hodnotu pravděpodobnosti třídy (y), kterou model predikuje.
Vzhledem k vrstvené architektuře sítě se tento typ modelu někdy označuje jako vícevrstvý perceptron. Kromě toho si všimněte, že všechny neurony ve vstupní a skryté vrstvě jsou propojeny se všemi neurony v následných vrstvách - to je příklad plně připojené sítě.
Když vytvoříte model podobný tomuto, musíte definovat vstupní vrstvu, která podporuje počet funkcí, které bude model zpracovávat, a výstupní vrstva, která odráží počet výstupů, které očekáváte, že se vytvoří. Můžete rozhodnout, kolik skrytých vrstev chcete zahrnout a kolik neuronů jsou v každém z nich; ale nemáte žádnou kontrolu nad vstupními a výstupními hodnotami pro tyto vrstvy – ty jsou určeny procesem trénování modelu.
Trénování hluboké neurální sítě
Trénovací proces hluboké neurální sítě se skládá z několika iterací, označovaných jako epochy. Pro první epochu začnete přiřazením náhodných inicializačních hodnot pro hodnoty hmotnosti (w) a zkreslení b. Proces je následující:
- Funkce pro pozorování dat se známými hodnotami popisků se odesílají do vstupní vrstvy. Obecně se tyto pozorování seskupují do dávek (často se označují jako minidávkové dávky).
- Neurony pak aplikují svou funkci a pokud je aktivované, předají výsledek do další vrstvy, dokud výstupní vrstva nevygeneruje predikci.
- Předpověď se porovná se skutečnou známou hodnotou a vypočítá se množství rozptylu mezi predikovanými a skutečnými hodnotami (které nazýváme ztrátu).
- Na základě výsledků se revidované hodnoty pro váhy a hodnoty předsudků vypočítají, aby se snížila ztráta, a tyto úpravy se vrátí zpět do neuronů v síťových vrstvách.
- Další epocha opakuje dávkové trénování vpřed s revidovanými hodnotami hmotnosti a předsudků, doufáme, že zlepší přesnost modelu (snížením ztráty).
Poznámka:
Zpracování trénovacích funkcí jako dávky zlepšuje efektivitu trénovacího procesu zpracováním více pozorování současně jako matice funkcí s vektory hmotností a předsudků. Lineární algebraické funkce, které pracují s maticemi a vektory, mají také funkci zpracování 3D grafiky, což je důvod, proč počítače s grafickými procesory (GPU) poskytují výrazně lepší výkon pro trénování modelu hlubokého učení než počítače jen s procesorem (CPU).
Bližší pohled na funkce ztráty a zpětné šíření
Předchozí popis procesu trénování hlubokého učení zmínil, že ztráta z modelu se vypočítá a používá k úpravě hodnot hmotnosti a předsudků. Jak přesně to funguje?
Výpočet ztráty
Předpokládejme, že jeden z vzorků předaných procesem trénování obsahuje vlastnosti vzorku Adelie (třída 0). Správný výstup ze sítě by byl [1, 0, 0]. Předpokládejme, že výstup vytvořený sítí je [0.4, 0.3, 0.3]. Porovnáním těchto hodnot můžeme vypočítat absolutní odchylku pro každý prvek (jinými slovy, jak daleko je každá předpovězená hodnota od toho, co by měla být) jako [0,6, 0,3, 0,3].
Vzhledem k tomu, že ve skutečnosti pracujeme s více pozorováními, obvykle agregujeme odchylku – například squaringem jednotlivých hodnot rozptylu a výpočtem střední hodnoty, takže skončíme jednou průměrnou ztrátovou hodnotou, například 0,18.
Optimalizátory
Teď je to chytrý bit. Ztráta se vypočítá pomocí funkce, která pracuje s výsledky z poslední vrstvy sítě, což je také funkce. Poslední vrstva sítě pracuje s výstupy z předchozích vrstev, což jsou také funkce. Takže v podstatě celý model ze vstupní vrstvy přímo do výpočtu ztráty je jen jedna velká vnořená funkce. Funkce mají několik opravdu užitečných vlastností, mezi které patří:
- Funkci můžete konceptualizovat jako vykreslovanou čáru a porovnat její výstup s každou z jejích proměnných.
- Rozdílové výpočty můžete použít k výpočtu derivátu funkce v libovolném bodě s ohledem na jeho proměnné.
Pojďme se podívat na první z těchto funkcí. Můžeme vykreslit čáru funkce, abychom ukázali, jak se jednotlivé hodnoty váhy porovnávají se ztrátou, a na tomto řádku označit bod, kde aktuální hodnota váhy odpovídá aktuální hodnotě ztráty.
Teď použijeme druhou charakteristiku funkce. Odvození funkce pro daný bod označuje, jestli se sklon (nebo přechod) výstupu funkce (v tomto případě ztráta) zvyšuje nebo snižuje s ohledem na proměnnou funkce (v tomto případě hodnota váhy). Pozitivní derivát označuje, že se funkce zvyšuje, a negativní derivát označuje, že se snižuje. V tomto případě má funkce v vykresleném bodě aktuální hodnoty hmotnosti přechod dolů. Jinými slovy, zvýšení hmotnosti bude mít vliv na snížení ztráty.
Optimalizátor používáme k použití stejného triku pro všechny proměnné hmotnosti a předsudků v modelu a určíme, v jakém směru je potřeba upravit (nahoru nebo dolů), aby se snížila celková ztráta v modelu. Existuje několik běžně používaných optimalizačních algoritmů, včetně stochastického gradientního sestupu (SGD), adaptivního učení (ADADELTA), adaptivního odhadu dynamiky (Adam) a dalších. Všechny tyto algoritmy jsou navržené tak, aby se zjistilo, jak upravit váhy a biase, aby se minimalizovala ztráta.
Rychlost učení
Teď je zřejmé, že další otázka je, o kolik by měl optimalizátor upravit váhy a hodnoty předsudků? Pokud se podíváte na graf naší hodnoty hmotnosti, uvidíte, že zvýšení hmotnosti o malé množství bude následovat po řádku funkce dolů (snížení ztráty), ale pokud ji zvýšíme o příliš mnoho, začne se čára funkce znovu zvětšovat, takže bychom mohli skutečně zvýšit ztrátu; a po další epochě můžeme zjistit, že potřebujeme snížit hmotnost.
Velikost úpravy je řízena parametrem, který jste nastavili pro trénování označovanou jako rychlost učení. Nízká míra učení vede k malým úpravám (takže může trvat více epoch, aby se minimalizovala ztráta), zatímco vysoká míra učení vede k velkým úpravám (takže můžete úplně vynechat minimum).