Perceptron multicouche
Une couche cachée construit des caractéristiques intermédiaires avant de produire une réponse. Dans ce petit réseau, deux neurones mesurent les différences entre les entrées. Désactivez leur non-linéarité pour voir pourquoi ajouter des couches ne suffit pas.
Pourquoi XOR a-t-il besoin d’une couche cachée ?
XOR vaut 1 quand une seule des deux entrées vaut 1. Changez les entrées, puis désactivez ReLU : les mêmes poids ne résolvent plus le problème.
[0, 1] → h = [0, 1] → Sortie = 1
ReLU conserve les différences positives et ramène les négatives à zéro. Leur somme détecte les entrées différentes.
Ces poids sont choisis à la main, sans entraînement. Cette représentation fonctionne, mais rien ne garantit que l’entraînement la trouvera.Comparer les quatre entrées
| x₁ | x₂ | Cible | Sortie |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
Voir le code · NumPy / JAX
L’interaction utilise JavaScript. Ces exemples Python reprennent les mêmes données et équations avec les valeurs initiales, pas celles des curseurs. JAX calcule le gradient de la perte avec jax.grad. Guide de différentiation JAX
Dans un nouveau projet local, enregistrez l’exemple dans demo.py. Installation CPU : uv init ai-lab → cd ai-lab → uv add numpy jax → uv run demo.py
import jax.numpy as jnp
# NumPy: replace the import above with: import numpy as jnp
x = jnp.array([[0., 0.], [0., 1.], [1., 0.], [1., 1.]])
w1 = jnp.array([[1., -1.], [-1., 1.]])
w2 = jnp.array([1., 1.])
h = jnp.maximum(x @ w1, 0.)
print(h @ w2) # [0., 1., 1., 0.]
print((x @ w1) @ w2) # [0., 0., 0., 0.]: no ReLU
Un MLP alterne des transformations affines et des non-linéarités élément par élément. Pour une entrée , une largeur cachée et une largeur de sortie :
avec et . Sans , des transformations affines consécutives s'effondrent en une seule ; la profondeur seule n'élargirait pas la classe de fonctions.
Têtes, pertes et hypothèses
L'activation cachée et la sémantique de sortie répondent à des objectifs différents. Ne choisissez pas d'abord une fonction de perte dans une bibliothèque pour adapter ensuite artificiellement la question posée.
Ce que calcule la rétropropagation
Pour une perte , posons . La règle de dérivation en chaîne donne
La différenciation automatique élimine les dérivées écrites à la main, mais pas les hypothèses dimensionnelles, numériques ou d'objectif. Un gradient nul peut indiquer un optimum, une saturation, un ReLU mort, un masque incorrect ou un graphe déconnecté.
Une rétropropagation scalaire
Prenons , , , , , la cible et . La passe avant donne , , , . La passe arrière donne , , et . Les gradients des biais valent respectivement pour la première couche et pour la seconde. Toutes les dérivées utilisent les poids de la même passe avant ; modifier avant de calculer reviendrait à dériver un autre calcul.
La rétropropagation calcule les gradients ; l’optimiseur applique la mise à jour. Une perte moyenne sur un mini-lot exige de moyenner les contributions et d’effacer les gradients accumulés avant la prochaine mise à jour indépendante. L’inférence ne nécessite que la passe avant. Avec dropout, l’entraînement masque aléatoirement des activations (avec compensation d’échelle pour le dropout inversé), tandis que l’évaluation désactive cet aléa. Un MLP composé uniquement de couches affines et ReLU ne possède pas de couche dépendante du mode.
Exemple appliqué : XOR avec deux ReLU
Pour , définissons
Les paires identiques produisent 0 et les paires différentes produisent 1. Une unique frontière linéaire ne peut pas séparer le XOR ; la couche cachée représente d'abord le fait que les entrées diffèrent ou non. Cela prouve qu'une représentation existe — pas que la SGD la trouvera à partir d'une initialisation arbitraire ni qu'elle généralisera en présence de bruit.
Non-linéarités modernes
- ReLU est peu coûteuse et non saturante sur sa partie positive, mais des unités peuvent rester inactives. Elle demeure une référence utile, et non universellement obsolète.
- GELU et SiLU/Swish sont des fonctions lisses élément par élément courantes dans les Transformers modernes et certains ConvNets.
- GEGLU/SwiGLU utilisent deux branches projetées et modifient la largeur, les paramètres et les kernels ; ce ne sont pas de simples activations interchangeables.
- Sigmoid/Tanh restent utiles dans les portes et les états bornés malgré leur saturation à grande amplitude.
Voir Activations et réseaux feed-forward à portes. Des comparaisons équitables contrôlent le nombre de paramètres, les FLOPs, le budget d'entraînement et les kernels d'implémentation.
La capacité n'est pas l'apprenabilité
Le théorème de Cybenko établit que des sommes finies d’unités à activation sigmoïdale continue peuvent approcher uniformément toute fonction continue sur un cube compact, à toute tolérance d’erreur strictement positive. La largeur finie nécessaire dépend de la fonction et de la tolérance ; aucune largeur fixe ne suffit ainsi pour toutes les cibles. Le théorème ne garantit ni des données d’entraînement suffisantes, ni une représentation efficace, une optimisation réussie, des probabilités calibrées, une validité causale ou une généralisation hors distribution. « Approximateur universel » n'est pas un résultat de sélection de modèle.
Biais inductif et contre-exemples
Un MLP voit un vecteur plat. L'invariance par translation, l'ordre séquentiel, la structure de graphe et l'invariance par permutation n'apparaissent pas automatiquement. Les CNNs, les RNNs, l'attention et les réseaux de neurones sur graphes encodent des schémas de partage ou de calcul plus forts et peuvent modifier l'efficacité d'échantillonnage.
Inversement, sur des variables tabulaires stables avec peu de données, un modèle linéaire, un arbre ou un petit MLP peuvent surpasser une architecture à la mode. Comparez-les avec le même découpage et le même budget.
Critères minimaux d'acceptation
- Validez par assertion les dimensions de batch, de variables et de sortie.
- Surapprenez sur un échantillon minuscule pour vérifier que l'implémentation est capable d'apprendre.
- Comparez aux modèles de référence constants, linéaires ou arborescents.
- N'ajustez les prétraitements appris qu'à l'intérieur des plis d'entraînement.
- Rapportez plusieurs graines aléatoires, les échecs et les ressources consommées — pas uniquement la meilleure exécution.
- Testez les hypothèses de déploiement avec Évaluation sous dérive de distribution.
Cette note se concentre sur l'entraînement supervisé classique par gradient ; elle ne traite pas le MLP comme un modèle biologique et ne dresse pas un inventaire exhaustif de chaque activation et optimiseur.