Problème entièrement résolu
-
Taille de la carte de sortie pour une carte d'entrée 28×28 et un noyau sobel-x 3×3 6 étapes
La couche : une carte d'entrée de 28×28, un noyau sobel-x de 3×3, un pas de 1, un rembourrage identique. Calculez la taille de la carte de sortie et le coût d'une passe en multiplications-additions — puis déterminez combien de telles couches doivent être empilées avant qu'un seul pixel de sortie ne dépende de chaque pixel de l'image.
-
Le rembourrage fixe la taille, il faut donc s'en occuper en premier. identique ajoute une bordure de zéros d'un pixel autour de la carte, ce qui suffit exactement pour qu'une fenêtre de 3×3 soit centrée sur un pixel de coin au lieu de dépasser du bord. La bordure dont un noyau a besoin correspond à sa moitié, sans compter le centre.
-
Faites glisser la fenêtre le long d'une ligne. Son bord gauche commence à 0 et avance du pas jusqu'à ce que son bord droit atteigne la fin de la ligne rembourrée ; le décompte des pixels de sortie est donc un comptage de piquets : le nombre d'avancées, plus 1 pour la position de départ. À un pas de 1, la bordure restitue exactement les 2 colonnes que le noyau retire, ce qui explique le nom identique.
-
Chacun des 784 pixels de sortie est une somme pondérée de 9 valeurs d'entrée. Additionnez les poids de sobel-x et ils s'annulent pour donner 0 ; ainsi, toute fenêtre dont les 9 entrées sont égales renvoie exactement 0, quelle que soit la luminosité de cette région. La carte devient sombre partout où l'image est uniforme et ne réagit que là où la colonne de gauche de la fenêtre diffère de celle de droite.
-
Le bilan arithmétique s'ensuit : 9 multiplications-accumulations par pixel de sortie, un pixel de sortie par position de fenêtre. Le panneau affiche ce décompte.
-
La profondeur est la partie intéressante. Après une couche, un pixel de sortie voit 3 pixels d'entrée en largeur. Ajoutez-en une deuxième et chacun de ces 3 pixels était lui-même une fenêtre de 3 — mais les fenêtres voisines se chevauchent de 2, la portée atteint donc 5 et non 9. Chaque couche supplémentaire de 3×3 à pas de 1 l'élargit d'exactement 2.
-
Fixez la portée pour couvrir l'ensemble des 28 colonnes et déterminez la profondeur. 13 couches atteignent 27 et manquent d'une colonne ; la 14e est la première dont les pixels de sortie peuvent être influencés par l'image entière.
Réponse
Sortie 28×28, 7056 multiplications-additions par couche, et 14 couches avant qu'un pixel ne voie toute l'image. Calculez maintenant ce que coûte cette portée. Les 14 couches empilées effectuent 14 × 9 = 126 multiplications-accumulations par pixel de sortie. Une seule couche atteignant la même portée nécessite un noyau de 29×29, soit 841 par pixel de sortie — 6,7 fois plus d'arithmétique pour exactement le même champ récepteur. La profondeur offre cette portée à bien moindre coût que la largeur, c'est pourquoi les réseaux de vision sont de longs empilements de noyaux de 3×3 plutôt que de courts empilements de grands noyaux.
-
Références (1)
- Insight block 3 — the operation called convolution is cross-correlation: I. Goodfellow, Y. Bengio and A. Courville, Deep Learning, ch. 9. MIT Press, 2016. ISBN 978-0-262-03561-3 — "many machine learning libraries implement cross-correlation but call it convolution".