Idée
Un sac unique qui porte tous les coefficients du modèle, étiquetés par leur nom (W1, b1, W2, b2).
Pourquoi
Un sac unique qui porte tous les coefficients du modèle, étiquetés par leur nom (W1, b1, W2, b2). Au lieu de promener quatre variables séparées entre toutes les fonctions, on en promène une seule — comme un trousseau de clés qu'on passe de main en main, et chaque fonction prend la clé dont elle a besoin.
Outil
Comme une famille indexée (a_i)_{i∈I} en algèbre — au lieu de variables nommées une à une, on indexe par un libellé.
Formule
Pour un réseau avec $n_0$ entrées, $n_1$ neurones en couche cachée, $n_2$ neurones en couche de sortie : $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}$. La matrice $X$ est transposée en $\mathbb{R}^{n_0 \times m}$ où $m$ est le nombre d'exemples.
Piège
Si la fonction update fait for key, val in parametres.items(): ... et compte sur l'ordre 'W1, b1, W2, b2', ré-écrire le dict en {W2, b2, W1, b1} peut casser. Python 3.7+ préserve l'ordre d'insertion ; mais une régénération en désordre via **kwargs peut le briser. Préférer optimizer.step() Pytorch qui ne dépend pas de l'ordre.