The Perceptron Learning Protocol
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)
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 :
La question est de trouver les poids synaptiques des entrées (W1 et W2) ainsi que la valeur du bias (Wo)
Etape 1 : initialisons tous les poids à 0 (Wo = bias) et faisons une prédiction
Etape 2 : Evaluation de l’erreur
On pouvait simplement faire error = prediction-target, mais pour question de rester explicite on a ces 3 lignes.
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%
4. Apprentissage avec les données de la fonction OR
5 Apprentissage avec les données de la fonction AND
5. Apprentissage avec les données de la fonction XOR
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.
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