Implémentation matricielle des réseaux de neurones

Une implémentation efficace et évolutive des réseaux de neurones doit aujourd’hui utiliser au maximum les nouvelles fonctionnalités de nos processeurs en terme de cache, de parallélisation voire d’utiliser du GPU. Afin d’exploiter nativement des outils très puissants de calculs numériques nous représentons dans cet article les algorithmes de propagation et d’apprentissage du perceptron multi-couches classique sous forme matricielle.

Les avantages d’une représentation matricielles sont immédiats:

  • Une formalisation des algorithmes et élégance du code.
  • La représentation sous forme matricielle permet d’utiliser des bibliothèques hautement optimisées de calcul matriciel tel que BLAS [1] nous offrant ainsi un gain de performances important.

Notations

Voici les notations que nous utiliserons:

  • $ P$ nos P exemples d’apprentissage.
  • le nombre de neurones sur la couche $ l$.
  • $ L$ couche de sortie.
  • $ A$ la matrice d’activation de notre réseau (les valeurs en sortie de notre réseau).
  • $ T$ la matrice des sorties désirées.
  • $ W$ la matrice des poids de notre réseau.
  • $ \\Delta W$ la matrice de correction des poids.
  • $ \\Delta $ la matrice contenant les erreurs associées aux neurones de notre réseau.
  • $ b(l) $ vecteur contenant les biais pour la couche $ l$.
  • $ \\Delta b(l) $ vecteur contenant les corrections des biais pour la couche $ l$.
  • $ 1_n$ vecteur colonne de taille $ n$ contenant des “1“.

Représentation sous forme matricielle

La matrice d’activation

Cette matrice contient les activations en sortie de nos neurones pour tout les exemples d’apprentissage. La ligne $ r$ de la matrice $ A(l)$ contient les activations en sortie des neurones de la couche $ l$. Les exemples d’apprentissage seront placés sur la matrice $ A(0)$.

\\begin{displaymath}\\mathcal{A}(l) =
\\left[
\\begin{array}{c}
\\mathcal{A}^{(1)...
...\\cdots <span class=& \mathcal{A}^{(P)}_{N_l}(l) \ \end{array} \right] \end{displaymath}”>

La matrice de sorties désirées

Cette matrice contient les sorties désirées pour chaque exemple d’apprentissage. La ligne $ r$ de la matrice $ T$ contient les sorties désirées pour l’exemple $ r$.

\\begin{displaymath}\\mathcal{T} =
\\left[
\\begin{array}{c}
\\mathcal{T}^{(1)} \...
... <span class=& \cdots & \mathcal{T}^{(P)}_{N_l} \ \end{array} \right] \end{displaymath}”>

La matrice de poids

Cette matrice contient les poids des connexions de notre réseau. La colonne $ c$ de la matrice $ W(l)$ contient les poids des connexions reliées au neurone $ c$ de la couche $ l$.

\\begin{displaymath}\\mathcal{W}=
\\left[
\\begin{array}{cccc}
\\mathcal{W}^{(1)}(...
... <span class=& \mathcal{W}^{(N_l)}_{N_{l-1}}(l) \ \end{array} \right] \end{displaymath}”>

La matrice de correction de poids

Cette matrice contient les corrections de poids à appliquée aux connexions de notre réseau. La colonne $ c$ de la matrice $ \\Delta W$ contient les corrections de poids à effectuer sur les connexions reliées au neurone $ c$ de la couche $ l$.

\\begin{displaymath}\\Delta \\mathcal{W}=
\\left[
\\begin{array}{cccc}
\\Delta \\mat...
...ta \\mathcal{W}^{(N_l)}_{N_{l-1}}(l) \\
\\end{array}
\\right]
\\end{displaymath}

La matrice d’erreur

Cette matrice contient les erreurs associées aux neurones de notre réseau. La ligne $ r$ de la matrice $ \\Delta(l)$ contient les erreurs des neurones de la couche $ l$ quand l’exemple $ P$ est présenté.

\\begin{displaymath}\\Delta(l) =
\\left[
\\begin{array}{c}
\\delta^{(1)}(l) \\
...
...l) <span class=& \cdots & \delta^{(P)}_{N_l}(l) \ \end{array} \right] \end{displaymath}”>

Etapes de la backpropagation sous forme matricielle

wzxhzdk:1