web-dev-qa-db-fra.com

Comment concevoir des réseaux neuronaux convolutionnels profonds?

Si je comprends bien, tous les CNN sont assez similaires. Ils ont tous des couches convolutives suivies de couches de mise en commun et de relu. Certains ont des couches spécialisées comme FlowNet et Segnet. Mon doute est de savoir comment décider du nombre de couches à utiliser et comment définir la taille du noyau pour chaque couche du réseau. J'ai cherché une réponse à cette question mais je n'ai pas trouvé de réponse concrète. Le réseau est-il conçu à l'aide d'essais et d'erreurs ou existe-t-il des règles spécifiques que je ne connais pas? Si vous pouviez clarifier cela, je vous serais très reconnaissant.

20
malreddysid

Réponse courte: s'il existe des règles de conception, nous ne les avons pas encore découvertes.

Notez qu'il existe des questions comparables en informatique. Par exemple, notez qu'il n'y a qu'une poignée d'unités logiques électroniques de base, les portes qui pilotent votre technologie de fabrication. Tous les appareils informatiques utilisent la même logique booléenne; certains ont des ajouts spécialisés, tels que l'entrée photoélectrique ou la sortie mécanique.

Comment décidez-vous comment concevoir votre appareil informatique?


La conception dépend de l'objectif du CNN. Caractéristiques d'entrée, précision, vitesse d'entraînement, vitesse de notation, adaptation, ressources informatiques, ... tout cela affecte la conception. Il n'y a pas (encore) de solution généralisée, même pour un problème donné.

Par exemple, considérons le problème de classification ImageNet. Notez les différences structurelles entre les gagnants et les candidats jusqu'à présent: AlexNet, GoogleNet, ResNet, VGG, etc. Si vous changez les entrées (par exemple, en MNIST), alors celles-ci sont exagérées. Si vous changez de paradigme, ils peuvent être inutiles. GoogleNet est peut-être un prince du traitement d'images, mais c'est horrible pour traduire le français parlé en anglais écrit. Si vous voulez suivre un Puck de hockey en temps réel sur votre écran vidéo, oubliez complètement ces implémentations.


Jusqu'à présent, nous faisons cela de manière empirique: beaucoup de gens essaient beaucoup de choses différentes pour voir ce qui fonctionne. Nous obtenons des sentiments pour ce qui améliorera la précision, ou le temps d'entraînement, ou tout facteur que nous voulons régler. Nous trouvons ce qui fonctionne bien avec le temps CPU total, ou ce que nous pouvons faire en parallèle. Nous changeons les algorithmes pour tirer parti des mathématiques vectorielles dans des longueurs qui sont des puissances de 2. Nous modifions légèrement les problèmes et voyons comment l'apprentissage s'adapte ailleurs. Nous changeons de domaine (par exemple, le traitement d'image en texte écrit), et recommençons - mais avec une vague impression de ce qui pourrait régler un goulot d'étranglement particulier, une fois que nous en arriverons à considérer certains types de couches.

N'oubliez pas que les CNN ne sont vraiment pas populaires depuis si longtemps, à peine 6 ans. Pour l'essentiel, nous essayons toujours de savoir quelles pourraient être les questions importantes. Bienvenue dans l'équipe de recherche.

MISE À JOUR

Voir cette page pour quelques conseils sur les tactiques qui semblent fonctionner dans certaines circonstances courantes.

36
Prune

Concevoir des architectures CNN pour une sortie optimale est un travail difficile et souvent empirique, mais il existe des astuces et des techniques spécifiques (des preuves pour certaines d'entre elles existent également) qui sont utilisées pour concevoir le réseau.

Veuillez lire le document lié ici intitulé "Une théorie pratique pour la conception de réseaux de neurones convolutionnels très profonds" par un kaggler qui obtient des résultats proches de l'état de l'art en utilisant ces règles simples.

5