Bazele rețelelor neuronale pe greutăți; Tendințe

Antrenarea rețelelor neuronale poate fi foarte confuză. Care este o rată de învățare bună? Câte straturi ascunse ar trebui să aibă rețeaua dvs.? Abandonul este de fapt util? De ce gradienții dvs. dispar?
În acest post vom curăța cortina din spatele unora dintre aspectele mai confuze ale rețelelor neuronale și vă vom ajuta să luați decizii inteligente cu privire la arhitectura rețelei dvs. neuronale.
Vom vedea, de asemenea, cum putem folosi Greutățile și prejudecățile în nucleele Kaggle pentru a monitoriza performanța și a alege cea mai bună arhitectură pentru rețeaua noastră neuronală!
Vă recomand cu tărie să bifați acest kernel și să vă jucați cu diferitele blocuri pentru a vă perfecționa intuiția.
Dacă aveți întrebări, nu ezitați să-mi trimiteți un mesaj. Noroc!
1. Structura rețelei neuronale de bază
- Acesta este numărul de caracteristici pe care rețeaua ta neuronală le folosește pentru a-și face predicțiile.
- Vectorul de intrare are nevoie de un neuron de intrare pe caracteristică. Pentru datele tabulare, acesta este numărul de funcții relevante din setul de date. Doriți să selectați cu atenție aceste caracteristici și să eliminați orice ar putea conține modele care nu se vor generaliza dincolo de setul de antrenament (și care vor provoca supraadaptarea). Pentru imagini, acestea sunt dimensiunile imaginii dvs. (28 * 28 = 784 în cazul MNIST).
- Acesta este numărul de predicții pe care doriți să le faceți.
- Regresie: pentru sarcinile de regresie, aceasta poate fi o valoare (de exemplu, prețul locuinței). Pentru regresia multi-variabilă, este un neuron pe valoarea prezisă (de exemplu, pentru casetele de delimitare, pot fi 4 neuroni - câte unul pentru înălțimea cutiei de limitare, lățime, coordonată x, coordonată y).
- Clasificare: Pentru clasificarea binară (spam-nu spam), folosim un neuron de ieșire per clasă pozitivă, unde ieșirea reprezintă probabilitatea clasei pozitive. Pentru clasificarea în mai multe clase (de exemplu, în detectarea obiectelor în care o instanță poate fi clasificată ca o mașină, un câine, o casă etc.), avem un neuron de ieșire pe clasă și folosim funcția de activare softmax pe stratul de ieșire pentru a asigura probabilitățile finale se ridică la 1.
Straturi ascunse și neuroni pe straturi ascunse
- Numărul de straturi ascunse depinde în mare măsură de problemă și de arhitectura rețelei dvs. neuronale. În esență, încercați să vă deschideți calea spre arhitectura perfectă a rețelei neuronale - nu prea mare, nu prea mică, chiar corectă.
- În general, 1-5 straturi ascunse vă vor servi bine pentru majoritatea problemelor. Când lucrați cu imagini sau date vocale, doriți ca rețeaua dvs. să aibă zeci-sute de straturi, care nu toate ar putea fi complet conectate. Pentru aceste cazuri de utilizare, există modele pre-instruite (YOLO, ResNet, VGG) care vă permit să utilizați părți mari din rețelele lor și să vă instruiți modelul în partea de sus a acestor rețele pentru a afla doar caracteristicile de ordin superior. În acest caz, modelul dvs. va avea în continuare doar câteva straturi de antrenat.
- În general, este suficient să folosiți același număr de neuroni pentru toate straturile ascunse. Pentru unele seturi de date, având un prim strat mare și urmărirea acestuia cu straturi mai mici va duce la performanțe mai bune, deoarece primul strat poate învăța o mulțime de caracteristici de nivel inferior care pot alimenta câteva caracteristici de ordin superior în straturile următoare.
- De obicei, veți obține mai mult un spor de performanță prin adăugarea mai multor straturi decât adăugarea mai multor neuroni în fiecare strat.
- Vă recomand să începeți cu 1-5 straturi și 1-100 de neuroni și să adăugați încet mai multe straturi și neuroni până când începeți supraadezarea. Vă puteți urmări pierderea și precizia în tabloul de bord Greutăți și prejudecăți pentru a vedea ce straturi ascunse + combo de neuroni ascunși duce la cea mai bună pierdere.
- Ceva care trebuie avut în vedere la alegerea unui număr mai mic de straturi/neuroni este că, dacă acest număr este prea mic, rețeaua dvs. nu va putea învăța tiparele care stau la baza datelor dvs. și, prin urmare, nu va fi inutilă. O abordare pentru a contracara acest lucru este să începeți cu un număr mare de straturi ascunse + neuroni ascunși și apoi să utilizați abandonul și oprirea timpurie pentru a lăsa dimensiunea rețelei neuronale în sine pentru dvs. Din nou, vă recomand să încercați câteva combinații și să urmăriți performanța în tabloul de bord Greutăți și prejudecăți pentru a determina dimensiunea de rețea perfectă pentru problema dvs.
- Andrej Karpathy recomandă, de asemenea, îmbrăcămintea, apoi regularizați abordarea - „obțineți mai întâi un model suficient de mare încât să poată îmbrăca (adică se concentreze pe pierderea antrenamentului) și apoi regularizați-l în mod corespunzător (renunțați la unele pierderi de antrenament pentru a îmbunătăți pierderea din validare).
- Regresie: eroarea pătrată medie este cea mai frecventă funcție de pierdere pentru optimizare, cu excepția cazului în care există un număr semnificativ de valori anterioare. În acest caz, utilizarea înseamnă eroare absolută sau pierdere Huber.
- Clasificare: entropia încrucișată vă va servi bine în majoritatea cazurilor.
- Dimensiunile mari ale loturilor pot fi grozave, deoarece pot valorifica puterea GPU-urilor pentru a procesa mai multe instanțe de antrenament de fiecare dată. OpenAI a găsit o dimensiune mai mare a lotului (de zeci de mii pentru modelarea limbajului B și B de clasificare a imaginilor și de milioane în cazul agenților RL) servește bine pentru scalare și paralelizare.
- Cu toate acestea, există un caz care trebuie făcut și pentru dimensiuni mai mici ale lotului. Conform acestei lucrări de Masters și Luschi, avantajul obținut din paralelismul crescut de la rularea loturilor mari este compensat de generalizarea sporită a performanței și de amprenta de memorie mai mică realizată de loturile mai mici. Acestea arată că dimensiunile crescute ale loturilor reduc gama acceptabilă a ratelor de învățare care asigură o convergență stabilă. Mâncarea lor este că mai mic este, de fapt, mai bun; și că cea mai bună performanță este obținută de dimensiunile mini-lot între 2 și 32.
- Dacă nu funcționați la scări masive, vă recomand să începeți cu dimensiuni mai mici ale lotului și să măriți încet dimensiunea și să monitorizați performanța în tabloul de bord Greutăți și prejudecăți pentru a determina cea mai bună potrivire.
Numărul de epoci
- Ți-aș recomanda să începi cu un număr mare de epoci și să folosești oprirea timpurie (vezi secțiunea 4. Gradări de dispariție + explozie) pentru a opri antrenamentul atunci când performanța încetează.
Scalarea caracteristicilor dvs.
- O notă rapidă: asigurați-vă că toate caracteristicile dvs. au o scară similară înainte de a le utiliza ca intrări în rețeaua dvs. neuronală. Acest lucru asigură o convergență mai rapidă. Când caracteristicile dvs. au scări diferite (de exemplu, salarii în mii și ani de experiență în zeci), funcția de cost va arăta ca bolul alungit din stânga. Aceasta înseamnă că algoritmul de optimizare va dura mult timp pentru a traversa valea în comparație cu utilizarea caracteristicilor normalizate (în dreapta).