Réseaux convolutifs et leurs couches

Dessinez une forme et suivez-la à travers un vrai réseau convolutif entraîné, puis démontez-le couche par couche : convolution, activation, pooling, champ récepteur, dropout, normalisation par lots et softmax. Tous les calculs s'exécutent dans votre navigateur.
entrée cartes sortie

Le CNN en action

Ce réseau a été entraîné à reconnaître un cercle, un carré ou un triangle dans une image 16×16 (voir la démonstration du pipeline). Il ne compte que 1 619 paramètres : 8 filtres 3×3, un max-pooling et une couche dense. Dessinez dans la grille, décalez votre dessin, ajoutez du bruit, et observez chaque étape du calcul se mettre à jour.

La convolution

Un filtre (ou noyau) 3×3 glisse sur l'image. À chaque position, on multiplie les 9 pixels couverts par les 9 poids du filtre et on additionne : le résultat est un pixel de la carte de caractéristiques. Le même filtre est utilisé partout (partage des poids), d'où très peu de paramètres : 9 poids + 1 biais par filtre et par canal d'entrée. Le remplissage (padding) ajoute des zéros autour de l'image, le pas (stride) saute des positions, la dilatation espace les points du filtre pour voir plus large sans plus de poids.

Choisissez un noyau classique (les détecteurs de bords de Sobel, par exemple), l'un des 8 filtres appris par le CNN, ou tapez vos propres valeurs.

Les fonctions d'activation

Sans fonction non linéaire entre elles, plusieurs couches de convolution se réduiraient à une seule convolution. ReLU (max(0, x)) est le choix par défaut : simple, rapide, et elle met à zéro les réponses négatives. Leaky ReLU laisse passer une petite pente pour éviter les neurones « morts ». Sigmoïde et tanh écrasent les valeurs dans un intervalle borné. GELU, une version adoucie de ReLU, est utilisée dans les Transformers.

Le pooling

Le pooling résume chaque fenêtre par une seule valeur : le maximum (« le motif est-il présent quelque part ici ? ») ou la moyenne. Il divise la taille des cartes, n'a aucun paramètre, et rend le réseau moins sensible aux petits déplacements : comparez de combien les valeurs changent quand l'image bouge d'un pixel, avant et après pooling (max contre moyenne). Le pooling global réduit chaque carte à un seul nombre, souvent juste avant la couche de classification.

Empiler les couches : le champ récepteur

Un neurone d'une couche profonde dépend d'une zone de l'image d'entrée de plus en plus grande : son champ récepteur. Avec un noyau de taille k, chaque couche l'agrandit de (k − 1) × j, où j est le saut cumulé, multiplié par le pas de chaque couche. Deux convolutions 3×3 voient autant qu'une seule 5×5, avec moins de poids (18 contre 25) et une non-linéarité de plus. Le pooling double le saut : les couches suivantes voient beaucoup plus loin.

Le dropout

Pendant l'entraînement, le dropout éteint au hasard une fraction p des neurones à chaque lot, et multiplie les autres par 1 / (1 − p) pour garder la même moyenne. Le réseau ne peut plus compter sur un neurone particulier : c'est une régularisation contre le surapprentissage. À l'inférence, on le désactive. Notre CNN n'a pas été entraîné avec du dropout : regardez à quel point un seul masque perturbe sa prédiction, et comment la moyenne de nombreux masques la stabilise.

La normalisation par lots

La normalisation par lots (batch normalization) recentre et réduit les sorties d'un filtre sur le lot courant : x̂ = (x − μ) / σ, puis applique une échelle γ et un décalage β appris. Les couches suivantes reçoivent ainsi des valeurs de distribution stable, ce qui permet des taux d'apprentissage plus élevés. À l'inférence, μ et σ sont remplacés par des moyennes mesurées pendant l'entraînement.

Softmax et température

La dernière couche produit des scores (logits) que la softmax transforme en probabilités : pi = ezi/T / Σj ezj/T. La température T ne change pas la classe prédite, seulement la confiance : T < 1 accentue l'écart, T > 1 l'aplatit. C'est le même réglage qui rend un modèle de langue plus ou moins « créatif ».

Récapitulatif : le CNN de la démonstration

Couche Rôle Forme de sortie Paramètres
Entrée image normalisée 16 × 16 × 1 0
Conv2D 3×3, 8 filtres, padding 1 détecter des motifs locaux 16 × 16 × 8 8 × (9 + 1) = 80
ReLU non-linéarité 16 × 16 × 8 0
MaxPool 2×2 réduire, tolérer les décalages 8 × 8 × 8 0
Flatten mettre à plat 512 0
Dense + softmax classer 3 512 × 3 + 3 = 1 539
Total 1 619

Remarquez que 95 % des paramètres sont dans la couche dense. En remplaçant Flatten par un pooling global moyen, la couche dense n'aurait plus que 8 × 3 + 3 = 27 paramètres : c'est le choix des architectures modernes (ResNet, MobileNet…).

Autres couches à connaître

Couche Idée Usage typique
Convolution 1×1 combine les canaux en chaque pixel, sans regarder les voisins changer le nombre de canaux à faible coût (Inception, ResNet)
Convolution séparable en profondeur un filtre spatial par canal, puis une convolution 1×1 réseaux légers pour mobiles (MobileNet)
Convolution transposée agrandit une carte au lieu de la réduire segmentation (U-Net), génération d'images
Connexion résiduelle ajoute l'entrée d'un bloc à sa sortie : y = x + F(x) entraîner des réseaux très profonds (ResNet, Transformers)
Normalisation de couche comme la normalisation par lots, mais sur les caractéristiques d'un seul exemple Transformers, petits lots
Embedding table qui associe un vecteur appris à chaque identifiant mots, catégories (voir la partie texte du pipeline)
Récurrente (LSTM, GRU) état interne mis à jour à chaque pas de temps séquences, séries temporelles
Auto-attention chaque position pondère toutes les autres selon leur pertinence Transformers : texte, image (ViT), audio