Paramètres en dictionnaire

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.