Aller au contenu principal

Classification avec un réseau de neurones

Un réseau de neurones multicouche compose des transformations affines et des fonctions d’activation non linéaires. La non-linéarité lui permet de représenter des frontières de décision qu’une seule unité logistique ne peut pas représenter.

Modèle à une couche cachée

Pour un vecteur d’entrée xx, des poids cachés W(1)W^{(1)}, un biais caché b(1)b^{(1)}, des poids de sortie W(2)W^{(2)} et un biais de sortie b(2)b^{(2)} :

z(1)=W(1)x+b(1),a(1)=ϕ(z(1)),z(2)=W(2)a(1)+b(2),y^=σ(z(2)).\begin{aligned} z^{(1)} &= W^{(1)}x+b^{(1)},\\ a^{(1)} &= \phi\left(z^{(1)}\right),\\ z^{(2)} &= W^{(2)}a^{(1)}+b^{(2)},\\ \hat y &= \sigma\left(z^{(2)}\right). \end{aligned}

Ici, ϕ\phi peut être ReLU, GELU, tanh ou une autre activation cachée. Pour une classification binaire, la sortie sigmoïde y^\hat y est interprétée comme une probabilité prédite et peut être entraînée avec l’entropie croisée binaire :

L=[ylogy^+(1y)log(1y^)].L=-\left[y\log \hat y+(1-y)\log(1-\hat y)\right].

Rétropropagation

La rétropropagation applique la règle de la chaîne depuis la perte vers les couches antérieures. Avec une sigmoïde et l’entropie croisée binaire, le gradient de préactivation de sortie se simplifie en :

δ(2)=Lz(2)=y^y.\delta^{(2)}=\frac{\partial L}{\partial z^{(2)}}=\hat y-y.

Les gradients de la couche de sortie sont :

LW(2)=δ(2)(a(1))T,Lb(2)=δ(2).\frac{\partial L}{\partial W^{(2)}}=\delta^{(2)}(a^{(1)})^T, \qquad \frac{\partial L}{\partial b^{(2)}}=\delta^{(2)}.

La propagation à travers l’activation cachée donne :

δ(1)=(W(2))Tδ(2)ϕ(z(1)),\delta^{(1)}=(W^{(2)})^T\delta^{(2)}\odot\phi'\left(z^{(1)}\right),

et donc :

LW(1)=δ(1)xT,Lb(1)=δ(1).\frac{\partial L}{\partial W^{(1)}}=\delta^{(1)}x^T, \qquad \frac{\partial L}{\partial b^{(1)}}=\delta^{(1)}.

Le symbole \odot désigne la multiplication terme à terme. Les formes comptent : écrire le calcul sous forme matricielle évite une chaîne ambiguë d’indices scalaires.

Mise à jour des paramètres

La descente de gradient simple, avec un taux d’apprentissage α\alpha, met à jour chaque paramètre θ\theta selon :

θθαLθ.\theta\leftarrow\theta-\alpha\frac{\partial L}{\partial\theta}.

L’entraînement pratique fonctionne généralement par mini-lots et peut employer Adam ou un autre optimiseur, mais les gradients proviennent toujours du même graphe avant et de la même règle de la chaîne.

Ce que cette note laisse de côté

Ce petit réseau suffit à montrer le calcul, pas à choisir une architecture de production. L’initialisation, la normalisation, la régularisation, l’état de l’optimiseur, les sorties multiclasse, la stabilité numérique et la qualité des données influencent tous l’entraînement. La note maintenue sur le perceptron multicouche couvre l’architecture plus largement.

Dimensions et calcul arrière complet

Pour dd caractéristiques et hh unités cachées, employer des vecteurs colonnes : xRdx\in\mathbb R^d, W(1)Rh×dW^{(1)}\in\mathbb R^{h\times d}, b(1),a(1),δ(1)Rhb^{(1)},a^{(1)},\delta^{(1)}\in\mathbb R^h, W(2)R1×hW^{(2)}\in\mathbb R^{1\times h}, et des scalaires b(2),z(2),δ(2)b^{(2)},z^{(2)},\delta^{(2)}. Chaque gradient de poids a les dimensions de sa matrice ; le produit extérieur δ(1)xT\delta^{(1)}x^T est donc h×dh\times d.

Pour un exemple minimal, prenons d=h=1d=h=1, x=2x=2, y=1y=1 et ReLU, ϕ(t)=max(0,t)\phi(t)=\max(0,t). Fixons W(1)=0.5W^{(1)}=0.5, b(1)=0b^{(1)}=0, W(2)=1W^{(2)}=1, b(2)=0b^{(2)}=0. Le passage avant donne z(1)=a(1)=z(2)=1z^{(1)}=a^{(1)}=z^{(2)}=1, y^0.731059\hat y\approx0.731059 et L0.313262L\approx0.313262. L’entrée cachée est positive, donc ϕ=1\phi'=1, d’où

δ(2)=δ(1)0.268941,(LW(1),Lb(1),LW(2),Lb(2))(0.537883,0.268941,0.268941,0.268941).\delta^{(2)}=\delta^{(1)}\approx-0.268941,\qquad \left(\frac{\partial L}{\partial W^{(1)}},\frac{\partial L}{\partial b^{(1)}},\frac{\partial L}{\partial W^{(2)}},\frac{\partial L}{\partial b^{(2)}}\right) \approx(-0.537883,-0.268941,-0.268941,-0.268941).

Avec α=0.1\alpha=0.1, mettre les quatre paramètres à jour à partir du même passage avant donne environ (0.553788,0.026894,1.026894,0.026894)(0.553788,0.026894,1.026894,0.026894) dans cet ordre. Le logit suivant vaut environ 1.1918751.191875 et la perte 0.2651690.265169. Modifier les poids de sortie avant de calculer δ(1)\delta^{(1)} mélangerait deux états de paramètres : ce ne serait plus ce pas de gradient.

À l’entrée zéro de ReLU, la dérivée ordinaire n’existe pas ; les implémentations choisissent une convention, souvent zéro. Loin de ces points anguleux, comparer un gradient analytique à [L(θ+εej)L(θεej)]/(2ε)[L(\theta+\varepsilon e_j)-L(\theta-\varepsilon e_j)]/(2\varepsilon) sur un exemple minuscule. Cela vérifie la différentiation, pas la capacité de l’entraînement à trouver un optimum global.

Ce que la boucle d’optimisation peut établir

La rétropropagation calcule des dérivées ; l’optimiseur choisit les changements de paramètres. Pour une perte par lot, moyenner les gradients individuels. Les gradients de mini-lots fluctuent : chaque pas ne diminue pas nécessairement la perte sur tout l’entraînement. Apprendre conjointement les poids cachés et de sortie rend généralement l’objectif non convexe, contrairement à la régression logistique à caractéristiques fixes. Des initialisations différentes peuvent mener à des régions stationnaires différentes ; une petite mise à jour peut aussi provenir d’un taux infime, d’activations saturées ou de ReLU inactives.

Vérifier les valeurs finies, fixer un budget d’itérations, suivre gradients et pertes, et utiliser un ensemble de validation pour l’arrêt anticipé. Cet arrêt limite le surapprentissage ; il ne certifie pas l’optimalité. Calculer l’entropie croisée binaire à partir des logits avec la formule stable. Deep Learning, chapitre 8 développe ces distinctions entre optimisation et généralisation.

Explorer les liensOuvrir le réseau