Comment fonctionnent les couches de convolution suivantes?


29

Cette question se résume à "comment fonctionnent exactement les couches de convolution .

Supposons que j'ai une image en niveaux de gris . L'image a donc un canal. Dans la première couche, j'applique une convolution avec des filtres et un remplissage. Ensuite, j'ai une autre couche de convolution avec convolutions et des filtres . Combien de cartes d'entités ai-je?3 × 3 k 1 5 × 5 k 2n×m3×3k15×5k2

Convolution de type 1

La première couche est exécutée. Après cela, j'ai cartes de fonctionnalités (une pour chaque filtre). Chacun d'eux a la taille . Chaque pixel a été créé en prenant pixels de l'image d'entrée rembourrée. n × m 3 3 = 9k1n×m33=9

Ensuite, la deuxième couche est appliquée. Chaque filtre unique est appliqué séparément à chacune des cartes d' entités . Il en des cartes d' pour chacune des cartes d' . Il y a donc cartes d' après la deuxième couche. Chaque pixel de chacune des nouvelles cartes d'entités a été créé en prenant "pixels" de la carte d'entités rembourrée d'avant.k 1 k 1 × k 2 5 5 = 25k2k1k1×k255=25

Le système doit apprendre les .k133+k255

Convolution de type 2.1

Comme auparavant: la première couche est exécutée. Après cela, j'ai cartes de fonctionnalités (une pour chaque filtre). Chacun d'eux a la taille . Chaque pixel a été créé en prenant pixels de l'image d'entrée rembourrée. n × m 3 3 = 9k1n×m33=9

Contrairement à avant: Ensuite, la deuxième couche est appliquée. Chaque filtre est appliqué à la même région, mais toutes les cartes d' entités précédentes. Il en des cartes d' au total après l'exécution de la deuxième couche. Chaque pixel de chacune des nouvelles cartes d' été créé en prenant "pixels" des cartes d' rembourrées d'avant.k 25 5 = 25 k 2k2k255=25k2

Le système doit apprendre les .k133+k255

Convolution de type 2.2

Comme ci-dessus, mais au lieu d'avoir paramètres par filtre qui doivent être appris et simplement copiés pour les autres cartes d' entrée, vous avez paramètres à apprendre.55=25k133+k2k155

Question

  1. Le type 1 ou le type 2 est-il généralement utilisé?
  2. Quel type est utilisé dans Alexnet ?
  3. Quel type est utilisé dans GoogLeNet ?
    • Si vous dites type 1: Pourquoi les circonvolutions un sens? Ne multiplient-ils pas seulement les données par une constante?1×1
    • Si vous dites type 2: veuillez expliquer le coût quadratique ("Par exemple, dans un réseau de vision profonde, si deux couches convolutionnelles sont chaînées, toute augmentation uniforme du nombre de leurs filtres entraîne une augmentation quadratique du calcul")

Pour toutes les réponses, veuillez fournir des preuves (articles, manuels, documentation des cadres) que votre réponse est correcte.

Question bonus 1

Le regroupement est-il toujours appliqué uniquement par carte d'entités ou est-il également effectué sur plusieurs cartes d'entités?

Question bonus 2

Je suis relativement sûr que le type 1 est correct et je me suis trompé avec le papier GoogLe. Mais il y a aussi des circonvolutions 3D. Disons que vous avez 1337 cartes de caractéristiques de taille et que vous appliquez un filtre . Comment faites-vous glisser le filtre sur les cartes d'entités? (De gauche à droite, de haut en bas, de la première carte d'entités à la dernière carte d'entités?) Est-ce important tant que vous le faites de manière cohérente?3 × 4 × 542×3143×4×5

Ma recherche


Un peu plus tard: analyse et optimisation des architectures de réseaux de neurones convolutifs , en particulier le chapitre 2 et les figures 2.2 et 2.3.
Martin Thoma

Réponses:


5

Je ne suis pas sûr des alternatives décrites ci-dessus, mais la méthodologie couramment utilisée est:

Avant l'application de la non-linéarité, chaque sortie de filtre dépend linéairement de toutes les cartes d' avant dans le patch, vous vous retrouvez donc avec des filtres après les deuxièmes couches. Le nombre total de paramètres est de .k23˙3˙k1+k1˙5˙5˙k2

Bonus 1: La mise en commun se fait par carte d'entités, séparément.

Bonus 2: L'ordre de "glissement" n'a pas d'importance. En fait, chaque sortie est calculée sur la base de la couche précédente, de sorte que les réponses du filtre de sortie ne dépendent pas les unes des autres. Ils peuvent être calculés en parallèle.


1
J'ai totalement oublié cette question. Pendant ce temps, j'ai écrit ma thèse de maîtrise sur les CNN. Le chapitre 3 explique comment ils fonctionnent.
Martin Thoma

1
Pour clarifier: le type 2.2 est le bon (décrit dans cette réponse)
Martin Thoma

1
Au cas où quelqu'un voudrait vraiment voir cela en action, j'ai mis en place un réseau neuronal convolutionnel profond dans les feuilles de Google. Vous pouvez voir les filtres et l'image d'entrée, pixel par pixel, tout au long du CNN, jusqu'à ce que le CNN prédit la réponse: docs.google.com/spreadsheets/d/…
bwest87

5

Je viens de me débattre avec cette même question pendant quelques heures. Je pensais que je partagerais l'insite qui m'a aidé à le comprendre.

La réponse est que les filtres de la deuxième couche convolutionnelle n'ont pas la même dimensionnalité que les filtres de la première couche. En général, le filtre doit avoir le même nombre de dimensions que ses entrées . Donc, dans la première couche conv, l'entrée a 2 dimensions (car c'est une image). Ainsi, les filtres ont également deux dimensions. S'il y a 20 filtres dans la première couche conv, la sortie de la première couche conv est une pile de 20 cartes d'entités 2D. Ainsi, la sortie de la première couche conv est en 3 dimensions, où la taille de la troisième dimension est égale au nombre de filtres dans la première couche.

Maintenant, cette pile 3D forme l'entrée de la deuxième couche conv. Étant donné que l'entrée de la deuxième couche est 3D, les filtres doivent également être 3D. Faites en sorte que la taille des filtres de la deuxième couche dans la troisième dimension soit égale au nombre de cartes d'entités qui étaient les sorties de la première couche.

Maintenant, vous vous retrouvez simplement sur les 2 premières dimensions; lignes et colonnes. Ainsi, la convolution de chaque filtre de 2e couche avec la pile de cartes d'entités (sortie de la première couche) donne une seule carte d'entités.

La taille de la troisième dimension de la sortie de la deuxième couche est donc égale au nombre de filtres dans la deuxième couche.


2

Consultez cette conférence et cette visualisation

Habituellement, il est utilisé une convolution de type 2.1. Dans l'entrée, vous avez une image NxMx1, puis après la première convolution, vous obtiendrez N_1xM_1xk_1, donc votre image après la première convolution aura k_1 canaux. La nouvelle dimension N_1 et M_1 dépendra de votre foulée S et du rembourrage P: N_1 = (N - 3 + 2P) / S + 1, vous calculez M_1 par analogie. Pour la première couche conv, vous aurez des poids 3x3xk_1 + k_1. Il est ajouté k_1 pour les biais dans la fonction non linéaire.

Dans la deuxième couche, vous avez une image d'entrée de taille N_1xM_1xk_1, où k_1 est le nouveau nombre de canaux. Et après la deuxième convolution, vous obtenez une image N_2xM_2xk_2 (tableau). Vous avez 5x5xk_2xk_1 + k_2 paramètres dans la deuxième couche.

Pour une convolution 1x1 avec des filtres k_3 et une entrée NxMxC (C est le nombre de canaux d'entrée), vous obtiendrez une nouvelle image (tableau) NxMxk_3, donc 1x1 est logique. Ils ont été présentés dans cet article

Bonus 1: la mise en commun est appliquée par carte de fonctionnalités.

Pour plus de détails, veuillez consulter les diapositives du cours CNN sur Stanford - vous avez une bonne visualisation de la façon dont la convolution est sommée à partir de plusieurs canaux d'entrée.


2
Les réponses de lien uniquement sont déconseillées - les liens peuvent cesser de fonctionner. Pouvez-vous intégrer des informations pertinentes?
Sean Owen

1
la visualisation était vraiment utile. Mon moment d'épiphanie a été quand j'ai réalisé que les filtres étaient en 3D et non en 2D.
kmace

1
Grands liens, triez les trucs pour moi. Mais votre réponse semble incompatible avec ce qui est dit dans les liens, en particulier dans la couche 2 de conv, chaque champ récepteur est 3D avec des dimensions 5x5xk_1, donc le nombre de paramètres doit être 5 * 5 * k_1 * k_2 (plus le biais).
Daniel Schlaug

@DanielSchlaug tu as raison, j'ai corrigé la réponse.
pplonski

1

La première couche est composée de noyaux de taille pour donner cartes d' empilées en profondeur.k1331k1

La deuxième couche est constituée de noyaux de taille pour donner des cartes de caractéristiques qui sont empilées en profondeur.k255k1k2

C'est-à-dire que les noyaux d'une couche convolutionnelle s'étendent sur la profondeur de la sortie de la couche précédente.

Une couche avec couche convolutionnelle a en fait noyaux de taille .k n 1 1 k n - 11×1kn11kn1

Spéculation:

La question bonus 2 n'est pas quelque chose que je connais, mais je suppose que le paramètre de profondeur dans la convolution devient une dimension supplémentaire.

Par exemple, si la sortie d'un calque est de taille , une convolution 3D avec remplissage donnera une sortie de taille m n k n + 1k nmnknmnkn+1kn

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.