Architecture du perceptron multicouche (MLP): critères de choix du nombre de couches masquées et de la taille de la couche masquée?

Si nous avons 10 vecteurs propres alors nous pouvons avoir 10 nœuds neuraux dans la couche d’entrée. Si nous avons 5 classes de sortie, alors nous pouvons avoir 5 nœuds dans la couche de sortie. Mais quels sont les critères pour choisir le nombre de noeuds dans 1 couche cachée?

combien de couches cachées ?

un modèle avec zéro calque caché résoudra les données linéairement séparables . 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 vérifier cela – pourquoi utiliser un modèle plus complexe que ce que la tâche requirejs? Si elle est linéairement séparable, une technique plus simple fonctionnera, mais un Perceptron fera également le travail.

En supposant que vos données nécessitent une séparation par une technique non linéaire, commencez toujours par une couche masquée . C’est presque tout ce dont vous aurez besoin. Si vos données sont séparables à l’aide d’une MLP, cette MLP n’a probablement besoin que d’une seule couche masquée. Il existe une justification théorique à cela, mais ma raison est purement empirique: de nombreux problèmes de classification / régression difficiles sont résolus en utilisant des MLP à couche cachée unique, mais je ne me souviens pas avoir rencontré de MLP à couches cachées multiples pour modéliser avec succès des données. -Que ce soit sur les tableaux d’affichage 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., je me suis réuni et je m’appuie souvent sur plusieurs règles de base ( RoT ), et je les ai également trouvées être des guides fiables (c.-à-d. était généralement clair que faire ensuite:

RoT basée sur l’amélioration de la convergence:

Lorsque vous commencez la construction du modèle, errez du côté des autres nœuds de la couche masquée.

Pourquoi? Premièrement, quelques nœuds supplémentaires dans la couche cachée ne risquent pas de nuire – votre MLP continuera à converger. D’autre part, trop peu de nœuds dans la couche cachée peuvent empêcher la convergence. Pensez-y de cette manière, des nœuds supplémentaires offrent une capacité excédentaire – des poids supplémentaires pour stocker / libérer le signal sur le réseau pendant l’itération (formation ou création de modèles). Deuxièmement, si vous commencez avec des nœuds supplémentaires dans votre couche masquée, il est alors facile de les élaguer plus tard (pendant la progression de l’itération). Cela est courant et il existe des techniques de diagnostic pour vous aider (par exemple, le diagramme de Hinton, qui est simplement une représentation visuelle des masortingces de poids, une «carte thermique» des valeurs de poids,).

RoTs basés sur la taille de la couche d’entrée et la taille de la couche de sortie:

En règle générale, la taille de cette couche [cachée] doit se situer quelque part entre la taille de la couche en entrée… et la taille de la couche en 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 composants principaux:

Généralement, nous spécifions autant de nœuds cachés que de dimensions [composants principaux] nécessaires pour capturer 70 à 90% de la variance de l’dataset d’entrée .

Et pourtant, l’auteur de la FAQ NN appelle ces règles “non-sens” (littéralement), car elles: ignorent le nombre d’instances d’apprentissage, le bruit dans les cibles (valeurs des variables de réponse) et la complexité de l’espace object.

À son avis (et il m’a toujours semblé savoir de quoi il parlait), choisissez le nombre de neurones dans la couche cachée selon que votre MLP inclut 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:

Lors de la construction de votre modèle, testez de manière obsessionnelle; testing révélera les signatures de l’architecture réseau “incorrecte”. Par exemple, si vous commencez avec un MLP ayant une couche cachée composée d’un petit nombre de noeuds (que vous augmenterez progressivement en fonction des résultats des tests), votre erreur de formation et de généralisation sera élevée en raison du biais et du sous-ajustement.

Augmentez ensuite le nombre de nœuds dans la couche masquée, un à la fois, jusqu’à ce que l’erreur de généralisation commence à augmenter, cette fois en raison du sur-ajustement et de la grande variance.


En pratique, je le fais de cette façon:

Couche d’entrée : la taille de mon vecteur de données (le nombre d’entités de mon modèle) + 1 pour le nœud de biais et non 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 que softmax)

Couche cachée : pour démarrer , un calque masqué avec 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.-à-d. Un certain nombre de nœuds entre le nombre dans la couche d’entrée et le nombre dans la couche de sortie) que plus grande – là encore, il ne s’agit que d’une observation empirique. de cette observation est ma propre expérience. Si le projet justifiait le temps supplémentaire requirejs, alors je commence par une seule couche cachée composée d’un petit nombre de nœuds, puis (comme je l’ai expliqué ci-dessus) j’ajoute des nœuds à la couche cachée, un par un, tout en calculant la généralisation erreur, erreur de formation, biais et variance. Lorsque l’erreur de généralisation a plongé et juste avant de recommencer à augmenter, le nombre de nœuds à ce moment-là est mon choix. Voir la figure ci-dessous.

entrer la description de l'image ici

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 neuronal.

Habituellement, pour la plupart des applications, une couche cachée suffit. En outre, 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 le meilleur moyen de choisir le nombre de neurones et de couches cachées est l’expérimentation. Former plusieurs réseaux neuronaux avec différents nombres de couches cachées et de neurones cachés, et mesurer la performance de ces réseaux en utilisant la validation croisée . Vous pouvez vous en tenir au nombre qui donne le meilleur réseau.

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 pièces maîtresses seraient:

  1. Chromosome : Vecteur qui définit le nombre d’unités dans chaque couche cachée (par exemple [20,5,1,0,0] signifiant 20 unités dans la première couche cachée, 5 dans la seconde, …, avec les couches 4 et 5 manquantes). Vous pouvez définir une limite sur le nombre maximum de couches à essayer et le nombre maximal d’unités dans chaque couche. Vous devez également placer des ressortingctions sur la façon dont les chromosomes sont générés. Par exemple, [10, 0, 3, …] ne devraient pas être générés, car toute unité après une couche manquante (le «3, …») serait sans importance et gaspillerait les cycles d’évaluation.
  2. Fonction de remise en forme : Fonction qui renvoie l’inverse de l’erreur d’apprentissage la plus faible dans l’ensemble de validation croisée d’un réseau défini par un chromosome donné. Vous pouvez également inclure le nombre total d’unités ou le temps de calcul si vous souhaitez trouver le “réseau le plus petit / le plus rapide mais le plus précis”.

Vous pouvez également considérer:

  • Élagage : Commencez avec un grand réseau, puis réduisez les couches et les unités masquées, tout en gardant une trace des performances des ensembles de validation croisée.
  • Croissance : commencez par un très petit réseau, puis ajoutez des unités et des couches, puis suivez à nouveau les performances du jeu de CV.