Saurabh Yadav

9 noiembrie 2018 · 5 min de citire

Construirea chiar și a unei rețele neuronale simple poate fi o sarcină confuză, iar reglarea acesteia pentru a obține un rezultat mai bun este extrem de plictisitoare. Dar, primul pas care se ia în considerare în timpul construirii unei rețele neuronale este inițializarea parametrilor, dacă se face corect, atunci optimizarea va fi realizată în cel mai scurt timp, altfel convergerea la un minim folosind coborârea în gradient va fi imposibilă.

saurabh

Acest articol a fost scris presupunând că cititorul este deja familiarizat cu conceptul de rețea neuronală, greutate, părtinire, funcții de activare, propagare înainte și înapoi etc.

Notatii de baza

Considerați o rețea neuronală de strat L, care are straturi ascunse L-1 și fiecare strat de intrare și ieșire fiecare. Parametrii (greutăți și părtiniri) pentru stratul l sunt reprezentați ca

În acest articol, vom analiza unele dintre practicile de inițializare de bază în utilizare și câteva tehnici îmbunătățite care trebuie utilizate pentru a obține un rezultat mai bun. Următoarele sunt câteva tehnici practicate în general pentru inițializarea parametrilor:

  • Inițializare zero
  • Inițializare aleatorie

Inițializare zero:

În practica generală, părtinirile sunt inițializate cu 0 și ponderile sunt inițializate cu numere aleatorii, ce se întâmplă dacă ponderile sunt inițializate cu 0?

Pentru a înțelege, să luăm în considerare că am aplicat funcția de activare sigmoidă pentru stratul de ieșire.

Dacă toate ponderile sunt inițializate cu 0, derivata cu privire la funcția de pierdere este aceeași pentru fiecare w din W [l], astfel toate ponderile au aceeași valoare în iterațiile ulterioare. Acest lucru face ca unitățile ascunse să fie simetrice și continuă pentru toate iterațiile, adică setarea greutăților la 0 nu o face mai bună decât un model liniar. Un lucru important de reținut este că părtinirile nu au niciun efect, atunci când sunt inițializate cu 0.

să luăm în considerare o rețea neuronală cu doar trei straturi ascunse cu funcție de activare ReLu în straturi ascunse și sigmoid pentru stratul de ieșire.

Folosind rețeaua neuronală de mai sus pe setul de date „face cercuri” din sklearn.datasets, rezultatul obținut după cum urmează:

pentru 15000 de iterații, pierderi = 0.6931471805599453, precizie = 50%

în mod clar, inițializarea zero nu are succes în clasificare.

Inițializare aleatorie:

Atribuirea valorilor aleatorii la greutăți este mai bună decât doar 0 atribuire. Dar trebuie să țin cont de faptul că ceea ce se întâmplă dacă greutățile sunt inițializate valori mari sau valori foarte mici și ce este o inițializare rezonabilă a valorilor greutății.

A) Dacă greutățile sunt inițializate cu valori foarte mari, termenul np.dot (W, X) + b devine semnificativ mai mare și dacă se aplică o funcție de activare precum sigmoid (), funcția își mapează valoarea aproape de 1 unde panta gradientului se schimbă încet și învățarea durează mult.

b) Dacă greutățile sunt inițializate cu valori scăzute, este mapat la 0, unde cazul este același ca mai sus.

Această problemă este adesea denumită gradientul de dispariție.

Pentru a vedea acest lucru, să vedem exemplul pe care l-am luat mai sus, dar acum greutățile sunt inițializate cu valori foarte mari în loc de 0:

Rețeaua neuronală este la fel ca mai devreme, folosind această inițializare pe setul de date „face cercuri” din sklearn.datasets, rezultatul obținut fiind următorul:

pentru 15000 de iterații, pierdere = 0,38278397192120406, precizie = 86%

Această soluție este mai bună, dar nu îndeplinește în mod corespunzător nevoile, așa că haideți să vedem o nouă tehnică.

Noi tehnici de inițializare

După cum am văzut mai sus că, cu inițializarea mare sau 0 a greutăților (W), nu se obține un rezultat semnificativ chiar dacă folosim inițializarea adecvată a greutăților, este probabil ca procesul de antrenament să dureze mai mult timp. Există anumite probleme asociate cu aceasta:

a) Dacă modelul este prea mare și durează multe zile să se antreneze, atunci ce

b) Cum rămâne cu problema gradientului care dispare/explodează?

Acestea au fost câteva probleme care au stat în cale mulți ani, dar în 2015, He et al. (2015) a propus inițializarea conștientă a activării greutăților (pentru ReLu) care a reușit să rezolve această problemă. ReLu și ReLu rezolvat rezolvă, de asemenea, problema degradării gradientului.

El inițializează: pur și simplu înmulțim inițializarea aleatorie cu

Pentru a vedea cât de eficientă este această soluție, să folosim setul de date anterior și rețeaua neuronală pe care am luat-o pentru inițializarea de mai sus și rezultatele sunt:

pentru 15000 de iterații, pierderi = 0,07357895962677366, precizie = 96%

Cu siguranță, aceasta este o îmbunătățire față de tehnicile anterioare.

Există, de asemenea, alte tehnici, altele decât inițializarea în utilizare, care sunt relativ mai bune decât tehnicile vechi și sunt utilizate frecvent.

Inițializare Xavier: Este la fel ca inițializarea He, dar este utilizată pentru funcția de activare tanh (), în această metodă 2 este înlocuit cu 1.

Unii folosesc, de asemenea, următoarea tehnică pentru inițializare:

Aceste metode servesc drept puncte de plecare bune pentru inițializare și diminuează șansele de a exploda sau de a dispărea gradienții. Ei stabilesc greutățile nici prea mult mai mari decât 1, nici prea mult mai mici decât 1. Deci, gradienții nu dispar sau explodează prea repede. Ele ajută la evitarea convergenței lente, asigurându-se, de asemenea, că nu continuăm să oscilăm în afara minimelor. Există și alte variante ale celor de mai sus, în care obiectivul principal din nou este de a minimiza varianța parametrilor. Mulțumesc.