Forward propagation

Idée

Faire couler les données d'entrée à travers le réseau, étage par étage, pour obtenir une prédiction en sortie.

Outil

Évaluer une fonction composée $f_2 \circ \sigma \circ f_1 \circ \sigma$ en un point — on substitue de gauche à droite, sans rien retenir d'autre que la valeur courante (sauf qu'ici on retient les intermédiaires pour la rétropropagation).

Formule

Trois entiers : ne = nb d'entrées ($n_0$), nc = nb de neurones de la couche cachée ($n_1$), ns = nb de neurones de sortie ($n_2$). Tirage gaussien standard via torch.randn : $W_1 \in \mathbb{R}^{n_1 \times n_0}$, $b_1 \in \mathbb{R}^{n_1 \times 1}$, $W_2 \in \mathbb{R}^{n_2 \times n_1}$, $b_2 \in \mathbb{R}^{n_2 \times 1}$. Pour XOR : ne=2, nc=2, ns=1, donc $W_1$ est 2x2, $b_1$ est 2x1, $W_2$ est 1x2, $b_2$ est 1x1. La graine torch.manual_seed(0) rend l'initialisation reproductible.

Piège

Tentation : return A2 (la sortie 'utile'). Vidéo 9 dit explicitement 'on aura également besoin de A1 pour calculer les gradients'. Donc on retourne un dict {'A1': A1, 'A2': A2}. Sans A1, le backprop est cassé (besoin de $\sigma'(Z^{[1]}) = A^{[1]}(1-A^{[1]})$).