Le problème
Voici un problème qu'un seul neurone ne peut PAS résoudre (la sortie vaut 1 quand les entrées sont différentes) :
| Entrée 1 | Entrée 2 | Sortie |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
📖 Vocabulaire - français / anglais
- XOR ↔ *OU exclusif* (vrai quand les deux entrées diffèrent)
- séparable linéairement ↔ *linearly separable* (séparable par une droite)
Exercice 3.5.1 - Impossible à la main
✍️ À toi de jouer
Sur papier, place 4 points : (0,0)=noir, (0,1)=blanc, (1,0)=blanc, (1,1)=noir.
Question : peux-tu tracer UNE SEULE ligne droite qui sépare les blancs des noirs ?
Voir la réponse
Non - c'est géométriquement impossible. Les deux blancs sont sur une diagonale, les deux noirs sur l'autre.
La leçon : un seul neurone = une seule ligne droite. Si les données ne sont pas séparables par une droite, un neurone seul échoue toujours.
Exercice 3.5.2 - Résoudre avec une couche cachée
✍️ À toi de jouer
Reprends le code de la Phase 3, mais avec les données XOR :
X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([[0], [1], [1], [0]])
Essaie d'abord sans couche cachée (2 entrées → 1 sortie). L'erreur reste-t-elle bloquée vers 0.25 ? Puis essaie avec 2 neurones cachés (l'architecture d'origine). L'erreur descend-elle presque à 0 ?
Voir la réponse
# Sans couche cachée : 2 -> 1 directement.
# poids1 = np.random.uniform(-1, 1, (2, 1)); supprime couche1/poids2.
# Résultat : l'erreur reste coincée autour de 0.25, pour toujours.
# Avec 2 neurones cachés : 2 -> 3 -> 1 (code d'origine).
# Résultat : l'erreur descend vers ~0.01.
La leçon : une couche cachée n'est pas de la décoration. Chaque neurone caché trace sa propre droite, et le neurone final les combine pour « plier » l'espace. Avec assez de neurones cachés, presque n'importe quel problème devient séparable.
Sans cet exercice, beaucoup de gens pensent : « pourquoi ne pas juste un neurone ? ». Maintenant tu sais pourquoi.