Petit réseau neuronal

Notes prises lors de la construction d’un réseau neuronal très simple.
27 janvier 2019

J’ai rassemblé ci-dessous des notes que j’ai prises en suivant les tutoriels vidéo de Daniel Shiffman sur les réseaux neuronaux, qui eux-mêmes s’inspirent largement de Make Your Own Neural Network, un livre écrit par Tariq Rashid. Les concepts et les formules ne sont pas de moi, je ne fais que les écrire afin de m’aider à les comprendre et à les mémoriser.

Algorithme de propagation avant

Le calcul réalisé par une des couches du réseau, qui se fait en considérant ses « poids synaptiques » (en anglais, “weights”), peut se résumer par le produit matriciel ci-dessous, dans lequel h représente une des couches intermédiaires (ou « couches cachées ») du réseau, w représente les poids et x représente les nœuds d’entrées (“inputs”) . Dans cette notation inversée, wij indique le poids de j vers i.

[h1h2]=[w11w12w13w21w22w23]x1x2x3

Ce produit peut aussi se représenter ainsi :

h1=(w11×x1)+(w12×x2)+(w13×x3)h2=(w21×x1)+(w22×x2)+(w23×x3)

Il est aussi possible de le simplifier davantage :

Hi=WijXi

Il faut aussi ajouter un biais B, dont la valeur est de 1.

[h1h2]=[w11w12w13b1w21w22w23b2]⎢ ⎢ ⎢x1x2x31⎥ ⎥ ⎥h1=(w11×x1)+(w12×x2)+(w13×x3)+b1h2=(w21×x1)+(w22×x2)+(w23×x3)+b2Hi=σ(WIHijXi+BHi)

La fonction sigmoïde servira de fonction d’activation :

σ(x)=11+ex

Le calcul du nœud de sortie Y se fera finalement de cette façon :

Y=σ(WHOij×Hi+BYi)

Rétropropagation du gradient

Une fois la propagation avant terminée, nous sommes en mesure de calculer l’erreur e, qui doit ensuite être envoyée du nœud de sortie vers les couches précédentes, par rétropropagation. Ici, wij représente le poids w entre le nœud de sortie j et la couche cachée i.

eh1=(w11w11+w12×e1)+(w21w21+w22×e2)eh2=(w12w11+w12×e1)+(w22w21+w22×e2)

Nous allons cependant simplifier ce calcul en ne normalisant pas les poids avant de les multiplier avec l’erreur :

eh1=w11×e1+w21×e2eh2=w12×e1+w22×e2

Ce qui équivaut à ce produit matriciel :

[eh1eh2]=[w11w21w12w22][e1e2]

À noter que la matrice des poids qui était utilisée lors de la propagation avant a été transposée pour être utilisée lors de la rétropropagation.

W=[w11w12w21w22]WT=[w11w21w12w22]

Autres ressources

Contexte

Cette note de blog fait partie de mon projet de recherche Vers un cinéma algorithmique, démarré en avril 2018. Je vous invite à consulter la toute première note du projet pour en apprendre davantage.