Outils pour utilisateurs

Outils du site


comment_configurer_le_nombre_de_couches_et_de_nœuds_dans_un_reseau_neuronal

Comment configurer le nombre de couches et de nœuds dans un réseau neuronal

Ressources

Introduction

Les réseaux de neurones artificiels ont deux hyperparamètres principaux qui contrôlent l'architecture ou la topologie du réseau: le nombre de couches et le nombre de nœuds dans chaque couche cachée.
Vous devez spécifier des valeurs pour ces paramètres lors de la configuration de votre réseau.
Le moyen le plus fiable de configurer ces hyperparamètres pour votre problème de modélisation prédictive spécifique consiste à expérimenter systématiquement avec un faisceau de test robuste.
Cela peut être une pilule difficile à avaler pour les débutants dans le domaine de l'apprentissage automatique, à la recherche d'un moyen analytique de calculer le nombre optimal de couches et de nœuds, ou de règles empiriques faciles à suivre.

Aperçu

Le Perceptron multicouche

Un nœud, également appelé neurone ou Perceptron, est une unité de calcul qui a une ou plusieurs connexions d'entrée pondérées, une fonction de transfert qui combine les entrées d'une manière ou d'une autre et une connexion de sortie.
Les nœuds sont ensuite organisés en couches pour constituer un réseau.
Un réseau neuronal artificiel monocouche, également appelé monocouche, a une seule couche de nœuds, comme son nom l'indique. Chaque nœud de la couche unique se connecte directement à une variable d'entrée et contribue à une variable de sortie.
Les réseaux monocouche n'ont qu'une seule couche d'unités actives. Les entrées se connectent directement aux sorties via une seule couche de poids. Les sorties n'interagissent pas, donc un réseau avec N sorties peut être traité comme N réseaux séparés à sortie unique.
Un réseau monocouche peut être étendu à un réseau multicouche, appelé Perceptron multicouche. Un Perceptron multicouche, ou MLP pour faire court, est un réseau neuronal artificiel avec plus d'une seule couche.
Il possède une couche d'entrée qui se connecte aux variables d'entrée, une ou plusieurs couches masquées et une couche de sortie qui produit les variables de sortie.
Le perceptron multicouche standard (MLP) est une cascade de perceptrons monocouche. Il existe une couche de nœuds d'entrée, une couche de nœuds de sortie et une ou plusieurs couches intermédiaires. Les couches intérieures sont parfois appelées «couches cachées» car elles ne sont pas directement observables à partir des entrées et sorties du système.

Nous pouvons résumer les types de couches dans un MLP comme suit:

  • Couche d'entrée : variables d'entrée, parfois appelées couche visible.
  • Couches cachées : couches de nœuds entre les couches d'entrée et de sortie. Il peut y avoir une ou plusieurs de ces couches.
  • Couche de sortie : couche de nœuds qui produit les variables de sortie.

Enfin, il existe des termes utilisés pour décrire la forme et la capacité d'un réseau neuronal; par exemple:

  • Taille : le nombre de nœuds dans le modèle.
  • Largeur : le nombre de nœuds dans une couche spécifique.
  • Profondeur : le nombre de couches dans un réseau neuronal.
  • Capacité : Le type ou la structure des fonctions qui peuvent être apprises par une configuration réseau. Parfois appelée « capacité de représentation ».
  • Architecture : la disposition spécifique des couches et des nœuds du réseau.

Comment compter les couches ?

Traditionnellement, il y a un certain désaccord sur la façon de compter le nombre de couches. Le désaccord porte sur le fait de savoir si la couche d'entrée est comptée ou non. Il y a un argument pour suggérer qu'il ne devrait pas être compté parce que les entrées ne sont pas actives; ce sont simplement les variables d'entrée. Nous utiliserons cette convention; c'est aussi la convention recommandée dans le livre « Neural Smithing ».
Par conséquent, un MLP qui a une couche d'entrée, une couche cachée et une couche de sortie est un MLP à 2 couches.
La structure d'un MLP peut être résumée à l'aide d'une simple notation. Cette notation pratique résume à la fois le nombre de couches et le nombre de nœuds dans chaque couche. Le nombre de nœuds dans chaque couche est spécifié sous la forme d'un entier, dans l'ordre de la couche d'entrée à la couche de sortie, la taille de chaque couche étant séparée par un caractère barre oblique («/»).
Par exemple, un réseau avec deux variables dans la couche d'entrée, une couche cachée avec huit nœuds et une couche de sortie avec un nœud serait décrit en utilisant la notation: 2/8/1.
Je recommande d'utiliser cette notation lors de la description des couches et de leur taille pour un réseau de neurones Perceptron multicouche.

Pourquoi avoir plusieurs couches ?

Avant d'examiner le nombre de couches à spécifier, il est important de réfléchir aux raisons pour lesquelles nous voudrions avoir plusieurs couches.
Un réseau neuronal monocouche ne peut être utilisé que pour représenter des fonctions linéairement séparables. Cela signifie des problèmes très simples où, par exemple, les deux classes d'un problème de classification peuvent être soigneusement séparées par une ligne. Si votre problème est relativement simple, peut-être qu'un réseau monocouche serait suffisant.
La plupart des problèmes que nous souhaitons résoudre ne sont pas linéairement séparables. Un Perceptron multicouche peut être utilisé pour représenter des régions convexes. Cela signifie qu'en fait, ils peuvent apprendre à dessiner des formes autour d'exemples dans un espace de grande dimension qui peut les séparer et les classer, surmontant ainsi la limitation de la séparabilité linéaire.

En théorie

En fait, il y a une découverte théorique de Lippmann dans l'article de 1987 « Une introduction au calcul avec des réseaux neuronaux » qui montre qu'un MLP avec deux couches cachées est suffisant pour créer des régions de classification de toute forme souhaitée. Ceci est instructif, même s'il convient de noter qu'aucune indication sur le nombre de nœuds à utiliser dans chaque couche ou sur la manière d'apprendre les poids n'est donnée.
Une autre découverte théorique et une preuve ont montré que les MLP sont des approximateurs universels . Avec une couche cachée, un MLP peut se rapprocher de n'importe quelle fonction dont nous avons besoin.

Remarque

Plus précisément, le théorème d'approximation universelle stipule qu'un réseau à anticipation avec une couche de sortie linéaire et au moins une couche cachée avec une fonction d'activation «écrasante» (telle que la fonction d'activation sigmoïde logistique) peut approximer n'importe quelle fonction mesurable de Borel à partir d'un espace de dimension finie à un autre avec toute quantité d'erreur non nulle souhaitée, à condition que le réseau dispose d'un nombre suffisant d'unités cachées.

En pratique

En pratique, nous n'avons encore aucune idée du nombre de nœuds à utiliser dans la couche cachée unique pour un problème donné, ni comment apprendre ou définir efficacement leurs poids. En outre, de nombreux contre-exemples ont été présentés de fonctions qui ne peuvent pas être apprises directement via un seul MLP à une seule couche cachée ou qui nécessitent un nombre infini de nœuds.
Même pour les fonctions qui peuvent être apprises via un MLP suffisamment grand à une couche cachée, il peut être plus efficace de l'apprendre avec deux (ou plus) couches cachées.
Puisqu'une seule couche cachée suffisamment grande est adéquate pour l'approximation de la plupart des fonctions, pourquoi quelqu'un en utiliserait-il plus? Une des raisons tient aux mots «suffisamment grand». Bien qu'une seule couche cachée soit optimale pour certaines fonctions, il y en a d'autres pour lesquelles une solution à une seule couche cachée est très inefficace par rapport aux solutions avec plus de couches.

Combien de couches et de nœuds utiliser?

Combien de couches devez-vous utiliser dans votre Perceptron multicouche et combien de nœuds par couche? Dans cette section, nous énumérerons cinq approches pour résoudre ce problème.

Expérimentation

En général, quand on me demande combien de couches et de nœuds utiliser pour un MLP, je réponds souvent: Je ne sais pas. Utilisez l'expérimentation systématique pour découvrir ce qui fonctionne le mieux pour votre ensemble de données spécifique. Je maintiens toujours cette réponse. En général, vous ne pouvez pas calculer analytiquement le nombre de couches ou le nombre de nœuds à utiliser par couche dans un réseau neuronal artificiel pour résoudre un problème spécifique de modélisation prédictive du monde réel. Le nombre de couches et le nombre de nœuds dans chaque couche sont des hyperparamètres de modèle que vous devez spécifier. Vous êtes probablement la première personne à tenter de résoudre votre problème spécifique avec un réseau neuronal. Personne ne l'a résolu avant vous. Par conséquent, personne ne peut vous dire comment configurer le réseau. Vous devez découvrir la réponse en utilisant un harnais de test robuste et des expériences contrôlées.
Indépendamment de l'heuristique que vous pourriez rencontrer, toutes les réponses reviendront à la nécessité d'une expérimentation minutieuse pour voir ce qui fonctionne le mieux pour votre ensemble de données spécifique.

Intuition

Le réseau peut être configuré via l'intuition. Par exemple, vous pouvez avoir une intuition qu'un réseau profond est nécessaire pour résoudre un problème de modélisation prédictive spécifique. Un modèle profond fournit une hiérarchie de couches qui construisent des niveaux d'abstraction croissants de l'espace des variables d'entrée aux variables de sortie. Étant donné une compréhension du domaine du problème, nous pouvons croire qu'un modèle hiérarchique profond est nécessaire pour résoudre suffisamment le problème de prédiction. Dans ce cas, nous pouvons choisir une configuration de réseau comportant de nombreuses couches de profondeur. Le choix d'un modèle profond encode une croyance très générale selon laquelle la fonction que nous voulons apprendre devrait impliquer la composition de plusieurs fonctions plus simples. Cela peut être interprété du point de vue de l'apprentissage de la représentation comme indiquant que nous croyons que le problème d'apprentissage consiste à découvrir un ensemble de facteurs sous-jacents de variation qui peuvent à leur tour être décrits en termes d'autres facteurs sous-jacents de variation plus simples.
Cette intuition peut provenir de l'expérience du domaine, de l'expérience des problèmes de modélisation avec les réseaux de neurones, ou d'un mélange des deux.
D'après mon expérience, les intuitions sont souvent invalidées via des expériences.

Optez pour la profondeur

Dans leur important manuel sur l'apprentissage profond, Goodfellow, Bengio et Courville soulignent qu'empiriquement, sur des problèmes d'intérêt, les réseaux de neurones profonds semblent mieux fonctionner. Plus précisément, ils indiquent le choix d'utiliser les réseaux de neurones profonds comme argument statistique dans les cas où la profondeur peut être intuitivement bénéfique. Empiriquement, une plus grande profondeur semble se traduire par une meilleure généralisation pour une grande variété de tâches. […] Cela suggère que l'utilisation d'architectures profondes exprime en effet un a priori utile sur l'espace des fonctions que le modèle apprend.

Nous pouvons utiliser cet argument pour suggérer que l'utilisation de réseaux profonds, ceux avec de nombreuses couches, peut être une approche heuristique de la configuration des réseaux pour des problèmes de modélisation prédictive difficiles. Ceci est similaire aux conseils pour commencer avec Random Forest et Stochastic Gradient Boosting sur un problème de modélisation prédictive avec des données tabulaires pour avoir rapidement une idée d'une limite supérieure sur la compétence du modèle avant de tester d'autres méthodes.

Emprunter des idées

Une approche simple, mais peut-être longue, consiste à tirer parti des résultats rapportés dans la littérature. Trouvez des documents de recherche qui décrivent l'utilisation des MLP sur des instances de problèmes de prédiction similaires d'une certaine manière à votre problème. Notez la configuration des réseaux utilisés dans ces articles et utilisez-les comme point de départ pour les configurations à tester sur votre problème. La transférabilité des hyperparamètres de modèle qui aboutissent à des modèles habiles d'un problème à un autre est un problème ouvert difficile et la raison pour laquelle la configuration des hyperparamètres de modèle est plus un art que de la science. Néanmoins, les couches réseau et le nombre de nœuds utilisés sur des problèmes connexes sont un bon point de départ pour tester des idées.

Recherche

Concevez une recherche automatisée pour tester différentes configurations de réseau. Vous pouvez semer la recherche avec des idées issues de la littérature et de l'intuition. Certaines stratégies de recherche populaires incluent:

  • Aléatoire : essayez des configurations aléatoires de couches et de nœuds par couche.
  • Grille : essayez une recherche systématique sur le nombre de couches et de nœuds par couche.
  • Heuristique : essayez une recherche dirigée sur des configurations telles qu'un algorithme génétique ou une optimisation bayésienne.
  • Exhaustif : essayez toutes les combinaisons de couches et le nombre de nœuds; cela pourrait être faisable pour de petits réseaux et ensembles de données.

Cela peut être difficile avec de grands modèles, de grands ensembles de données et des combinaisons des deux. Voici quelques idées pour réduire ou gérer la charge de calcul:

  • Ajustez les modèles sur un sous-ensemble plus petit de l'ensemble de données d'entraînement pour accélérer la recherche.
  • Liez de manière agressive la taille de l'espace de recherche.
  • Parallélisez la recherche sur plusieurs instances de serveur.

Je recommande d'être systématique si le temps et les ressources le permettent.

Bonus

J'ai vu d'innombrables heuristiques sur la façon d'estimer le nombre de couches et soit le nombre total de neurones, soit le nombre de neurones par couche.
Je ne veux pas les énumérer. Je suis sceptique sur le fait qu'ils ajoutent une valeur pratique au-delà des cas particuliers sur lesquels ils sont présentés.

Lectures complémentaires

Cette section fournit plus de ressources sur le sujet si vous souhaitez approfondir. Voir l'article original.

, ,
comment_configurer_le_nombre_de_couches_et_de_nœuds_dans_un_reseau_neuronal.txt · Dernière modification: 2020/10/21 13:39 de serge