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:
Lorsque vous commencez la construction du modèle, placez-vous du côté de plusieurs nœuds dans la couche masquée.
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:
Une règle de base est que la taille de ce calque [caché] se situe quelque part entre la taille du calque d'entrée ... et la taille du calque de sortie ...
Pour calculer le nombre de nœuds cachés, nous utilisons une règle générale de: (Nombre d'entrées + sorties) x 2/3
RoT basé sur les principaux composants:
En général, nous spécifions autant de nœuds masqués que de dimensions [composants principaux] nécessaires pour capturer 70 à 90% de la variance de l'ensemble de données d'entrée .
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.