web-dev-qa-db-fra.com

Comment déterminer le nombre de couches et de nœuds d'un réseau neuronal

Je construis actuellement un nn pour un ensemble de données avec 387 fonctionnalités et 3000 échantillons. Les sorties sont de 3 classes. J'ai configuré la structure du réseau comme suit:

entrée-> 200 -> {300-> 100} -> 50-> sortie

Ai-je choisi le bon nombre de nœuds et de couches? Comment déterminer le nombre de nœuds de chaque couche (entrée, caché et sortie)? Y a-t-il une règle?

17
SimpleDreamful

Règles? Autant que vous voulez et aucun. Voici un extrait de la Neural Network FAQ qui est une bonne page à consulter pour les questions de base:

  1. R: Combien d'unités cachées dois-je utiliser? ==========================================

    Il n'y a aucun moyen de déterminer une bonne topologie de réseau uniquement à partir du nombre d'entrées et de sorties. Cela dépend essentiellement du nombre d'exemples de formation et de la complexité de la classification que vous essayez d'apprendre. Il y a des problèmes avec une entrée et une sortie qui nécessitent des millions d'unités cachées, et des problèmes avec un million d'entrées et un million de sorties qui ne nécessitent qu'une seule unité cachée, ou pas du tout.
    Certains livres et articles proposent des "règles de base" pour choisir une topopologie - Ninputs plus Noutputs divisés par deux, peut-être avec un carré racine là quelque part - mais ces règles sont des ordures totales . D'autres règles concernent le nombre d'exemples disponibles: utilisez au maximum autant d'unités cachées que le nombre de poids dans le réseau multiplié par 10 est inférieur au nombre d'exemples. De telles règles ne concernent que le sur-ajustement et ne sont pas fiables non plus.

Dans votre cas, cependant, on peut certainement dire que le réseau est beaucoup trop complexe (même si vous avez appliqué une forte régularisation). Pourquoi tant de couches cachées? Commencez avec une couche cachée - malgré l'euphorie d'apprentissage profond - et avec un minimum de nœuds cachés. Augmentez le nombre de nœuds masqués jusqu'à obtenir de bonnes performances. Sinon, j'ajouterais d'autres couches. En outre, utilisez la validation croisée et la régularisation appropriée.

14
davidhigh

Couches

Comme Yoshua Bengio, directeur de l'Institut des algorithmes d'apprentissage de Montréal remarques :

"Très simple. Continuez à ajouter des couches jusqu'à ce que l'erreur de test ne s'améliore plus."

Une méthode recommandée par Geoff Hinton consiste à ajouter des couches jusqu'à ce que vous commenciez à équiper votre ensemble d'entraînement. Ensuite, vous ajoutez le décrochage ou une autre méthode de régularisation.

Noeuds

Pour votre tâche:

  • La couche d'entrée doit contenir 387 nœuds pour chacune des fonctionnalités.
  • La couche de sortie doit contenir 3 nœuds pour chaque classe.
  • Couches cachées Je trouve que la diminution progressive du nombre de neurones dans chaque couche fonctionne assez bien ( cette liste de trucs et astuces est d'accord avec lors de la création de codeurs automatiques pour les tâches de compression). Essayez peut-être 200 dans la première couche cachée et 100 dans la seconde; encore une fois, c'est un hyper-paramètre à optimiser et est très dépendant de la taille de l'ensemble de données.
23
andyandy

Comme ils l'ont dit, il n'y a pas de règle "magique" pour calculer le nombre de couches et de nœuds cachés du réseau neuronal, mais il existe quelques conseils ou recommandations qui peuvent vous aider à trouver les meilleurs.

Le nombre de nœuds masqués est basé sur une relation entre:

  • Nombre de nœuds d'entrée et de sortie
  • Quantité de données de formation disponibles
  • Complexité de la fonction qui tente d'être apprise
  • L'algorithme de formation

Pour minimiser l'erreur et avoir un réseau formé qui se généralise bien, vous devez choisir un nombre optimal de couches cachées, ainsi que des nœuds dans chaque couche cachée.

  • Trop peu de nœuds entraîneront une erreur élevée pour votre système car les facteurs prédictifs peuvent être trop complexes pour être capturés par un petit nombre de nœuds

  • Trop de nœuds s'adapteront à vos données d'entraînement et ne se généraliseront pas bien

Vous pouvez trouver quelques conseils généraux sur cette page:

Section - Combien d'unités cachées dois-je utiliser?

Si vos données sont linéairement séparables, vous n'avez absolument pas besoin de couches cachées. Sinon, il existe un consensus sur la différence de performances par rapport à l'ajout de couches cachées supplémentaires: les situations dans lesquelles les performances s'améliorent avec une deuxième (ou troisième, etc.) couche cachée sont très petites. Par conséquent, une couche cachée suffit pour la grande majorité des problèmes.

Il existe des règles empiriques dérivées empiriquement, parmi celles-ci, la plus couramment invoquée est `` la taille optimale de la couche cachée se situe généralement entre la taille de l'entrée et la taille des couches de sortie ''.

En somme, pour la plupart des problèmes, on pourrait probablement obtenir des performances décentes en définissant la configuration de couche cachée en utilisant seulement deux règles:

  • Le nombre de couches cachées est égal à un
  • Le nombre de neurones dans cette couche est la moyenne des neurones dans les couches d'entrée et de sortie.
3
omotto