Blame
|
1 | # 8. Réseaux de neurones multi-couches |
||||||
|
2 | |||||||
| 3 | Une seule unité linéaire ne trace qu'une frontière droite. Empiler de nombreuses unités simples avec une non-linéarité entre elles donne un réseau de neurones multi-couches, qui ajuste des frontières courbes et apprend ses propres caractéristiques. Ce module est un tour d'horizon compact des réseaux de neurones, de l'architecture à l'entraînement, et la porte d'entrée du cours de [Deep Learning](/fr/Deep%20Learning), qui développe en profondeur chaque sujet abordé ici. |
|||||||
| 4 | ||||||||
| 5 | **Objectifs** |
|||||||
| 6 | - Opposer les approches linéaire et non linéaire et voir pourquoi les couches cachées sont nécessaires. |
|||||||
| 7 | - Lire un réseau comme des couches d'entrée, cachées et de sortie, et écrire sa passe avant. |
|||||||
| 8 | - Choisir la couche de sortie et la perte pour la classification binaire et multiclasse. |
|||||||
| 9 | - Choisir une fonction d'activation et voir pourquoi des sorties centrées en zéro aident. |
|||||||
| 10 | - Entraîner par la règle de dérivation en chaîne et la rétropropagation, avec des mini-lots, une bonne initialisation et le dropout. |
|||||||
| 11 | - Protéger l'implémentation par la vérification du gradient et la vectorisation. |
|||||||
| 12 | ||||||||
|
13 | ## 8.1 Linéaire contre non linéaire |
||||||
|
14 | |||||||
| 15 | Les classifieurs linéaires du [module précédent](/fr/Machine%20Learning/06%20Linear%20classification) séparent les classes par une seule frontière droite, si bien qu'un problème comme XOR, non linéairement séparable, est hors de portée. Composer des unités à travers une activation non linéaire $g$ courbe la frontière. La non-linéarité est essentielle : sans elle, une pile de couches linéaires se réduit à une seule application linéaire, |
|||||||
| 16 | ||||||||
| 17 | $$\boxed{ W^{[2]}\!\left(W^{[1]} x + b^{[1]}\right) + b^{[2]} = W' x + b' }$$ |
|||||||
| 18 | ||||||||
| 19 | et la profondeur n'apporterait rien. C'est l'activation non linéaire qui rend l'empilement utile. |
|||||||
| 20 | ||||||||
|
21 | ## 8.2 Les couches : entrée, cachée, sortie |
||||||
|
22 | |||||||
| 23 | Un neurone calcule $a = g(w^T x + b)$. Une couche empile plusieurs neurones, et un réseau empile des couches. La couche $l$ transforme les activations précédentes en nouvelles : |
|||||||
| 24 | ||||||||
| 25 | $$\boxed{ z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]}, \quad a^{[l]} = g^{[l]}\!\left(z^{[l]}\right), \quad a^{[0]} = x, \quad \hat{y} = a^{[L]} }$$ |
|||||||
| 26 | ||||||||
| 27 | La couche d'entrée contient $x$, les couches cachées apprennent des caractéristiques intermédiaires, et la couche de sortie produit la prédiction $\hat{y}$. |
|||||||
| 28 | ||||||||
|
29 |  |
||||||
|
30 | |||||||
| 31 | *Chaque arête porte un poids de $W^{[l]}$ et chaque unité ajoute un biais puis applique l'activation.* |
|||||||
| 32 | ||||||||
| 33 | *Remarque :* le biais est désormais écrit explicitement et chaque couche a sa propre matrice de poids $W^{[l]}$, contrairement à la convention antérieure qui repliait le biais dans $\theta^T x$ avec $x_0 = 1$. C'est la notation utilisée tout au long du cours de Deep Learning. |
|||||||
| 34 | ||||||||
|
35 | ## 8.3 Couche de sortie : binaire et multiclasse |
||||||
|
36 | |||||||
| 37 | La couche de sortie s'adapte à la tâche, en réutilisant les pertes du module précédent. Pour deux classes, une sortie sigmoïde avec l'entropie croisée binaire ; pour $k$ classes, une sortie softmax avec l'entropie croisée catégorielle : |
|||||||
| 38 | ||||||||
| 39 | $$\boxed{ \hat{y} = \frac{1}{1 + e^{-z}} \quad\text{(binaire)} \qquad \hat{y}_c = \frac{e^{z_c}}{\sum_{j} e^{z_j}} \quad\text{(multiclasse)} }$$ |
|||||||
| 40 | ||||||||
|
41 | ## 8.4 Fonctions d'activation et le problème du non-centrage en zéro |
||||||
|
42 | |||||||
| 43 | L'activation cachée est généralement la sigmoïde, la tangente hyperbolique ou l'unité de rectification linéaire : |
|||||||
| 44 | ||||||||
| 45 | $$\boxed{ \sigma(z) = \frac{1}{1 + e^{-z}}, \qquad \tanh(z), \qquad \mathrm{ReLU}(z) = \max(0, z) }$$ |
|||||||
| 46 | ||||||||
| 47 | La sigmoïde sature dans ses queues, et ses sorties ne sont jamais négatives, donc les poids entrants d'une unité reçoivent des gradients de même signe et les mises à jour zigzaguent. La $\tanh$, centrée en zéro, supprime ce biais, et ReLU évite complètement la saturation du côté positif, ce qui en fait le choix par défaut courant. |
|||||||
| 48 | ||||||||
|
49 |  |
||||||
|
50 | |||||||
| 51 | *La tanh est centrée en zéro alors que la sigmoïde ne l'est pas, et ReLU reste linéaire pour les entrées positives.* |
|||||||
| 52 | ||||||||
|
53 | ## 8.5 Règle de dérivation en chaîne et rétropropagation |
||||||
|
54 | |||||||
| 55 | L'entraînement minimise la perte par descente de gradient, qui a besoin de son gradient par rapport à chaque poids. La rétropropagation les calcule tous en une passe avant et une passe arrière : la passe avant met en cache chaque $z^{[l]}$ et $a^{[l]}$, puis la passe arrière applique la règle de dérivation en chaîne de la perte jusqu'à la première couche, en réutilisant le cache. Avec l'erreur de couche $\delta^{[l]} = \partial L / \partial z^{[l]}$, |
|||||||
| 56 | ||||||||
| 57 | $$\boxed{ \delta^{[l]} = \left((W^{[l+1]})^T \delta^{[l+1]}\right) \odot g'^{[l]}\!\left(z^{[l]}\right), \qquad \frac{\partial L}{\partial W^{[l]}} = \delta^{[l]} (a^{[l-1]})^T }$$ |
|||||||
| 58 | ||||||||
|
59 |  |
||||||
|
60 | |||||||
| 61 | *La leçon [Rétropropagation](/fr/Deep%20Learning/05%20Backpropagation) du cours de Deep Learning la dérive pas à pas.* |
|||||||
| 62 | ||||||||
|
63 | ## 8.6 L'entraînement en pratique |
||||||
|
64 | |||||||
| 65 | - **Mini-lots.** Estimer le gradient sur un petit lot d'exemples à la fois, un compromis entre le lot complet (précis mais lent) et un seul exemple (bruité mais peu coûteux). |
|||||||
| 66 | - **Disparition du gradient.** À travers de nombreuses couches qui saturent, le gradient rétropropagé est un produit de petits facteurs et tend vers zéro, si bien que les premières couches n'apprennent presque pas. Les activations ReLU et une initialisation soignée le maintiennent vivant. |
|||||||
| 67 | - **Initialisation.** Démarrer les poids petits et aléatoires pour briser la symétrie, en mettant la variance à l'échelle du nombre d'entrées (Xavier ou He), pour que les signaux ne s'évanouissent ni n'explosent avec la profondeur. |
|||||||
|
68 | - **Dropout.** Mettre à zéro au hasard une fraction des unités pendant l'entraînement. Cela empêche les unités de se co-adapter et agit comme un régulariseur, dans l'esprit du [module de régularisation](/fr/Machine%20Learning/07%20Regularization%20and%20high-dimensional%20inference). |
||||||
|
69 | |||||||
|
70 | ## 8.7 Tests de validité et vectorisation |
||||||
|
71 | |||||||
| 72 | La rétropropagation est source d'erreurs, alors on compare le gradient analytique à une estimation numérique par différences finies : |
|||||||
| 73 | ||||||||
| 74 | $$\boxed{ \frac{\partial L}{\partial \theta} \approx \frac{L(\theta + \varepsilon) - L(\theta - \varepsilon)}{2\varepsilon} }$$ |
|||||||
| 75 | ||||||||
| 76 | et on implémente les passes sous forme vectorisée, une opération matricielle par couche sur tout le mini-lot (les colonnes sont les exemples), ce qui est à la fois plus clair et bien plus rapide : |
|||||||
| 77 | ||||||||
| 78 | $$\boxed{ Z^{[l]} = W^{[l]} A^{[l-1]} + b^{[l]} }$$ |
|||||||
| 79 | ||||||||
|
80 | *Ce module est la porte d'entrée du cours de [Deep Learning](/fr/Deep%20Learning), qui développe pleinement les architectures, les optimiseurs, l'initialisation, la normalisation et la régularisation. Le module suivant revient aux modèles linéaires sous un nouvel angle, le classifieur à marge maximale.* |
||||||
|
81 | |||||||
| 82 | --- |
|||||||
|
83 | Suivant : [Machines à vecteurs de support](/fr/Machine%20Learning/09%20Support%20Vector%20Machines) · [Vue d'ensemble du cours](/fr/Machine%20Learning) |
||||||
