Articles

porozumění neuronovým sítím 2: Matematika neuronových sítí ve 3 rovnicích

v první části této série jsme diskutovali o konceptu neuronové sítě a také o matematice popisující jeden neuron. Existuje však mnoho neuronů v jedné vrstvě a mnoho vrstev v celé síti, takže musíme přijít s obecnou rovnicí popisující neuronovou síť.

jeden neuron

první věc, kterou naše síť musí udělat, je předat informace vpřed vrstvami. Už víme, jak to udělat pro jeden neuron:

výstupem neuronu je aktivační funkce váženého součtu vstupu neuronu

2 neurony

Nyní můžeme použít stejnou logiku, když máme 2 neurony ve druhé vrstvě.

v tomto příkladu je každý neuron první vrstvy připojen ke každému neuronu druhé vrstvy, tento typ sítě se nazývá plně připojená síť. Neuron Y1 je spojen s neurony X1 a X2 s váhami W11 a W12 a neuron Y2 je spojen s neurony X1 a X2 s váhami W21 a W22. V této notaci první index hmotnosti označuje výstupní neuron a druhý index označuje vstupní neuron, takže například W12 je hmotnost při připojení od X2 do Y1. Nyní můžeme napsat rovnice pro Y1 a Y2:

nyní lze tuto rovnici vyjádřit pomocí násobení matice.

vizualizace násobení matic z http://matrixmultiplication.xyz/

pokud jste novým maticovým násobením a lineární algebrou, což vás zmátlo, vřele doporučuji řadu lineární algebry 3blue1brown.

nyní můžeme zapsat výstup prvního neuronu jako Y1 a výstup druhého neuronu jako Y2. To nám dává následující rovnici:

celá vrstva

z toho můžeme abstrahovat obecné pravidlo pro výstup vrstvy:

v této rovnici jsou všechny proměnné matice a znaménko násobení představuje násobení matice.

použití matice v rovnici nám umožňuje zapsat ji v jednoduché formě a činí ji pravdivou pro libovolný počet vstupů a neuronů na výstupu.

v programování neuronových sítí používáme také násobení matic, protože nám to umožňuje paralelní výpočty a používat pro ně efektivní hardware, jako jsou grafické karty.

nyní máme rovnici pro jednu vrstvu, ale nic nám nebrání vzít výstup této vrstvy a použít ji jako vstup do další vrstvy. To nám dává obecnou rovnici popisující výstup každé vrstvy neuronové sítě. Ještě jedna věc, kterou musíme přidat, je aktivační funkce, vysvětlím, proč potřebujeme aktivační funkce v další části série, prozatím si můžete myslet jako způsob, jak škálovat výstup, takže se nestane příliš velkým nebo příliš nevýznamným.

pomocí této rovnice můžeme šířit informace prostřednictvím tolika vrstev neuronové sítě, kolik chceme. Ale bez učení, neuronová síť je jen množina náhodných maticových násobení, která nic neznamená.

jak tedy učit naši neuronovou síť? Nejprve musíme vypočítat chybu neuronové sítě a přemýšlet, jak tuto chybu předat všem vrstvám.

2: předání šíření chyb

abychom pochopili algoritmus šíření chyb, musíme se vrátit k příkladu s 2 neurony v první vrstvě a 1 neuronem ve druhé vrstvě.

předpokládejme, že Y vrstva je výstupní vrstva sítě a Y1 neuron by měl vrátit nějakou hodnotu. Nyní se tato hodnota může trochu lišit od očekávané hodnoty, takže na neuronu Y1 je nějaká chyba. Tuto chybu můžeme považovat za rozdíl mezi vrácenou hodnotou a očekávanou hodnotou. Známe chybu na Y1, ale musíme tuto chybu předat do spodních vrstev sítě, protože chceme, aby se všechny vrstvy naučily, nejen y vrstva. Jak tedy tuto chybu předat X1 a X2? Naivní přístup by byl rozdělit chybu Y1 rovnoměrně, protože ve vrstvě X jsou 2 neurony, mohli bychom říci, že chyba X1 i X2 se rovná chybě Y1 vymyšlené 2.

Existuje však velký problém s tímto přístupem-neurony mají různé váhy spojené s nimi. Pokud je hmotnost připojená k neuronu X1 mnohem větší než hmotnost připojená k neuronu X2, chyba na Y1 je mnohem více ovlivněna X1, protože Y1 = (X1 * W11 + X2 * X12). Takže pokud je W11 větší než W12, měli bychom předat více chyby Y1 neuronu X1, protože to je neuron, který k tomu přispívá.

Nyní, když jsme to pozorovali, můžeme aktualizovat náš algoritmus, abychom chybu nerozdělili rovnoměrně, ale rozdělili ji podle poměru hmotnosti vstupního neuronu na všechny hmotnosti přicházející do výstupního neuronu.

aktualizujte hmotnost

Nyní můžeme jít o krok dále a analyzovat příklad, kde je ve výstupní vrstvě více než jeden neuron.

v tomto příkladu vidíme, že např. neuron X1 přispívá nejen k chybě Y1, ale také k chybě Y2 a tato chyba je stále úměrná jeho váhám. Takže v rovnici popisující chybu X1 potřebujememít jak chybu Y1 vynásobenou poměrem hmotností, tak chybu Y2 vynásobenou poměrem hmotností přicházejících k Y2.

tuto rovnici lze také zapsat ve formě násobení matice.

nyní je tu ještě jeden trik, který můžeme udělat, abychom tuto nabídku zjednodušili, aniž bychom ztratili mnoho relevantních informací. Jmenovatel hmotnostního poměru působí jako normalizační faktor, takže se o něj tolik nestaráme, částečně proto, že v konečné rovnici budeme mít jiné prostředky regulace učení neuronové sítě.

to je také další pozorování, které můžeme udělat. Vidíme, že matice s hmotností v této rovnici je docela podobná matici z algoritmu forward forward. Rozdíl je v tom, že řádky a sloupce jsou přepnuty. V algebře nazýváme tuto transpozici matice.

protože není třeba používat 2 různé proměnné, můžeme použít stejnou proměnnou z algoritmu forward forward. To nám dává obecnou rovnici algoritmu zpětného šíření

Všimněte si, že v algoritmu feed-forward jsme šli tvořit první vrstvu na poslední, ale v zpětném šíření budeme tvořit poslední vrstvu sítě na první, protože pro výpočet chyby v dané vrstvě potřebujeme informace o chybě v další vrstvě.

trendy AI články:

1. Jak jsem použil strojové učení jako inspiraci pro fyzické obrazy

2. MS nebo Startup Job-kudy jít budovat kariéru v hlubokém učení?

3. TOP 100 střední články související s umělou inteligencí

4. Konference umělé inteligence

Nyní, když víme, jak předat informace dopředu a předat chybu zpět, můžeme použít chybu v každé vrstvě k aktualizaci hmotnosti.

3: Aktualizace závaží

Nyní, když víme, jaké chyby dělá neuronová síť v každé vrstvě, můžeme konečně začít učit naši síť, abychom našli nejlepší řešení problému.

ale jaké je nejlepší řešení?

chyba nás informuje o tom, jak špatné jsou naše řešení, takže samozřejmě nejlepším řešením by bylo řešení, kde je chybová funkce minimální.

chybová funkce závisí na hmotnosti sítě, takže chceme najít takové váhy, které mají za následek globální minimum ve funkci chyby. Všimněte si, že tento obrázek je pouze pro účely vizualizace. V reálných aplikacích máme více než 1 hmotnost, takže chybová funkce je vysoce dimenzionální funkce.

ale jak najdeme minimum této funkce? Jednoduchým nápadem je začít s náhodnými váhami, vypočítat chybovou funkci pro tyto váhy a poté zkontrolovat sklon této funkce, aby šla z kopce.

ale jak poznáme sklon funkce?

můžeme opět použít lineární algebru a využít fakt, že derivace funkce v daném bodě je rovna sklonu funkce v tomto bodě. Tuto derivaci můžeme napsat následujícím způsobem:

kde E je naše chybová funkce a W představuje váhy. Tato notace nás informuje, že chceme najít derivaci chybové funkce s ohledem na hmotnost. Používáme n + 1 V s chybou, protože v našem zápisu výstup neuronové sítě po váhách Wn je na+1.

pak můžeme použít tuto derivaci k aktualizaci hmotnosti:

to představuje“ jít z kopce “ každé učení iterace (epocha) aktualizujeme váhu podle sklonu derivace chybové funkce.

před předložením konečné rovnice potřebujeme ještě jednu věc, a to je míra učení. Rychlost učení reguluje, jak velké kroky podnikáme během sjezdu.

jak můžete vidět s větší mírou učení, podnikáme větší kroky. To znamená, že se můžeme dostat k optimu funkce rychleji, ale je zde také struhadlo šance, že nám bude chybět.

s menší mírou učení podnikáme menší kroky, což má za následek potřebu více epoch k dosažení minima funkce, ale existuje menší šance, že nám chybí.

proto v praxi často používáme rychlost učení, která je závislá na předchozích krocích, např. pokud existuje silný trend jít jedním směrem, můžeme podniknout větší kroky (větší míra učení), ale pokud se směr stále mění, měli bychom podniknout menší kroky (menší míra učení), abychom hledali minimum lépe. V našem příkladu však použijeme jednoduchý přístup a použijeme pevnou hodnotu rychlosti učení. To nám dává následující rovnici.

míra učení (Lr) je číslo v rage 0-1. Čím menší je, tím menší je změna hmotnosti. Pokud se učení blíží 1. používáme plnou hodnotu derivátu k aktualizaci závaží a pokud je blízko 0, používáme pouze malou část. To znamená, že rychlost učení, jak název napovídá, reguluje, kolik se síť “ učí “ v jedné iteraci.

aktualizace závaží byla konečná rovnice, kterou jsme potřebovali v naší neuronové síti. Jsou to rovnice, které jsou zodpovědné za skutečné učení sítě a za její výuku, aby místo náhodných hodnot poskytovaly smysluplný výstup.

dávat to všechno dohromady

Feed-forward

zpět-propagace

aktualizace závaží

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.