Idée
On empile deux blocs : une couche cachée qui prend les entrées brutes, leur applique une transformation linéaire suivie d'une saturation, et produit un nouvel ensemble de mesures intermediaires ; une couche de sortie qui rejoue le même tour.
Pourquoi
On empile deux blocs : une couche cachée qui prend les entrées brutes, leur applique une transformation linéaire suivie d'une saturation, et produit un nouvel ensemble de mesures intermediaires ; une couche de sortie qui rejoue exactement le même tour sur ces mesures intermediaires pour produire la sortie finale. La superposition transformee-saturation-transformee-saturation permet de tracer des frontières courbes (non-linéaires), donc d'apprendre XOR. Composition de fonctions affines avec saturations intercalées, exactement comme on composé deux applications $\mathbb{R}^n \to \mathbb{R}^p \to \mathbb{R}^q$ en algèbre linéaire de spé (mais ici la composition n'est plus linéaire a cause des saturations). Le piège : empiler deux couches sans activation entre elles, c'est revenir à une seule couche linéaire. La non-linéarité au milieu fait tout le travail.
Outil
Composition de deux applications $\mathbb{R}^n \to \mathbb{R}^p \to \mathbb{R}^q$ en algèbre linéaire de spé, mais avec saturation intercalée (donc composition non linéaire).
Formule
$Z_1 = W_1 X + b_1$, $A_1 = \sigma(Z_1)$, $Z_2 = W_2 A_1 + b_2$, $\hat{Y} = \sigma(Z_2)$ ; shapes : $X \in \mathbb{R}^{n_0 \times m}$, $W_\ell \in \mathbb{R}^{n_\ell \times n_{\ell-1}}$.
Piège
Tentation : écrire $W_1$ de forme $(n_0, n_1)$ par analogie avec scikit-learn ($X W$). Avec la convention « colonne = exemple » de ce notebook ($X \in \mathbb{R}^{n_0 \times m}$), c'est l'inverse : $W_1$ a la forme $(n_1, n_0)$ et le produit s'écrit $W_1 X$, pas $X W_1$ — sinon les shapes ne se referment pas et l'erreur n'apparaît qu'à la première multiplication.
Diagramme
graph LR x((entree x)) --> W1[couche cachee W1 b1] W1 --> sig1[sigma] sig1 --> h((mesures h)) h --> W2[couche sortie W2 b2] W2 --> sig2[sigma] sig2 --> y((sortie y))