[PYTHON] Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016

En premier

Bonjour, vous appartenez à CodeNext, c'est @ aiskoaskosd. J'ai été régulièrement redevable à Chainer, alors j'ai pensé que ce serait formidable si je pouvais redonner, alors j'ai écrit un article. Aujourd'hui, je vais me concentrer sur le modèle de reconnaissance d'image qui est devenu un sujet brûlant au cours des 1 à 2 dernières années, publier la mise en œuvre et expliquer une partie du contenu de l'article. Certains des documents antérieurs à 2013 sont également mis en œuvre de manière exceptionnelle. ** 22 des 24 modèles ont été implémentés dans Chainer. ** Malheureusement, au 22 décembre, toutes les implémentations et vérifications avec cifar10 n'étaient pas terminées. Nous le mettrons à jour un par un. Je pense qu'il y a des interprétations erronées et des erreurs de mise en œuvre. Dans ce cas, je serais très heureux si vous pouviez me le dire.

papier

1. Netowork In Network 2. Very Deep Convolutional Networks for Large-Scale Image Recognition 3. Going deeper with convolutions 4. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 5. Rethinking the Inception Architecture for Computer Vision 6. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification 7. Training Very Deep Networks 8. Deep Residual Learning for Image Recognition 9. Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning 10. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size 11. Identity Mappings in Deep Residual Networks 12. Resnet in Resnet: Generalizing Residual Architectures 13. Deep Networks with Stochastic Depth 14. Swapout: Learning an ensemble of deep architectures 15. Wide Residual Networks 16. FractalNet: Ultra-Deep Neural Networks without Residuals 17. Weighted Residuals for Very Deep Networks 18. Residual Networks of Residual Networks: Multilevel Residual Networks 19. Densely Connected Convolutional Networks 20. Xception: Deep Learning with Depthwise Separable Convolutions 21. Deep Pyramidal Residual Networks 22. Neural Architecture Search with Reinforcement Learning 23. Aggregated Residual Transformations for Deep Neural Networks 24. Deep Pyramidal Residual Networks with Separated Stochastic Depth

Papier d'introduction Date modèle Nombre de paramètres(10^6) Papier de précision totale cifar10(%) Implémentation de précision totale cifar10 imagenet top-5 error(%)
1 131116 Référence d'implémentation Caffe 0.1 91.19 \bigtriangleup(90.10) \times
1 131116 Référence d'implémentation Caffe avec BN 0.1 Aucun papier n'existe 91.52% Aucun papier n'existe
2 140904 Modèle A 129 \times 92.1(Modèle A) 6.8(Modèle E)
3 140917 googlenet 6 \times 91.33% 6.67
4 150211 inceptionv2 10 \times 94.89% 4.9
5 151202 inceptionv3(référence) 22.5 \times 94.74% 3.58
6 150206 model A 43.9(Mise en commun moyenne mondiale au lieu de spp) \times 94.98% 4.94
7 150722 Highway(Fitnet19) 2.8 92.46 \bigcirc(93.35%,Cependant, BN est attaché et la configuration de la partie autoroute est différente.) \times
8 151210 ResNet110 1.6 93.57 \bigcirc(93.34%) 3.57
9 160223 inception v4 \times \times \phi 3.1
10 160224 Squeezenet with BN 0.7 82%(alexnet without data augmentation) \bigcirc(92.63%) 17.5(withoutBNandsingle)
11 160316 ResNet164 1.6 94.54 \bigcirc(94.39%) 4.8(single)
12 160325 18-layer + wide RiR 9.5 94.99 \bigtriangleup(94.43%) \times
13 160330 ResNet110 1.7 94.75 \bigcirc(94.76%) \times
14 160520 Swapout v2(32)W×4 7.1 95.24 \bigcirc(95.34%) \times
15 160523 WRN28-10 36.2 96.0 \bigcirc(95.76%) \times
16 160524 20 layers 33.7 95.41 \bigtriangleup(93.77%) 7.39%(FractalNet-34)
17 160528 WResNet-d 19.1 95.3 \times \times
18 160809 RoR-3-WRN58-4 13.6 96.23 \times \times
19 160825 k=24, depth=100 27.0 96.26 \bigcirc 95.12%(k=12, depth=40) \times
20 161007 xception \times \times \phi 5.5(single)
21 161010 \alpha = 270 28.4 96.23 \bigcirc(95.9%) 4.7(\alpha = 450)
22 161105 depth=49 32(Du papier) 96.16 $\bigtriangleup$90.35(Appendix A: 4.1M) \times
23 161116 ResNeXt-29, 16×64d 68.3 96.42 \bigcirc(95.72%: 2x64d) \times
24 161205 depth=182, \alpha=150 16.5 96.69 \times \times

la mise en oeuvre

https://github.com/nutszebra/chainer_image_recognition

Soyez prudent lorsque vous utilisez des modèles qui n'ont pas été vérifiés

Sens numérique du cifar10

Pour le moment, je pense que 97% ou plus seront SoTA. Autant que je sache, la précision la plus élevée est de 96,69%. Il est peut-être temps de se concentrer sur cifar100 ou un autre ensemble de données.

Tendances récentes

Je pense que cette année était l'année de la famille Resnet. Le point caractéristique est que la profondeur = la précision est terminée. Bien que googlenet et d'autres insistent depuis longtemps, divers articles ont montré que ** s'il est profond dans une certaine mesure, la précision sera plus élevée si la largeur est plus large que la profondeur **. À partir de mars environ, le résultat selon lequel il est préférable d'élargir la largeur de Resnet est devenu un effet secondaire, et je pense qu'il est devenu décisif dans Wide Residual Netowrks publié le 23 mai. Je pense qu'il est clair cette année que la largeur est importante. En regardant le papier à vol d'oiseau, il semble que la famille Resnet était principalement un ** bloc Res modifié **.

Il est difficile de dire quel est le meilleur dérivé de ce bloc Res. Comme tout le monde le pense, dans l'article, tous les modèles ont différents nombres de paramètres et FLOPS d'avance, il n'est donc pas très logique de simplement comparer la précision. Par conséquent, même si vous lisez le document, vous ne savez pas quelle méthode est essentielle et dans la bonne direction. Je pense qu'il est actuellement nécessaire de définir une règle selon laquelle tout le monde construit un modèle avec une métrique spécifique liée, puis publie la précision du test d'un seul modèle (comme FLOPS?). Tous les articles sont dans un état difficile à évaluer, mais je pense que la tendance générale est que ** ReLU n'est pas appliqué à la valeur de sortie finale du bloc Res **. Je pense qu'il vaut mieux le baser sur le bloc Res de BN-ReLU-Conv-BN-ReLU-Conv proposé en 11 au lieu du 8 original. C'est une impression personnelle, mais cela semble être une année calme avec une augmentation modérée de la précision. Je ne pense pas qu'il y ait de nouvelles structures à venir cette année, comme des structures résiduelles. Imagenet 2016 a également vu de nombreux ensembles basés sur Residual Networks et Inception.

Impressions

Je pense personnellement que le papier Google de 22 est très choquant et qu'il y a une petite possibilité que quelque chose se développe à partir d'ici (il n'y a pas de base). 22 recherche le réseau avec 800 gpu et gradient de politique RNN +, et a enregistré 96,16% avec Cifar 10. Si c'est 99% pour mnist, c'est fini, mais c'est étonnant que cifar10 ait une valeur proche de SoTA. Laisser les données déterminer la structure du réseau est une idée très fascinante, qui rappelle l'avènement du DNN (création de données de conception de caractéristiques). De plus, je ne l'ai pas présenté ici, mais je me souviens que Hyper Networks était très intéressant et choqué quand je l'ai lu. HyperNetworks est un réseau qui génère des pondérations de réseau, et est une technologie qui est susceptible d'être fusionnée ou développée dans le futur. S'il n'y a rien, il semble que la manière de remodeler le bloc Res et de connecter le bloc Res se développera dans le futur, mais que va-t-il se passer?

Présentation de quelques articles

4. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift La normalisation par lots est, en un mot, "normaliser chaque entrée entre les lots au niveau du canal". Cette normalisation par lots est très utile. Il n'y a aucune raison de ne pas faire partie du réseau. La convergence n'est plus possible et la précision est légèrement améliorée. La normalisation par lots est importante, je vais donc l'expliquer fermement. Tout d'abord, je vais expliquer le phénomène appelé décalage de covariable interne, qui est à la base de la motivation pour la normalisation par lots, et l'algorithme spécifique.

Changement de covariable interne

Supposons que le poids de la couche $ l_ {i} $ soit modifié par la méthode de propagation des erreurs. Ensuite, la distribution de la valeur de sortie (la nature de la sortie) qui est sortie à l'aide de ce poids change. La couche $ l_ {i + 1} $ doit apprendre le mappage non linéaire approprié, correspondant à la distribution des différentes valeurs de sortie. Le problème ici est que l'apprentissage de la cartographie non linéaire de la discrimination est très lent en raison du grand effort qu'implique l'apprentissage pour s'adapter à la distribution changeante des extrants. Ce phénomène est défini dans l'article comme un décalage de covariable interne. Ce changement de covariable interne entraîne une stagnation de l'apprentissage. Supposons que le coefficient d'apprentissage de SGD soit défini comme grand. Ensuite, le poids de la couche $ l_ {i} $ change considérablement. En conséquence, la couche $ l_ {i + 1} $ ne peut pas s'adapter à la valeur de sortie modifiée (ou cela prend énormément de temps pour s'adapter), et l'apprentissage stagne. En conséquence, le coefficient d'apprentissage doit être réglé petit pour apprendre, et cette fois, l'apprentissage ralentira la convergence de l'apprentissage. Si vous vous tenez là, vous avez l'impression de ne pas pouvoir rester ici. Ce changement de covariable interne devient un problème plus sérieux à mesure que le modèle s'approfondit. Même si le changement de sortie dans la couche inférieure est léger, il sera amplifié dans la couche supérieure, et même un petit changement deviendra un grand changement. C'est comme un effet papillon. La solution à cela est très simple. Si la distribution des valeurs de sortie change, vous pouvez l'ajuster à chaque fois pour que la distribution soit la même. BN (Batch Normalization) normalise l'entrée (moyenne 0, distribution 1) et la sort. Par conséquent, lorsque la sortie de BN est utilisée comme entrée, la distribution de la sortie devient stable et le besoin d'apprentissage pour répondre aux changements dans la distribution de sortie est réduit. Vous pouvez vous concentrer sur l'apprentissage du mappage non linéaire que vous devez essentiellement faire et, par conséquent, l'apprentissage converge rapidement. De plus, la distribution stable vous permet de définir un coefficient d'apprentissage important. Cela contribue également de manière significative à la convergence rapide des apprentissages. Si vous incluez ce NE, le temps d'apprentissage de GoogLeNet sera d'environ 7%. C'est incroyable.

Algorithme de normalisation par lots

Entrez $ x_ {i, cxy} $. Cela signifie que l'entrée est à la position $ (x, y) $ du canal $ c $ dans le lot $ i $. Soit la moyenne sur le canal $ c $ $ \ mu_ {c} $ et la variance sur le canal $ c $ soit $ \ sigma_ {c} ^ 2 $. Ensuite, lorsque le nombre de lots est $ m $, la hauteur d'entrée est $ Y $, et la largeur d'entrée est $ X $, $ \ mu_ {c} $ et $ \ sigma_ {c} ^ 2 $ peuvent être exprimés comme suit. Je vais.

\begin{equation} \mu_{c} = \frac{1}{mXY}\sum_{i=1}^{m} \sum_{y=1}^{Y} \sum_{x=1}^{X} x_{i,cxy} \tag{4.1} \end{equation}
\begin{equation} \sigma_{c}^2 = \frac{1}{mXY}\sum_{i=1}^{m} \sum_{y=1}^{Y} \sum_{x=1}^{X} (x_{i,cxy} -\mu_c)^2 \tag{4.2} \end{equation}

En regardant les équations (4.1) et (4.2), nous pouvons voir que la moyenne $ \ mu_ {c} $ et la distribution $ \ sigma_ {c} ^ 2 $ sont calculées pour chaque canal entre les lots. Ce n'est pas apprendre. Ensuite, soit $ \ hat {x_ {i, cxy}} $ la version normalisée de chaque entrée $ x_ {i, cxy} $. Ici, nous définissons l'échelle $ \ gamma_ {c} $ et le décalage $ \ beta_ {c} $ pour chaque canal. $ \ Gamma_ {c} $ et shift $ \ beta_ {c} $ sont des paramètres appris par la méthode de rétropropagation d'erreur. La raison de l'introduction d'une telle chose sera décrite plus tard. Si vous entrez $ x_ {i, cxy} $ dans la normalisation par lots, la sortie finale $ y_ {i, cxy} $ et la valeur normalisée $ \ hat {x_ {i, cxy}} $ Est défini comme suit.

\begin{equation} \hat{x_{i,cxy}} = \frac{x_{i,cxy} - \mu_{c}}{\sqrt{\sigma_{c}^2 + \epsilon}} \tag{4.3} \end{equation}
\begin{equation} y_{i,cxy} = BN(x_{i,cxy}) = \gamma_{c} \hat{x_{i,cxy}} + \beta_{c} \tag{4.4} \end{equation}

Vous pouvez voir que l'équation (4.3) normalise simplement $ x_ {i, cxy} $ en utilisant les équations (4.1) et (4.2) (distribué $ \ sigma_ {c} ^ 2 $ est égal à 0). Si $ \ hat {x_ {i, cxy}} $ devient infini, ajoutez un petit nombre $ \ epsilon $. Chainer utilise $ 2.0 \ times 10 ^ {-5} $ comme valeur par défaut Il est.). La question ici est l'équation (4.4), où $ \ gamma_ {c} $ et shift $ \ beta_ {c} $ sont cartographiés linéairement, mais l'équation (4.3) normalise déjà le cercle principal. J'ai fini, qu'est-ce que tu fais? Soit $ \ gamma_ {c} = \ sigma_ {c}, \ beta_ {c} = \ mu_ {c} $. Alors, quand $ \ epsilon $ est petit et ignoré, $ y_ {i, cxy} $ sera comme suit. $\begin{equation} y_{i,cxy} = \gamma_{c} \hat{x_{i,cxy}} + \beta_{c} = \sigma_{c} \times \frac{x_{i,cxy} - \mu_{c}}{\sqrt{\sigma_{c}^2}} + \mu_{c} = x_{i,cxy} \tag{4.5} \end{equation}$ En regardant l'équation (4.5), le $ \ hat {x_ {i, cxy}} $ normalisé est $ \ gamma_ {c} = \ sigma_ {c} ^ 2, \ beta_ {c} = \ mu_ {c } $ Retourne à l'entrée d'origine $ x_ {i, cxy} $. En introduisant $ \ gamma_ {c} $ et shift $ \ beta_ {c} $, cela vise à conserver les fonctionnalités importantes qui disparaissent en raison de la normalisation. Les seuls paramètres appris par la normalisation par lots sont scale $ \ gamma_ {c} $ et shift $ \ beta_ {c} $. $ x_ {i, cxy}, \ mu_ {c}, \ sigma_ {c} ^ 2, \ hat {x_ {i, cxy}}, \ gamma_ {c}, \ beta_ {c} $ sont différenciables .. La dérivation est dans le papier. Quand je l'ai confirmé, c'était certainement différentiable. Si vous êtes intéressé, essayez de le dériver. La normalisation des lots peut être décrite en une seule ligne avec Chainer. C'est facile et très bien.

5. Rethinking the Inception Architecture for Computer Vision Le réseau lui-même est une extension élégante de googlenet. La bonne chose à propos de cet article est qu'il verbalise la politique de conception de réseau. Surtout avant ** le sous-échantillonnage, il est très important d'augmenter le nombre de canaux sur le réseau **.

6. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification Il s'agit d'une extension ReLU de xavier initialization, qui est la méthode d'initialisation standard actuelle pour DNN. Il est également appelé initialisation ReLU, initialisation msra, initialisation He, etc. Cette initialisation xavier est une manière très révolutionnaire de calculer la distribution de poids afin que la valeur de distribution de sortie ne change pas pendant le transfert. Chose. En tant qu'initialisation basée sur les données, Tout ce dont vous avez besoin est une bonne init et Initialisations dépendant des données des réseaux de neurones convolutifs / 1511.06856) etc. ont été proposés cette année, mais c'est aussi une extension de xavier initialization. J'utilise essentiellement la valeur de variance calculée par l'initialisation de msra pour générer une matrice aléatoire diagonale et je les utilise comme valeur initiale du poids. Je suis. Cet article propose PReLU, qui est une extension de ReLU autre que l'initialisation. Le contenu est simple, comme changer la partie x <0 en ax au lieu de 0 comme ReLU. A ce moment, a est appris par la méthode de propagation de retour d'erreur. La chose intéressante à propos de cet article est la valeur apprise d'un. Le résultat est: Selection_038.png C'est un grand a dans la couche initiale et devient une petite valeur dans la couche supérieure. Il semble que la couche initiale conserve les informations et les rejette à mesure qu'elles montent. On peut voir que la couche initiale conserve sa linéarité et devient non linéaire au fur et à mesure qu'elle monte. Ce résultat est très proche de CReLU. CReLU est une fonction non linéaire de l'idée de sortie d'une concaténation de ReLU (x) et ReLU (-x). Un autre point intéressant est que la valeur de a augmente avant le sous-échantillonnage (pool). Les informations sont déposées dans le pool, il semble donc que vous essayez de ne pas les supprimer. En regardant la valeur d'un, je sens que je peux comprendre les sentiments de CNN, et j'aime ça.

7. Training Very Deep Networks C'est ce qu'on appelle les réseaux routiers. Les réseaux routiers sont mathématiquement comme suit. $y=H(x, W_h)T(x, W_T)+xC(x, W_c)$ $ H (x, W_h) $ est une fonction non linéaire normale. $ T (x, W_T) $ est une fonction non linéaire, $ C (x, W_c) $ Est une fonction qui calcule combien l'entrée x est chargée. Residual Networks est une simplification de $ T (x, W_T) = 1, C (x, W_c) = 1 $. Par conséquent, on dit souvent que les réseaux résiduels sont une simplification des réseaux routiers. Dans l'article, nous construisons un réseau sous la forme $ C (x, W_c) = 1-T (x, W_T), 0 \ le T (x, WT) \ le 1 $. La chose intéressante à propos de cet article est qu'il a été observé que la précision du réseau ne changeait guère même si la couche supérieure du réseau appris était supprimée. En fait, le même phénomène a été confirmé dans les réseaux résiduels, et on sait que la précision diminue lorsque trop de couches supérieures sont altérées, mais la précision ne change pas même si plusieurs couches sont supprimées ou mélangées [[. Les réseaux résiduels se comportent comme des ensembles de réseaux relativement peu profonds]. J'ai été surpris quand j'ai appris cela.

8. Deep Residual Learning for Image Recognition C'est un réseau qui est devenu le champion de l'ILSVRC2015 dans le département reconnaissance. Il a une structure simplifiée de Highway Netoworks (7), et la partie caractéristique est une structure appelée résiduelle. La plupart des réseaux publiés cette année seront basés sur cela et améliorés. Selection_056.png La figure ci-dessus montre clairement la structure résiduelle. Ajoutez simplement l'entrée x à F (x) avec la fonction non linéaire appliquée. Ce F est composé de plusieurs couches de conv, BN et ReLU. Vous trouverez ci-dessous un aperçu du réseau. Selection_057.png

10. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size Ce squeezenet est un modèle très rentable. Un module appelé module incendie a été proposé, et un réseau est construit en l'utilisant. Le module incendie ressemble à ceci: Selection_039.png L'idée d'un module d'incendie est très simple, comme entrer la sortie de 1x1conv avec réduction de dimension (réduire le nombre de canaux d'entrée dans l'étape suivante) à 3x3conv et 1x1conv, et concaténer les sorties respectives. Si le réseau dans le papier est donné BN, le nombre de poids est d'environ 0,7 M et 92,6% peuvent être obtenus avec cifar10. Si vous résolvez une tâche de reconnaissance d'image de 2 à 100 classes dans la pratique, c'est à peu près un morceau. 11. Identity Mappings in Deep Residual Networks Un article qui a essayé plusieurs types de blocs Res et a montré que BN-ReLU-Conv-BN-ReLU-Conv était bon. De manière générale, Residual Networks fait maintenant référence à cela. Selection_049.png

13. Deep Networks with Stochastic Depth C'est ce qu'on appelle la profondeur stochastique, et c'est une méthode de régularisation qui supprime de manière probabiliste les blocs Res. Cela a déjà été adopté dans plusieurs modèles papier et semble avoir eu un certain effet. Cependant, certains rapports indiquent que la profondeur stochastique normale ne fonctionnait pas à 24, donc l'évaluation de la profondeur stochastique est provisoire et doit être surveillée. La méthode de réduction de la probabilité d'abandon du bloc Res de la couche inférieure à la couche supérieure semble être la plus précise. Dans le document, définissez une probabilité de chute d'environ 1 (ne pas laisser tomber) dans la couche inférieure et d'environ 0,5 (goutte avec une probabilité de 50%) dans la couche supérieure, et appliquez la probabilité de chute calculée linéairement à ces valeurs à la couche intermédiaire La façon de le faire est prise dans le papier et le résultat est le meilleur. Selection_048.png

14. Swapout: Learning an ensemble of deep architectures Il s'agit d'une méthode d'application indépendante du décrochage à la partie résiduelle du bloc Res et à la valeur de sortie de la fonction non linéaire. La formule est la suivante. $y=p_{1}F(x)+ p_{2}x$ $ y $ est la sortie du bloc Res, $ x $ est l'entrée, $ F $ est la fonction non linéaire, $ p_ {1}, p_ {2} $ est la distribution de Bernoulli, avec une valeur de sortie de 0 ou 1. Cela signifie que la figure ci-dessous est intuitive. Selection_040.png E sur la figure est swap out, mais comme vous pouvez le voir, vous pouvez voir que la valeur de sortie est 0, x, F (x), F (x) + x. La formule ci-dessus n'exprime que cela. swapout est un réseau qui l'applique à tous les blocs Res. En supposant que p produit 1 avec une probabilité de T et 0 avec une probabilité de 1-T, le modèle d'augmentation de la valeur de T dans la couche inférieure et de sa diminution vers la couche supérieure fonctionne bien.

15. Wide Residual Networks Le papier dit que si vous augmentez la largeur du bloc Res au lieu de le rendre plus profond, la précision augmentera. L'ensemble du réseau ressemble à la figure ci-dessous. Selection_058.png

La configuration du réseau est déterminée par le nombre de blocs N et le paramètre de largeur k. Le motif avec N comme 4 et k comme 10 fonctionne le mieux dans le papier. Bien sûr, ce seul n'est pas un papier, donc je vérifie également quel bloc Res donnera l'exactitude. La conclusion montre qu'il était bon d'utiliser deux convs 3x3 à l'intérieur du bloc Res. Il était intéressant de constater que les performances se dégradent dans le cas de l'empilement 1, 3 ou 4 au lieu d'empiler 2 3x3conv. Cela ne fonctionne pas avec cifar10, mais pour des tâches telles que cifar100, l'insertion d'abandons entre les convs dans le bloc Res semble améliorer la précision. Si vous le définissez sur large, la vitesse d'apprentissage sera plus lente (8 fois la vitesse d'apprentissage de Resnet-1001), et vous pourrez apprendre même si vous utilisez jusqu'à 5 fois le nombre de paramètres par rapport à Resnet normal. Si vous essayez de vous entraîner avec le modèle que vous avez réellement construit, l'apprentissage est très rapide. Avec cifar10, la précision d'environ 60% ressort à la 1ère époque.

16. FractalNet: Ultra-Deep Neural Networks without Residuals 16 est un réseau fractal, qui n'a pas de résidu, est caractérisé par une structure qui prend une valeur moyenne et un réseau fractal. Le titre a sans résidu pour prendre la valeur moyenne. La figure suivante est facile à comprendre pour la structure fractale. Selection_047.png Configurez votre réseau avec la règle d'extension fractale comme indiqué. Dans cet article, la valeur moyenne est appliquée à la sortie des deux convs (couche de jointure sur la figure). Je suis très intéressé par ce qui arrive à la précision du réseau lorsque la jointure est conservée (dans l'article, seule la moyenne est appliquée à la jointure). Le titre de l'article est présenté comme sans résidu, mais j'estime que la moyenne est essentiellement la même chose que le résidu. L'auteur prétend que c'est différent, mais personnellement, j'ai des doutes. ~~ Ce que j'ai trouvé intéressant en apprenant le réseau, c'est que l'apprentissage a stagné pendant les 20 premières époques (décrites dans l'article). C'est un comportement que je n'ai pas vu beaucoup. ~~ Quand j'ai augmenté le coefficient d'apprentissage, j'ai appris de la 1ère époque (les larmes). 17. Weighted Residuals for Very Deep Networks Lorsque H est une fonction non linéaire, x est une entrée, $ \ alpha $ est un paramètre d'apprentissage et y est la sortie d'un bloc Res, l'idée principale de cet article est de définir un bloc Res comme la formule suivante. $y=\alpha H(x)+ x$ Le diagramme est le suivant. Selection_052.png La chose intéressante à propos de cet article est la valeur de $ \ alpha $ apprise par la méthode de rétropropagation d'erreur. Selection_054.png En regardant la figure, on peut voir que la valeur de $ \ alpha $ a tendance à être grande dans la couche supérieure. Puisque H (x) est fortement ajouté, il semble que la non-linéarité soit activement utilisée dans la couche supérieure. Cependant, la valeur de sortie de H (x) peut être très petite, et il n'y a aucune vérification de cette partie dans le papier. Selection_053.png La figure ci-dessus montre comment $ \ alpha $ a changé. Ce qui est intéressant, c'est qu'il satisfait la symétrie. Je ne sais pas pourquoi cela arrive, mais c'est très intéressant.

18. Residual Networks of Residual Networks: Multilevel Residual Networks L'idée simple est de sauter également les connexions d'autres couches. Il est facile de voir la figure ci-dessous. C'est la seule idée. Selection_055.png

19. Densely Connected Convolutional Networks 19 est un réseau dense, qui se caractérise en connectant la sortie à l'entrée et en la plaçant dans le bloc. La sortie devient récursivement l'entrée suivante, comme indiqué dans la figure ci-dessous. Selection_045.png Il semble faire essentiellement la même chose qu'un réseau résiduel, sauf qu'il concatène récursivement les sorties au lieu du résidu.

20. Xception: Deep Learning with Depthwise Separable Convolutions Il s'agit d'un réseau configuré en remplaçant la conv du bloc Res par une conv séparable. La conv. Séparable est une conv. Par canal et une conv. 1x1 appliquées dans l'ordre, et a la particularité de réduire le nombre de poids. Une convolution par canal est une conv qui ne regarde pas la corrélation entre les voies, et est une conv qui sort sans addition après le calcul de la fenêtre de convolution. Comme indiqué dans cet article, il a été observé qu'un réseau basé sur vgg pouvait être comparable à la version 4 de démarrage sans structure résiduelle. Cependant, il est également vérifié dans cet article que la convergence est plus rapide avec la structure résiduelle. Est-ce un sentiment que la structure résiduelle devrait être insérée en silence?

21. Deep Pyramidal Residual Networks L'idée simple est d'augmenter progressivement le nombre de canaux de sortie dans le bloc Res. En général, les réseaux résiduels, lors de l'application de la conv. Stride2 en tant qu'échantillon descendant dans le bloc Res, le nombre de canaux est doublé à l'avance. Les réseaux pyramidaux seront un réseau comme d sur la figure, qui augmentera progressivement le nombre de canaux au lieu d'augmenter rapidement le nombre de canaux avant de sous-échantillonner. Selection_041.png

22. Neural Architecture Search with Reinforcement Learning Il s'agit d'un article dans lequel Google utilise 800 gpu et RNN pour générer un réseau. Apprenez le réseau RNN qui crache le réseau CNN approprié à partir de la méthode de rétropropagation d'erreur en utilisant la précision des données de validation et le gradient de stratégie. Ce qui est surprenant, c'est que Cifar 10 est aussi précis que SoTA. Il semble que la raison pour laquelle cela a fonctionné était que le réseau généré a été simplifié (le filtre est seulement 3,5,7, etc.) et que le réseau généré a été simplement évalué par SGD. Le réseau généré est très intéressant. Voici le réseau léger généré. Selection_043.png Les points de rencontre des flèches sont connectés. Il n'y a pas de structure résiduelle. Configuration similaire au filet dense 19. Étant donné que les données déterminent la structure du réseau, il s'agit d'une entrée très compliquée que les humains ne peuvent pas comprendre. La chose intéressante est que la suppression ou l'augmentation de cette flèche réduit la précision du test. Je pense que plus vous donnez de liberté à la génération de réseau, plus elle sera précise. Cependant, si le degré de liberté est trop élevé, il semble que le réseau ne puisse pas être généré correctement, donc le matériel pour les travaux d'ajustement et d'expérimentation est essentiel. Je pense qu'il n'y a que quelques environnements dans le monde où vous pouvez vérifier cette expérience. .. ..

23. Aggregated Residual Transformations for Deep Neural Networks Selection_050.png Dans un réseau appelé ResNeXt, remplacez le bloc Res comme indiqué à gauche dans la figure ci-dessus par celui de droite. Le bloc Res à droite de la figure ci-dessus équivaut à (a), (b), (c) dans la figure ci-dessous. Puisqu'il n'y a pas de groupe conv dans le chainer, je l'ai implémenté en (b). Selection_051.png Dans l'article, le nombre de branchements de l'entrée dans le bloc Res est appelé cardinalité, et il est préférable d'augmenter la cardinalité et la largeur du bloc de manière appropriée par rapport aux réseaux résiduels larges avec le même nombre de paramètres qui ont simplement augmenté la largeur du bloc. Il prétend être exact.

24. Deep Pyramidal Residual Networks with Separated Stochastic Depth 24 est un filet pyramidal 21 avec une profondeur stochastique séparée appliquée. La profondeur stochastique séparée est l'idée d'appliquer la profondeur stochastique indépendamment à la partie où le canal augmente. Cela ressemble à la figure ci-dessous. Selection_044.png

Recommended Posts

Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Implémentation du modèle de reconnaissance d'images d'apprentissage en profondeur 2
Reconnaissance d'image en apprentissage profond 3 après la création du modèle
Reconnaissance d'image par apprentissage profond 1 théorie
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Lire et mettre en œuvre l'apprentissage résiduel profond pour la reconnaissance d'image
Comptez le nombre de paramètres dans le modèle d'apprentissage en profondeur
Prédiction des ondes sinusoïdales à l'aide de RNN dans la bibliothèque d'apprentissage en profondeur Keras
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
Reconnaissance d'image en temps réel sur les appareils mobiles à l'aide du modèle d'apprentissage TensorFlow
Classifier les ensembles de données d'image CIFAR-10 à l'aide de divers modèles d'apprentissage en profondeur
J'ai essayé l'apprentissage en profondeur avec Theano
Créer un modèle d'apprentissage à l'aide de MNIST
Reconnaissance de caractères manuscrits à l'aide de KNN en Python
Reconnaissance d'image des fruits avec VGG16
[AI] Apprentissage en profondeur pour le débruitage d'image
Reconnaissance d'image
L'apprentissage en profondeur
La gestion du tensorflow a soudainement cessé de fonctionner en utilisant le GPU dans l'apprentissage en profondeur
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 3 [Reconnaissance de caractères à l'aide d'un modèle]
Python: principes de base de la reconnaissance d'image à l'aide de CNN
Estimation de catégorie à l'aide de l'API de reconnaissance d'image de docomo
Deep learning 2 appris par l'implémentation (classification d'images)
Python: Application de la reconnaissance d'image à l'aide de CNN
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow)
Alignement d'image: du SIFT au deep learning
Reconnaissance d'image à l'aide de chevaux et de cerfs CNN
"Deep Learning from scratch" avec Haskell (inachevé)
Avantages de l'utilisation de slugfield dans le modèle Django
J'ai essayé d'héberger le modèle d'apprentissage en profondeur de Pytorch avec TorchServe sur Amazon SageMaker
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Un amateur a essayé le Deep Learning avec Caffe (Introduction)
Comment coder un drone en utilisant la reconnaissance d'image
Apprentissage automatique: reconnaissance d'image de MNIST à l'aide de PCA et de Gaussian Native Bayes
Un amateur a essayé le Deep Learning en utilisant Caffe (Practice)
Apprentissage de la reconnaissance de formes en vidéo Partie 1 Champ de reconnaissance de formes
Mémorandum d'apprentissage profond
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Commencer l'apprentissage en profondeur
Image d'apprentissage gonflée
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow) - Partie 2
Reconnaissance d'image avec le modèle Caffe Chainer Yo!
Python: apprentissage profond du traitement du langage naturel: principes de base
Apprentissage en profondeur Python
[Recherche causale / inférence causale] Effectuer une recherche causale (SAM) à l'aide du Deep Learning
Un amateur a essayé le Deep Learning avec Caffe (Vue d'ensemble)
Apprentissage profond × Python
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
Faire des inférences à l'aide du modèle entraîné de scicit-learn dans PySpark
Premier apprentissage profond en C # -Imitation de l'implémentation en Python-
Réflexion sur les tactiques de croissance de type attaque de groupe en utilisant l'apprentissage en profondeur
Mise en œuvre de l'apprentissage continu en utilisant la distance Maharanobis de l'espace des fonctionnalités
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
[Détection d'anomalies] Détecter la distorsion de l'image par apprentissage à distance
Modèle utilisant un réseau neuronal convolutif dans le traitement du langage naturel
[Django] Implémenter une fonction de téléchargement de fichier image qui n'utilise pas de modèle
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence