Comment les filtres et les cartes d'activation sont-ils connectés dans les réseaux de neurones convolutifs?

11

Comment les cartes d'activation d'une couche donnée sont-elles connectées aux filtres de cette couche? Je ne demande pas comment faire une opération convolutionnelle entre le filtre et la carte d'activation, je demande le type de connectivité de ces deux-là.

Par exemple, supposons que vous souhaitiez une connectivité complète. Vous avez f nombre de filtres et n nombre de cartes d'activation dans une couche donnée. Vous obtiendrez f * n nombre de cartes d'activation dans la couche suivante, et le nombre de cartes d'activation augmenterait avec chaque nouvelle couche. C'est ainsi que je suppose que c'est fait.

Ou vous pouvez dire que chaque filtre est connecté à une seule carte d'activation. Dans ce cas, le nombre de filtres serait égal au nombre de cartes d'activation, et chaque couche aurait le même nombre de filtres et de cartes d'activation. Il s'agit de l'architecture actuelle de mon réseau, et elle semble bien fonctionner.

La principale source de ma confusion est de regarder des diagrammes de convnets que je vois en ligne. Certains d'entre eux ont la «connexion complète» entre les filtres et les cartes d'activation, comme celui-ci - entrez la description de l'image ici Dans la première couche, vous avez 4 cartes d'activation, et probablement 2 filtres. Chaque carte est convolutionnée avec chaque filtre, ce qui donne 8 cartes dans la couche suivante. Ça a l'air super.

Mais ici, nous avons une architecture qui n'a pas de sens pour moi - entrez la description de l'image ici Comment passez-vous de 6 cartes dans la première couche à 16 dans la 2e? Je peux penser à des façons d'obtenir 16 cartes à partir de 6, mais cela n'aurait aucun sens.

Frobot
la source

Réponses:

10

La deuxième architecture de réseau neuronal convolutif (CNN) que vous avez publiée provient de cet article . Dans l'article, les auteurs décrivent ce qui se passe entre les couches S2 et C3. Leur explication n'est cependant pas très claire. Je dirais que cette architecture CNN n'est pas «standard», et elle peut être assez déroutante comme premier exemple pour les CNN.

Architecture CNN

Tout d'abord, une clarification est nécessaire sur la façon dont les cartes d'entités sont produites et sur leur relation avec les filtres. Une carte d'entités est le résultat de la convolution d'un filtre avec une carte d'entités. Prenons l'exemple des calques INPUT et C1. Dans le cas le plus courant, pour obtenir 6 cartes d'entités de taille dans la couche C1, vous avez besoin de 6 filtres de taille (le résultat d'une convolution "valide" d'une image de taille avec un filtre de taille , en supposant que , a une taille28×285×5M×MN×NMN(M-N+1)×(M-N+1). Vous pouvez cependant produire 6 cartes d'entités en combinant des cartes d'entités produites par plus ou moins de 6 filtres (par exemple en les additionnant). Dans le document, rien de tel n'est impliqué pour la couche C1.

Ce qui se passe entre la couche S2 et la couche C3 est le suivant. Il y a 16 cartes d'entités dans la couche C3 produites à partir de 6 cartes d'entités dans la couche S2. Le nombre de filtres dans la couche C3 n'est en effet pas évident. En fait, à partir du diagramme d'architecture uniquement, on ne peut pas juger du nombre exact de filtres qui produisent ces 16 cartes d'entités. Les auteurs de l'article fournissent le tableau suivant (page 8):

connexions entre les couches S2 et C3

Avec le tableau, ils fournissent l'explication suivante (bas de la page 7):

La couche C3 est une couche convolutionnelle avec 16 cartes d'entités. Chaque unité de chaque carte d'entités est connectée à plusieurs quartiers à des emplacements identiques dans un sous-ensemble des cartes d'entités de S2.5×5

Dans le tableau, les auteurs montrent que chaque carte d'entités de la couche C3 est produite en combinant 3 cartes d'entités ou plus (page 8):

Les six premières cartes d'entités C3 prennent des entrées de tous les sous-ensembles contigus de trois cartes d'entités dans S2. Les six suivants prennent la contribution de chaque sous-ensemble contigu de quatre. Les trois suivants prennent en compte certains sous-ensembles discontinus de quatre. Enfin, la dernière prend en compte toutes les cartes d'entités S2.

Maintenant, combien de filtres y a-t-il dans la couche C3? Malheureusement, ils n'expliquent pas cela. Les deux possibilités les plus simples seraient:

  1. Il existe un filtre par carte d'entités S2 par carte d'entités C3, c'est-à-dire qu'il n'y a pas de partage de filtre entre les cartes d'entités S2 associées à la même carte d'entités C3.
  2. Il existe un filtre par carte d'entités C3, qui est partagé entre les (3 ou plus) cartes d'entités de la couche S2 qui sont combinées.

Dans les deux cas, «combiner» signifierait que les résultats de la convolution par groupe de cartes d'entités S2 devraient être combinés pour produire des cartes d'entités C3. Les auteurs ne précisent pas comment cela se fait, mais l'ajout est un choix courant (voir par exemple le gif animé au milieu de cette page .

Les auteurs donnent cependant quelques informations supplémentaires, qui peuvent nous aider à déchiffrer l'architecture. Ils disent que «la couche C3 a 1 516 paramètres entraînables» (page 8). Nous pouvons utiliser ces informations pour décider entre les cas (1) et (2) ci-dessus.

Dans le cas (1) nous avons filtres. La taille du filtre est . Le nombre de paramètres entraînables dans ce cas serait de paramètres entraînables. Si nous supposons une unité de biais par carte d'entités C3, nous obtenons paramètres, ce que disent les auteurs. Pour être complet, dans le cas (2) nous aurions paramètres, ce qui n'est pas le cas.(6×3)+(9×4)+(1×6)=60(14-dix+1)×(14-dix+1)=5×55×5×60=1,5001,500+16=1,516(5×5×16)+16=416

Par conséquent, si nous regardons à nouveau le tableau I ci-dessus, il y a 10 filtres C3 distincts associés à chaque carte de caractéristiques S2 (donc 60 filtres distincts au total).

Les auteurs expliquent ce type de choix:

Différentes cartes d'entités [dans la couche C3] sont obligées d'extraire différentes entités (espérons-le complémentaires) car elles obtiennent différents ensembles d'entrées.

J'espère que cela clarifie la situation.

Orestis Tsinalis
la source
3

Vous avez en effet raison de dire que la valeur avant le @ indique la quantité de filtres et non la quantité de cartes d'entités (bien que pour les premières couches convolutives ces valeurs coïncident).

Concernant votre dernière question: oui, il est logique que chaque carte d'entités de la couche l soit connectée à chaque filtre de la couche l + 1. La seule raison à cela est que cela augmente considérablement la puissance d'expression du réseau, car il a plus de façons (chemins) de combiner les cartes de caractéristiques qui lui permettent ainsi de mieux distinguer tout ce qui se trouve sur l'image d'entrée.

Enfin, je ne sais pas si vous pratiquez vos compétences en réseau neuronal en les mettant en œuvre vous-même, mais si vous voulez simplement appliquer des réseaux convolutionnels à une tâche spécifique, il existe déjà plusieurs excellentes bibliothèques de réseaux neuronaux telles que Theano, Brainstorm, Caffe

Sjoerd
la source
Je pense que ce que je vais faire, c'est comparer les deux façons de les comparer. Avec la version non entièrement connectée, il entraînera et calculera sa classification plus rapidement. Mais la précision est plus importante. Dans la version non entièrement connectée, chaque filtre est localisé dans une tâche beaucoup plus spécifique au lieu d'une tâche plus générale. Dans la version entièrement connectée, un filtre est mis à jour en fonction de ce qui convient le mieux à tous les filtres précédents au lieu d'un seul type de fonctionnalité. J'ai créé mon réseau à 100% en utilisant c #. certes pas la manière la plus simple de faire les choses ... mais cela m'a appris des choses en profondeur
Frobot
Cela ressemble à un bon plan. Bonne chance!
Sjoerd