Munka neurális hálózatokkal: ellenőrző lista a hibakereséshez

Munka neurális hálózatokkal: ellenőrző lista a hibakereséshez

A gépi tanulási szoftvertermékek kódja gyakran összetett és meglehetősen zavaros. A benne lévő hibák észlelése és megszüntetése erőforrás-igényes feladat. Még a legegyszerűbbet is előrecsatolt neurális hálózatok komoly megközelítést igényel a hálózati architektúra, a súlyok inicializálása és a hálózat optimalizálása. Egy apró hiba kellemetlen problémákhoz vezethet.

Ez a cikk a neurális hálózatok hibakeresésére szolgáló algoritmusról szól.

A Skillbox a következőket ajánlja: Gyakorlati tanfolyam Python fejlesztő a semmiből.

Emlékeztetünk: a "Habr" minden olvasója számára - 10 000 rubel kedvezmény, ha a "Habr" promóciós kóddal bármely Skillbox tanfolyamra jelentkezik.

Az algoritmus öt szakaszból áll:

  • könnyű indítás;
  • a veszteségek megerősítése;
  • köztes eredmények és összefüggések ellenőrzése;
  • paraméter diagnosztika;
  • a munka ellenőrzése.

Ha valami érdekesebbnek tűnik a többinél, azonnal ugorhat ezekre a szakaszokra.

Könnyű indítás

Egy összetett architektúrájú, rendszeresített és tanulási ütemütemezővel rendelkező neurális hálózatot nehezebb hibakeresni, mint egy hagyományos hálózatot. Itt egy kicsit trükkösek vagyunk, hiszen maga a lényeg közvetetten kapcsolódik a hibakereséshez, de ez még mindig fontos ajánlás.

Egy egyszerű kezdés egy egyszerűsített modell létrehozása és egy adathalmazon (ponton) betanítása.

Először egy egyszerűsített modellt készítünk

A gyors kezdéshez létrehozunk egy kis hálózatot egyetlen rejtett réteggel, és ellenőrizzük, hogy minden megfelelően működik-e. Ezután fokozatosan bonyolítjuk a modellt, ellenőrizve a szerkezetének minden új szempontját (további réteg, paraméter stb.), és továbblépünk.

A modellt egyetlen adathalmazra (pontra) tanítjuk

A projekt gyors épelméjű ellenőrzéseként egy vagy két képzési adatpontot használhat annak ellenőrzésére, hogy a rendszer megfelelően működik-e. A neurális hálózatnak 100%-os pontosságot kell mutatnia a képzésben és a tesztelésben. Ha nem ez a helyzet, akkor vagy túl kicsi a modell, vagy már van egy hiba.

Még ha minden rendben is van, készítse elő a modellt egy vagy több korszakra, mielőtt továbblép.

Veszteségértékelés

A veszteségbecslés a fő módja a modell teljesítményének finomításának. Gondoskodnia kell arról, hogy a veszteség megfeleljen a problémának, és a veszteségfüggvények a megfelelő skálán legyenek besorolva. Ha egynél több veszteségtípust használ, győződjön meg arról, hogy mindegyik azonos sorrendben van, és megfelelően méretezett.

Fontos, hogy figyeljünk a kezdeti veszteségekre. Ellenőrizze, hogy a tényleges eredmény mennyire közelít a várt eredményhez, ha a modell véletlenszerű találgatással indult. BAN BEN Andrey Karpathy munkája a következőket sugallja:: „Győződjön meg arról, hogy a várt eredményt kapja, ha kevés paraméterrel kezdi. Jobb, ha azonnal ellenőrizzük az adatvesztést (a rendszeresség mértékét nullára állítjuk). Például a Softmax osztályozóval rendelkező CIFAR-10 esetén a kezdeti veszteség 2.302 lesz, mivel a várható diffúz valószínűség minden osztály esetében 0,1 (mivel 10 osztály van), a Softmax veszteség pedig a megfelelő osztály negatív logaritmikus valószínűsége. mint − ln (0.1) = 2.302.”

A bináris példa esetében egyszerűen minden osztályhoz hasonló számítást végeznek. Itt vannak például az adatok: 20% 0 és 80% 1. A várható kezdeti veszteség legfeljebb –0,2 ln (0,5) –0,8 ln (0,5) = 0,693147. Ha az eredmény nagyobb, mint 1, az azt jelezheti, hogy a neurális hálózatok súlyai ​​nincsenek megfelelően kiegyensúlyozva, vagy az adatok nincsenek normalizálva.

Köztes eredmények és kapcsolatok ellenőrzése

A neurális hálózatok hibakereséséhez meg kell érteni a hálózaton belüli folyamatok dinamikáját és az egyes köztes rétegek szerepét, amint kapcsolódnak. Íme a gyakori hibák, amelyekkel találkozhat:

  • helytelen kifejezések a gradle frissítésekhez;
  • a súlyfrissítéseket nem alkalmazzák;
  • kirobbanó gradiensek.

Ha a gradiens értéke nulla, ez azt jelenti, hogy az optimalizáló tanulási sebessége túl lassú, vagy helytelen kifejezéssel találkozik a színátmenet frissítéséhez.

Ezenkívül figyelni kell az egyes rétegek aktiválási funkcióinak, súlyainak és frissítéseinek értékeit. Például a paraméterfrissítések nagysága (súlyok és torzítások) 1-e3 legyen.

Létezik egy „Dying ReLU” nevű jelenség, ill "eltűnő gradiens probléma", amikor a ReLU neuronok nullát adnak ki, miután megtanultak egy nagy negatív torzítási értéket a súlyaihoz. Ezek a neuronok soha többé nem lőnek ki az adatok egyetlen pontján sem.

A gradiens-ellenőrzés segítségével azonosíthatja ezeket a hibákat a gradiens numerikus megközelítéssel történő közelítésével. Ha közel van a számított gradiensekhez, akkor a visszaszaporítást helyesen hajtották végre. Gradiens ellenőrzés létrehozásához tekintse meg a CS231 nagyszerű forrásait itt и ittValamint lecke Andrew Nga ebben a témában.

Faizan sejk három fő módszert jelöl a neurális hálózat vizualizálására:

  • Az előzetesek egyszerű módszerek, amelyek bemutatják a betanított modell általános felépítését. Ezek közé tartozik a neurális hálózat egyes rétegeinek alakzatainak vagy szűrőinek kimenete, valamint az egyes rétegeken belüli paraméterek.
  • Aktiválás alapú. Ezekben megfejtjük az egyes idegsejtek vagy neuroncsoportok aktiválódásait, hogy megértsük funkcióikat.
  • Színátmenetek alapján. Ezek a módszerek hajlamosak a modellképzés előre- és hátrameneteiből kialakított gradiensek manipulálására (beleértve a kiugrósági térképeket és az osztályaktiválási térképeket).

Az egyes rétegek aktiválásának, kapcsolatainak megjelenítésére több hasznos eszköz is létezik, pl. ConX и Tensorboard.

Munka neurális hálózatokkal: ellenőrző lista a hibakereséshez

Paraméter diagnosztika

A neurális hálózatoknak sok paramétere van, amelyek kölcsönhatásba lépnek egymással, ami bonyolítja az optimalizálást. Valójában ez a rész a szakemberek aktív kutatásának tárgya, így az alábbi javaslatok csak tanácsok, kiindulópontok, amelyekből építkezhetünk.

Csomag mérete (kötegméret) – Ha azt szeretné, hogy a köteg mérete elég nagy legyen ahhoz, hogy pontos hibagradiens becsléseket kapjon, de elég kicsi ahhoz, hogy a sztochasztikus gradiens süllyedés (SGD) legyen szabályos a hálózaton. A kis tételméretek gyors konvergenciához vezetnek a képzési folyamat során fellépő zaj miatt, és ezt követően optimalizálási nehézségekhez vezetnek. Ezt részletesebben ismertetjük itt.

Tanulási arány - a túl alacsony érték lassú konvergenciához vezet, vagy a helyi minimumokban való elakadás kockázatához vezet. Ugyanakkor a magas tanulási arány optimalizálási eltérést okoz, mert fennáll a veszélye, hogy átugorja a veszteségfüggvény mély, de keskeny részét. A neurális hálózat betanítása közben próbáljon sebességütemezést használni a sebesség csökkentésére. Naprakész a CS231n-nel van egy nagy rész ennek a problémának.

Gradiens vágás  — a paraméter gradienseinek kivágása a visszaszaporítás során a maximális értéknél vagy a határnormánál. Hasznos a harmadik pontban előforduló felrobbanó gradiensek hibaelhárításához.

Kötegelt normalizálás - az egyes rétegek bemeneti adatainak normalizálására szolgál, ami lehetővé teszi a belső kovariáns eltolódás problémájának megoldását. Ha a Dropout és a Batch Norma együttest használja, nézze meg ezt a cikket.

Sztochasztikus gradiens süllyedés (SGD) — az SGD-nek számos fajtája létezik, amely lendületet, adaptív tanulási sebességet és a Neszterov-módszert alkalmaz. Azonban egyiknek sincs egyértelmű előnye mind a tanulási hatékonyság, mind az általánosítás szempontjából (részletek itt).

Szabályozás - kulcsfontosságú az általánosítható modell felépítéséhez, mivel büntetést ad a modell bonyolultságáért vagy szélsőséges paraméterértékeiért. Ez egy módja annak, hogy csökkentse a modell varianciáját anélkül, hogy jelentősen növelné a torzítását. Több részletes információ - itt.

Ha mindent saját maga szeretne kiértékelni, le kell tiltania a rendszerezést, és magának kell ellenőriznie az adatvesztési gradienst.

Lemorzsolódás egy másik módszer a hálózat egyszerűsítésére a torlódások elkerülése érdekében. A tréning során a lemorzsolódás csak úgy történik, hogy a neuron aktivitását bizonyos p valószínűséggel (hiperparaméter) fenntartjuk, vagy ellenkező esetben nullára állítjuk. Ennek eredményeként a hálózatnak minden egyes betanítási köteghez más paraméter-alkészletet kell használnia, ami csökkenti bizonyos, dominánssá váló paraméterek változásait.

Fontos: Ha mind a kihagyás, mind a kötegelt normalizálást használja, ügyeljen a műveletek sorrendjére, vagy akár együttes használatára is. Mindezt jelenleg is aktívan tárgyalják, kiegészítik. Íme két fontos megbeszélés erről a témáról a Stackoverflow-n и arXiv.

A munka ellenőrzése

Ez a munkafolyamatok és kísérletek dokumentálásáról szól. Ha nem dokumentál semmit, elfelejtheti például, hogy milyen tanulási arányt vagy osztálysúlyokat használnak. A vezérlésnek köszönhetően könnyedén megtekintheti és reprodukálhatja a korábbi kísérleteket. Ez lehetővé teszi az ismétlődő kísérletek számának csökkentését.

A kézi dokumentáció azonban nehéz feladattá válhat nagy volumenű munka esetén. Itt jönnek be az olyan eszközök, mint a Comet.ml, amelyek segítségével automatikusan naplózhatja az adatkészleteket, a kódmódosításokat, a kísérleti előzményeket és a gyártási modelleket, beleértve a modellre vonatkozó legfontosabb információkat (hiperparaméterek, modellteljesítmény-mutatók és környezeti információk).

Egy neurális hálózat nagyon érzékeny lehet a kis változásokra, és ez a modell teljesítményének csökkenéséhez vezet. Munkájának nyomon követése és dokumentálása az első lépés, amelyet megtehet környezete és modellezése szabványosítása érdekében.

Munka neurális hálózatokkal: ellenőrző lista a hibakereséshez

Remélem, ez a bejegyzés kiindulópont lehet a neurális hálózat hibakeresésének megkezdéséhez.

A Skillbox a következőket ajánlja:

Forrás: will.com

Hozzászólás