Le modèle perceptron

Un perceptron est un modèle linéaire paramétrique pour approximer une fonction. Il peut être utiliser pour la classification binaire. Le perceptron permet de trouver une surface pour séparer un espace en deux. Chaque sous-espace est associé à une classe.

Inspiré de neurones, Rosenblatt présente son perceptron dans un rapport publié en 1957 pour le Cornell Aeronautical Laboratory.

Une fonction linéaire \(z\) représente la connectivité d’un neurone à des stimuli via ses dendrites. Il prend en paramètre un vecteur de valeurs \(\mathbf{x}\) où chaque valeur \(x_i\) représente une intensité d’un stimuli. Ensuite, une autre fonction mesure si la sortie de \(z\) est assez grande pour « activer » la neurone.

images par Clker-Free-Vector-Images et Rukshan Pramoditha

Perceptron à la base des réseaux de neurones modernes

Malgré sa simplicité, le perceptron a inspiré les réseaux de neurones modernes. Les MLP (Multilayer Perceptron) sont des perceptrons avec des couches additionnelles pour connecter plusieurs neurones ensemble. Les réseaux de neurones profonds (deep neural networks) sont ceux avec un nombre important de couches.

image par The Data Scientist

Intuition géométrique

1D

Soit un ensemble d’entraînement \(D_{train}\) contenant des exemples \(\mathbf{x}_i\) avec une seule caractéristique \(x_0\) et une classe \(y\) pour chaque exemple.

\[y = f(\mathbf{x}),\ \mathbf{x} \in \mathbb{R}^1 \rightarrow y = f(x_0)\]

Vous voulez séparer cet espace 1D en deux. Il faut trouver une valeur de \(x_0\) où tous les exemples à gauche de la valeur sont d’une classe différente des exemples à droite. Appelons cette valeur \(x^*\).

Si les données ne sont pas complètement séparables, if faut trouver \(x^*\) qui minimise l’erreur. Il est question d’un problème d’optimisation.

Lorsque \(x^*\) est obtenue, un modèle \(h\) avec le paramètre interne \(x^*\) détermine la classe d’un exemple :

\[\hat{y} = h(x_0) = \begin{cases} 0 & \text{si } x_0 < x^* \\ 1 & \text{si } x_0 \geq x^* \end{cases}\]

2D

\(h\) ne se généralise pas simplement en 2D. Il faut comparer avec une droite, au lieu d’un point.

En utilisant la formulation canonique d’une droite \(x_1 = mx_0 + b\), il faut deux versions de \(h\) dont une pour chaque axe.

Pour \(\text{(a)}\) et \(\text{(c)}\) : \[\hat{y} = h(\mathbf{x}) = \begin{cases} 0 & \text{si } x_1 < mx_0 + c \\ 1 & \text{si } x_1 \geq mx_0 + c \end{cases}\]

Mais pour \(\text{(b)}\) : \[\hat{y} = h(\mathbf{x}) = \begin{cases} 0 & \text{si } x_0 < mx_1 + c \\ 1 & \text{si } x_0 \geq mx_1 + c \end{cases}\]

Les fonctions définies par parties (fonctions avec des if) sont plus lentes et plus difficiles à optimiser que celles qui ne le sont pas. De plus, il y aura 3 parties à \(h\) si \(\mathbf{x} \in \mathbb{R}^3\).

Soit l’équation générale pour une ligne en 2D \[ x_1 = mx_0 + c\\ \downarrow\ \downarrow\ \downarrow\\ \begin{align*} mx_0 - x_1 + c &= 0\\ -mx_0 + x_1 + (-c) &= 0\\ \frac{w_0}{w_1}x_0 + x_1 + (-c) &= 0,\quad m =-\frac{w_0}{w_1}\\ w_0x_0 + w_1x_1 + (-w_1c) &= 0\\ w_0x_0 + w_1x_1 + b &= 0,\quad c = -\frac{b}{w_1} \end{align*} \]

Au lieu d’avoir 2 paramètres (\(m\) et \(c\)) dans l’espace des caractéristiques \(x_0 \times x_1\) , il y a trois 3 paramètres (\(w_0\), \(w_1\), et \(b\)) dans un espace 3D \(w_0 \times w_1 \times b\). Ceci est une reparamétrisation qui permet de trouver un plan dans un espace de caractéristiques 3D contenant les points 2D. L’intersection du plan 3D avec le plan 2D sur lequel les exemples se situent trace une ligne dans l’espace des caractéristiques.

Au lieu d’optimiser directement la ligne frontière via \(m\) et \(b\) , la frontière est indirectement optimisée via \(w_0\), \(w_1\) et \(b\). Résoudre un problème dans une dimension plus élevée est commun en apprentissage automatique, et d’autres domaine tel que l’infographie (ex.: transformations avec coordonnées homogènes).

\(n\)D

Si les exemples ont \(n\) caractéristiques, une frontière peut être optimisée avec \(n+1\) paramètres \(\{w_0, w_1, \dots, w_{n-1}, b\} \subseteq \mathbb{R}\) d’un hyperplan. Un hyperplan est la généralisation d’un plan pour autres dimensions que 3D.

Soit \(\mathbf{x} \in \mathbb{R}^1\). Un hyperplan en une dimension est le point où l’hyperplan en deux dimensions (une ligne) coupe l’hyperplan où tous les \(\mathbf{x}_i\) se situent (l’axe \(x_0\)). L’hyperplan est donné par \(w_0x_0 + b = 0\).

Pour \(\mathbf{x} \in \mathbb{R}^2\), l’hyperplan 2D est la ligne de l’hyperplan 3D (un plan) qui coupe l’hyperplan où tous les \(\mathbf{x}_i\) se situent. L’hyperplan est donné par \(w_0x_0 + w_1x_1 + b\). Voir l’animation plus haut.

Pour \(\mathbf{x} \in \mathbb{R}^n\), l’hyperplan \(n\)D coupe l’hyperplan \(n+1\)D sur lequel tous les points \(\mathbf{x}_i\) se situent.

Classification

Rappel de l’algèbre linéaire : le vecteur normal à un plan est le vecteur formé des coefficients \(\{a,b,c\}\) de l’équation \(ax + bx + cz + d = 0\).

Nous avons une équation linéaire avec les paramètres \(\mathbf{w} \in \mathbb{R}^{n}\) et \(b\). Les composantes de \(\mathbf{w}\) sont appelées poids et \(b\) le biais.

\[\mathbf{w}\cdot\mathbf{x} + b = 0\]

Le vecteur \(\mathbf{w}\) est un vecteur normale à l’hyperplan séparant les points dans l’espace des caractéristiques \(\mathbb{R}^n\) ou l’espace de caractéristique augmentée \(\mathbb{R}^{n+1}\).

En pratique, une composante avec la valeur \(1\) peut être ajoutée soit au début ou soit à la fin de tous les \(\mathbf{x}_i\). La valeur de \(b\) est ajoutée à \(\mathbf{w}\) pour simplifier le calcul.

\[ \mathbf{x} = (x_0,\ x_1,\ 1),\quad \mathbf{w} = (w_0,\ w_1, b)\\ \downarrow\\ \mathbf{w} \cdot \mathbf{x} = w_0x_{0} + w_1x_1 + b \]

Supposons que \(\mathbf{w}\) ne contient pas \(b\) et représente uniquement le vecteur normal au plan. Ce plan passera toujours par l’origine. \(\mathbf{w}\cdot\mathbf{x}\) vérifie l’enlignement entre les deux vecteurs. Par contre, les vecteurs n’ont pas de positions, par définition.

Il nous faut le terme \(b\) pour avoir une transformation affine (ici, une translation) du plan. C’est effectivement « l’ordonnée à l’origine » et ajoute la notion de « position » au vecteur normal.

Nous voulons vérifier si la valeur du produit scalaire sera positive lorsque le vecteur \(\mathbf{x}\) pointe du même côté de la frontière que le vecteur normal. La frontière est effectivement ajusté directement par \(b\). Nous incluons donc \(b\) dans \(\mathbf{w}\) pour vérifier l’enlignement par rapport à la position de la frontière. L’angle entre \(\mathbf{w}\) et \(\mathbf{x}\) est \(< 90\) s’ils sont du même côté. Le résultat du produit scalaire sera \(0\) si \(\mathbf{x}\) est sur la frontière. Le résultat sera négatif si \(\mathbf{x}\) est l’autre côté de la frontière (angle \(> 90\)).

(Note: le graphique ci-dessus n’est pas pour les mêmes points et paramètres que les exemples précédents)

Le modèle du perceptron pour la classification

\[ z = \mathbf{w} \cdot \mathbf{x},\\ \hat{y}=h_w(\mathbf{x}) = \text{Threshold}(z),\ \ \text{Threshold}(z) = \begin{cases} 1 & \text{if } z \geq 0 \\ 0 & \text{else} \end{cases}\]

Les résultats négatifs du produit scalaire se font assigner une classe différente des résultats positifs.