Rad sa neuronskim mrežama: kontrolna lista za otklanjanje grešaka

Rad sa neuronskim mrežama: kontrolna lista za otklanjanje grešaka

Kod softverskih proizvoda za strojno učenje često je složen i prilično zbunjujući. Otkrivanje i uklanjanje grešaka u njemu je zadatak koji zahtijeva puno resursa. Čak i najjednostavniji feedforward neuronske mreže zahtijevaju ozbiljan pristup mrežnoj arhitekturi, inicijalizaciji težina i optimizaciji mreže. Mala greška može dovesti do neprijatnih problema.

Ovaj članak govori o algoritmu za otklanjanje grešaka u vašim neuronskim mrežama.

Skillbox preporučuje: Praktični kurs Python programer od nule.

Podsećamo: za sve čitaoce "Habra" - popust od 10 rubalja pri upisu na bilo koji Skillbox kurs koristeći "Habr" promotivni kod.

Algoritam se sastoji od pet faza:

  • lak početak;
  • potvrda gubitaka;
  • provjera međurezultata i veza;
  • dijagnostika parametara;
  • kontrola rada.

Ako vam se nešto čini zanimljivijim od ostalog, možete odmah preskočiti na ove dijelove.

Lak start

Neuralnu mrežu sa složenom arhitekturom, regularizacijom i planerom brzine učenja teže je otkloniti nego običnu. Malo smo lukavi, jer je sama poenta indirektno povezana sa otklanjanjem grešaka, ali ovo je ipak važna preporuka.

Jednostavan početak je kreirati pojednostavljeni model i trenirati ga na jednom skupu (tački) podataka.

Prvo kreiramo pojednostavljeni model

Da bismo brzo započeli, kreiramo malu mrežu sa jednim skrivenim slojem i provjeravamo da li sve radi kako treba. Zatim postepeno komplikujemo model, provjeravajući svaki novi aspekt njegove strukture (dodatni sloj, parametar, itd.) i idemo dalje.

Treniramo model na jednom skupu (tački) podataka

Kao brzu provjeru ispravnosti vašeg projekta, možete koristiti jednu ili dvije tačke podataka za obuku kako biste potvrdili da li sistem radi ispravno. Neuronska mreža mora pokazati 100% tačnost u obuci i testiranju. Ako to nije slučaj, onda je ili model premali ili već imate grešku.

Čak i ako je sve u redu, pripremite model za jednu ili više epoha prije nego što krenete dalje.

Procjena gubitka

Procjena gubitaka je glavni način da se poboljša performanse modela. Morate osigurati da je gubitak primjeren problemu i da su funkcije gubitka ocijenjene na ispravnoj skali. Ako koristite više od jedne vrste gubitaka, uvjerite se da su svi istog redoslijeda i pravilno skalirani.

Važno je obratiti pažnju na početne gubitke. Provjerite koliko je stvarni rezultat blizak očekivanom rezultatu ako je model započeo slučajnim nagađanjem. IN Rad Andreja Karpatija sugeriše sledeće:: „Pobrinite se da dobijete rezultat koji očekujete kada počnete s malim brojem parametara. Bolje je odmah provjeriti gubitak podataka (sa stepenom regularizacije postavljenim na nulu). Na primjer, za CIFAR-10 sa Softmax klasifikatorom, očekujemo da će početni gubitak biti 2.302 jer je očekivana difuzna vjerovatnoća 0,1 za svaku klasu (pošto postoji 10 klasa), a Softmax gubitak je negativna log vjerovatnoća ispravne klase kao − ln (0.1) = 2.302.”

Za binarni primjer, sličan proračun se jednostavno pravi za svaku od klasa. Evo, na primjer, podataka: 20% 0 i 80% 1. Očekivani početni gubitak će biti do –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Ako je rezultat veći od 1, to može značiti da težine neuronske mreže nisu pravilno izbalansirane ili podaci nisu normalizirani.

Provjera međurezultata i veza

Da biste otklonili greške u neuronskoj mreži, potrebno je razumjeti dinamiku procesa unutar mreže i ulogu pojedinačnih međuslojeva kako su povezani. Evo najčešćih grešaka na koje možete naići:

  • netačni izrazi za gradle ažuriranja;
  • ažuriranja težine se ne primjenjuju;
  • eksplodirajući gradijenti.

Ako su vrijednosti gradijenta nule, to znači da je brzina učenja u optimizatoru prespora ili da nailazite na netočan izraz za ažuriranje gradijenta.

Osim toga, potrebno je pratiti vrijednosti aktivacijskih funkcija, težine i ažuriranja svakog od slojeva. Na primjer, veličina ažuriranja parametara (težine i pristranosti) treba da bude 1-e3.

Postoji fenomen koji se zove “Umirući ReLU” ili "problem nestajanja gradijenta", kada će ReLU neuroni dati nulu nakon što nauče veliku negativnu vrijednost pristranosti za svoje težine. Ovi neuroni se nikada više ne aktiviraju ni u jednom trenutku u podacima.

Možete koristiti provjeru gradijenta da identifikujete ove greške aproksimacijom gradijenta pomoću numeričkog pristupa. Ako je blizu izračunatim gradijentima, onda je propagacija unatrag pravilno implementirana. Da biste kreirali provjeru gradijenta, pogledajte ove sjajne resurse iz CS231 ovdje и ovdjea takođe i sa lekcija Andrew Nga na ovu temu.

Faizan Sheikh ukazuje na tri glavne metode za vizualizaciju neuronske mreže:

  • Preliminarne su jednostavne metode koje nam pokazuju opštu strukturu obučenog modela. To uključuje izlaz oblika ili filtera pojedinačnih slojeva neuronske mreže i parametara unutar svakog sloja.
  • Na osnovu aktivacije. U njima dešifrujemo aktivacije pojedinačnih neurona ili grupa neurona da bismo razumjeli njihove funkcije.
  • Zasnovano na gradijentima. Ove metode imaju tendenciju da manipulišu gradijentima koji se formiraju iz naprednih i nazadnih prolaza obuke modela (uključujući mape saliency i mape aktivacije klase).

Postoji nekoliko korisnih alata za vizualizaciju aktivacija i povezivanja pojedinačnih slojeva, npr. ConX и Tensorboard.

Rad sa neuronskim mrežama: kontrolna lista za otklanjanje grešaka

Dijagnostika parametara

Neuronske mreže imaju puno parametara koji međusobno djeluju, što otežava optimizaciju. Zapravo, ovaj odjeljak je predmet aktivnog istraživanja stručnjaka, tako da se prijedlozi u nastavku trebaju smatrati samo savjetima, polazištima od kojih se može graditi.

Veličina paketa (veličina serije) - Ako želite da veličina serije bude dovoljno velika da dobijete precizne procjene gradijenta greške, ali dovoljno mala za stohastički gradijentni spust (SGD) da regulira vašu mrežu. Male veličine serija će dovesti do brze konvergencije zbog buke tokom procesa obuke i posledično do poteškoća u optimizaciji. Ovo je detaljnije opisano ovdje.

Stopa učenja - preniska će dovesti do spore konvergencije ili rizika od zaglavljivanja u lokalnim minimumima. U isto vrijeme, visoka stopa učenja će uzrokovati divergenciju optimizacije jer rizikujete da preskočite duboki, ali uski dio funkcije gubitka. Pokušajte koristiti zakazivanje brzine da ga smanjite dok trenirate neuronsku mrežu. Ažurirano sa CS231n postoji veliki dio posvećen ovom problemu.

Gradient clipping  — skraćivanje gradijenata parametara tokom povratnog širenja na maksimalnu vrijednost ili marginalnu normu. Korisno za rješavanje problema s eksplodirajućim gradijentima na koje možete naići u točki tri.

Serijska normalizacija - koristi se za normalizaciju ulaznih podataka svakog sloja, što nam omogućava da riješimo problem unutrašnjeg kovarijatnog pomaka. Ako koristite Dropout i Batch Norma zajedno, pogledajte ovaj članak.

Stohastički gradijent pad (SGD) — postoji nekoliko varijanti SGD koje koriste zamah, adaptivne stope učenja i Nesterov metod. Međutim, nijedan od njih nema jasnu prednost u smislu efikasnosti učenja i generalizacije (detalji ovdje).

Regularizacija - je ključno za izgradnju modela koji se može generalizovati, jer dodaje kaznu za složenost modela ili ekstremne vrijednosti parametara. Ovo je način da se smanji varijansa modela bez značajnog povećanja njegove pristranosti. Više detaljne informacije - ovdje.

Da biste sve sami procijenili, morate onemogućiti regularizaciju i sami provjeriti gradijent gubitka podataka.

Odustajanje je još jedan način racionalizacije vaše mreže kako biste spriječili zagušenje. Tokom treninga, ispadanje se provodi samo održavanjem aktivnosti neurona sa određenom vjerovatnoćom p (hiperparametar) ili postavljanjem na nulu u suprotnom slučaju. Kao rezultat toga, mreža mora koristiti drugačiji podskup parametara za svaku grupu za obuku, što smanjuje promjene u određenim parametrima koji postaju dominantni.

Važno: Ako koristite i napuštanje i normalizaciju serije, pazite na redoslijed ovih operacija ili ih čak koristite zajedno. O svemu tome se još uvijek aktivno raspravlja i dopunjuje. Evo dvije važne rasprave na ovu temu na Stackoverflow и arhiva.

Kontrola rada

Radi se o dokumentovanju tokova rada i eksperimenata. Ako ništa ne dokumentujete, mogli biste zaboraviti, na primjer, koja stopa učenja ili težine razreda se koriste. Zahvaljujući kontroli, možete lako pregledati i reproducirati prethodne eksperimente. Ovo vam omogućava da smanjite broj dupliranih eksperimenata.

Međutim, ručna dokumentacija može postati težak zadatak u slučaju velikog obima posla. Ovdje dolaze alati poput Comet.ml koji vam pomažu da automatski evidentirate skupove podataka, promjene koda, eksperimentalnu historiju i proizvodne modele, uključujući ključne informacije o vašem modelu (hiperparametri, metrika performansi modela i informacije o okolišu).

Neuronska mreža može biti vrlo osjetljiva na male promjene, a to će dovesti do pada performansi modela. Praćenje i dokumentovanje vašeg rada je prvi korak koji možete poduzeti da standardizujete svoje okruženje i modeliranje.

Rad sa neuronskim mrežama: kontrolna lista za otklanjanje grešaka

Nadam se da vam ovaj post može biti početna tačka da počnete da otklanjate greške u svojoj neuronskoj mreži.

Skillbox preporučuje:

izvor: www.habr.com

Dodajte komentar