Si nous avons 10 vecteurs propres, nous pouvons avoir 10 nœuds neuronaux dans la couche d'entrée.Si nous avons 5 classes de sortie, nous pouvons avoir 5 nœuds dans la couche de sortie.Mais quels sont les critères pour choisir le nombre de couches cachées dans un MLP et combien de neurones nœuds dans 1 couche cachée?
machine-learning
neural-network
deep-learning
perceptron
Abhishek kumar
la source
la source
Réponses:
combien de couches cachées ?
un modèle avec zéro calque caché résoudra les données séparables linéairement . Donc, à moins que vous ne sachiez déjà que vos données ne sont pas linéairement séparables, cela ne fait pas de mal de le vérifier - pourquoi utiliser un modèle plus complexe que la tâche ne l'exige? S'il est linéairement séparable, une technique plus simple fonctionnera, mais un Perceptron fera également l'affaire.
En supposant que vos données nécessitent une séparation par une technique non linéaire, commencez toujours par une couche cachée . C'est presque certainement tout ce dont vous aurez besoin. Si vos données sont séparables à l'aide d'un MLP, alors ce MLP n'a probablement besoin que d'une seule couche cachée. Il y a une justification théorique à cela, mais ma raison est purement empirique: de nombreux problèmes de classification / régression difficiles sont résolus à l'aide de MLP à une seule couche cachée, mais je ne me souviens pas avoir rencontré de MLP à plusieurs couches cachées utilisées pour modéliser les données avec succès. -que ce soit sur les babillards ML, les manuels ML, les articles académiques, etc. Ils existent, certes, mais les circonstances qui justifient leur utilisation sont empiriquement assez rares.
Combien de nœuds dans la couche cachée?
De la littérature académique MLP. ma propre expérience, etc., j'ai rassemblé et m'appuie souvent sur plusieurs règles empiriques ( RoT ), et que j'ai également trouvées comme des guides fiables (c.-à-d., les conseils étaient précis, et même quand ce n'était était généralement clair quoi faire ensuite):
RoT basé sur l'amélioration de la convergence:
Pourquoi? Premièrement, quelques nœuds supplémentaires dans la couche cachée ne feront probablement aucun mal - votre MLP continuera de converger. D'un autre côté, trop peu de nœuds dans la couche cachée peuvent empêcher la convergence. Pensez-y de cette façon, des nœuds supplémentaires fournissent une capacité excédentaire - des poids supplémentaires pour stocker / libérer le signal vers le réseau pendant l'itération (formation ou création de modèle). Deuxièmement, si vous commencez avec des nœuds supplémentaires dans votre couche masquée, il est facile de les élaguer plus tard (pendant la progression de l'itération). Ceci est courant et il existe des techniques de diagnostic pour vous aider (par exemple, le diagramme de Hinton, qui est juste une représentation visuelle des matrices de poids, une «carte thermique» des valeurs de poids,).
RoT basés sur la taille de la couche d'entrée et la taille de la couche de sortie:
RoT basé sur les principaux composants:
Et pourtant, l' auteur de la FAQ NN appelle ces règles "absurdes" (littéralement) parce qu'elles: ignorent le nombre d'instances d'entraînement, le bruit dans les cibles (valeurs des variables de réponse) et la complexité de l'espace des fonctionnalités.
À son avis (et il m'a toujours semblé qu'il savait de quoi il parlait), choisissez le nombre de neurones dans la couche cachée en fonction du fait que votre MLP comprend une forme de régularisation ou un arrêt précoce .
La seule technique valide pour optimiser le nombre de neurones dans la couche cachée:
Pendant la construction de votre modèle, testez de manière obsessionnelle; les tests révéleront les signatures d'une architecture réseau "incorrecte". Par exemple, si vous commencez avec un MLP ayant une couche cachée composée d'un petit nombre de nœuds (que vous augmenterez progressivement au besoin, en fonction des résultats des tests), votre erreur d'entraînement et de généralisation sera à la fois élevée causée par un biais et un sous-ajustement.
Ensuite, augmentez le nombre de nœuds dans la couche cachée, un par un, jusqu'à ce que l'erreur de généralisation commence à augmenter, cette fois en raison d'un surajustement et d'une variance élevée.
En pratique, je le fais de cette façon:
couche d'entrée : la taille de mon facteur de données (le nombre de fonctionnalités dans mon modèle) + 1 pour le nœud de biais et sans inclure la variable de réponse, bien sûr
couche de sortie : uniquement déterminée par mon modèle: régression (un nœud) versus classification (nombre de nœuds équivalent au nombre de classes, en supposant softmax)
couche cachée : pour commencer , une couche cachéeavec un nombre de nœuds égal à la taille de la couche d'entrée. La taille «idéale» est plus susceptible d'être plus petite (c'est-à-dire, un certain nombre de nœuds entre le nombre dans la couche d'entrée et le nombre dans la couche de sortie) plutôt que plus grande - encore une fois, il ne s'agit que d'une observation empirique, et le volume de cette observation est ma propre expérience. Si le projet justifiait le temps supplémentaire requis, alors je commence par une seule couche cachée composée d'un petit nombre de nœuds, puis (comme je l'ai expliqué juste ci-dessus) j'ajoute des nœuds à la couche cachée, un à la fois, tout en calculant la généralisation erreur, erreur d'apprentissage, biais et variance. Lorsque l'erreur de généralisation a diminué et juste avant qu'elle ne recommence à augmenter, le nombre de nœuds à ce stade est mon choix. Voir la figure ci-dessous.
la source
Il est très difficile de choisir le nombre de neurones dans une couche cachée, et de choisir le nombre de couches cachées dans votre réseau de neurones.
Habituellement, pour la plupart des applications, une couche cachée suffit. De plus, le nombre de neurones dans cette couche cachée doit être compris entre le nombre d'entrées (10 dans votre exemple) et le nombre de sorties (5 dans votre exemple).
Mais la meilleure façon de choisir le nombre de neurones et de couches cachées est l'expérimentation. Entraînez plusieurs réseaux de neurones avec différents nombres de couches cachées et de neurones cachés, et mesurez les performances de ces réseaux à l'aide de la validation croisée . Vous pouvez vous en tenir au nombre qui donne le réseau le plus performant.
la source
Pour automatiser la sélection du meilleur nombre de couches et du meilleur nombre de neurones pour chacune des couches, vous pouvez utiliser l'optimisation génétique .
Les éléments clés seraient:
Vous pouvez également envisager:
la source
Récemment, il y a eu des travaux théoriques sur ce https://arxiv.org/abs/1809.09953 . En supposant que vous utilisez un RELU MLP, toutes les couches cachées ont le même nombre de nœuds et votre fonction de perte et votre vraie fonction que vous rapprochez avec un réseau de neurones obéissent à certaines propriétés techniques (dans l'article), vous pouvez choisir votre profondeur pour être de order $ \ log (n) $ et votre largeur de couches cachées doit être d'ordre $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Ici, $ n $ est la taille de votre échantillon, $ d $ est la dimension de votre vecteur d'entrée et $ \ beta $ est un paramètre de lissage pour votre vraie fonction. Puisque $ \ beta $ est inconnu, vous voudrez probablement le traiter comme un hyperparamètre.
En faisant cela, vous pouvez garantir qu'avec une probabilité qui converge vers 1 $ en fonction de la taille de l'échantillon, votre erreur d'approximation converge vers 0 $ en fonction de la taille de l'échantillon. Ils donnent le taux. Notez qu'il n'est pas garanti que ce soit la «meilleure» architecture, mais cela peut au moins vous donner un bon point de départ. De plus, ma propre expérience suggère que des choses comme le décrochage peuvent encore aider dans la pratique.
la source