Există algoritmi/metode pentru a lua un model antrenat și pentru a-i reduce numărul de greutăți cu un efect negativ cât mai mic posibil la performanța sa finală?

Să presupunem că am un model foarte mare (prea mare) care conține X greutăți și vreau să îl reduc pentru a avea greutăți de 0,9 * X cu cât mai puține daune la performanța finală (sau poate chiar la cel mai mare câștig posibil în unele cazuri ).

Reducerea greutății are loc fie prin schimbarea arhitecturii de bază a modelului și eliminarea straturilor, fie prin reducerea adâncimii caracteristicii în straturile menționate. Evident, după reducere, va fi necesară o anumită ajustare a greutăților rămase.

greutății

2 Răspunsuri 2

Poate doriți să verificați:

Și o lucrare mai recentă pe această temă:

Cu toate acestea, nu am putut găsi o implementare a acestor două. Deci, va trebui să îl implementați singur.

După ce am citit câteva dintre comentariile și răspunsurile utile, am făcut câteva lecturi concentrate pe cont propriu.

După cum sa menționat în alte răspunsuri, acest proces este numit Tunderea și, ca multe alte idei din zona rețelei neuronale, nu este o noutate. Din ceea ce pot spune, asta își are originea în lucrarea lui LeCun din 1990 cu minunatul „Daune cerebrale optime” (Ziarul citează câteva lucrări anterioare privind minimizarea rețelei de la sfârșitul anilor '80, dar nu am mers atât de departe în gaura iepurelui). Ideea principală a fost să aproximăm schimbarea pierderilor cauzate de eliminarea unei hărți de caracteristici și să o minimalizăm:

În cazul în care C este funcția de cost, D este setul nostru de date (din x eșantioane și y etichete) și W sunt greutățile modelului (W0 sunt greutățile originale). hi este ieșirea produsă din parametrul i, care poate fi fie o hartă completă a caracteristicilor în straturi de convoluție, fie un singur neuron în straturi dense.

Marea munci recente pe subiect includ:

În această lucrare, ei propun următorul proces iterativ pentru tăierea CNN-urilor într-o manieră lacomă:

Acestea prezintă și testează mai multe criterii pentru procesul de tăiere. Primul și cel mai natural de utilizat este tăierea oracolului, care dorește să reducă la minimum diferența de precizie dintre modelele complete și cele tăiate. Cu toate acestea, este foarte costisitor să se calculeze, necesitând || W0 || evaluări asupra setului de date de instruire. Mai multe criterii euristice care sunt mult mai eficiente din punct de vedere al calculului sunt:

  • Greutate minimă - Presupunând că un nucleu convoluțional cu norma L2 scăzută detectează caracteristici mai puțin importante decât cele cu o normă ridicată.
  • Activare - Presupunând că o valoare de activare a unei hărți de caracteristici este mai mică pentru caracteristicile mai puțin impotente.
  • Câștig de informații - IG (y | x) = H (x) + H (y) - H (x, y), unde H este entropia.
  • Expansiunea Taylor - Pe baza expansiunii Taylor, aproximăm direct modificarea funcției de pierdere de la eliminarea unui anumit parametru.

2016 - Chirurgie dinamică de rețea pentru DN-uri eficiente Spre deosebire de metodele anterioare care îndeplinesc această sarcină într-un mod lacom, acestea încorporează conexiunea de conexiuni în întregul proces pentru a evita tăierea incorectă și a o face ca o întreținere continuă a rețelei. Cu această metodă, fără nicio pierdere de precizie, ei eficient comprimați numărul de parametri din LeNet-5 și AlexNet cu un factor de 108 × și 17,7 × respectiv.

Cifrele și o mare parte din ceea ce am scris se bazează pe lucrările originale. O altă explicație utilă poate fi găsită în următorul link: Tunderea rețelelor neuronale profunde pentru a le face rapide și mici.

Un instrument bun pentru modificarea modelelor Keras instruite este chirurgul Keras. În prezent, permite metode ușoare pentru: ștergerea neuronilor/canalelor din straturi, ștergerea straturilor, inserarea straturilor și înlocuirea straturilor.

Nu am găsit nicio metodă pentru procesul de tăiere efectiv (criterii de testare, optimizare etc.)