Pourquoi les réseaux de neurones deviennent-ils plus profonds, mais pas plus larges?

73

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?

Karnivaurus
la source
1
+1, mais pour être juste, ce n'est pas que ces réseaux de plus de 1000 couches soient "à la pointe de la technologie" au sens de surperformance par rapport aux autres. Le papier arxiv que vous avez lié à Rapports indique que le réseau résiduel avec 152 couches est le gagnant actuel sur ImageNet.
amibe dit de réintégrer Monica
3
Avez-vous lu de larges réseaux résiduels arxiv.org/abs/1605.07146 ... peut-être aucune raison..optimiser une fonction non convexe avec une descente de gradient n'a pas de fondement théorique ... il y a juste un essai et beaucoup d'erreur :-)
seanv507
@ seanv507 Très intéressant, merci pour ce lien. BTW, voici un fil très lié: stats.stackexchange.com/questions/214360 et il y a un lien vers ce fil reddit .
amibe dit de réintégrer Monica
Très très lié: stats.stackexchange.com/questions/182734 .
amibe dit de réintégrer Monica le

Réponses:

87

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.

J. O'Brien Antognini
la source
+1 Des commentaires sur arxiv.org/abs/1605.07146 ?
amibe dit de réintégrer Monica
2
Je n'ai fait que le feuilleter, alors je ne peux rien dire d'autorité, mais il semble que les auteurs aient constaté qu'au moins dans le cas des réseaux résiduels, un réseau large (mais avec une profondeur de 16 couches!) Surpasse un réseau étroit, extrêmement profond (1000 couches ) net. Je ne connais pas grand chose aux réseaux résiduels, mais selon l’introduction, il semble qu’une difficulté à les former est qu’il peut y avoir une tendance des couches à ne rien apprendre du tout et donc à ne pas contribuer beaucoup au résultat. Il semble que le fait d’avoir moins de couches, mais plus puissantes, évite cela. Je ne sais pas si cela s'applique à d'autres types de NN.
J. O'Brien Antognini
Réponse claire et concise, bravo. @J
ctwardy
21

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.

Borbei
la source
La partie machine restreinte de Boltzmann des réseaux profonds est un multiplicateur important en temps de convergence. (mercredi)
EngrStudent
4
Les GAR ne sont pas inhérents à l'apprentissage en profondeur. Beaucoup de réseaux profonds qui ont réussi (de nos jours, la plupart?) N'utilisent pas de RBM.
Borbei
3
Merci d’avoir établi un lien vers ce document, je ne l’avais pas encore vu et il semble très pertinent.
J. O'Brien Antognini
@Borbei - Comment assurent-ils la séparation des fonctionnalités sans RBM?
EngrStudent
1
+1 Des commentaires sur arxiv.org/abs/1605.07146 ?
amibe dit de réintégrer Monica
10

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.

fCρAv2/2
Aρv

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.

fiβixi

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.

Aksakal
la source
5
Vous assumez des fonctions de transfert linéaires. Mais il existe de nombreux autres choix (communs) et, selon le théorème d'approximation universel des RNA , même une seule couche non linéaire cachée (si elle est suffisamment large) peut se rapprocher de toute fonction intéressante. La représentabilité ne peut donc pas vraiment expliquer le succès des réseaux profonds.
Borbei
2
Mon exemple était linéaire, mais il s’applique à un ensemble plus large de cas. Vous avez assumé la fonction "sympa" mais beaucoup ne sont pas très gentils. Par exemple, lorsque je sélectionne une voiture à acheter, pourquoi mon algorithme de décision sera-t-il une fonction intéressante?
Aksakal
2

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.dwO(dw2)

Pourquoi essayez-vous de limiter le nombre de paramètres? Un certain nombre de raisons:

  • Vous essayez d'éviter l'overfitting. (Bien que limiter le nombre de paramètres soit un instrument très grossier pour y parvenir.)
  • Votre recherche est plus impressionnante si vous pouvez surpasser le modèle de quelqu'un d’autre en utilisant le même nombre de paramètres.
  • La formation de votre modèle est beaucoup plus facile si le modèle (plus les paramètres de moment si vous utilisez Adam) peut s’intégrer dans la mémoire d’un seul GPU.
  • Dans les applications réelles, la RAM est souvent coûteuse pour servir des modèles. Cela est particulièrement vrai pour les modèles en cours d’exécution sur un téléphone portable, par exemple, mais peut parfois s’appliquer même pour servir des modèles dans le nuage.

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,w2w1×w2(d2)w

(d2)w2+w(input layer width)+w(output layer width)=O(dw2).
1/wO(dw). Mais si vous faites cela, il n'est pas clair que l'augmentation de la largeur augmentera nécessairement la capacité d'apprentissage du modèle.
Charles Staats
la source