Ar yra standartinis ir pripažintas metodas, pagal kurį būtų galima parinkti sluoksnių skaičių ir mazgų skaičių kiekviename sluoksnyje neuroniniame tinkle su grįžtamuoju srautu? Mane domina automatizuoti neuroninių tinklų kūrimo būdai.
Suprantu, kad į šį klausimą jau buvo atsakyta, bet nemanau, kad esamas atsakymas iš tikrųjų atsako į klausimą, išskyrus nuorodą į nuorodą, apskritai susijusią su klausimo tema. Visų pirma nuorodoje aprašomas vienas programinio tinklo konfigūravimo metodas, tačiau tai nėra "[standartinis ir pripažintas] tinklo konfigūravimo metodas". Vadovaujantis nedideliu aiškių taisyklių rinkiniu, galima programiškai nustatyti kompetentingą tinklo architektūrą (t. y. neuronų sluoksnių skaičių ir tipą bei kiekvieną sluoksnį sudarančių neuronų skaičių). Vadovaudamiesi šia schema, gausite kompetentingą architektūrą, bet tikriausiai ne optimalią. Tačiau kai šis tinklas inicijuotas, mokymo metu galite iteratyviai koreguoti konfigūraciją naudodami keletą pagalbinių algoritmų; viena iš jų šeima veikia atskirstant mazgus pagal (mažas) svorio vektoriaus reikšmes po tam tikro mokymo epochų skaičiaus, kitaip tariant, pašalinant nereikalingus / perteklinius mazgus (daugiau apie tai toliau). Taigi kiekvienas NN turi trijų tipų sluoksnius: įvesties, paslėptas ir išvesties; Todėl NN architektūros kūrimas reiškia, kad reikia nustatyti kiekvieno tipo sluoksnių skaičiaus ir kiekvieno iš šių sluoksnių mazgų skaičiaus reikšmes. Įvesties sluoksnis Paprasta - kiekvienas NN turi lygiai vieną iš jų - jokių man žinomų išimčių nėra. Kalbant apie šį sluoksnį sudarančių neuronų skaičių, šis parametras yra visiškai ir vienareikšmiškai nustatomas žinant mokymo duomenų formą. Tiksliau, šį sluoksnį sudarančių neuronų skaičius yra lygus požymių (stulpelių) skaičiui jūsų duomenyse. Kai kurios NN konfigūracijos prideda vieną papildomą mazgą šališkumo nariui.
Šiuo metu atlieku empirinį šio klausimo tyrimą (artėjame prie procesoriaus amžiaus simuliacijų mūsų HPC įrenginyje!). Mano patarimas būtų naudoti "didelį" tinklą ir reguliarizaciją, jei naudojate reguliarizaciją, tinklo architektūra tampa mažiau svarbi (jei ji yra pakankamai didelė, kad atspindėtų pagrindinę funkciją, kurią norime užfiksuoti), tačiau reikia tinkamai sureguliuoti reguliarizacijos parametrą.
Viena iš architektūros parinkimo problemų yra ta, kad tai yra diskretus, o ne tolydus modelio sudėtingumo valdymas, todėl jis gali būti šiek tiek bukas instrumentas, ypač kai idealus sudėtingumas yra mažas.
Tačiau visa tai priklauso nuo "nemokamų pietų" teoremos, nors reguliavimas yra veiksmingas daugeliu atvejų, visada bus atvejų, kai architektūros parinkimas veiks geriau, ir vienintelis būdas išsiaiškinti, ar tai yra tiesa nagrinėjamos problemos atveju, yra išbandyti abu metodus ir atlikti kryžminį patikrinimą.
Jei kurčiau automatinį neuroninių tinklų konstruktorių, naudočiau Radfordo Nealo (Radford Neal') Hibridiniu Monte Karlu (HMC) pagrįstą Bajeso atrankos metodą, naudočiau didelį tinklą ir integruočiau svorius, o ne optimizuočiau vieno tinklo svorius. Tačiau tai yra skaičiavimo sąnaudos ir šiek tiek "juodas menas", bet rezultatai, kuriuos pasiekia profesorius Nealas, rodo, kad verta!
Kiek žinau, nėra būdo automatiškai pasirinkti sluoksnių ir neuronų skaičių kiekviename sluoksnyje. Tačiau yra tinklų, kurie gali automatiškai sukurti savo topologiją, pavyzdžiui, EANN (evoliuciniai dirbtiniai neuronų tinklai, kuriuose topologijai sukurti naudojami genetiniai algoritmai).
Yra keletas metodų, daugiau ar mažiau modernus, kuris, atrodo, davė gerų rezultatų, buvo NEAT (Neuro Evolution of Augmented Topologies).