Módne tendencie a trendy.  Doplnky, topánky, krása, účesy

Módne tendencie a trendy. Doplnky, topánky, krása, účesy

» Algoritmus na trénovanie viacvrstvovej neurónovej siete pomocou metódy spätného šírenia. Algoritmus spätného šírenia

Algoritmus na trénovanie viacvrstvovej neurónovej siete pomocou metódy spätného šírenia. Algoritmus spätného šírenia

Algoritmus spätné šírenie chyby (algoritmus spätného šírenia)

Synonymá: BackProp Algorithm, Back Propagation Algorithm, BackProp

Prihlasovacie meno: Neurónová sieť (klasifikácia) (procesor), Neurónová sieť (regresia) (procesor)

Algoritmus spätného šírenia je populárny algoritmus na trénovanie dopredných neurónových sietí s plochou vrstvou (viacvrstvové perceptróny). Vzťahuje sa na metódy učenia pod dohľadom, takže vyžaduje, aby boli v príkladoch školenia stanovené cieľové hodnoty. Je to tiež jeden z najznámejších algoritmov strojového učenia.

Myšlienka algoritmu je založená na použití výstupnej chyby neurónovej siete:

na výpočet korekčných hodnôt pre váhy neurónov v jej skrytých vrstvách, kde je počet výstupných neurónov v sieti, je cieľová hodnota a je skutočná výstupná hodnota. Algoritmus je iteračný a využíva princíp učenia krok za krokom (on-line učenie), keď sa váhy neurónov siete upravia po tom, čo sa na jeho vstup privedie jeden príklad tréningu.

Pri každej iterácii existujú dva prechody siete - dopredu a dozadu. Na priamej linke sa vstupný vektor šíri zo vstupov siete na jej výstupy a tvorí nejaký výstupný vektor zodpovedajúci aktuálnemu (skutočnému) stavu váh. Potom sa chyba neurónovej siete vypočíta ako rozdiel medzi skutočnými a cieľovými hodnotami. Pri spätnom priechode sa táto chyba šíri zo sieťového výstupu na jej vstupy a váhy neurónov sú opravené v súlade s pravidlom:

kde je váha i-té spojenie j-tý neurón, - parameter rýchlosti učenia, ktorý umožňuje dodatočne kontrolovať hodnotu korekčného kroku za účelom presnejšieho nastavenia na minimálnu chybu a je vybraný experimentálne v procese učenia (zmeny v rozsahu od 0 do 1 ).

Vzhľadom na to, že výstupný súčet j-tého neurónu je rovný

dá sa to ukázať

Z posledného vyjadrenia vyplýva, že diferenciál aktivačnej funkcie sieťových neurónov musí existovať a nesmie byť v žiadnom bode rovný nule, t.j. aktivačná funkcia musí byť rozlíšiteľná na celom číselnom rade. Preto sa na aplikáciu metódy spätného šírenia používajú sigmoidálne aktivačné funkcie, ako je logistická alebo hyperbolická tangenta.

Algoritmus teda využíva takzvaný stochastický zostup gradientu, ktorý sa "pohybuje" vo viacrozmernom váhovom priestore v smere antigradientu, aby sa dosiahlo minimum chybovej funkcie.

V praxi sa v trénovaní pokračuje až vtedy, keď sa sieť doladí na minimum chybovej funkcie, ale kým sa nedosiahne jej dostatočne presná aproximácia. To na jednej strane zníži počet opakovaní školení a na druhej strane sa vyhne preškoleniu siete.

V súčasnosti bolo vyvinutých mnoho modifikácií algoritmu spätného šírenia. Napríklad učenie sa nepoužíva „po krokoch“, keď sa počíta výstupná chyba a váhy sa opravujú pre každý príklad, ale „po epochách“ v režime off-line, keď sa váhy menia po všetkých príkladoch tréningu. súbor sa privádza na sieťový vstup a chyba sa spriemeruje pre všetky príklady.

Tréning založený na epochách je robustnejší voči odľahlým a odľahlým hodnotám cieľovej premennej spriemerovaním chyby v mnohých príkladoch. Zároveň sa však zvyšuje pravdepodobnosť, že sa algoritmus zasekne v lokálnych minimách. Toto je menej pravdepodobné, že sa to stane pri postupnom učení, pretože použitie jednotlivých príkladov vytvára „šum“, ktorý „vytláča“ algoritmus z jamiek svahovitého terénu.

Výhody algoritmu spätného šírenia zahŕňajú jednoduchosť implementácie a odolnosť voči anomáliám a odľahlým hodnotám v údajoch. Medzi nevýhody patrí:

  • nekonečne dlhý proces učenia:
  • možnosť „paralýzy siete“, keď veľké hodnoty ukáže sa, že pracovný bod aktivačnej funkcie je v oblasti saturácie sigmatu a derivácia vo výraze (1) sa priblíži k 0 a korekcia hmotnosti prakticky nenastane a proces učenia „zamrzne“;
  • zraniteľnosť algoritmu spadať do lokálnych miním chybovej funkcie.

Algoritmus bol prvýkrát opísaný v roku 1974.

Metóda spätného šírenia

Metóda spätného šírenia je viacvrstvová metóda učenia perceptrónu, jedna z možností učenia pod dohľadom. Túto metódu prvýkrát opísal Paul J. Verbos. Ďalej podstatne vyvinutý v roku 1986 Davidom I. Rumelhartom, J. E. Hintonom a Ronaldom J. Williamsom. Ide o iteračný gradientový algoritmus, ktorý sa používa na minimalizáciu chyby viacvrstvového perceptrónu a získanie požadovaného výstupu.

Hlavnou myšlienkou tejto metódy je šírenie chybových signálov zo sieťových výstupov na jej vstupy v opačnom smere, ako je dopredné šírenie signálov pri normálnej prevádzke. Bartsev a Okhonin okamžite navrhli všeobecnú metódu („princíp duality“) použiteľnú na širšiu triedu systémov vrátane systémov s oneskorením, distribuovaných systémov atď.

Metóda je modifikáciou klasickej metódy gradientového zostupu.

Algoritmus spätného šírenia

Povedzme, že máme viacvrstvovú doprednú sieť s náhodnými váhami. Existuje určitá trénovacia súprava pozostávajúca zo sieťových vstupov a požadovaných výstupných párov. Označme Y skutočnú výstupnú hodnotu našej siete, ktorá je na začiatku takmer náhodná kvôli náhodnosti váh.

Učenie spočíva vo výbere váhových koeficientov tak, aby sa minimalizovala nejaká objektívna funkcia. Ako objektívnu funkciu zvážte súčet štvorcových chýb siete pomocou príkladov z trénovacej množiny.

kde je skutočný výstup N-tej výstupnej vrstvy siete pre p-tý neurón na j-tom príklade tréningu, požadovaný výstup. To znamená, že minimalizáciou takéhoto funkcionálu získame riešenie metódou najmenších štvorcov.

Keďže váhové koeficienty vstupujú do závislosti nelineárne, na nájdenie minima použijeme metódu najstrmšieho zostupu. To znamená, že pri každom tréningovom kroku budeme meniť váhové koeficienty podľa vzorca

kde váhový koeficient j-tého neurónu n-tej vrstvy pre spojenie s i-tý neurón(n-1)-tá vrstva.

Parameter sa nazýva parameter rýchlosti učenia.

Preto je potrebné určiť parciálne derivácie účelovej funkcie E vzhľadom na všetky váhové koeficienty siete. Podľa pravidiel pre diferenciáciu komplexnej funkcie

kde je výstup a je vážený súčet vstupov j-tého neurónu n-tej vrstvy. Všimnite si, že ak poznáme aktivačnú funkciu, môžeme vypočítať. Napríklad pre sigmoid sa táto hodnota bude rovnať

Tretí faktor / nie je nič iné ako výstup i-tej neurónovej (n-1)-tej vrstvy, tzn

Čiastočné derivácie objektívnej funkcie vzhľadom na váhy neurónov vo výstupnej vrstve sa teraz dajú jednoducho vypočítať. Diferencovanie (1) vzhľadom na a pri zohľadnení (3) a (5) máme

Zavádzame notáciu

Potom pre neuróny výstupnej vrstvy

Pre váhové koeficienty neurónov vnútorných vrstiev nemôžeme hneď zapísať, čomu sa rovná prvý faktor z (4), ale možno ho znázorniť takto:

Všimnite si, že v tomto vzorci prvé dva faktory nie sú ničím iným. Pomocou (9) je teda možné vyjadriť hodnoty pre neuróny n-tej vrstvy ako neuróny (n + 1). Keďže pre poslednú vrstvu je ľahké vypočítať podľa (8), je možné použiť rekurzívny vzorec

získať hodnoty pre míľnikové neuróny všetkých vrstiev.

Nakoniec vzorec (2) na úpravu váhových koeficientov možno zapísať ako

Kompletný algoritmus na trénovanie neurónovej siete pomocou algoritmu spätného šírenia je teda zostavený nasledovne.

Všetkým sieťovým váham priraďujeme náhodné počiatočné hodnoty. V tomto prípade sieť vykoná určitú náhodnú transformáciu vstupných signálov a hodnoty cieľovej funkcie (1) budú veľké.

Do sieťového vstupu odošlite jeden zo vstupných vektorov z trénovacej množiny. Vypočítajte výstupné hodnoty siete a zapamätajte si výstupné hodnoty každého z neurónov.

Upravte váhy siete:

Hodnotenie siete

V prípadoch, keď je možné vyhodnotiť výkon siete, môže byť trénovanie neurónových sietí reprezentované ako optimalizačný problém. Hodnotiť – znamená kvantifikovať, či sieť plní svoje úlohy dobre alebo zle. Na tento účel je vytvorená hodnotiaca funkcia. Spravidla to explicitne závisí od výstupných signálov siete a implicitne (prostredníctvom prevádzky) - od všetkých jej parametrov. Najjednoduchším a najbežnejším príkladom odhadu je súčet štvorcových vzdialeností od výstupných signálov siete k ich požadovaným hodnotám:

kde je požadovaná hodnota výstupného signálu.

Metóda najmenších štvorcov nie je vždy najlepšia voľba odhady. Starostlivý návrh hodnotiacej funkcie umožňuje rádovo zvýšiť efektivitu trénovania siete, ako aj získať ďalšie informácie – „úroveň spoľahlivosti“ siete v danej odpovedi.

Nevýhody algoritmu

Napriek početným úspešné aplikácie backpropagation, to nie je všeliek. Väčšina problémov prináša nekonečne dlhý proces učenia. V zložitých úlohách môže trvať niekoľko dní alebo dokonca týždňov, kým sa sieť natrénuje, alebo sa nemusí učiť vôbec. Dôvodom môže byť jeden z nasledujúcich.

Sieťová paralýza

V procese trénovania siete sa hodnoty váh môžu stať veľmi veľkými hodnotami v dôsledku korekcie. To môže viesť k tomu, že všetky alebo väčšina neurónov bude pracovať pri veľmi vysokých hodnotách OUT v oblasti, kde je derivácia funkcie stláčania veľmi malá. Keďže chyba odoslaná späť v procese učenia je úmerná tejto derivácii, proces učenia môže takmer zamrznúť. Z teoretického hľadiska je tento problém zle pochopený. Tomu sa zvyčajne predíde zmenšením kroku 3, ale tým sa predĺži čas tréningu. Na prevenciu alebo zotavenie sa z paralýzy boli použité rôzne heuristiky, ale zatiaľ ich možno považovať len za experimentálne.

Miestne minimá

Spätné šírenie využíva variáciu zostupu gradientu, to znamená, že klesá po chybovom povrchu, pričom sa priebežne prispôsobujú váhy smerom k minimu. Chybový povrch komplexnej siete je vysoko členitý a pozostáva z kopcov, údolí, záhybov a roklín vo vysokorozmernom priestore. Sieť môže spadnúť do miestneho minima (plytké údolie), keď je v blízkosti oveľa hlbšie minimum. V bode lokálneho minima vedú všetky smery nahor a sieť sa z toho nevie dostať. Hlavnou ťažkosťou pri trénovaní neurónových sietí sú práve metódy vymanenia sa z lokálnych miním: pri každom opustení lokálneho minima sa opäť hľadá ďalšie lokálne minimum tou istou metódou spätného šírenia chýb, až kým už nie je možné nájsť cestu. von z toho.

Veľkosť kroku

Dôkladná analýza dôkazu konvergencie ukazuje, že korekcie hmotnosti sa považujú za nekonečne malé. Je jasné, že to v praxi nie je možné, pretože to vedie k nekonečnému času učenia. Veľkosť kroku by sa mala brať ako konečná. Ak je veľkosť kroku pevná a veľmi malá, konvergencia je príliš pomalá, ak je fixná a príliš veľká, môže dôjsť k paralýze alebo trvalej nestabilite. Je efektívne zvyšovať krok, kým sa zlepšenie odhadu v danom smere antigradientu nezastaví a znižovať, ak k takémuto zlepšeniu nedôjde. P. D. Wasserman opísal adaptívny algoritmus výberu krokov, ktorý automaticky koriguje veľkosť kroku počas procesu učenia. V knihe A. N. Gorbana je navrhnutá rozvetvená technológia na optimalizáciu učenia.

Treba si uvedomiť aj možnosť preškolenia siete, ktorá je skôr výsledkom chybného návrhu jej topológie. Kedy tiež vo veľkom počte neuróny strácajú vlastnosť siete zovšeobecňovať informácie. Sieť sa naučí celú sadu obrázkov poskytnutých na školenie, ale akékoľvek iné obrázky, dokonca aj veľmi podobné, môžu byť klasifikované nesprávne.

Vývojové prostredie a dôvody jeho výberu

Aplikácia bude vyvinutá v programovacom jazyku C# s rámcom .NETFramework4.0 vo vývojovom prostredí MicrosoftVisualStudio 2010. Fragmenty kódu vyžadujúce masívne výpočty sú vyvíjané v C++. MSVisualStudio 2010 obsahuje celý rad nových a vylepšených funkcií, ktoré zjednodušujú každý krok procesu vývoja od návrhu až po nasadenie.

MicrosoftVisualStudio 2010 Ultimate je integrovaná súprava nástrojov a serverová infraštruktúra, ktorá zjednodušuje celkový proces vývoja aplikácií. Na vytváranie obchodných aplikácií sa používajú efektívne, predvídateľné a prispôsobiteľné procesy. Podrobné analýzy zvyšujú transparentnosť a sledovateľnosť všetkého životný cyklus aplikácie. Či už vytvárate nové riešenia alebo zdokonaľujete existujúce, vývoj je k dispozícii s výkonnými nástrojmi na prototypovanie, návrh architektúry a vývojové nástroje, ktoré vám umožňujú vyvíjať aplikácie pre rôzne platformy a technológie, ako je cloud computing a paralelné spracovanie údajov. Pokročilé možnosti koordinácie spoločné aktivity spolu s integrovanými inovatívnymi nástrojmi na testovanie a ladenie zvýšia produktivitu tímu a vytvoria vysokokvalitné a lacné riešenia.

Vývoj aplikácií v MicrosoftVisualStudio2010 Ultimate v C# s .NETFramework4.0 sa vykonáva pomocou objektovo orientovaného programovania a vizuálneho programovania.

Algoritmus spätného šírenia je jednou z metód na trénovanie viacvrstvových dopredných neurónových sietí, nazývaných tiež viacvrstvové perceptróny. Viacvrstvové perceptróny sa úspešne používajú na riešenie mnohých zložitých problémov.

Tréning pomocou algoritmu spätného šírenia chýb zahŕňa dva prechody cez všetky vrstvy siete: dopredu a dozadu. Pri doprednom priechode je vstupný vektor privádzaný do vstupnej vrstvy neurónovej siete, po ktorej sa šíri cez sieť z vrstvy na vrstvu. V dôsledku toho sa generuje súbor výstupných signálov, čo je skutočná odozva siete na daný vstupný obraz. Počas prechodu dopredu sú všetky synaptické váhy siete fixné. Počas spätného prechodu sa všetky synaptické váhy upravia v súlade s pravidlom korekcie chýb, konkrétne: skutočný sieťový výstup sa odpočíta od požadovaného, ​​čo vedie k chybovému signálu. Tento signál sa následne šíri sieťou v smere opačný smer synaptické spojenia. Odtiaľ názov - algoritmus spätného šírenia. Synaptické váhy sú vyladené tak, aby bol výstup siete čo najbližšie k požadovanému.

Pozrime sa podrobnejšie na fungovanie algoritmu. Povedzme, že potrebujeme trénovať nasledujúcu neurónovú sieť pomocou algoritmu backpropagation:

Na obrázku nižšie sú použité nasledujúce konvencie:

Ako aktivačná funkcia vo viacvrstvových perceptrónoch sa spravidla používa sigmoidálna aktivačná funkcia, najmä logistická:

kde je parameter sklonu sigmoidálnej funkcie. Zmenou tohto parametra je možné konštruovať funkcie s rôznou strmosťou. Urobme si výhradu, že pre všetky následné úvahy bude použitá práve funkcia logistickej aktivácie, reprezentovaná iba vzorcom vyššie.

Sigmoid zužuje rozsah zmeny tak, že hodnota leží medzi nulou a jednotkou. Viacvrstvové neurónové siete majú väčšiu reprezentatívnu silu ako jednovrstvové iba v prítomnosti nelinearity. Funkcia kontrakcie poskytuje požadovanú nelinearitu. V skutočnosti existuje veľa funkcií, ktoré možno použiť. Algoritmus spätného šírenia vyžaduje iba to, aby funkcia bola všade diferencovateľná. Sigmoid spĺňa túto požiadavku. Jeho ďalšou výhodou je automatické ovládanie zisku. Pre slabé signály (t.j. keď sú blízko nule) má vstupno-výstupná krivka silný sklon, čo dáva veľký zisk. Ako sa signál zväčšuje, zisk klesá. Veľké signály teda sieť prijíma bez saturácie a slabé signály prechádzajú sieťou bez nadmerného útlmu.

Cieľ sieťového tréningu Algoritmus spätného šírenia chýb je taká úprava jeho váh, že aplikácia určitej množiny vstupov vedie k požadovanej množine výstupov. Pre stručnosť sa tieto množiny vstupov a výstupov budú nazývať vektory. Počas tréningu sa predpokladá, že pre každý vstupný vektor existuje párový cieľový vektor, ktorý špecifikuje požadovaný výstup. Spolu sa nazývajú tréningový pár. Sieť je trénovaná na mnohých pároch.

Ďalšie:

  1. Inicializujte synaptické váhy s malými náhodnými hodnotami.
  2. Vyberte si ďalší tréningový pár z tréningového setu; privádza vstupný vektor na vstup siete.
  3. Vypočítajte výkon siete.
  4. Vypočítajte rozdiel medzi výstupom siete a požadovaným výstupom (vektor cieľa tréningového páru).
  5. Upravte váhy siete, aby ste minimalizovali chyby (ako je uvedené nižšie).
  6. Opakujte kroky 2 až 5 pre každý vektor tréningovej množiny, kým chyba v celej množine nedosiahne prijateľnú úroveň.

Operácie vykonávané krokmi 2 a 3 sú podobné tým, ktoré sa vykonávajú počas prevádzky už natrénovanej siete, t.j. zavedie sa vstupný vektor a vypočíta sa výsledný výstup. Výpočty sa vykonávajú vo vrstvách. Na obr. 1 sa najprv vypočítajú výstupy neurónov vrstvy (vrstva je vstupná, to znamená, že v nej neprebiehajú žiadne výpočty), potom sa použijú ako vstupy vrstvy , výstupy neurónov vrstvy sú vypočítané, ktoré tvoria výstupný vektor siete . Kroky 2 a 3 tvoria to, čo je známe ako dopredný priechod, keď signál prechádza sieťou zo vstupu na výstup.

Kroky 4 a 5 predstavujú "spätný priechod", kde sa vypočítaný chybový signál šíri späť cez sieť a používa sa na nastavenie váh.

Pozrime sa bližšie na krok 5 – úprava váh siete. Tu treba zdôrazniť dva prípady.

Prípad 1. Úprava synaptických váh výstupnej vrstvy

Napríklad pre model neurónovej siete na obr. 1 pôjde o závažia s nasledujúcim označením: a . Definujme, že index bude označovať neurón, z ktorého vychádza synaptická váha, a neurón, do ktorého vstupuje:

Uveďme hodnotu , ktorá sa rovná rozdielu medzi požadovanými a skutočnými výstupmi, vynásobenému deriváciou funkcie logistickej aktivácie (pozri vzorec funkcie logistickej aktivácie vyššie):

Potom sa váhy výstupnej vrstvy po korekcii budú rovnať:

Tu je príklad výpočtov synaptickej hmotnosti:

Prípad 2. Úprava synaptickej hmotnosti skrytej vrstvy

Pre model neurónovej siete na obr. 1, budú to hmotnosti zodpovedajúce vrstvám a . Definujme, že index bude označovať neurón, z ktorého vychádza synaptická váha, a neurón, do ktorého vstupuje (pozor na výskyt novej premennej ).

Ciele spätnej propagácie sú jednoduché: upravte každú váhu v pomere k tomu, ako veľmi prispieva k celkovej chybe. Ak iteračne znížime chybu každej váhy, nakoniec budeme mať sadu váh, ktoré robia dobré predpovede.

Aktualizácia pravidiel reťazca

Možno si to predstaviť ako dlhý rad vnorených rovníc. Ak takto uvažujete o šírení dopredu, potom spätné šírenie je len aplikácia. reťazové pravidlá(diferenciácia komplexnej funkcie) na nájdenie derivácií strát vzhľadom na akúkoľvek premennú vo vnorenej rovnici. Vzhľadom na funkciu šírenia dopredu:

F(x)=A(B(C(x)))

A, B a C sú na rôznych vrstvách. Pomocou reťazového pravidla môžeme ľahko vypočítať deriváciu f(x) vzhľadom na x:

F′(x)=f′(A)⋅A′(B)⋅B′(C)⋅C′(x)

Čo s derivátom vzhľadom na B? Ak chcete nájsť derivát vzhľadom na B, môžete predstierať, že B (C(x)) je konštanta, nahraďte ju zástupnou premennou B a pokračujte v hľadaní derivátu vzhľadom na Bštandardná.

F′(B)=f′(A)⋅A′(B)

Táto jednoduchá metóda sa rozširuje na akúkoľvek premennú v rámci funkcie a umožňuje nám to presne určiť účinok každej premennej k celkovému výsledku.

Aplikácia reťazového pravidla

Použime reťazové pravidlo na výpočet derivácie straty vzhľadom na akúkoľvek váhu v sieti. Reťazové pravidlo nám pomôže určiť, do akej miery každá váha prispieva k našej celkovej chybe a smer aktualizácie každej hmotnosti, aby sa chyba znížila. Tu sú rovnice, ktoré potrebujete na predpovedanie a výpočet celkovej chyby alebo straty:

Vzhľadom na sieť pozostávajúcu z jedného neurónu možno celkovú stratu neurónovej siete vypočítať ako:

Cena=C(R(Z(XW)))

Pomocou reťazového pravidla môžeme ľahko nájsť deriváciu straty vzhľadom na hmotnosť W.

C′(W)=C′(R)⋅R′(Z)⋅Z′(W)=(y^−y)⋅R′(Z)⋅X

Teraz, keď máme rovnicu na výpočet derivácie straty vzhľadom na akúkoľvek váhu, pozrime sa na príklad neurónovej siete:

Aký je derivát straty vzhľadom na Wo?

C′(WO)=C′(y^)⋅y^′(ZO)⋅Z′O(WO)=(y^−y)⋅R′(ZO)⋅H

A o čo ide čo? Aby sme to zistili, stále sa vraciame k našej funkcii, rekurzívne aplikujeme reťazové pravidlo, kým sa nedostaneme k funkcii, ktorá má prvok čo.

C′(Wh)=C′(y^)⋅O′(Zo)⋅Z′o(H)⋅H′(Zh)⋅Z′h(Wh)=(y^−y)⋅R′(Zo )⋅Wo⋅R′(Zh)⋅X

A len pre zaujímavosť, čo keby naša sieť mala 10 skrytých vrstiev. Aká je derivácia straty pre prvú váhu w1?

C(w1)=(dC/dy^)⋅(dy^/dZ11)⋅(dZ11/dH10)⋅(dH10/dZ10)⋅(dZ10/dH9)⋅(dH9/dZ9)⋅(dZ9/dH8)⋅( dH8/dZ8)⋅(dZ8/dH7)⋅(dH7/dZ7)⋅(dZ7/dH6)⋅(dH6/dZ6)⋅(dZ6/dH5)⋅(dH5/dZ5)⋅(dZ5/dH4)⋅(dZ5/dH4)⋅ dZ4)⋅(dZ4/dH3)⋅(dH3/dZ3)⋅(dZ3/dH2)⋅(dH2/dZ2)⋅(dZ2/dH1)⋅(dH1/dZ1)⋅(dZ1/dW1)

Všimli ste si vzor? Počet výpočtov potrebných na výpočet odvodených strát sa zvyšuje s prehlbovaním našej siete. Venujte pozornosť aj redundancia v našich výpočtoch derivátov. Derivácia straty každej vrstvy pridáva dva nové prvky k prvkom, ktoré už vypočítali vrstvy nad ňou. Čo ak existuje nejaký spôsob, ako zachrániť našu prácu a vyhnúť sa týmto opakovaným výpočtom?

Úspora práce s memoovaním

zapamätanie je termín v informatike, ktorý má jednoduchý význam: nepočítaj to isté znova a znova. Pri memoizácii ukladáme predtým vypočítané výsledky, aby sme sa vyhli prepočítavaniu rovnakej funkcie. To je užitočné na urýchlenie rekurzívnych funkcií, z ktorých jedna je spätné šírenie. Venujte pozornosť vzoru v derivačných rovniciach nižšie.

Každá z týchto vrstiev prepočítava rovnaké deriváty! Namiesto zapisovania dlhých derivačných rovníc pre každú váhu môžeme použiť memoizáciu, aby sme si ušetrili prácu, keď vraciame chybu cez sieť. Aby sme to dosiahli, definujeme 3 rovnice (nižšie), ktoré spolu zhŕňajú všetky výpočty potrebné na spätné šírenie. Matematika je rovnaká, ale rovnice poskytujú peknú skratku, ktorú môžeme použiť na sledovanie výpočtov, ktoré sme už vykonali, a ukladanie našej práce pri pohybe späť po sieti.

Najprv vypočítame chyba výstupnej vrstvy a výsledok odovzdajte skrytej vrstve pred ňou. Po výpočte chyby skrytej vrstvy prejdeme jej hodnotu späť predchádzajúcej skrytej vrstve. A tak ďalej a tak ďalej. Keď sa vrátime cez sieť, aplikujeme 3. vzorec na každú vrstvu, aby sme vypočítali deriváciu straty vzhľadom na váhy tejto vrstvy. Tento derivát nám hovorí ktorým smerom upravovať svoju váhu znížiť celkové straty.

Poznámka: termín chyba vrstvy odkazuje na derivát strát vzhľadom na vchod do vrstva. Odpovedá na otázku: ako sa zmení výstup stratovej funkcie, keď sa zmení vstup do tejto vrstvy?

Chyba výstupnej vrstvy

Na výpočet chyby výstupnej vrstvy je potrebné nájsť deriváciu strát vzhľadom na vstup do výstupnej vrstvy, Zo. To odpovedá na otázku: ako ovplyvňujú váhy poslednej vrstvy celkovú chybu v sieti? Potom je derivát:

C′(Zo)=(y^−y)⋅R′(Zo)

Aby sa to ľahšie písalo, praktici MO zvyčajne nahrádzajú sekvenciu (y^−y)∗R"(zo) termín Eo. Takže náš vzorec pre chybu výstupnej vrstvy je:

Eo=(y^−y)⋅R′(Zo)

Chyba skrytej vrstvy

Ak chcete vypočítať chybu skrytej vrstvy, musíte nájsť deriváciu strát vzhľadom na vstup skrytej vrstvy, Zh.

Eh=Eo⋅Wo⋅R′(Zh)

Tento vzorec je základom spätného šírenia. Vypočítame chybu aktuálnej vrstvy a vrátime váženú chybu späť do predchádzajúcej vrstvy a pokračujeme v procese, kým nedosiahneme našu prvú skrytú vrstvu. Popri tom aktualizujeme váhy pomocou derivácie straty vzhľadom na každú váhu.

Derivát straty vzhľadom na akúkoľvek hmotnosť

Vráťme sa k nášmu vzorcu pre deriváciu straty vzhľadom na hmotnosť výstupnej vrstvy Wo.

C′(WO)=(y^−y)⋅R′(ZO)⋅H

Vieme, že prvú časť môžeme nahradiť rovnicou pre chybu výstupnej vrstvy Eh. H predstavuje aktiváciu skrytej vrstvy.

C'(Wo)=Eo⋅H

Aby sme teda našli deriváciu straty vzhľadom na akúkoľvek váhu v našej sieti, jednoducho vynásobíme chybu zodpovedajúcej vrstvy jej vstupom (výstupom predchádzajúcej vrstvy).

C'(w)=CurrentLayerError⋅CurrentLayerInput

Poznámka: vchod sa vzťahuje na aktiváciu z predchádzajúcej vrstvy, nie na vážený vstup, Z.

Zhrnutie

Tu sú posledné 3 rovnice, ktoré spolu tvoria základ spätného šírenia.

Tu je proces vizualizovaný pomocou nášho príkladu neurónovej siete vyššie:

Príklad kódu Backpropagation

def relu_prime(z): ak z > 0: vrátiť 1 vrátiť 0 def cena (yHat, y): vrátiť 0,5 * (yHat - y)**2 def cost_prime(yHat, y): vrátiť yHat-y def backprop(x, y, Wh, Wo, lr): yHat = feed_forward(x, Wh, Wo) # chyba vrstvy Eo = (yHat - y) * relu_prime(Zo) Eh = Eo * Wo * relu_prime(Zh) # Nákladová derivácia pre váhy dWo = Eo * H dWh = Eh * x # Aktualizujte váhy Wh -= lr * dWh Wo -= lr * dWo

Chyby z výstupov siete na jej vstupy, v smere opačnom k ​​priamemu šíreniu signálov v bežnej prevádzke. Bartsev a Okhonin okamžite navrhli všeobecnú metódu („princíp duality“) použiteľnú na širšiu triedu systémov vrátane systémov s oneskorením, distribuovaných systémov atď.

Aby bolo možné použiť metódu spätného šírenia chýb, musí byť prenosová funkcia neurónov diferencovateľná. Metóda je modifikáciou klasickej metódy gradientového zostupu.

Sigmoidálne aktivačné funkcie

Ako aktivačné funkcie sa najčastejšie používajú tieto typy sigmoidu:

Fermiho funkcia (exponenciálny sigmoid):

Racionálny sigmoid:

Hyperbolická dotyčnica:

,

kde s je výstup sčítačky neurónov, je ľubovoľná konštanta.

Najmenej zo všetkých, v porovnaní s inými sigmoidmi, výpočet racionálneho sigmoidu vyžaduje procesorový čas. Na výpočet hyperbolického tangensu je potrebných najviac cyklov procesora. V porovnaní s prahovými aktivačnými funkciami sa sigmoidy počítajú veľmi pomaly. Ak po sčítaní prahovej funkcie môžete okamžite začať porovnávať s určitou hodnotou (prah), potom v prípade funkcie aktivácie sigmatu musíte vypočítať sigmoid (najlepšie stráviť čas tromi operáciami: brať modul , sčítanie a delenie) a až potom porovnajte s prahovou hodnotou (napríklad nulou). Ak predpokladáme, že všetky najjednoduchšie operácie vypočíta procesor približne za rovnaký čas, potom bude činnosť sigmoidálnej aktivačnej funkcie po sčítaní (ktorá bude trvať rovnaký čas) pomalšia ako funkcia prahovej aktivácie ako 1:4. .

Funkcia vyhodnocovania siete

V prípadoch, keď je možné vyhodnotiť výkon siete, môže byť trénovanie neurónových sietí reprezentované ako optimalizačný problém. Hodnotiť – znamená kvantifikovať, či sieť plní svoje úlohy dobre alebo zle. Na tento účel je vytvorená hodnotiaca funkcia. Spravidla to explicitne závisí od výstupných signálov siete a implicitne (prostredníctvom prevádzky) - od všetkých jej parametrov. Najjednoduchším a najbežnejším príkladom odhadu je súčet štvorcových vzdialeností od výstupných signálov siete k ich požadovaným hodnotám:

,

kde je požadovaná hodnota výstupného signálu.

Popis algoritmu

Viacvrstvová perceptrónová architektúra

Algoritmus spätného šírenia sa aplikuje na viacvrstvový perceptrón. Sieť má veľa vstupov, veľa výstupov a výstupov a veľa vnútorných uzlov. Prečíslujme všetky uzly (vrátane vstupov a výstupov) číslami od 1 do N (cez číslovanie bez ohľadu na topológiu vrstiev). Označme závažím stojacim na hrane spájajúcej i-tý a j-tý uzol a - výstupom i-tého uzla. Ak poznáme príklad tréningu (správne reakcie siete, ), potom chybová funkcia získaná metódou najmenších štvorcov vyzerá takto:

Ako upraviť váhy? Zavedieme stochastický gradientový zostup, teda po každom tréningovom príklade upravíme váhy a tým sa „pohybujeme“ vo viacrozmernom priestore váh. Aby sme sa „dostali“ na minimálnu chybu, musíme sa „pohnúť“ v opačnom smere gradientu , to znamená, že na základe každej skupiny správnych odpovedí pridajte ku každej váhe

,

kde je multiplikátor, ktorý udáva rýchlosť "pohybu".

Derivát sa vypočíta nasledovne. Najprv nech váha, ktorá nás zaujíma, vstúpi do neurónu poslednej úrovne. Po prvé, všimnite si, že to ovplyvňuje sieťový výstup iba ako súčasť sumy, kde suma preberá vstupy j-tého uzla. Preto

Podobne ovplyvňuje celkovú chybu iba v rámci výstupu j-tého uzla (pripomeňme, že ide o výstup celej siete). Preto

Ak j-tý uzol- nie na poslednej úrovni, potom má východy; označujeme ich Deti(j). V tomto prípade

, .

No, a - to je presne tá istá oprava, ale vypočítaná pre uzol ďalšej úrovne, označíme ju cez - líši sa od nej absenciou multiplikátora . Keďže sme sa naučili, ako vypočítať korekciu pre uzly poslednej úrovne a vyjadriť korekciu pre uzol nižšej úrovne z hľadiska opráv vyššej, už môžeme napísať algoritmus. Algoritmus sa nazýva práve kvôli tejto vlastnosti výpočtu opráv algoritmus spätného šírenia(spätné šírenie). Krátke zhrnutie vykonanej práce:

  • pre uzol poslednej úrovne
  • pre interného hostiteľa
  • pre všetky uzly

Výsledný algoritmus je uvedený nižšie. Na vstupe do algoritmu je okrem špecifikovaných parametrov potrebné zadať aj štruktúru siete v nejakom formáte. V praxi veľmi dobré výsledky vykazujú siete pomerne jednoduchej štruktúry, pozostávajúce z dvoch úrovní neurónov - skrytej úrovne (skryté jednotky) a neurónov-výstupov (výstupných jednotiek); každý vstup siete je pripojený ku všetkým skrytým neurónom a výsledok práce každého skrytého neurónu sa privádza na vstup každého z výstupných neurónov. V tomto prípade stačí ako vstup dodať počet neurónov skrytej úrovne.

Algoritmus

Algoritmus: BackPropagation

kde je koeficient zotrvačnosti pre vyhladzovanie ostrých skokov pri pohybe po povrchu objektívnej funkcie

Matematická interpretácia tréningu neurónovej siete

Pri každej iterácii algoritmu spätného šírenia sa váhy neurónovej siete upravia, aby sa zlepšilo riešenie jedného príkladu. V procese učenia sa teda cyklicky riešia problémy optimalizácie s jedným kritériom.

Tréning neurónovej siete sa vyznačuje štyrmi špecifickými obmedzeniami, ktoré odlišujú trénovanie neurónových sietí od všeobecných optimalizačných problémov: astronomický počet parametrov, potreba vysokej paralelnosti pri trénovaní, multikritériá riešených úloh, potreba nájsť pomerne širokú oblasť v ktorých hodnoty všetkých minimalizovaných funkcií sú blízke minimu. V opačnom prípade môže byť problém učenia zvyčajne formulovaný ako problém minimalizácie odhadu. Opatrnosť predchádzajúcej frázy („spravidla“) je spôsobená tým, že v skutočnosti nepoznáme a nikdy nebudeme poznať všetky možné úlohy pre neurónové siete a možno niekde v neznámom prostredí existujú úlohy, ktoré sa nedajú zredukovať na minimalizáciu. odhad. Minimalizácia odhadov je zložitý problém: existuje astronomicky veľa parametrov (od 100 do 1 000 000 pre štandardné príklady implementované na PC), adaptívny terén (graf odhadu ako funkcia nastaviteľných parametrov) je zložitý a môže obsahovať veľa lokálnych miním.

Nevýhody algoritmu

Napriek početným úspešným aplikáciám spätnej propagácie nie je všeliekom. Väčšina problémov prináša nekonečne dlhý proces učenia. V zložitých úlohách môže trvať niekoľko dní alebo dokonca týždňov, kým sa sieť natrénuje, alebo sa nemusí učiť vôbec. Dôvodom môže byť jeden z nasledujúcich.

Sieťová paralýza

V procese trénovania siete sa hodnoty váh môžu stať veľmi veľkými hodnotami v dôsledku korekcie. To môže viesť k tomu, že všetky alebo väčšina neurónov bude pracovať pri veľmi vysokých hodnotách OUT v oblasti, kde je derivácia funkcie stláčania veľmi malá. Keďže chyba odoslaná späť v procese učenia je úmerná tejto derivácii, proces učenia môže takmer zamrznúť. Z teoretického hľadiska je tento problém zle pochopený. Tomu sa zvyčajne predíde zmenšením veľkosti kroku η, ale tým sa zvýši čas tréningu. Na prevenciu alebo zotavenie sa z paralýzy boli použité rôzne heuristiky, ale zatiaľ ich možno považovať len za experimentálne.

Miestne minimá

Spätné šírenie využíva variáciu zostupu gradientu, to znamená, že klesá po chybovom povrchu, pričom sa priebežne prispôsobujú váhy smerom k minimu. Chybový povrch komplexnej siete je vysoko členitý a pozostáva z kopcov, údolí, záhybov a roklín vo vysokorozmernom priestore. Sieť môže spadnúť do miestneho minima (plytké údolie), keď je v blízkosti oveľa hlbšie minimum. V bode lokálneho minima vedú všetky smery nahor a sieť sa z toho nevie dostať. Hlavnou ťažkosťou pri trénovaní neurónových sietí sú práve metódy vymanenia sa z lokálnych miním: pri každom opustení lokálneho minima sa opäť hľadá ďalšie lokálne minimum tou istou metódou spätného šírenia chýb, až kým už nie je možné nájsť cestu. von z toho.

Veľkosť kroku

Dôkladná analýza dôkazu konvergencie ukazuje, že korekcie hmotnosti sa považujú za nekonečne malé. Je jasné, že to v praxi nie je možné, pretože to vedie k nekonečnému času učenia. Veľkosť kroku by sa mala brať ako konečná. Ak je veľkosť kroku pevná a veľmi malá, konvergencia je príliš pomalá, ak je fixná a príliš veľká, môže dôjsť k paralýze alebo trvalej nestabilite. Je efektívne zvyšovať krok, kým sa zlepšenie odhadu v danom smere antigradientu nezastaví a znižovať, ak k takémuto zlepšeniu nedôjde. P. D. Wasserman opísal adaptívny algoritmus výberu krokov, ktorý automaticky koriguje veľkosť kroku počas procesu učenia. V knihe A. N. Gorbana je navrhnutá rozvetvená technológia na optimalizáciu učenia.

Treba si uvedomiť aj možnosť preškolenia siete, ktorá je skôr výsledkom chybného návrhu jej topológie. Pri príliš veľkom počte neurónov sa stráca schopnosť siete zovšeobecňovať informácie. Sieť sa naučí celú sadu obrázkov poskytnutých na školenie, ale akékoľvek iné obrázky, dokonca aj veľmi podobné, môžu byť klasifikované nesprávne.

pozri tiež

  • Algoritmus gradientu rýchlosti

Literatúra

  1. Wasserman F. Neuropočítačové inžinierstvo: teória a prax. - M.: "Mir", 1992.
  2. Khaykin S. Neurónové siete: Celý kurz. Za. z angličtiny. N. N. Kussul, A. Yu. Shelestová. 2. vydanie, rev. - M.: Williams Publishing House, 2008, 1103 s.

Odkazy

  1. Koposov A. I., Shcherbakov I. B., Kislenko N. A., Kislenko O. P., Varivoda Yu. V. a kol.. - M.: VNIIGAZ, 1995.