Ricco Rakotomalala
Université Lumière Lyon 2
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 1
Plan
1. Perceptron simple
3. Perceptron multicouche
6. Références
7. Conclusion
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 2
Métaphore biologique et transposition mathématique
PERCEPTRON SIMPLE
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 3
Métaphore biologique
Fonctionnement du cerveau
Transmission de l’information
et apprentissage
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 4
Modèle de Mc Colluch et Pitts – Le Perceptron Simple
Problème à deux classes (positif et négatif)
Y ∈ 1(+), 0(−)
Couche d’entrée Couche de sortie
Fonction de transfert
Biais X0=1
Fonction à seuil -- Fonction de Heaviside
a0
X1
a1 1
Entrées X2 0
Descripteurs a2 d (X )
− +
a3
X3
X0=1
Comment calculer les poids
a0
X1
synaptiques à partir d’un fichier
a1 de données (Y ; X1, X2, X3)
X2
a2 Faire le parallèle avec la régression et les moindres carrés
a3 Un réseau de neurones peut être utilisé pour la régression
X3 (fonction de transfert avec une sortie linéaire)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 6
Exemple – Apprentissage de la fonction AND (ET logique)
Cet exemple est révélateur – Les premières applications proviennent de l’informatique
1.5
1.3
X1 X2 Y 1.1
0.9
1
0 0 0 0.7
0.5
0 1 0
0.3
1 0 0 0.1
-0.1
1 1 1 -0.3
-0.5
-0.5 0 0.5 1 1.5
Principales étapes :
1. Mélanger aléatoirement les observations
2. Initialiser aléatoirement les poids synaptiques
3. Faire passer les observations unes à unes Une observation peut
passer plusieurs fois !
• Calculer l’erreur de prédiction pour l’observation
• Mettre à jour les poids synaptiques
4. Jusqu’à convergence du processus
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 7
Exemple AND (1) Règle de mise à jour des poids
Pour chaque individu que l’on fait passer
(Principe de l’incrémentalité)
Initialisation aléatoire des poids : 𝑎0 = 0.1; 𝑎1 = 0.2; 𝑎2 = 0.05
𝑎𝑗 ← 𝑎𝑗 + Δ𝑎𝑗
Frontière :
0.1 + 0.2𝑥1 + 0.05𝑥2 = 0 ⇔ 𝑥2 = −4.0𝑥1 − 2.0
S’assurer que les
variables sont sur la
6
même échelle
Force du signal
4
avec
2
Δ𝑎𝑗 = 𝜂 𝑦 − 𝑦ො 𝑥𝑗
1
0
-0.5 0 0.5 1 1.5
-2 Erreur
Taux d’apprentissage Détermine s’il faut
-4 Détermine l’amplitude de l’apprentissage réagir (corriger) ou non
Quelle est la bonne valeur ?
-6 Trop petit → lenteur de convergence
Trop grand → oscillation
En général autour de 0.05 ~ 0.15 (0.1 dans notre exemple)
Nouvelle frontière :
0.0 + 0.2 x1 + 0.05 x2 = 0 x2 = −4.0 x1 + 0.0 Signal nul (x1 =
Valeur observée de Y et 0, x2 = 0), seule
prédiction ne matchent 6
la constante a0
pas, une correction des est corrigée.
4
coefficients sera
effectuée. 2
1
0
-0.5 0 0.5 1 1.5
-2
-4
-6
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 9
Exemple AND (3)
Nouvelle frontière :
− 0.1 + 0.1x1 + 0.05 x2 = 0 x2 = −2.0 x1 + 2.0
1
0
-0.5 0 0.5 1 1.5
-2
-4
-6
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 10
Exemple AND (4) – Définir la convergence
1 Convergence ?
0
-0.5 0 0.5 1 1.5 (1) Plus aucune correction effectuée en passant tout le monde
-2 (2) L’erreur globale ne diminue plus « significativement »
(3) Les poids sont stables
-4
(4) On fixe un nombre maximum d’itérations
-6 (5) On fixe une erreur minimale à atteindre
Remarque : Que se passe-t-il si on (2), (4) et (5) deviennent des « paramètres » de l’algorithme à considérer
repasse l’individu (x1=1 ; x2=0) ?
(attention aux valeurs par défaut) dans les logiciels !!! Il y en aura d’autres…
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 11
Estimation de P(Y/X), descente du gradient, problèmes multi-classes
PLUS LOIN AVEC LE PERCEPTRON SIMPLE
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 12
Evaluation de P(Y/X) – Fonction de transfert sigmoïde
1
1
0
d (X ) 0
− + d (X )
− +
1
g (v ) =
1 + e −v
v = d(X )
Qui constitue à la fois une forme de lissage,
mais aussi une modification du domaine de
définition. Cf. la régression logistique.
g(v) est une estimation de P(Y/X), la règle de décision devient : Si g(v) > 0.5 Alors Y=1 Sinon Y=0
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 13
Modification du critère à optimiser
Conséquence d’une fonction de transfert continue et dérivable
X0=1
a0
X1 Sortie du réseau
a1
yˆ = g (v) = f d ( x)
X2
a2
a3
X3
E=
1
( y ( ) − yˆ ( ) )
2
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 14
Descente du gradient
Fonction de transfert
g ' (v) = g (v)(1 − g (v))
sigmoïde dérivable
Optimisation : dérivation de
E
la fonction objectif par = − [ y ( ) − yˆ ( )] g '[v( )] x j ( )
rapport aux coefficients a j i
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 15
Problèmes à (K > 2) classes (multi-classes)
Que faire lorsque K (modalités de Y) est supérieur à 2 ?
(1) Codage disjonctif complet de la sortie
(« one hot encoding »)
ŷ1 yk = 1 ssi y = yk
X2
(3) P(Y/X) P(Y = yk / X ) g[vk ]
X3 ŷ3
(4) Règle de décision
yˆ = yk * ssi k * = arg max yˆ k
k
2 k =1
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 16
Un exemple sous SIPINA – ‘’Breast cancer’’ dataset
Évolution de
l’erreur
Poids
synaptiques (y
compris le biais)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 18
Problème du XOR – L’impossible séparation linéaire
1.5
1.3
X1 X2 Y 1.1
1
0 0 0 0.9
0 1 1 0.5
1 0 1 0.1
1
- 0.1
1 1 0 - 0.3
- 0.5
Données
- 0.5 0 0.5 1 1.5
1.0
X0=1
0.8
0.6
X1
X2
0.4
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 19
Perceptron multicouche - Principe
26.0 + 266.76 × 𝑋1 + 63.08 × 𝑋2 = 0 9.86 − 116.47 × 𝑋1 + 30.01 × 𝑋2 = 0
1.0
0.4
X1
X0=1
1 1
X0=1
9.86
881
X1 -116.47063
X1
-0.99
0.9
94
26
33
635
6.7
63
8
Z
26.007
3
69
56
.01
91
2
0.9
30
X2 63.08049
X2
Error: 14.163132 Steps: 22302
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 20
Perceptron multicouche – Formules et propriétés
Fonction de transfert sigmoïde dans les couches cachées et de sortie (il peut en être autrement, cf. plus loin)
X0=1
Sortie de la C.Cachée
X0=1
1
u1 = g (v1 ) =
1 + e −v1
X1
1
u 2 = g ( v2 ) =
1 + e − v2
X2
Sortie du réseau
1
yˆ = g ( z ) =
1 + e− z
Propriété fondamentale : Le PMC est capable d’approximer toute fonction continue pourvu que
l’on fixe convenablement le nombre de neurones dans la couche cachée.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 21
Apprentissage – La rétropropagation du gradient
X0=1
X0=1
X1
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 22
Perceptron multicouche – Espace initial de représentation
1ère vision du PMC (couche d’entrée vers couche cachée): nous disposons d’une
série de droites frontières définies dans l’espace initial de représentation,
imbriquées de manière à produire une séparation non-linéaire.
X1 vs. X2
Control variable : C_Y
x21 negatif
positif
X0=1
27.00 -36.83
21.46
X1
17.68
-11.32
-38.95
X2
0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1
x1
𝐷1: −20.10 + 27.00 𝑋1 + 17.68 𝑋2 = 0
𝐷2: −0.76 + 21.46 𝑋1 − 11.32 𝑋2 = 0
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 23
Perceptron multicouche – Espace intermédiaire de représentation
2ème vision du PMC (couche cachée vers couche de sortie): la couche cachée définit un
espace intermédiaire de représentation (une sorte d’espace factoriel) où l’on définit un
séparateur linéaire (en espérant que les points soient linéairement séparables, si ce n’est pas le cas on peut
augmenter le nombre de neurones dans la couche cachée… avec le danger du surapprentissage…).
u1 vs. u2
Control variable : Y
1
u2
negatif
positif
X0=1
-0.76 45.03
X0=1
-20.10
-36.83
27.00
21.46
X1
17.68
-11.32
-38.95
X2
0
1
u1
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 24
Perceptron multicouche – Avantages et inconvénients
Incrémentalité
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 25
Plusieurs couches cachées, régularisation, (constante) d’apprentissage, etc.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 26
PMC avec plusieurs couches cachées
Pourquoi plusieurs couches cachées ? Démultiplie le pouvoir explicatif du modèle, mais : (1) le paramétrage
est quasi inextricable (sauf à l’utiliser les couches intermédiaires comme filtres, cf. les réseaux de
convolution) ; (2) la lecture des couches (des systèmes de représentation) intermédiaires n’est pas évidente.
1.0
0.8
0.6
Z2
0.4
0.2
0.0
0.0 0.2 0.4 0.6 0.8 1.0
Espace de Z1
représentation à 3
Espace de représentation à 2
dimensions.
dimensions. Séparation linéaire possible.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 27
Fonctions d’activation Différents types de fonctions d’activation sont utilisables. En fonction du problème à
traiter, de la définition des espaces intermédiaires, du filtrage que l’on veut effectuer
sur les données…. Il faut être attentif à ce que l’on veut obtenir.
Fonction linéaire
Pour la régression, pas de 𝑢=𝑥
transformation
Fonction Sigmoïde
Ramène les valeurs entre [0, 1]. Utilisé
1
𝑢=
pour le classement. Y codé {0,1}. 1 + 𝑒 −𝑥
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 28
Fonctions d’activation Problème à deux classes. A l’évidence
Mixer les fonctions dans un PMC une couche cachée avec 2 neurones
suffit… mais cela est-il valable pour
tous types de fonctions d’activations ?
X0=1 X0=1
-0.31
-2.57
1.32 X0=1 0.40
X0=1
-1.27 -0.34
6.21 -0.72
-14.27 -0.67
X1 X1 -0.18
-10.82 2.23
2.98 -8.03 -1.34
-2.49 X2 0.54
X2
Avec la fonction
d’activation linéaire,
1
l’espace intermédiaire
n’est pas discriminant
1+
(linéairement s’entend).
𝑢2 =
1
𝑢1 = 𝑧1 = 0.40 − 0.67 𝑥1 − 1.34 𝑥2
1+ 𝑒 −(1.32−14.27 𝑥1+2.98 𝑥2)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 29
Fonctions de perte pour le classement
(Mean) squared 1 2
𝐸= 𝑦 𝜔 − 𝑦(𝜔)
ො
error 2
𝜔
Différentes fonctions de
perte sont possibles pour
Binary cross-
le classement. Il faut 𝐸 = −𝑦 𝜔 log 𝑦ො 𝜔 − (1 − 𝑦 𝜔 ) log(1 − 𝑦ො 𝜔 )
entropy 𝜔
surtout choisir une
fonction adaptée au
problème à traiter (il y en Hinge loss
a d’autres… cf. Keras) (utilisé dans
𝐸 = max(0,1 − 𝑦(𝜔) × 𝑦(𝜔))
ො
les SVM). Y 𝜔
codé {-1,+1}
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 30
Gradient et gradient stochastique
Calcul du gradient [Loss : squared
Formule de mise à jour error, Activation : sigmoïde g()]
𝜕𝐸 𝜕𝐸
𝑎𝑗 = 𝑎𝑗 − 𝜂 = 𝑦 𝜔 − 𝑦ො 𝜔 𝑔 𝑣 𝜔 1−𝑔 𝑣 𝜔 𝑥𝑗 (𝜔)
𝜕𝑎𝑗 𝜕𝑎𝑗
𝜔
Descente du gradient Mettre à jour les poids après avoir fait passer toutes les
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 31
Faire évoluer le taux d’apprentissage
Taux d’apprentissage (η > 0) Comment concilier deux exigences antagoniques. Taux élevé
𝜕𝐸 au départ du processus pour aller rapidement vers la bonne
𝑎𝑗 = 𝑎𝑗 − 𝜂
𝜕𝑎𝑗 zone de résultat ; taux faible à la fin pour plus de précision.
𝜂0
𝜂 𝑠 =
1 + 𝑠 × 𝜂𝑑 Valeur de décroissance.
Paramètre.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 32
Momentum
𝑘
(𝑘) 𝜕𝐸 (𝑘−1)
Δ𝑗 = −𝜂 + 𝜇 Δ𝑗
𝜕𝑎𝑗
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 33
Régularisation des coefficients
Réécriture de la fonction de 1 𝛼
𝐸= 𝑦 𝜔 − 𝑦(𝜔)
ො 2
+ 𝑎𝑗2
perte à optimiser. 2 2
𝜔 𝑗
Contrainte sur la
norme L2 (Ridge)
Conséquence sur le gradient, 𝜕𝐸
intégration de la contrainte = 𝑦 − 𝑦ො 𝑔 𝑣 1−𝑔 𝑣 𝑥𝑗 + 𝛼 × 𝑎𝑗
𝜕𝑎𝑗
𝜔
sans difficulté.
Plus α est élevé, plus on impose des contraintes sur les coefficients (aj faible), avec le danger de
faire du sous-apprentissage (ne plus exploiter efficacement les informations dans les données !).
Nous pouvons également imposer une contrainte sur la norme L1 (Lasso) ou encore combiner
Ridge et Lasso (Elasticnet). Cf. la documentation de Keras.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 34
Echantillon de validation
S’appuyer sur l’évolution de la performance du MLP sur l’échantillon d’apprentissage n’a pas
trop de sens parce qu’elle s’améliore constamment (presque). L’idée est de réserver une
fraction des données (échantillon de validation, validation fraction) pour surveiller cette
évolution et pourquoi pas définir une règle d’arrêt (ex. stagnation au bout de x itérations).
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 35
Bilan
Attention au paramétrage
Faire des tests en jouant sur les paramètres « simples » (ex. architecture
du réseau) dans un premier temps, affiner par la suite.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 36
Librairies sous Python et R
PRATIQUE DES PERCEPTRONS
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 37
Sckit-learn sous Python
#importation des données
Scikit_Learn est une librairie de machine
import pandas
D = pandas.read_table("artificial2d_data2.txt",sep="\t",header=0) learning puissante pour Python.
#graphique
code_couleur = D['Y'].eq('pos').astype('int')
D.plot.scatter(x="X1",y="X2",c=pandas.Series(['blue','red'])[code_couleur])
#initialisation du classifieur
from sklearn.neural_network import MLPClassifier
rna = MLPClassifier(hidden_layer_sizes=(2,),activation="logistic",solver="lbfgs")
#apprentissage
rna.fit(XTrain,YTrain)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 38
Keras repose sur la technologie
#importer le package
library(keras)
Keras sous R Tensorflow. Ces deux librairies de
« deep learning » sont très populaires.
#construire l'architecture du perceptron
rna <- keras_model_sequential()
rna %>%
layer_dense(units = 2, input_shape = c(2), activation = "sigmoid") %>%
layer_dense(units = 1, activation = "sigmoid")
#paramétrage de l'algorithme
rna %>% compile( Pour éviter que les valeurs des combinaisons linéaires
loss="mean_squared_error",
soient élevées en valeurs absolues, et que la
optimizer=optimizer_sgd(lr=0.15),
transformation sigmoïde sature à 0 ou 1 (dans la zone où
metrics="mae"
)
la dérivée est nulle), on peut ruser en codant Y de
manière à se situer plus vers la partie linéaire de la
#codage de la cible - éviter la saturation fonction d’activation.
yTrain <- ifelse(DTrain$Y=="pos",0.8,0.2)
#matrice de confusion
neg pos
print(mc <- table(DTest$Y,pred))
print(paste("Taux erreur =", 1-sum(diag(mc))/sum(mc))) neg 565 10 𝜀 = 0.011
Ricco Rakotomalala pos 1 424
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 39
RÉFÉRENCES
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 40
Références
• Blayo F., Verleysen M, « Les réseaux de neurones artificiels », Collection QSJ, PUF, 1996.
• Tutoriels Tanagra :
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 41