Au cours des dernières années, les réseaux de neurones convolutionnels (ou peut-être les réseaux de neurones profonds en général) sont devenus de plus en plus profonds, avec des réseaux à la pointe de la technologie allant de 7 couches ( AlexNet ) à 1 000 couches ( réseaux résiduels) en 4 années. L’augmentation des performances d’un réseau plus profond s'explique par le fait qu’une fonction non linéaire plus complexe peut être apprise. Avec suffisamment de données d'apprentissage, cela permet aux réseaux de distinguer plus facilement les différentes classes.
Cependant, la tendance semble ne pas avoir suivi avec le nombre de paramètres dans chaque couche. Par exemple, le nombre de cartes de caractéristiques dans les couches convolutives, ou le nombre de nœuds dans les couches entièrement connectées, est resté à peu près le même et reste relativement faible, malgré la forte augmentation du nombre de couches. De mon intuition cependant, il semblerait que l'augmentation du nombre de paramètres par couche donnerait à chaque couche une source de données plus riche à partir de laquelle apprendre sa fonction non linéaire; mais cette idée semble avoir été négligée au profit de simplement ajouter plus de couches, chacune avec un petit nombre de paramètres.
Ainsi, alors que les réseaux sont devenus "plus profonds", ils ne sont pas devenus "plus larges". Pourquoi est-ce?
la source
Réponses:
Par souci de non-responsabilité, je travaille sur les réseaux neuronaux dans mes recherches, mais j'utilise généralement des réseaux neuronaux relativement petits et peu profonds plutôt que les réseaux très profonds à la pointe des recherches que vous citez dans votre question. Je ne suis pas un expert des bizarreries et des particularités des réseaux très profonds et je vais m'en remettre à quelqu'un qui l'est.
Premièrement, en principe, il n’ya aucune raison pour que vous ayez besoin de réseaux de neurones profonds. Un réseau neuronal suffisamment large avec une seule couche cachée peut s'approcher de n'importe quelle fonction (raisonnable) avec suffisamment de données d'apprentissage. Toutefois, l’utilisation d’un réseau extrêmement large et peu profond pose quelques difficultés. Le problème principal est que ces réseaux très larges et peu profonds sont très bons pour la mémorisation, mais pas pour la généralisation . Ainsi, si vous entraînez le réseau avec toutes les valeurs d'entrée possibles, un réseau super large pourrait éventuellement mémoriser la valeur de sortie correspondante souhaitée. Mais ce n'est pas utile car pour toute application pratique, vous ne disposerez pas de toutes les valeurs d'entrée possibles pour vous entraîner.
L'avantage des couches multiples est qu'elles peuvent apprendre des fonctionnalités à différents niveaux d'abstraction . Par exemple, si vous entraînez un réseau de neurones à convolution profonde pour classer les images, vous constaterez que la première couche s’entraînera à reconnaître des éléments fondamentaux tels que les bords, la couche suivante s’entraînant à reconnaître des couche s’entraînera à reconnaître des ensembles de formes comme les yeux ou le nez, et la couche suivante apprendra des caractéristiques encore plus élevées telles que les visages. Plusieurs couches sont bien meilleures pour généraliser, car elles apprennent toutes les caractéristiques intermédiaires entre les données brutes et la classification de haut niveau.
Donc, cela explique pourquoi vous pourriez utiliser un réseau profond plutôt qu'un réseau très large mais peu profond. Mais pourquoi pas un réseau très profond, très large? Je pense que la réponse est que vous souhaitez que votre réseau soit aussi petit que possible pour produire de bons résultats. Au fur et à mesure que vous augmentez la taille du réseau, vous n'introduisez que plus de paramètres que votre réseau doit apprendre, ce qui augmente les risques de surajustement. Si vous construisez un réseau très large et très profond, vous risquez que chaque couche ne mémorise que ce que vous voulez que la sortie soit, et vous vous retrouvez avec un réseau de neurones qui ne parvient pas à généraliser à de nouvelles données.
Outre le spectre de l'overfitting, plus votre réseau est large, plus il faudra de temps pour vous entraîner . Les réseaux profonds peuvent déjà coûter très cher en ordinateurs, il est donc fortement incité à les élargir suffisamment pour qu’ils fonctionnent bien, mais pas plus.
la source
Je ne pense pas qu'il y ait une réponse définitive à vos questions. Mais je pense que la sagesse conventionnelle va comme suit:
Fondamentalement, à mesure que l'espace d'hypothèses d'un algorithme d'apprentissage se développe, cet algorithme peut apprendre des structures plus riches et plus riches. Mais dans le même temps, l’algorithme devient plus sujet aux surajustements et son erreur de généralisation est susceptible d’augmenter.
Ainsi, pour tout ensemble de données donné, il est conseillé de travailler avec le modèle minimal disposant de la capacité suffisante pour connaître la structure réelle des données. Mais il s’agit là d’un conseil très vague, car la "structure réelle des données" est généralement inconnue et même souvent, les capacités des modèles candidats ne sont que vaguement comprises.
En ce qui concerne les réseaux de neurones, la taille de l'espace d'hypothèses est contrôlée par le nombre de paramètres. Et il semble que pour un nombre déterminé de paramètres (ou un ordre de grandeur déterminé), l’approfondissement permette aux modèles de capturer des structures plus riches (par exemple, ce document ).
Cela peut expliquer en partie le succès de modèles plus profonds avec moins de paramètres: VGGNet (à partir de 2014) a 16 couches avec ~ 140 millions de paramètres, tandis que ResNet (à partir de 2015) le bat avec 152 couches mais seulement à environ 2M paramètres.
(d’un côté, il est peut-être plus facile d’entraîner des modèles plus petits, mais je ne pense pas que ce soit un facteur important en soi, car la profondeur complique réellement l’entraînement)
Notez que cette tendance (plus de profondeur, moins de paramètres) est principalement présente dans les tâches liées à la vision et les réseaux de convolution, ce qui appelle une explication spécifique à un domaine. Alors, voici une autre perspective:
Chaque "neurone" dans une couche de convolution a un "champ récepteur", qui correspond à la taille et à la forme des entrées qui affectent chaque sortie. Intuitivement, chaque noyau capture une sorte de relation entre les entrées proches. Et les petits noyaux (qui sont courants et préférables) ont un petit champ réceptif, ils ne peuvent donc fournir des informations que sur les relations locales.
Mais au fur et à mesure que vous approfondissez, le champ récepteur de chaque neurone par rapport à une couche antérieure devient plus large. Ainsi, les couches profondes peuvent fournir des caractéristiques avec une signification sémantique globale et des détails abstraits (relations de relations ... de relations d'objets), tout en n'utilisant que de petits noyaux (qui régularisent les relations apprises par le réseau, et qui aident à la convergence et à la généralisation).
Ainsi, l’utilité des réseaux convolutionnels profonds dans la vision par ordinateur peut être partiellement expliquée par la structure spatiale des images et des vidéos. Il est possible que le temps nous dise que, pour différents types de problèmes, ou pour les architectures non convolutives, la profondeur ne fonctionne pas bien.
la source
Ajouter plus de fonctionnalités peut aider, mais l’avantage devient rapidement marginal après l’ajout de nombreuses fonctionnalités. C'est l'une des raisons pour lesquelles des outils tels que la PCA fonctionnent: quelques composants capturent le plus de différences dans les fonctionnalités. Par conséquent, ajouter plus de fonctionnalités après un certain point est presque inutile.
D'autre part, trouver le bon fonctionnement pour ma fonction est toujours une bonne idée. Cependant, si vous n'avez pas une bonne théorie, il est difficile de trouver une fonction correcte, bien sûr. Ainsi, l'ajout de couches est utile comme forme d'une approche de force brute.
Prenons un cas simple: la traînée de l' air d'une voiture. Dites, nous ne savions pas l'équation: où - une zone d'une voiture en coupe transversale, - densité de l' air et - vitesse d'une voiture. Nous pourrions comprendre que les mesures d'une voiture sont importantes et les ajouter en tant que caractéristiques, la vitesse d'une voiture ira aussi. Nous continuons donc d’ajouter des fonctionnalités, et peut-être d’ajouter pression atmosphérique, température, longueur, largeur d’une voiture, nombre de sièges, etc.
Nous allons nous retrouver avec un modèle comme Vous voyez comment ces fonctionnalités ne vont pas s'assembler dans la "vraie" équation à moins d'ajouter toutes les interactions et les polynômes. Cependant, si la véritable équation n'était pas polynomiale convenable, si elle comportait des exposants ou d'autres fonctions transcendantales étranges, nous n'aurions aucune chance de l'imiter avec un jeu de fonctionnalités en expansion ou un réseau élargi.
Cependant, approfondir le réseau vous amènerait facilement à l'équation ci-dessus avec seulement deux couches. Des fonctions plus compliquées nécessiteraient plus de couches, c'est pourquoi l'approfondissement du nombre de couches pourrait être une solution dans de nombreux problèmes.
la source
Pour un réseau neuronal densément connecté de profondeur et de largeur , le nombre de paramètres (par conséquent, la mémoire vive requise pour faire fonctionner ou former le réseau) est . Ainsi, si vous ne disposez que d’un nombre limité de paramètres, il est souvent judicieux de préférer une augmentation importante de la profondeur plutôt que de la largeur.d w O(dw2)
Pourquoi essayez-vous de limiter le nombre de paramètres? Un certain nombre de raisons:
D'où vient le ? Pour deux couches voisines de largeur , les connexions entre elles sont décrites par un . Donc, si vous avez couches de largeur (plus une couche d'entrée et une couche de sortie), le nombre de paramètres est Au lieu de restreindre la largeur, une autre stratégie parfois utilisée consiste à utiliser des connexions fragmentées. Par exemple, lors de l'initialisation de la topologie du réseau, vous pouvez admettre chaque connexion avec une probabilité de sorte que le nombre total de paramètres soit égal àO(dw2) w1,w2 w1×w2 (d−2) w
la source