Bestaat er een standaard en aanvaarde methode voor het selecteren van het aantal lagen, en het aantal knooppunten in elke laag, in een feed-forward neuraal netwerk? Ik ben geïnteresseerd in geautomatiseerde manieren om neurale netwerken te bouwen.
Ik realiseer me dat deze vraag beantwoord is, maar ik denk niet'dat het bestaande antwoord echt op de vraag ingaat, behalve dat het verwijst naar een link die in het algemeen verband houdt met het onderwerp van de vraag's. In het bijzonder beschrijft de link één techniek voor programmatische netwerkconfiguratie, maar dat is geen "[een] standaard en geaccepteerde methode" voor netwerkconfiguratie. Door een kleine reeks duidelijke regels te volgen, kan men programmatisch een bekwame netwerkarchitectuur instellen (d.w.z. het aantal en type neuronale lagen en het aantal neuronen waaruit elke laag bestaat). Als je dit schema volgt, krijg je een bekwame architectuur, maar waarschijnlijk geen optimale. Maar als dit netwerk eenmaal geïnitialiseerd is, kun je de configuratie tijdens de training iteratief bijstellen met behulp van een aantal aanvullende algoritmen; één familie hiervan werkt door het snoeien van knooppunten op basis van (kleine) waarden van de gewichtsvector na een bepaald aantal trainingsepoches - met andere woorden, het elimineren van overbodige/redundante knooppunten (hieronder meer hierover). Elk NN heeft dus drie soorten lagen: input, hidden, en output.
Ik ben momenteel bezig met een empirische studie hiervan (en nader een processor-century van simulaties op onze HPC faciliteit!). Mijn advies zou zijn om een "groot" netwerk en regularisatie te gebruiken, als je regularisatie gebruikt dan wordt de netwerk architectuur minder belangrijk (mits het groot genoeg is om de onderliggende functie die we willen vastleggen weer te geven), maar je moet wel de regularisatie parameter goed afstellen.
Een van de problemen met architectuurselectie is dat het een discrete, in plaats van continue, controle van de complexiteit van het model is, en daarom een beetje een bot instrument kan zijn, vooral wanneer de ideale complexiteit laag is.
Dit is echter allemaal onderworpen aan de "no free lunch" stellingen: hoewel regularisatie in de meeste gevallen effectief is, zullen er altijd gevallen zijn waarin architectuurselectie beter werkt, en de enige manier om erachter te komen of dat voor het probleem in kwestie geldt, is beide benaderingen uit te proberen en te kruisvalideren.
Als ik een geautomatiseerde neurale netwerkbouwer zou bouwen, zou ik Radford Neal's Hybrid Monte Carlo (HMC) sampling-gebaseerde Bayesiaanse aanpak gebruiken, en een groot netwerk gebruiken en over de gewichten integreren in plaats van de gewichten van een enkel netwerk te optimaliseren. Dat is echter rekentechnisch duur en een beetje een "zwarte kunst" maar de resultaten die Prof. Neal bereikt suggereren dat het de moeite waard is!
Voor zover ik weet is er geen manier om automatisch het aantal lagen en neuronen in elke laag te kiezen. Maar er zijn netwerken die hun topologie automatisch kunnen opbouwen, zoals EANN (Evolutionary Artificial Neural Networks, die Genetische Algoritmen gebruiken om de topologie te ontwikkelen).
Er zijn verschillende benaderingen, een min of meer moderne die goede resultaten leek te geven was NEAT (Neuro Evolution of Augmented Topologies).