Kā izvēlēties slēpto slāņu un mezglu skaitu barojošajā neironu tīklā?

Vai pastāv standarta un pieņemta metode, kā izvēlēties slāņu skaitu un mezglu skaitu katrā slānī neironu tīklā, kas darbojas uz priekšu? Mani interesē automatizēti neironu tīklu veidošanas veidi.

Risinājums

Es saprotu, ka uz šo jautājumu ir atbildēts, bet es nedomāju, ka līdzšinējā atbilde patiešām ir saistīta ar jautājumu, izņemot norādīšanu uz saiti, kas vispārīgi saistīta ar jautājuma tēmu. Konkrēti, saitē ir aprakstīta viena programmatiska tīkla konfigurēšanas metode, bet tā nav "[a] standarta un pieņemta metode" tīkla konfigurēšanai. Ievērojot nelielu skaidru noteikumu kopumu, var programmatiski iestatīt kompetentu tīkla arhitektūru (t. i., neironu slāņu skaitu un veidu un katrā slānī ietilpstošo neironu skaitu). Ievērojot šo shēmu, iegūsiet kompetentu arhitektūru, bet, iespējams, ne optimālu. Taču, kad šis tīkls ir inicializēts, apmācības laikā konfigurāciju var iteratīvi pielāgot, izmantojot vairākus palīgalgoritmus; viens no šiem algoritmiem darbojas, pēc noteikta apmācības laikmetu skaita atdalot mezglus, pamatojoties uz (nelielām) svaru vektora vērtībām, citiem vārdiem sakot, likvidējot nevajadzīgos/pārpalikušos mezglus (vairāk par to tālāk). Tātad katram NN ir trīs veidu slāņi: ieejas, slēptie un izvades.


Tāpēc NN arhitektūras izveide nozīmē, ka ir jānosaka katra tipa slāņu skaits un mezglu skaits katrā no šiem slāņiem. Ieejas slānis Vienkārši - katram NN ir tieši viens no tiem - izņēmumu man nav zināms. Attiecībā uz šo slāni veidojošo neironu skaitu šis parametrs ir pilnībā un viennozīmīgi nosakāms, tiklīdz ir zināma mācību datu forma. Konkrēti, neironu skaits, kas veido šo slāni, ir vienāds ar pazīmju (kolonnu) skaitu jūsu datos. Dažās NN konfigurācijās tiek pievienots vēl viens papildu mezgls novirzes loceklim.
Izejas slānis Tāpat kā ieejas slānim, katram NN ir precīzi viens izejas slānis. Tā lieluma (neironu skaita) noteikšana ir vienkārša; to pilnībā nosaka izvēlētā modeļa konfigurācija. Vai jūsu NN darbojas mašīnas režīmā vai regresijas režīmā (ML konvencija, kas paredz lietot terminu, kuru lieto arī statistikā, bet piešķir tam citu nozīmi, ir ļoti mulsinoša). Mašīnas režīmā: tiek atgriezta klases etiķete (piemēram, "Premium konts"/"Basic konts"). Regresijas režīmā tiek atgriezta vērtība (piemēram, cena). Ja NN ir regresors, tad izejas slānim ir viens mezgls. Ja NN ir klasifikators, tad arī tam ir viens mezgls, ja vien nav izmantots softmax. tādā gadījumā izejas slānim ir viens mezgls katrai modeļa klases etiķetei. Slēptie slāņi Tātad šie daži noteikumi nosaka slāņu skaitu un lielumu (neironi/slānis) gan ieejas, gan izejas slānim. Atliek slēptie slāņi. Cik ir slēpto slāņu? Ja jūsu dati ir lineāri atdalāmi (ko jūs bieži zināt jau tad, kad sākat kodēt NN), tad jums nav vajadzīgi nekādi slēptie slāņi. Protams, NN nav nepieciešams arī, lai sadalītu jūsu datus, bet tas tomēr paveiks savu darbu. Turklāt, kā jūs droši vien zināt, par jautājumu par slēpto slāņu konfigurāciju NN ir daudz komentāru (skatiet šo komentāru lielisku kopsavilkumu, kas ir ārkārtīgi pamatīgs un izvērsts NN FAQ). Viens no jautājumiem šajā jautājumā, par kuru ir vienprātība, ir veiktspējas atšķirība, pievienojot papildu slēptos slāņus: situāciju, kad veiktspēja uzlabojas, pievienojot otru (vai trešo utt.) slēpto slāni, ir ļoti maz. Vairumā problēmu pietiek ar vienu slēpto slāni. Kā ir ar slēptā(-o) slāņa(-u) lielumu - cik neironu? Ir daži empīriski iegūti noteikumi, no kuriem visbiežāk izmanto šādu: 'optimālākais slēptā slāņa lielums parasti ir starp ieejas un izejas slāņa lielumu*'. Džefs Hītons (Jeff Heaton), grāmatas Introduction to Neural Networks in Java autors, piedāvā vēl dažus. Kopumā lielākajai daļai problēmu, iespējams, var iegūt pienācīgu veiktspēju (pat bez otrā optimizācijas soļa), nosakot slēptā slāņa konfigurāciju, izmantojot tikai divus noteikumus: (i) slēpto slāņu skaits ir vienāds ar vienu; un (ii) neironu skaits šajā slānī ir vidējais neironu skaits ieejas un izejas slāņos.
Tīkla konfigurācijas optimizācija Pruning apraksta metožu kopumu tīkla izmēra samazināšanai (pēc mezgliem, nevis slāņiem), lai uzlabotu skaitļošanas veiktspēju un dažkārt arī izšķirtspējas veiktspēju. Šo metožu būtība ir mezglu izņemšana no tīkla apmācības laikā, identificējot tos mezglus, kuru izņemšana no tīkla manāmi neietekmētu tīkla veiktspēju (t. i., datu izšķirtspēju). (Pat neizmantojot formālu atzarošanas tehniku, jūs varat iegūt aptuvenu priekšstatu par to, kuri mezgli nav svarīgi, aplūkojot savu svaru matricu pēc apmācības; meklējiet svarus, kas ir ļoti tuvu nullei, - atzarošanas laikā bieži tiek izņemti mezgli, kas atrodas abos šo svaru galos). Acīmredzot, ja apmācības laikā izmantojat atzarošanas algoritmu, tad sāciet ar tādu tīkla konfigurāciju, kurā, visticamāk, būs lieki (t. i., 'atzarojami') mezgli - citiem vārdiem sakot, pieņemot lēmumu par tīkla arhitektūru, kļūdieties, izvēloties vairāk neironu, ja pievienojat atzarošanas soli. Citādi sakot, piemērojot tīklam atzarošanas algoritmu apmācības laikā, jūs varat pietuvoties optimālai tīkla konfigurācijai; vai to var izdarīt vienā "iepriekš" (piemēram, uz ģenētisko algoritmu balstītā algoritmā), es nezinu, lai gan zinu, ka pagaidām šī divpakāpju optimizācija ir izplatītāka.

Komentāri (16)

Pašlaik es strādāju pie empīriska pētījuma par šo jautājumu (tuvojas procesora simulāciju gadsimts mūsu HPC iekārtā!). Mans padoms būtu izmantot "lielu" tīklu un regularizāciju, ja izmantojat regularizāciju, tad tīkla arhitektūra kļūst mazāk svarīga (ar nosacījumu, ka tā ir pietiekami liela, lai atspoguļotu pamatfunkciju, ko vēlamies attēlot), bet jums ir pareizi jānoregulē regularizācijas parametrs.

Viena no arhitektūras izvēles problēmām ir tā, ka tā ir diskrēta, nevis nepārtraukta modeļa sarežģītības kontrole, un tāpēc tā var būt mazliet strups instruments, jo īpaši, ja ideālā sarežģītība ir zema.

Tomēr uz to visu attiecas teorēma, ka, lai gan regularizācija ir efektīva vairumā gadījumu, vienmēr būs gadījumi, kad arhitektūras atlase darbojas labāk, un vienīgais veids, kā noskaidrot, vai tas attiecas uz konkrēto problēmu, ir izmēģināt abas pieejas un veikt savstarpēju pārbaudi.

Ja man būtu jāveido automatizēts neironu tīklu konstruktors, es izmantotu Radforda Nīla (Radford Neal's) hibrīda Monte Karlo (HMC) uz izlases metodi balstītu Bejsa pieeju, kā arī izmantotu lielu tīklu un integrētu svarus, nevis optimizētu viena tīkla svarus. Tomēr tas ir skaitliski dārgi un nedaudz "melnā māksla", bet profesora Neala sasniegtie rezultāti liecina, ka tas ir tā vērts!

Komentāri (2)

Cik man zināms, nav iespējams automātiski izvēlēties slāņu un neironu skaitu katrā slānī. Bet ir tīkli, kas var automātiski veidot savu topoloģiju, piemēram, EANN (evolūcijas mākslīgie neironu tīkli, kas izmanto ģenētiskos algoritmus, lai attīstītu topoloģiju).

Pastāv vairākas pieejas, un vairāk vai mazāk mūsdienīga pieeja, kas, šķiet, dod labus rezultātus, ir NEAT (Neuro Evolution of Augmented Topologies).

Komentāri (0)