Le problème XOR dans les réseaux neuronaux.
Introduction
C’est le premier d’une série de posts explorant les implémentations de réseaux neuronaux artificiels (ANN). Le but de l’article est d’aider le lecteur à avoir une intuition des concepts de base avant de passer aux implémentations algorithmiques qui suivront.
Aucune connaissance préalable n’est supposée, bien que, dans un souci de brièveté, toute la terminologie ne soit pas expliquée dans l’article. Au lieu de cela, des hyperliens sont fournis vers Wikipédia et d’autres sources où une lecture supplémentaire peut être nécessaire.
C’est un grand sujet. Les ANN ont une grande variété d’applications et peuvent être utilisés pour l’apprentissage supervisé, non supervisé, semi-supervisé et par renforcement. Et ce, avant d’aborder les architectures spécifiques aux problèmes au sein de ces catégories. Mais il faut bien commencer quelque part, alors pour réduire le champ d’application, nous allons commencer par l’application des ANN à un problème simple.
Le problème XOr
Le problème XOr, ou « exclusif ou », est un problème classique dans la recherche sur les ANN. C’est le problème de l’utilisation d’un réseau neuronal pour prédire les sorties des portes logiques XOr étant donné deux entrées binaires. Une fonction XOr doit renvoyer une valeur vraie si les deux entrées ne sont pas égales et une valeur fausse si elles sont égales. Toutes les entrées possibles et les sorties prédites sont présentées dans la figure 1.
XOr est un problème de classification et un problème pour lequel les sorties attendues sont connues à l’avance. Il est donc approprié d’utiliser une approche d’apprentissage supervisé.
En surface, XOr semble être un problème très simple, cependant, Minksy et Papert (1969) ont montré que c’était un gros problème pour les architectures de réseaux neuronaux des années 1960, connues sous le nom de perceptrons.
Perceptrons
Comme tous les ANN, le perceptron est composé d’un réseau d’unités, qui sont analogues aux neurones biologiques. Une unité peut recevoir une entrée d’autres unités. Ce faisant, elle prend la somme de toutes les valeurs reçues et décide si elle va transmettre un signal aux autres unités auxquelles elle est connectée. C’est ce qu’on appelle l’activation. La fonction d’activation utilise un moyen ou un autre pour réduire la somme des valeurs d’entrée à 1 ou 0 (ou à une valeur très proche de 1 ou 0) afin de représenter l’activation ou son absence. Une autre forme d’unité, connue sous le nom d’unité de biais, s’active toujours, envoyant typiquement un 1 codé en dur à toutes les unités auxquelles elle est connectée.
Les perceptrons comprennent une seule couche d’unités d’entrée – dont une unité de biais – et une seule unité de sortie (voir figure 2). Ici, une unité de biais est représentée par un cercle pointillé, tandis que les autres unités sont représentées par des cercles bleus. Il existe deux unités d’entrée sans biais représentant les deux valeurs d’entrée binaires pour XOr. N’importe quel nombre d’unités d’entrée peut être inclus.
Le perceptron est un type de réseau feed-forward, ce qui signifie que le processus de génération d’une sortie – connu sous le nom de propagation vers l’avant – circule dans une direction de la couche d’entrée à la couche de sortie. Il n’existe aucune connexion entre les unités de la couche d’entrée. Au lieu de cela, toutes les unités de la couche d’entrée sont connectées directement à l’unité de sortie.
Une explication simplifiée du processus de propagation vers l’avant est que les valeurs d’entrée X1 et X2, ainsi que la valeur de biais de 1, sont multipliées par leurs poids respectifs W0..W2, et analysées vers l’unité de sortie. L’unité de sortie prend la somme de ces valeurs et emploie une fonction d’activation – typiquement la fonction de pas de Heavside – pour convertir la valeur résultante en un 0 ou un 1, classant ainsi les valeurs d’entrée comme 0 ou 1.
C’est le réglage des variables de poids qui donne à l’auteur du réseau le contrôle du processus de conversion des valeurs d’entrée en une valeur de sortie. Ce sont les poids qui déterminent où est tracée la ligne de classification, la ligne qui sépare les points de données en groupes de classification. Si tous les points de données d’un côté d’une ligne de classification se voient attribuer la classe 0, tous les autres sont classés 1.
Une limitation de cette architecture est qu’elle n’est capable de séparer les points de données qu’avec une seule ligne. Ceci est regrettable car les entrées XOr ne sont pas linéairement séparables. Ceci est particulièrement visible si vous tracez les valeurs d’entrée XOr sur un graphique. Comme le montre la figure 3, il n’y a aucun moyen de séparer les prédictions 1 et 0 avec une seule ligne de classification.