Práca s neurónovými sieťami: kontrolný zoznam pre ladenie

Práca s neurónovými sieťami: kontrolný zoznam pre ladenie

Kód softvérových produktov strojového učenia je často zložitý a dosť mätúci. Zisťovanie a odstraňovanie chýb v ňom je náročná na zdroje. Dokonca aj tie najjednoduchšie dopredné neurónové siete vyžadujú seriózny prístup k architektúre siete, inicializácii váh a optimalizácii siete. Malá chyba môže viesť k nepríjemným problémom.

Tento článok sa týka algoritmu na ladenie vašich neurónových sietí.

Skillbox odporúča: Praktický kurz Vývojár Pythonu od nuly.

Pripomíname vám: pre všetkých čitateľov „Habr“ - zľava 10 000 rubľov pri registrácii do akéhokoľvek kurzu Skillbox pomocou propagačného kódu „Habr“.

Algoritmus pozostáva z piatich fáz:

  • ľahký štart;
  • potvrdenie strát;
  • kontrola medzivýsledkov a spojení;
  • diagnostika parametrov;
  • kontrola práce.

Ak sa vám niečo zdá zaujímavejšie ako ostatné, môžete okamžite preskočiť na tieto časti.

Ľahký štart

Neurónová sieť so zložitou architektúrou, regularizáciou a plánovačom rýchlosti učenia sa ladí ťažšie ako bežná sieť. Tu sme trochu hákliví, pretože samotný bod nepriamo súvisí s ladením, ale stále je to dôležité odporúčanie.

Jednoduchým začiatkom je vytvorenie zjednodušeného modelu a jeho trénovanie na jednej množine (bode) údajov.

Najprv vytvoríme zjednodušený model

Ak chcete začať rýchlo, vytvoríme malú sieť s jednou skrytou vrstvou a skontrolujeme, či všetko funguje správne. Potom postupne komplikujeme model, kontrolujeme každý nový aspekt jeho štruktúry (dodatočná vrstva, parameter atď.) A pokračujeme ďalej.

Model trénujeme na jednej sade (bod) údajov

Ako rýchlu kontrolu vášho projektu môžete použiť jeden alebo dva dátové body na školenie na potvrdenie, či systém funguje správne. Neurónová sieť musí vykazovať 100% presnosť pri tréningu a testovaní. Ak to tak nie je, potom je buď model príliš malý, alebo už máte chybu.

Aj keď je všetko v poriadku, pripravte model na jednu alebo viac epoch predtým, ako pôjdete ďalej.

Hodnotenie straty

Odhad straty je hlavným spôsobom, ako spresniť výkon modelu. Musíte sa uistiť, že strata je primeraná problému a že funkcie straty sú hodnotené na správnej stupnici. Ak používate viac ako jeden typ straty, uistite sa, že sú všetky v rovnakom poradí a správne škálované.

Je dôležité byť pozorný k počiatočným stratám. Skontrolujte, ako blízko je skutočný výsledok k očakávanému výsledku, ak sa model začal s náhodným odhadom. IN Práca Andrey Karpathy naznačuje nasledovné:: „Uistite sa, že dosiahnete očakávaný výsledok, keď začnete s malým počtom parametrov. Je lepšie okamžite skontrolovať stratu údajov (so stupňom regularizácie nastaveným na nulu). Napríklad pre CIFAR-10 s klasifikátorom Softmax očakávame, že počiatočná strata bude 2.302, pretože očakávaná difúzna pravdepodobnosť je 0,1 pre každú triedu (keďže existuje 10 tried) a strata Softmax je negatívna logaritmická pravdepodobnosť správnej triedy. ako − ln (0.1) = 2.302.“

Pre binárny príklad sa jednoducho urobí podobný výpočet pre každú z tried. Tu sú napríklad údaje: 20 % 0 a 80 % 1. Očakávaná počiatočná strata bude až –0,2 ln (0,5) –0,8 ln (0,5) = 0,693147. Ak je výsledok väčší ako 1, môže to znamenať, že váhy neurónovej siete nie sú správne vyvážené alebo údaje nie sú normalizované.

Kontrola medzivýsledkov a spojení

Na odladenie neurónovej siete je potrebné pochopiť dynamiku procesov v rámci siete a úlohu jednotlivých medzivrstiev pri ich prepojení. Tu sú bežné chyby, s ktorými sa môžete stretnúť:

  • nesprávne výrazy pre aktualizácie gradle;
  • aktualizácie hmotnosti sa neuplatňujú;
  • explodujúce gradienty.

Ak sú hodnoty gradientu nulové, znamená to, že rýchlosť učenia v optimalizátore je príliš pomalá alebo že sa stretávate s nesprávnym výrazom na aktualizáciu gradientu.

Okrem toho je potrebné sledovať hodnoty aktivačných funkcií, váhy a aktualizácie každej z vrstiev. Napríklad rozsah aktualizácií parametrov (váhy a odchýlky) by malo byť 1-e3.

Existuje fenomén nazývaný “Dying ReLU” resp "problém miznúceho gradientu", keď neuróny ReLU vydajú nulu po naučení sa veľkej zápornej hodnoty skreslenia pre svoje váhy. Tieto neuróny sa už nikdy nevystrelia v žiadnom bode údajov.

Na identifikáciu týchto chýb môžete použiť kontrolu gradientu aproximáciou gradientu pomocou numerického prístupu. Ak je blízko k vypočítaným gradientom, spätné šírenie bolo implementované správne. Ak chcete vytvoriť kontrolu prechodu, pozrite si tieto skvelé zdroje od CS231 tu и turovnako ako lekciu Andrew Nga na túto tému.

Faizan Sheikh označuje tri hlavné metódy vizualizácie neurónovej siete:

  • Predbežné sú jednoduché metódy, ktoré nám ukážu všeobecnú štruktúru trénovaného modelu. Patrí medzi ne výstup tvarov alebo filtrov jednotlivých vrstiev neurónovej siete a parametrov v rámci každej vrstvy.
  • Na základe aktivácie. V nich dešifrujeme aktivácie jednotlivých neurónov alebo skupín neurónov, aby sme pochopili ich funkcie.
  • Na základe gradientov. Tieto metódy majú tendenciu manipulovať s gradientmi, ktoré sa tvoria z predných a spätných prechodov modelového tréningu (vrátane máp význačnosti a máp aktivácie tried).

Na vizualizáciu aktivácií a prepojení jednotlivých vrstiev existuje viacero užitočných nástrojov, napr. ConX и Tensorboard.

Práca s neurónovými sieťami: kontrolný zoznam pre ladenie

Diagnostika parametrov

Neurónové siete majú veľa parametrov, ktoré sa navzájom ovplyvňujú, čo komplikuje optimalizáciu. V skutočnosti je táto časť predmetom aktívneho výskumu odborníkov, takže návrhy uvedené nižšie by sa mali považovať len za rady, východiská, z ktorých sa dá stavať.

Veľkosť balíka (veľkosť dávky) – Ak chcete, aby bola veľkosť dávky dostatočne veľká na získanie presných odhadov gradientu chýb, ale dostatočne malá na to, aby sa vaša sieť mohla regulovať pomocou stochastického gradientu (SGD). Malé veľkosti dávok povedú k rýchlej konvergencii v dôsledku hluku počas tréningového procesu a následne k ťažkostiam s optimalizáciou. Toto je popísané podrobnejšie tu.

Miera učenia - príliš nízka povedie k pomalej konvergencii alebo riziku uviaznutia v miestnych minimách. Vysoká rýchlosť učenia zároveň spôsobí optimalizačnú divergenciu, pretože riskujete preskočenie hlbokej, ale úzkej časti stratovej funkcie. Skúste použiť plánovanie rýchlosti na jej zníženie pri trénovaní neurónovej siete. Aktuálne s CS231n tomuto problému je venovaná veľká časť.

Orezanie prechodu  — orezanie gradientov parametrov počas spätného šírenia na maximálnu hodnotu alebo hraničnú normu. Užitočné pri odstraňovaní akýchkoľvek explodujúcich gradientov, s ktorými sa môžete stretnúť v bode tri.

Dávková normalizácia - slúži na normalizáciu vstupných údajov každej vrstvy, čo nám umožňuje vyriešiť problém vnútorného kovariátneho posunu. Ak používate Dropout a Batch Norma spolu, pozrite sa na tento článok.

Stochastický gradient zostup (SGD) — Existuje niekoľko druhov SGD, ktoré využívajú hybnosť, adaptívnu rýchlosť učenia a Nesterovovu metódu. Žiadna z nich však nemá jasnú výhodu z hľadiska efektívnosti učenia a zovšeobecňovania (podrobnosti tu).

Regularizácia - je rozhodujúce pre zostavenie zovšeobecniteľného modelu, pretože pridáva pokutu za zložitosť modelu alebo extrémne hodnoty parametrov. Toto je spôsob, ako znížiť rozptyl modelu bez výrazného zvýšenia jeho skreslenia. Viac podrobné informácie - tu.

Ak chcete všetko vyhodnotiť sami, musíte vypnúť regularizáciu a sami skontrolovať gradient straty údajov.

Vypadne je ďalšou metódou zefektívnenia siete, aby sa zabránilo preťaženiu. Pri tréningu sa výpadok realizuje len udržiavaním aktivity neurónu s určitou pravdepodobnosťou p (hyperparameter) alebo jej nastavením na nulu v opačnom prípade. Výsledkom je, že sieť musí používať inú podmnožinu parametrov pre každú tréningovú dávku, čo znižuje zmeny určitých parametrov, ktoré sa stávajú dominantnými.

Dôležité: Ak používate výpadky aj dávkovú normalizáciu, dávajte pozor na poradie týchto operácií alebo dokonca na ich spoločné používanie. O tom všetkom sa stále aktívne diskutuje a dopĺňa. Tu sú dve dôležité diskusie na túto tému na Stackoverflow и arxiv.

Kontrola práce

Ide o dokumentovanie pracovných postupov a experimentov. Ak nič nedoložíte, môžete napríklad zabudnúť, aká sa používa rýchlosť učenia alebo váhy triedy. Vďaka ovládaniu si môžete jednoducho prezerať a reprodukovať predchádzajúce experimenty. To vám umožní znížiť počet duplicitných experimentov.

Manuálna dokumentácia sa však v prípade veľkého objemu práce môže stať ťažkou úlohou. Tu prichádzajú nástroje ako Comet.ml, ktoré vám pomôžu automaticky zaznamenávať množiny údajov, zmeny kódu, históriu experimentov a produkčné modely vrátane kľúčových informácií o vašom modeli (hyperparametre, metriky výkonnosti modelu a informácie o životnom prostredí).

Neurónová sieť môže byť veľmi citlivá na malé zmeny, čo povedie k poklesu výkonu modelu. Sledovanie a zdokumentovanie vašej práce je prvým krokom, ktorý môžete podniknúť pri štandardizácii vášho prostredia a modelovania.

Práca s neurónovými sieťami: kontrolný zoznam pre ladenie

Dúfam, že tento príspevok môže byť pre vás východiskovým bodom na začatie ladenia vašej neurónovej siete.

Skillbox odporúča:

Zdroj: hab.com

Pridať komentár