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 |