U travagliu cù e rete neurali: lista di cuntrollu per debugging

U travagliu cù e rete neurali: lista di cuntrollu per debugging

U codice di i prudutti di u software di apprendimentu automaticu hè spessu cumplessu è abbastanza cunfusu. Detectà è eliminà i bug in questu hè un compitu intensivu di risorse. Ancu u più simplice rete neurali feedforward richiede un accostu seriu à l'architettura di a rete, l'inizializazione di i pesi è l'ottimisazione di a rete. Un picculu sbagliu pò purtà à prublemi dispiacenti.

Questu articulu hè nantu à un algoritmu per debugging e vostre rete neurali.

Skillbox consiglia: Corso praticu Sviluppatore Python da zero.

Ramintemu: per tutti i lettori di "Habr" - un scontu di 10 000 rubles quandu si iscrizzione in ogni cursu Skillbox cù u codice promozionale "Habr".

L'algoritmu si compone di cinque fasi:

  • principiu faciule;
  • cunferma di perdite;
  • cuntrollà risultati intermedi è cunnessione;
  • diagnostica di parametri;
  • cuntrollu di u travagliu.

Se qualcosa vi pare più interessante chè u restu, pudete saltà immediatamente à queste sezioni.

Principiu faciule

Una rete neurale cù una architettura cumplessa, regularizazione, è un pianificatore di ritmu di apprendimentu hè più difficiuli di debug chè un normale. Semu un pocu complicatu quì, postu chì u puntu stessu hè indirettu ligatu à u debugging, ma questu hè sempre una ricumandazione impurtante.

Un principiu simplice hè di creà un mudellu simplificatu è furmà nantu à un set (puntu) di dati.

Prima avemu creatu un mudellu simplificatu

Per cumincià rapidamente, creemu una piccula reta cù una sola capa nascosta è verificate chì tuttu funziona bè. Allora compie gradualmente u mudellu, cuntrollà ogni novu aspettu di a so struttura (stratu supplementu, paràmetru, etc.), è andate avanti.

Formemu u mudellu nantu à un unicu set (puntu) di dati

Cum'è un cuntrollu di sanità rapida per u vostru prughjettu, pudete aduprà unu o dui punti di dati per a furmazione per cunfirmà se u sistema funziona bè. A rete neurale deve dimustrà 100% di precisione in furmazione è teste. Se questu ùn hè micca u casu, allora o u mudellu hè troppu chjucu o avete digià un bug.

Ancu s'è tuttu hè bè, preparanu u mudellu per una o più epoche prima di passà.

Valutazione di perdita

L'estimazione di perdita hè u modu principale per raffinà u rendiment di u mudellu. Avete bisognu di assicurà chì a perdita hè apprupriata à u prublema è chì e funzioni di perdita sò valutate nantu à a scala curretta. Sè vo aduprate più di un tipu di perdita, verificate puru ch'elli sò tutti di u listessu ordine è scaled currettamente.

Hè impurtante per esse attenti à i perditi iniziali. Verificate quantu hè vicinu u risultatu attuale à u risultatu previstu se u mudellu hà cuminciatu cù una supposizione aleatoria. IN U travagliu di Andrey Karpathy suggerisce i seguenti:: "Assicuratevi di ottene u risultatu chì aspetta quandu avete principiatu cù un picculu numeru di parametri. Hè megliu cuntrollà immediatamente a perdita di dati (cù u gradu di regularizazione à zero). Per esempiu, per CIFAR-10 cù un classificatore Softmax, aspittemu chì a perdita iniziale sia 2.302 perchè a probabilità diffusa prevista hè 0,1 per ogni classa (perchè ci sò 10 classi) è a perdita Softmax hè a probabilità di logu negativu di a classa curretta. cum'è − ln (0.1) = 2.302 ".

Per l'esempiu binariu, un calculu simili hè simplicemente fattu per ognuna di e classi. Eccu, per esempiu, i dati: 20% 0 è 80% 1. A perdita iniziale prevista serà finu à -0,2ln (0,5) -0,8ln (0,5) = 0,693147. Se u risultatu hè più grande di 1, pò indicà chì i pesi di a rete neurale ùn sò micca equilibrati bè o i dati ùn sò micca normalizzati.

Verificate i risultati intermedi è e cunnessione

Per debug una rete neurale, hè necessariu capisce a dinamica di i prucessi in a reta è u rolu di i strati intermedi individuali cum'è cunnessi. Eccu l'errori cumuni chì pudete truvà:

  • espressioni sbagliate per l'aghjurnamenti di gradle;
  • l'aghjurnamenti di pesu ùn sò micca applicati;
  • gradienti esplosivi.

Se i valori di gradiente sò zero, questu significa chì a rata di apprendimentu in l'ottimisatore hè troppu lenta, o chì avete scontru una espressione incorrecta per aghjurnà u gradiente.

Inoltre, hè necessariu di monitorà i valori di e funzioni di attivazione, pesi è aghjurnamenti di ognuna di i strati. Per esempiu, a magnitudine di l'aghjurnamenti di i paràmetri (pesi è preghjudizii) deve esse 1-e3.

Ci hè un fenomenu chjamatu "Dying ReLU" o "prublemu di gradiente chì sparisce", Quandu i neuroni ReLU prucedenu zero dopu avè amparatu un grande valore di preghjudiziu negativu per i so pesi. Sti neuroni ùn sò mai sparati di novu in ogni puntu di e dati.

Pudete utilizà a verificazione di gradiente per identificà questi errori approximendu u gradiente cù un approcciu numericu. S'ellu hè vicinu à i gradienti calculati, a retropropagazione hè stata implementata currettamente. Per creà un verificatu di gradiente, verificate queste grandi risorse da CS231 ccà и ccàè ancu cù lezzione Andrew Nga nantu à questu tema.

Faizan Sheikh indica trè metudi principali per visualizà una rete neurale:

  • I preliminari sò metudi simplici chì ci mostranu a struttura generale di u mudellu furmatu. Questi includenu l'output di forme o filtri di i strati individuali di a rete neurale è i paràmetri in ogni capa.
  • Attivazione basatu. In elli, deciframu l'attivazioni di neuroni individuali o gruppi di neuroni per capiscenu e so funzioni.
  • Basatu nantu à gradienti. Questi metudi tendenu à manipulà i gradienti chì sò furmati da i passi avanti è in daretu di a furmazione di mudelli (cumprese carte di salienza è carte di attivazione di classi).

Ci hè parechje strumenti utili per visualizà l'attivazioni è e cunnessione di strati individuali, per esempiu. CunX и Tensorboard.

U travagliu cù e rete neurali: lista di cuntrollu per debugging

Diagnostica di parametri

E rete neurali anu assai paràmetri chì interagiscenu cù l'altri, chì complica l'ottimisazione. In verità, sta sezione hè u sughjettu di ricerca attiva da i specialisti, cusì i suggerimenti sottu deve esse cunsideratu solu cum'è cunsiglii, punti di partenza da quale custruisce.

Dimensione di u pacchettu (taglia di batch) - Se vulete chì a dimensione di u batch sia abbastanza grande per ottene stima di gradiente d'errore precisa, ma abbastanza chjuca per a discesa di gradiente stochastic (SGD) per regularizà a vostra reta. Piccole dimensioni di batch portanu à una rapida cunvergenza per via di u rumore durante u prucessu di furmazione è dopu à difficultà di ottimisazione. Questu hè descrittu in più detail ccà.

Tasso di apprendimentu - troppu bassu porta à una cunvergenza lenta o à u risicu di chjappà in i minimi lucali. À u listessu tempu, un altu ritmu di apprendimentu pruvucarà una divergenza di ottimisazione perchè risicate di saltà per a parte prufonda ma stretta di a funzione di perdita. Pruvate aduprà a pianificazione di velocità per riducela mentre allenate a rete neurale. Aghjurnate cù CS231n ci hè una grande sezione dedicata à stu prublema.

Clipping di gradiente  - trimming parameter gradients during backpropagation à u valore massimu o norma marginale. Utile per risolve i prublemi di qualsiasi gradienti esplodenti chì pudete scuntrà in u puntu trè.

Normalizazione di batch - utilizatu per nurmalizà i dati di input di ogni strata, chì ci permette di risolve u prublema di u cambiamentu di covariate internu. Sè vo aduprate Dropout è Batch Norma inseme, verificate questu articulu.

Descente di gradiente stocasticu (SGD) - Ci sò parechje varietà di SGD chì utilizanu momentum, ritmi di apprendimentu adattativu è u metudu Nesterov. Tuttavia, nimu ùn hà un vantaghju chjaru in quantu à l'efficienza di l'apprendimentu è a generalizazione (dettagli quì).

Regularization - hè cruciale per custruisce un mudellu generalizable, postu chì aghjunghje una penalità per a cumplessità di u mudellu o i valori di parametri estremi. Questu hè un modu per riduce a varianza di u mudellu senza aumentà significativamente u so preghjudiziu. Più infurmazione dettagliata - quì.

Per valutà tuttu, avete bisognu di disattivà a regularizazione è cuntrollà u gradiente di perdita di dati.

Abbandunà hè un altru mètudu di simplificà a vostra reta per prevene a congestione. Durante a furmazione, l'abbandunamentu hè realizatu solu mantenendu l'attività di u neurone cù una certa probabilità p (iperparametru) o mette in cero in u casu oppostu. In u risultatu, a reta deve aduprà un subset di paràmetri diffirenti per ogni batch di furmazione, chì riduce i cambiamenti in certi paràmetri chì diventanu dominanti.

Impurtante: Sè vo aduprate tramindui l'abbandunamentu è a normalizazione di batch, fate cura di l'ordine di sti operazioni o ancu aduprà inseme. Tuttu chistu hè sempre attivamente discututu è supplementatu. Eccu duie discussioni impurtanti nantu à questu tema nantu à Stackoverflow и Arxiv.

U cuntrollu di u travagliu

Si tratta di documentà i flussi di travagliu è l'esperimenti. Se ùn documentate nunda, pudete scurdà, per esempiu, quale ritmu di apprendimentu o pesi di classi sò usati. Grazie à u cuntrollu, pudete facilmente vede è riproduce esperimenti previ. Questu permette di riduce u numeru di esperimenti duplicati.

Tuttavia, a documentazione manuale pò diventà un compitu difficiule in u casu di un grande volume di travagliu. Hè quì chì l'arnesi cum'è Comet.ml entranu per aiutà à logà automaticamente i datasets, i cambiamenti di codice, a storia sperimentale è i mudelli di produzzione, cumprese l'infurmazioni chjave nantu à u vostru mudellu (iperparametri, metriche di prestazione di mudelli è infurmazione ambientale).

Una rete neurale pò esse assai sensibile à i picculi cambiamenti, è questu porta à una calata in u rendiment di u mudellu. U seguimentu è a documentazione di u vostru travagliu hè u primu passu chì pudete fà per standardizà u vostru ambiente è u mudellu.

U travagliu cù e rete neurali: lista di cuntrollu per debugging

Spergu chì questu post pò esse un puntu di partenza per voi per cumincià à debugging a vostra rete neurale.

Skillbox consiglia:

Source: www.habr.com

Add a comment