The Perceptron Learning Protocol

Nathan Bangwa
4 min readMay 23, 2019

--

Dans l’article precedent (The Perceptron with Python) nous avons vu le fonctionnement du perceptron, et dans cet article nous allons voir comment le perceptron arrive à apprendre à partir des données.

1. C’est quoi l’apprentissage

Notre cher wikipedia nous propose cette définition : L’apprentissage est un ensemble de mécanismes menant à l’acquisition de savoir-faire, de savoirs ou de connaissances.

Dans le cas du perceptron et en machine learning en générale, le but de l’apprentissage sera de trouver les paramètres (poids synaptiques, biais) de la fonction (perceptron) qui interprète le mieux les données.

2. Protocole d’apprentissage

La question est de savoir comment varier chaque paramètre du perceptron (poids synaptiques, biais) pour que la sortie du perceptron se rapproche de la sortie réelle (exacte). Et donc comme vous l’avez deviné, tout commence par un petit calcul de l’erreur.

Le Perceptron étant un classifieur binaire (sortie 0 ou 1) l’erreur sera aussi binaire (chouette hein? je sais, ça simplifie le calcul).

Voici la marche à suivre:

1. Initialiser tous les poids synaptiques, le biais y compris (à 0 par exemple)
2. Pour chaque exemple d’une base d’apprentissage (échantillon):
- comparer la réponse fournie par le perceptron avec la réponse attendue (calcul de l’erreur)

The Perceptron Learning Protocol

L’action de RETRANCHER ou d’AJOUTER 1 à tous les poids synaptiques (biais aussi) des entrées actives est appelée Rétro-propagation de l’erreur (Eh oui je sais que vous l’aviez deviné, mais je l’ai dit tout haut avant vous)

3. Mise en oeuvre du protocole

Vous rappelez-vous nos fonctions vues dans la premiere partie (ici)??Eh bien dans la premiere partie nous connaissions les poids synaptiques ainsi que le biais. ici nous allons partir du principe qu’on a juste un échantillon des données et qu’on a aucune idée de la fonction (AND, OR). Eh oui c’est ça la vraie réalité.

Nous avons cet échantillon :

OR DATAS

La question est de trouver les poids synaptiques des entrées (W1 et W2) ainsi que la valeur du bias (Wo)

Perceptron Overview

Etape 1 : initialisons tous les poids à 0 (Wo = bias) et faisons une prédiction

Init weights

Etape 2 : Evaluation de l’erreur

On pouvait simplement faire error = prediction-target, mais pour question de rester explicite on a ces 3 lignes.

Cost evaluation

Etape 3 : Rétro-Propagation de l’erreur

On ajoute/retranche 1 à tous les poids (bias aussi) des entrées actives.

Etape 4 : Test de convergence du model

Vu qu’on a à faire à un classifieur linéaire, la convergence signifie que la précision du modèle est de 100%

Test de convergence

4. Apprentissage avec les données de la fonction OR

Learning protocol test AND

5 Apprentissage avec les données de la fonction AND

5. Apprentissage avec les données de la fonction XOR

Learning protocol test XOR
Après 9 itérations
Après 19 itérations
Après 116998 iterations

6. Pourquoi le modèle ne converge-t-il pas

Dans la premiere partie (ici) nous avons dit que le perceptron n’apprenait que les données pouvant être linéairement séparables.

C’est un peu flou? Comment savoir si les données sont linéairement séparables ?

okay, les données sont linéairement séparables lorsque elles peuvent être séparées par un tenseur de dimension N-1 alors qu’elles sont représentées dans un plan de dimension N.
Dans notre cas nos données sont représentées dans un plan de dimension N=2 (axes: x, y) , et un tenseur de dimension N-1 = Tensor 1D = vecteur ou droite

Ce qui veut dire, si nos 2 classes peuvent être séparées par une droite, alors on peut atteindre la convergence avec le perceptron.

Dataset
separation lineaire

Et c’est cette limite qu’a le perceptron simple qui donne lieu au perceptron multi-couches (Multi-Layers Perceptron) dont on parlera dans un article à venir.

7. Ressources

Vous trouverrez le notebook jupyter à cette adresse
https://notebooks.azure.com/nathanbangwa7/projects/perceptron-presentation

--

--

Nathan Bangwa

Microsoft Student Partner, Python Engineer, AI Student Developer, Data Science Enthusiast