Existe-t-il une méthode standard et acceptée pour sélectionner le nombre de couches et le nombre de nœuds dans chaque couche dans un réseau neuronal à rétroaction? Je suis intéressé par les moyens automatisés de construction de réseaux de neurones.
model-selection
neural-networks
Rob Hyndman
la source
la source
Réponses:
Je sais que cette question a reçu une réponse, mais je ne pense pas que la réponse existante engage réellement la question au-delà de l'indication d'un lien généralement lié au sujet de la question. En particulier, le lien décrit une technique de configuration de réseau par programme, mais ce n'est pas une " méthode standard et acceptée " de configuration de réseau.
En suivant un petit ensemble de règles claires, il est possible de définir par programme une architecture de réseau compétente (c'est-à-dire le nombre et le type de couches neuronales et le nombre de neurones composant chaque couche). En suivant ce schéma, cela vous donnera une architecture compétente mais probablement pas optimale.
Mais une fois ce réseau initialisé, vous pouvez ajuster la configuration de manière itérative pendant l’entraînement à l’aide de plusieurs algorithmes auxiliaires; une famille de ces travaux consiste à élaguer les nœuds en fonction de (petites) valeurs du vecteur de poids après un certain nombre d'époques d’entraînement - en d’autres termes, éliminer les nœuds inutiles / redondants (plus de détails à ce sujet ci-dessous).
Chaque NN comporte donc trois types de couches: entrée , masqué et sortie .
Créer l’architecture NN implique donc de définir des valeurs pour le nombre de couches de chaque type et le nombre de nœuds dans chacune de ces couches.
La couche d'entrée
Simple - chaque NN en a exactement un - aucune exception à ma connaissance.
En ce qui concerne le nombre de neurones composant cette couche, ce paramètre est entièrement et uniquement déterminé lorsque vous connaissez la forme de vos données d’entraînement. Plus précisément, le nombre de neurones composant cette couche est égal au nombre de caractéristiques (colonnes) de vos données . Certaines configurations NN ajoutent un nœud supplémentaire pour un terme de biais.
La couche de sortie
Comme la couche d'entrée, chaque NN a exactement une couche de sortie. Déterminer sa taille (nombre de neurones) est simple; il est complètement déterminé par la configuration de modèle choisie.
Votre NN fonctionne-t-il en mode machine ou en mode régression (la convention ML consistant à utiliser un terme également utilisé dans les statistiques, mais lui attribuer une signification différente est très déroutante). Mode machine: renvoie une étiquette de classe (par exemple, "Compte Premium" / "Compte de base"). Le mode de régression renvoie une valeur (par exemple, le prix).
Si le NN est un régresseur, la couche en sortie a un seul nœud.
Si le NN est un classificateur, il possède également un seul nœud, sauf si softmax est utilisé. Dans ce cas, la couche de sortie comporte un nœud par étiquette de classe dans votre modèle.
Les couches cachées
Ces quelques règles définissent donc le nombre de couches et la taille (neurones / couche) pour les couches d’entrée et de sortie. Cela laisse les couches cachées.
Combien de couches cachées? Eh bien, si vos données sont séparables linéairement (ce que vous savez souvent lorsque vous commencez à coder un fichier NN), vous n'avez pas besoin de couches cachées. Bien sûr, vous n’avez pas besoin d’un NN pour résoudre vos données, mais cela fonctionnera quand même.
Au-delà de cela, comme vous le savez probablement, il y a une montagne de commentaires sur la question de la configuration de la couche cachée dans les NN (voir la FAQ incroyablement approfondie et perspicace de NN pour un excellent résumé de ce commentaire). Un problème qui fait consensus parmi les sujets abordés concerne la différence de performances par rapport à l’ajout de couches cachées: les situations dans lesquelles les performances s’améliorent avec une deuxième (ou troisième, etc.) couche cachée sont très rares. Une couche cachée est suffisante pour la grande majorité des problèmes.
Alors, qu'en est-il de la taille de la couche cachée - combien de neurones? Il existe certaines règles empiriques dérivées empiriquement, parmi lesquelles le plus souvent invoquée est la suivante: « la taille optimale de la couche masquée est généralement comprise entre la taille de l'entrée et la taille des couches de sortie ». Jeff Heaton, auteur de Introduction aux réseaux de neurones en Java, en offre quelques autres.
En résumé, pour la plupart des problèmes, on peut probablement obtenir des performances décentes (même sans seconde étape d'optimisation) en définissant la configuration de la couche cachée en utilisant seulement deux règles: (i) le nombre de couches cachées est égal à un; et (ii) le nombre de neurones dans cette couche est la moyenne des neurones dans les couches d'entrée et de sortie.
Optimisation de la configuration du réseau
Élagagedécrit un ensemble de techniques permettant de réduire la taille du réseau (par nœuds et non par couches) afin d’améliorer les performances de calcul et parfois les performances de résolution. L'essentiel de ces techniques consiste à supprimer les nœuds du réseau pendant la formation en identifiant ceux qui, s'ils étaient supprimés du réseau, n'auraient pas d'incidence notable sur les performances du réseau (c'est-à-dire la résolution des données). (Même sans utiliser une technique d'élagage formelle, vous pouvez avoir une idée approximative des nœuds sans importance en examinant votre matrice de poids après l'entraînement; regardez les poids très proches de zéro - ce sont les nœuds à chaque extrémité de ces poids qui sont souvent supprimés pendant l'élagage.) Évidemment, si vous utilisez un algorithme d'élagage pendant l'entraînement, commencez par une configuration réseau qui est plus susceptible de comporter un nombre excessif de nœuds (c.-à-d. 'élagage') - en d'autres termes,
En d'autres termes, en appliquant un algorithme d'élagage à votre réseau pendant l'entraînement, vous pouvez approcher une configuration de réseau optimale; Je ne sais pas si vous pouvez le faire de manière simple (comme un algorithme basé sur un algorithme génétique), bien que je sache que pour le moment, cette optimisation en deux étapes est plus courante.
la source
La réponse de @ doug a fonctionné pour moi. Il existe une règle supplémentaire qui aide à résoudre les problèmes d’apprentissage supervisé. Vous pouvez généralement empêcher le sur-ajustement si vous maintenez votre nombre de neurones en dessous:
Pour une procédure automatisée, vous commencez avec un alpha de 2 (deux fois plus de degrés de liberté dans vos données d’entraînement que votre modèle), puis vous travaillez jusqu’à 10 si l’erreur (perte) de votre jeu de données d’entraînement est considérablement plus petite que pour votre modèle. votre jeu de données de test.
la source
N_h
solution (nombre moyen de neurones cachés par couche) est peut-être une règle légèrement meilleure pour plusieurs couchesN_s = (N_i + N_o) * N_h ^ N_hidden_layers
. Mais je n'utiliserais toujours pas cette formule. Ce n'est que pour des problèmes très fondamentaux (problèmes de jouets) lorsque vous ne prévoyez pas de mettre en œuvre d'autres approches de régularisation.Extrait de Introduction à Neural Networks for Java (deuxième édition) de Jeff Heaton - aperçu disponible gratuitement sur Google Books et sur le site Web de l'auteur :
J'aime aussi l'extrait suivant d'une réponse trouvée sur researchgate.net , qui en dit long:
la source
Je travaille actuellement sur une étude empirique à ce sujet (un siècle de simulations centenaire sur notre installation HPC!). Mon conseil serait d'utiliser un "grand" réseau et une régularisation. Si vous utilisez la régularisation, l'architecture du réseau devient alors moins importante (à condition qu'elle soit assez grande pour représenter la fonction sous-jacente que nous voulons capturer), mais vous devez ajuster la régularisation. paramètre correctement.
L’un des problèmes de la sélection d’architecture est qu’il s’agit d’un contrôle discret plutôt que continu de la complexité du modèle et qu’il peut donc s’avérer un instrument un peu émoussé, en particulier lorsque la complexité idéale est faible.
Cependant, tout cela est sujet aux théorèmes du "pas de repas gratuit", alors que la régularisation est efficace dans la plupart des cas, il y aura toujours des cas où la sélection d'architecture fonctionne mieux, et le seul moyen de déterminer si cela est vrai du problème rencontré est d'essayer les deux approches et la validation croisée.
Si je construisais un constructeur de réseaux neuronaux automatisé, j'utiliserais l'approche bayésienne basée sur l'échantillonnage Monte-Carlo (HMC) hybride de Radford Neal, utiliserais un grand réseau et l'intégrerais au-dessus des poids plutôt que d'optimiser les poids d'un seul réseau. Cependant, cela coûte cher en informatique et un peu "d’art noir", mais les résultats obtenus par le professeur Neal suggèrent que cela en vaut la peine!
la source
Pour autant que je sache, il n'y a aucun moyen de sélectionner automatiquement le nombre de couches et de neurones dans chaque couche. Mais il existe des réseaux qui peuvent construire automatiquement leur topologie, comme EANN (Réseaux de neurones artificiels évolutifs, qui utilisent des algorithmes génétiques pour faire évoluer la topologie).
Il existe plusieurs approches, une plus ou moins moderne qui semble donner de bons résultats est NEAT (Neuro Evolution of Augmented Topologies) .
la source
Ref:
1 Maîtres, Timothée. Recettes de réseaux de neurones pratiques en C ++. Morgan Kaufmann, 1993.
[2] http://www.iitbhu.ac.in/faculty/min/rajesh-rai/NMEICT-Slope/lecture/c14/l1.html
la source
Méthodes automatisées de construction de réseaux de neurones à l'aide de la recherche globale à hyper-paramètres:
Les couches d'entrée et de sortie ont une taille fixe.
Que peut varier:
Plusieurs méthodes peuvent être utilisées pour résoudre ce problème d’ optimisation discrète , le réseau étant exempt d’ erreurs sur les échantillons en tant que fonction de coût.
la source
Désolé, je ne peux pas encore publier de commentaire, alors s'il vous plaît, supportez-moi. Quoi qu'il en soit, je suis tombé sur ce fil de discussion qui me rappelait un document que j'avais vu récemment. Je pense que cela pourrait intéresser les gens qui participent ici:
la source
J'ai énuméré de nombreuses façons d'apprendre la topologie dans ma thèse de maîtrise, au chapitre 3 . Les grandes catégories sont:
la source
Je voudrais suggérer une méthode moins commune mais super efficace .
Fondamentalement, vous pouvez exploiter un ensemble d'algorithmes appelés "algorithmes génétiques" qui testent un petit sous-ensemble d'options potentielles (nombre aléatoire de couches et nombre de nœuds par couche). Il traite ensuite cette population d'options comme des "parents" qui créent des enfants en combinant / mutant un ou plusieurs des parents, de la même manière que les organismes évoluent. Les meilleurs enfants et certains enfants ok au hasard sont gardés dans chaque génération et au fil des générations, les plus aptes survivent.
Pour environ 100 paramètres ou moins (tels que le choix du nombre de couches, des types de couches et du nombre de neurones par couche), cette méthode est extrêmement efficace. Utilisez-le en créant un certain nombre d'architectures de réseau potentielles pour chaque génération et en les entraînant partiellement jusqu'à ce que la courbe d'apprentissage puisse être estimée (100-10k mini-lots, généralement en fonction de nombreux paramètres). Après quelques générations, vous voudrez peut-être considérer le moment où le train et la validation commencent à avoir un taux d'erreur considérablement différent (surajustement) en tant que fonction objective pour le choix des enfants. Il peut être judicieux d'utiliser un très petit sous-ensemble de vos données (10 à 20%) jusqu'à ce que vous choisissiez un modèle final pour parvenir à une conclusion plus rapidement. Utilisez également une seule graine pour votre initialisation réseau afin de comparer correctement les résultats.
10 à 50 générations devraient donner d'excellents résultats pour un réseau de taille décente.
la source
Nombre de couches cachées et ce qu'elles peuvent réaliser:
0 - Uniquement capable de représenter des fonctions ou des décisions séparables linéaires.
1 - Peut approximer n'importe quelle fonction contenant un mapping continu d'un espace fini à un autre.
2 - Peut représenter une limite de décision arbitraire à une précision arbitraire avec des fonctions d’activation rationnelles et peut se rapprocher de toute cartographie fluide avec une précision quelconque.
Plus de 2 - Les couches supplémentaires peuvent apprendre des représentations complexes (sorte d'ingénierie automatique des caractéristiques) des couches.
la source