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.
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.
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 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.
N_h
solution (nombre moyen de neurones cachés par couche) est peut-être une règle légèrement meilleure pour plusieurs couches N_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 :
Le nombre de couches cachées
Il faut vraiment prendre deux décisions concernant les couches cachées: combien de couches cachées il faut réellement avoir dans le réseau de neurones et combien de neurones seront dans chacune de ces couches. Nous allons d’abord examiner comment déterminer le nombre de couches cachées à utiliser avec le réseau de neurones.
Les problèmes nécessitant deux couches cachées sont rarement rencontrés. Cependant, les réseaux de neurones à deux couches cachées peuvent représenter des fonctions de formes quelconques. Il n'y a actuellement aucune raison théorique d'utiliser des réseaux de neurones comportant plus de deux couches cachées. En fait, pour de nombreux problèmes pratiques, il n’ya aucune raison d’utiliser plus d’une couche cachée. Le tableau 5.1 récapitule les capacités des architectures de réseau neuronal avec diverses couches cachées.
Tableau 5.1: Détermination du nombre de couches masquées
| Nombre de couches cachées | Résultat | 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 avec une précision arbitraire avec des fonctions d'activation rationnelles et peut se rapprocher de tout lisse cartographie avec précision.Décider du nombre de couches de neurones cachées n’est qu’une petite partie du problème. Vous devez également déterminer le nombre de neurones dans chacune de ces couches cachées. Ce processus est couvert dans la section suivante.
Le nombre de neurones dans les couches cachées
Décider du nombre de neurones dans les couches cachées est une partie très importante de la décision de l’architecture globale de votre réseau de neurones. Bien que ces couches n'interagissent pas directement avec l'environnement externe, elles ont une influence considérable sur le résultat final. Le nombre de couches cachées et le nombre de neurones dans chacune de ces couches cachées doivent être soigneusement pris en compte.
Si vous utilisez trop peu de neurones dans les couches cachées, vous obtiendrez ce que vous appelez une sous-adaptation. Il y a sous-ajustement lorsqu'il y a trop peu de neurones dans les couches cachées pour détecter correctement les signaux dans un ensemble de données compliqué.
Utiliser trop de neurones dans les couches cachées peut entraîner plusieurs problèmes. Premièrement, un trop grand nombre de neurones dans les couches cachées peut entraîner un surajustement. Une suralimentation survient lorsque le réseau de neurones a une capacité de traitement de l'information si importante que la quantité limitée d'informations contenues dans l'ensemble de formation ne suffit pas à entraîner tous les neurones des couches cachées. Un deuxième problème peut survenir même lorsque les données d'apprentissage sont suffisantes. Un nombre excessivement élevé de neurones dans les couches cachées peut augmenter le temps nécessaire à la formation du réseau. Le temps d’entraînement peut augmenter au point qu’il est impossible d’entraîner correctement le réseau de neurones. De toute évidence, il faut parvenir à un compromis entre trop et trop peu de neurones dans les couches cachées.
Il existe de nombreuses méthodes empiriques permettant de déterminer le nombre correct de neurones à utiliser dans les couches masquées, telles que les suivantes:
- Le nombre de neurones cachés doit être compris entre la taille de la couche d'entrée et la taille de la couche de sortie.
- Le nombre de neurones cachés devrait être 2/3 de la taille du calque d'entrée, plus celui du calque de sortie.
- Le nombre de neurones cachés doit être inférieur à deux fois la taille de la couche d'entrée.
Ces trois règles constituent un point de départ à considérer. En fin de compte, le choix d’une architecture pour votre réseau de neurones résultera en essais et erreurs. Mais qu'entend-on exactement par essais et erreurs? Vous ne voulez pas commencer à jeter des nombres aléatoires de couches et de neurones sur votre réseau. Cela prendrait beaucoup de temps. Le Chapitre 8, «Élagage d’un réseau de neurones», explore diverses manières de déterminer la structure optimale d’un réseau de neurones.
J'aime aussi l'extrait suivant d'une réponse trouvée sur researchgate.net , qui en dit long:
Steffen B Petersen · Université d'Aalborg
[...]
Afin de sécuriser la capacité du réseau à généraliser, le nombre de nœuds doit être maintenu aussi bas que possible. Si vous avez un grand nombre de nœuds, votre réseau devient une banque de mémoire capable de rappeler à la perfection l'ensemble d'apprentissage, mais ne fonctionne pas correctement sur des échantillons ne faisant pas partie de l'ensemble d'apprentissage.
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!
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) .
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.
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:
AdaNet: Apprentissage structurel adaptatif de réseaux de neurones artificiels
Corinna Cortés, Xavier Gonzalvo, Vitaly Kouznetsov, Mehryar Mohri, Scott Yang; Compte rendu de la 34e Conférence internationale sur l'apprentissage automatique, PMLR 70: 874-883, 2017.
Résumé Nous présentons un nouveau cadre d'analyse et d'apprentissage des réseaux de neurones artificiels. Notre approche apprend simultanément et de manière adaptative à la fois la structure du réseau et ses poids. La méthodologie est basée sur et accompagnée de fortes garanties d'apprentissage théorique dépendantes des données, de sorte que l'architecture de réseau finale s'adapte de manière démontrable à la complexité d'un problème donné.
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:
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.
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.