apprentissage machine séance 3 · 2018-02-06 · cours 3 - chaque couche est composée par...
TRANSCRIPT
Marco Pedersoli Cours 3 -
Apprentissage MachineSéance 3:
Réseaux Neuronales ETS
dep. de génie de la production automatiséMarco Pedersoli
Cours Hiver 2018
Marco Pedersoli Cours 3 -
Plan de la séance:● Architecture d’un neurone● Apprentissage avec un neurone● Réseaux multicouches● Rétropropagation● Implémentation en numpy
2
Marco Pedersoli Cours 3 -
Architecture d’un neuron● Neuron humain
3By BruceBlaus - Own work, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=28761830
Marco Pedersoli Cours 3 -
Architecture d’un neuron● Neuron artificial ou Perceptron
4
Marco Pedersoli Cours 3 -
Architecture d’un neuron● Perceptron
5
Marco Pedersoli Cours 3 -
Architecture d’un neuron● Perceptron
■ La somme pondérée correspond au produit scalaire entre le vecteur de poids et le vecteur d’entrée.
6
Marco Pedersoli Cours 3 -
● Fonction d’activation:■ Elle est un fonction non linéaire appliqué à la sortie
Architecture d’un neuron
7
Échelon
Marco Pedersoli Cours 3 -
● Perceptron■ On peut remplacer le seuil par un poids synaptique associé à une
entrée constante
Architecture d’un neuron
8
Marco Pedersoli Cours 3 -
Exemple:Remplir la table de vérité et identifier la fonction logique pour le réseau suivant avec x0=-1 :
9
x1
x2
y
0 0
0 1
1 0
1 1
Marco Pedersoli Cours 3 -
Plan de la séance:● Architecture d’un neurone● Apprentissage d’un neurone● Réseaux multicouches● Rétropropagation● Implémentation en numpy
10
Marco Pedersoli Cours 3 -
w(t) : vecteur de poids synaptiques à l’instant t.η : taux ou coefficient d’apprentissage. yk : la sortie du neurone quand on lui présente le vecteur xk.dk : la sortie désirée quand on présente le vecteur xk.
● Règle d’Apprentissage■ Les poids synaptiques sont changés selon l’erreur et l’entrée
Architecture d’un neuron
11
Marco Pedersoli Cours 3 -
● Exercice: Calculer la valeur de w(t+1)
Architecture d’un neuron
12
x2
x1
Marco Pedersoli Cours 3 -
● Exercice: Calculer la valeur de w(t+1)
Architecture d’un neuron
13
x2
x1
Marco Pedersoli Cours 3 -
● Exercice: Calculer la valeur de w(t+1)
Architecture d’un neuron
14
x2
x1
Marco Pedersoli Cours 3 -
● Exercice: Calculer la valeur de w(t+1)
Architecture d’un neuron
15
x2
x1
Marco Pedersoli Cours 3 -
● Exercice: Calculer la valeur de w(t+1)
Architecture d’un neuron
16
x2
x1
Marco Pedersoli Cours 3 -
● Exercice: Calculer la valeur de w(t+1) avec le nouveau
Architecture d’un neuron
17
x2
x1
Marco Pedersoli Cours 3 -
● Exercice: Calculer la valeur de w(t+1) avec le nouveau
Architecture d’un neuron
18
x2
x1
Marco Pedersoli Cours 3 -
● Limitations:Architecture d’un neuron
d2
d1
● L'algorithme peut classifier correctement seulement de données linéairement séparables
● Si les données ne sont pas linéairement séparables l'algorithme ne converge pas
● L’algorithme peut converger à plusieurs solutions differentes
● La solution trouvée dépend de l’initialisation et de l’ordre d'évaluation des exemples
Marco Pedersoli Cours 3 -
● L’algorithme du gradient■ Les poids synaptiques sont changés selon le gradient de la fonction
objectif (ou fonction de coût)
Règle d’apprentissage généralisée
20
Marco Pedersoli Cours 3 -
● L’algorithme du gradient■ Les poids synaptiques sont changés selon le gradient de la fonction
objectif (ou fonction de coût)
■ Il faut definit une fonction de coût
■ tous les composants d’un neurone doivent être différentiables!
■ L’échelon n’est pas différentiable en zero --> Il faut changer la fonction d’activation
Règle d’apprentissage généralisée
21
Marco Pedersoli Cours 3 -
● Fonction objectif (ou de coût)■ Elle définit la relation entre sortie désirée d et sortie obtenue y■ Erreur quadratique moyenne:
L’algorithme du gradient:
22
Marco Pedersoli Cours 3 -
● Nouvelle fonction d’activation:○ Fonction Sigmoid: approximation d'échelon mais differentiable
23
■ Fonction d’activation:
■ T représente la pente
L’algorithme du gradient:
Marco Pedersoli Cours 3 -
■
L’algorithme du gradient:
24
Marco Pedersoli Cours 3 -
Calcul différentiel:
25
x yf
dx dyf’
x zf
dx dzf’
z yg
dz dyg’
dx dzf’ dz dy
g’
dx dyf’
Marco Pedersoli Cours 3 -
L’algorithme du gradient:
26
Marco Pedersoli Cours 3 -
L’algorithme du gradient:
27
Marco Pedersoli Cours 3 -
● Dérivé de la fonction d’activation:
28
■ Fonction d’activation:
■ Dérivé de la fonction d’activation,si T=1
L’algorithme du gradient:
Rappel:
Marco Pedersoli Cours 3 -
● Autres fonctions d’activation:
29
■ Rectifieur
■ Softplus
Le descent de gradient:
Rappel:
Marco Pedersoli Cours 3 -
● Calculer la variation des poids du perceptron en utilisant la méthode du gradient
Exercice:
30
• Fonction d’activation:• X = [1 5 2]
• D = 5
• W = [3 -4 7]
• η = 0.1
Marco Pedersoli Cours 3 -
● Calculer la variation des poids du perceptron en utilisant la méthode du gradient
Exercice:
31
• Fonction d’activation:• X = [1 5 2]
• D = 5
• W = [3 -4 7]
• η = 0.1
Marco Pedersoli Cours 3 -
● Calculer la variation des poids du perceptron en utilisant la méthode du gradient
Exercice:
32
• Fonction d’activation:• X = [1 5 2]
• D = 5 net = xw = 3-20+14 = -3
• W = [3 -4 7]
• η = 0.1
Marco Pedersoli Cours 3 -
● Calculer la variation des poids du perceptron en utilisant la méthode du gradient
Exercice:
33
• Fonction d’activation:• X = [1 5 2]
• D = 5 net = xw = 3-20+14 = -3
• W = [3 -4 7] y = F(net) = ln(1+e-3)=0.047
• η = 0.1
Marco Pedersoli Cours 3 -
● Calculer la variation des poids du perceptron en utilisant la méthode du gradient
Exercice:
34
• Fonction d’activation:• X = [1 5 2]
• D = 5 net = xw = 3-20+14 = -3
• W = [3 -4 7] y = F(net) = ln(1+e-3)=0.047
• η = 0.1 F’(net) = 1/(1+e3)=0.047
Marco Pedersoli Cours 3 -
● Calculer la variation des poids du perceptron en utilisant la méthode du gradient
Exercice:
35
• Fonction d’activation:• X = [1 5 2]
• D = 5 net = xw = 3-20+14 = -3
• W = [3 -4 7] y = F(net) = ln(1+e-3)=0.047
• η = 0.1 F’(net) = 1/(1+e3)=0.047
w = 0.1(5-0.049)[1 5 2]0.047 = = [0.02 0.12 0.05]
Marco Pedersoli Cours 3 -
Limitations de machines linéaires● Marvin Minsky, 1969
■ dans son livre: “Perceptrons, an introduction to computational geometry”, il montrait que le perceptron ne pouvait pas résoudre le problème du XOR
36
C2
C1
x2
x1
Marco Pedersoli Cours 3 -
Limitations de machines linéaires
37
● Solution pour une frontière non-linéaire
x1∗x2
x1x2
Modélisation non linéaire
x2
x1
D+ D -D -
y = w0 + w11 (x1)2 + w22 (x2)
2 + w12 x1 x2
+ w1 x1 + w2 x2 = 0
Marco Pedersoli Cours 3 -
Limitations de machines linéaires
38
● Solution Madaline:■ Composition de plusieures couches des perceptrons■ Pas d’apprentissage, le frontieres sont définies à main ■ Premier réseaux multi-couches
x2
x1
Marco Pedersoli Cours 3 -
Plan de la séance:● Architecture d’un neurone● Apprentissage avec un neurone● Réseaux multicouches● Rétropropagation● Implémentation en numpy
39
Marco Pedersoli Cours 3 -
Représentation Simplifiée
40
=
Marco Pedersoli Cours 3 -
● Chaque couche est composée par multiples neurones■ La sortie de chaque neurone d’une couche est l’entrée de la suivant
Réseau Multicouche“Multi Layer Perceptron” MLP
41
X1
X2
X3
+1
w11
w12
w22
w02
w32
w31
w21
y
w01
v21
v11
Marco Pedersoli Cours 3 -
● Example:■ Calculer la sortie de toutes les combinaisons des entrées
Réseau Multicouche
42
x1
x2
y
0 0
0 1
1 0
1 1
Marco Pedersoli Cours 3 -
Pourquoi un réseau multicouche?
43
Extraction des primitives
Discrimination linéaire
..
. . **
**
*0
00
00
0 ...
.
* ****
00 0000
.
Marco Pedersoli Cours 3 -
Pourquoi un réseau multicouche?
44
● Si avec au moins 3 couches il peut représenter n’importe quelle fonction!
● Hiérarchie de représentations: chaque sortie est l’entrée de la couche suivante
● Apprentissage plus simple et avec moins paramètres de une représentation non hierarchique
● Apprentissage profond == réseau de neurones avec beaucoup de couches
●
Marco Pedersoli Cours 3 -
Plan de la séance:● Architecture d’un neurone● Apprentissage avec un neurone● Réseaux multicouches● Rétropropagation● Implémentation en numpy
45
Marco Pedersoli Cours 3 -
Retro Propagationx y
w Fnet
Marco Pedersoli Cours 3 -
Retro Propagationx y
w Fnet
Marco Pedersoli Cours 3 -
Retro Propagationx y
w Fnet
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net
w
x yw F
net
1 2*
2
2
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net
1 2*
2
w
x yw F
net
2
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net
1 2*
2
w
x yw F
net
2
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net y*
netx F’net
1 2*
2
w
x yw F
net
2
* 111 y=2-1=1
w=1
w
d=1
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net y*
netx F’net
1 2*
2* 1
11
w
x yw F
net
2
1
w=1
y*
netx F’net
w
* 11x=2 1
2
w
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net
w
x yw F
net
1 2*
2
2
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net
w
x yw F
net
x y* F
net
w
1 2*
2
2
2 0*
0
0
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net
w
x yw F
net
x y* F
net
w
1 2*
2
2
2 0*
0
0
x y* F
net
w
x y* F’
net
w
1 2*
2
2
2 -1* 1
-1
w=-2
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net
w
x yw F
net
x y* F
net
w
1 2*
2
2
2 0*
0
0
x y* F
net
w
x y* F’
net
w
1 2*
2
2
2 -1* 1
-1
w=-2
x y* F
net
w
x y* F’
net
w
1*
2
2
x=0 -1* 1
-1
0
x y =* F
net
wx y* F’
net
w
1* 1
0
w=0
y=0 -1* 1
-1
0
Marco Pedersoli Cours 3 -
Retro Propagation
x y* F
net
w
x yw F
net
x y* F
net
w
1 2*
2
2
2 0*
0
0
x y* F
net
w
x y* F’
net
w
1 2*
2
2
2 -1* 1
-1
w=-4
x y* F
net
w
x y* F’
net
w
1*
2
2
x=0 -1* 1
-1
0
x y =* F
net
w
x y* F’
net
w
1* 1
0
w=0
y=0 -1* 1
-1
0
Marco Pedersoli Cours 3 -
Retro Propagation• Apprentissage = Changer w afin de réduire E• Calculer le gradient de E sur w pour chaque couche
x y* F’
net
w
x y* F’
net
w
x0
y0* F
net0
w0
x1
y1* F
net1
w1
couche 0 couche 1
Marco Pedersoli Cours 3 -
Rétro Propagationx0
y0* F
net0
w0
x1
y1* F
net1
w1
couche 0 couche 1xL-1
yL-1
* FnetL-1
wL-1
couche L-1
* F’
w
x* F’
* F’
w
x* F’
x* F’
Marco Pedersoli Cours 3 -
Retro Propagation• Apprentissage = Changer les poids synaptiques w afin de réduire E• Calculer le gradient de E sur w pour chaque couche• Utiliser la règle de chaîne (“chain rule”) de la dérivation• Propager l’erreur et calculer le gradient de E sur w pour chaque ‘boîte’
x y* Fnet
w
x y* F’
net
w
x y* F’
net
w
Marco Pedersoli Cours 3 -
Généralisationx y
* Fnet
w
scalarvecteur colonne
matrice * =1 entrée, 1 sortie, 1 poids1 exemple
X Y* F
NET
W
* =4 entrée, 3 sortie, 12 poids2 exemples
x y* F
net
W
* =
4 entrée, 3 sortie, 12 poids1 exemples
x y* F
net
w
* =
4 entrée, 1 sortie, 4 poids1 exemple
Marco Pedersoli Cours 3 -
Généralisation scalarvecteur colonne
matrice Propagation directe(forward pass)
Retro Propagation(backward pass)
*
* =
* =
* =
1 entrée, 1 sortie, 1 poid1 exemple
4 entrée, 1 sortie, 4 poids1 exemple
4 entrée, 3 sorties, 12 poids, 1 exemple
4 entrée, 3 sortie, 12 poids, 2 exemples
=
Marco Pedersoli Cours 3 -
• Calculer les nouveaux poids synaptiques après un passe de rétro-propagation pour l’exemple : X = [1, 2], D = [1, 0], T = 1 et η = 0.1
Faire le même exercice mais de forme vectoriel!
Exemple
x0 y0* F
net0
W0
1 ?* =2
1
?
3 entrée, 2 sortie, 6 poids 3 entrée, 2 sortie, 6 poids
x1 y1* F
net1
W1
* =
1
-0.1 0.3
0.4
-0.4
1.5-0.2
0.5 -0.3 0.5
0.50.80.7
Marco Pedersoli Cours 3 -
• Calculer les nouveaux poids synaptiques après un passe de rétro-propagation pour l’exemple : X = [1, 2], D = [1, 0], T = 1 et η = 0.1
Propagation Directe...
Exemple
x0 y0* F
net0
W0
1* =2
1
3 entrée, 2 sortie, 6 poids 3 entrée, 2 sortie, 6 poids
x1 y1* F
net1
W1
* =
1
-0.1 0.3
0.4
-0.4
1.5-0.2
0.5 -0.3 0.5
0.50.80.7
0.52
0.89
0.52
0.89
0.62
0.83
Marco Pedersoli Cours 3 -
• Calculer les nouveaux poids synaptiques après un passe de rétro-propagation pour l’exemple : X = [1, 2], D = [1, 0], T = 1 et η = 0.1
Retro Propagation (W1)
Exemple
x0 y0* F
net0
W0
3 entrée, 2 sortie, 6 poids 3 entrée, 2 sortie, 6 poids
x1 y1* F’
net1
W1
*=1...46 -...27 ...91
-..12-..10-...6
0.52 0.89-..91
.12
Marco Pedersoli Cours 3 -
• Calculer les nouveaux poids synaptiques après un passe de rétro-propagation pour l’exemple : X = [1, 2], D = [1, 0], T = 1 et η = 0.1
Retro Propagation ( x1)
Exemple
x0 y0* F
net0
W0
3 entrée, 2 sortie, 6 poids 3 entrée, 2 sortie, 6 poids
x1 y1* F’
net1
W1
*=0.5
-0.3
0.5 0.5
0.8
0.7 -..91
.12
..36
.12
..13
Marco Pedersoli Cours 3 -
• Calculer les nouveaux poids synaptiques après un passe de rétro-propagation pour l’exemple : X = [1, 2], D = [1, 0], T = 1 et η = 0.1
Retro Propagation (W0)
Exemple
x0 y0* F’
net0
W0
3 entrée, 2 sortie, 6 poids 3 entrée, 2 sortie, 6 poids
x1 y1* F’
net1
W1
*=1-….9 -...18 -....9
-...12-...24-...12
1 2...9
..12
Marco Pedersoli Cours 3 -
Réseaux Multicouches:● Architectures & Avantages● Capacité de représentation
69
Marco Pedersoli Cours 3 -
Plan de la séance:● Architecture d’un neurone● Apprentissage avec un neurone● Réseaux multicouches● Rétropropagation● Implémentation en numpy
70
Marco Pedersoli Cours 3 -
Numpy:
71
● Anaconda: https://conda.io/docs/user-guide/install/download.html● Numpy pour les utilisateurs de Matlab:
https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html et http://mathesaurus.sourceforge.net/matlab-numpy.html
● Tutoriel de Numpy: https://docs.scipy.org/doc/numpy-dev/user/quickstart.html● ipython: https://ipython.org/● matplotlib: https://matplotlib.org/
import numpy as np
a = np.ones((3,4)) # matrix 3 rows and 4 columnsb = np.ones((3,4))*7c = a +b # c = (3,4) with all 8s d = np.dot(a,b.T) # d = matrix 3x3 with 28
Marco Pedersoli Cours 3 -
Perceptron en Numpy:
72
def rectifier(net):return net.clip(0,np.inf)
class perceptron(object):
def __init__(self,n_in,n_out,lr):self.W = np.random.random((n_in,n_out))self.lr = lr
def forward(self,x):self.x = xself.net = np.dot(self.W.T,x)y = rectifier(self.net)return y
def rectifier_back(dy,net):return dy*(net>0)
def backward(self,dy):dnet = rectifier_back(dy,self.net)dx = np.dot(self.W,dy)return dx
def update(self,dy):dw = np.dot(self.x,dy.T)self.W = self.W - self.lr * dw
Marco Pedersoli Cours 3 -
Entrainement du perceptron:
73
X = np.random.random((dim_in,n_samples))Y = np.random.random((dim_out,n_samples))
def RMS(Yest,Y):return (0.5*(Yest-Y)**2).mean()
def RMS_back(Yest,Y):return (Yest-Y)/Yest.shape[1]
p1 = perceptron(dim_in, dim_out, lr = 0.1)
for epocs in range(100):Yest=p1.forward(X)E=RMS(Yest,Y)print(“Objective”,E)dy = RMS_back(Yest,Y)p1.update(dy)
Marco Pedersoli Cours 3 -
MPL en Numpy:
74
class MPL3(object):
def __init__(self,n_in,n_h1,n_h2,n_out,lr):self.l0 = perceptron(n_in,nh1,lr)self.l1 = perceptron(n_h1,n_h2,lr)self.l2 = perceptron(n_h2,n_out,lr)self.lr = lr
def forward(self,x):y0 = self.0l.forward(x)y1 = self.l1.forward(y0)y2 = self.l2.lforward(y1)return y2
def backward(self,dy):dx2=self.l2.backward(dy)dx1=self.l2.backward(dx2)dx0=self.l2.backward(dx1)return dx0
def update(self,dy):self.l1.update(dy)dx2=self.l2.backward(dy)self.l1.update(dx2)dx1=self.l1.backward(dx2)self.l1.update(d1)
Marco Pedersoli Cours 5 -
Prochaine séance:● Estimation du gradient● Coefficient d’apprentissage● Momentum● Autres algorithmes
75