Réseaux de neurones
IFT 780
Réseaux récurrents
Par Pierre-Marc Jodoin
Réseau de neurones de base (régression)
xk 1 (...)
fa
fa
W1
x1
x2
x3
W0
x W f
Wxy a
1 0
fa
fa
fa
fa
fa
x Wh y
x W f
h a
1 0
x y
activation d' fonction
a: f
Réseau de neurones de base (classification)
e
xk 1 (...)
fa
fa x1
x2
x3
e
e y x SMAX
Wfa
Wx
1 0
fa
fa
fa
fa
fa
x SMAX y y
h W y
x W f
h a
1 0
n o r m Softmax W1
W0
x y
Illustration simplifiée
y x
1 entrée et 1 sortie
RN de base
h
Réseau de neurones de base (2 classes)
(on pourrait également ajouter un biais)
fa
fa
w1 x1
x2
x3
W0
x w f
W xy 1T a 0
fa
fa
fa
x
w hy
x W f h
T
a
1 0
5 1
5 3 5 0
3
R w
R h
R W
R x
y
Réseau récurrent : la sortie des neurones est réinjectée dans leur entrée
x1
x2
x3
fa
fa
fa
fa
fa
w1
W0
y
Réseau récurrent : la sortie des neurones est réinjectée dans leur entrée
x1
x2
x3
fa
fa
fa
fa
fa
h1
h2
h3
h4
h5
copie
W0
y w1
Réseau récurrent : la sortie des neurones est réinjectée dans leur entrée
x1
x2
x3
fa
fa
fa
fa
fa
copie h1
h2
h3
h4
h5
Ici, au lieu d’avoir 3 entrées, chaque neurone a 3+5=8 entrées.
W0
y w1
Réseau récurrent : la sortie des neurones est réinjectée dans leur entrée
x1
x2
x3
fa
fa
fa
f w1
h1
h2
h3
h4
h5
x w f
W
x h
y a
0 ,
1
x
w hy
h x W f h
T
a
1
0 ,
8 5 0
8 3
, R W
R h x
R x
x
y
Pour simplifier la notation à venir
x1
x2
x3
fa
fa
fa
fa
fa
w1
h1
h2
h3
h4
h5
x w f
W
x h
y h y a h
,
x
w h
y
h x W f h
yT h h
a
,
5 5
8 5
8 3
,
R w
R h
R W
R h x
R x
y h
x h
Wh
y
De façon équivalente
x1
x2
x3
fa
fa
fa
fa
fa y
wh
h1
h2
h3
h4
h5
x w f
W x W h
y hy a xh hh
x
w h
y
h W x W f h
yT h
h h h x
a
5 5 5
3 5 5 3
R w
R W
R W
R h
R x
y h
h h
h x
h
Wx h
Wh
y
Illustration plus compacte
x y h
x w f
W x W h
y hy a xh hh
x
w hy
h W x W f h
hyT hh xh
a
5 5 5
3 5 5 3
R w
R W
R W
R h
R x
hy hh xh
Wxh why
Whh
Dans le cas général avec K sorties (régression)
y x
h
x w f
W x W h
y hy a xh hh
x W hy
h W x W f h
hy hh xh
a
5 5 5
3 5 5 3
K hy hh xh
R W
R W
R W
R h
R x
Wxh Why
Whh
Dans le cas général avec K sorties (classification)
x h
x W f
W x W h
y hy a xh hh
x SMAX
y yh W y
h W x W f h
hy
hh xh a
ˆ ˆ
5 5 5
3 5 5 3
K hy hh xh
R W
R W
R W
R h
R x
Wxh
Whh
Why
y
Illustration simplifiée
x y
1 entrée et 1 sortie
RN de base
Différentes configurations pour différentes applications
x y
1 entrée et 1 sortie
y1
x
1 entrée et N sorties
y2
y3
Ex.: description d’une image 1 image => N mots
Différentes configurations pour différentes applications
x y
1 entrée et 1 sortie
y1
x
1 entrée et N sorties
y2
y3
x1
1 entrée et N sorties
y x2
x3
Ex.: Classification de texte N mots => 1 classe
Différentes configurations pour différentes applications
x
1 entrée et 1 sortie
y1
x
1 entrée et N sorties
y2
y3
y1
x1
N entrées et N sorties
y2
y3
x2
x3
x1
N entrées et 1 sortie
y x2
x3
Ex.: Classification d’images vidéo N images => N classes
y
Différentes configurations pour différentes applications
x y
1 entrée et 1 sortie
y1
x
1 entrée et N sorties
y2
y3
y1
x1
N entrées et N sorties
y2
y3
x2
x3
x1
M entrées et N sorties
y4
x2
x3
y1
y2
y3
x1
1 entrée et N sorties
y x2
x3
Ex.: Traduction Français-Anglais N mots => M mots
Exemple pour N entrées et 1 sortie:
Analyse grammaticale (classification) : (ê.t.r.e)=>’verbe’
h1
h2
h3
verbe'
'
4 y h h0
Puisque et ydoivent être des variables numériqueson utilise généralement un encodage de type «one hot».
h x
,
] 0 ,...
1 , 0 , 0 [ ' '
] 0 ,...
0 , 1 , 0 [ ' '
] 0 ...
0 , 0 , 1 [ ' ' ....
0 ,..., 1 , 0 , 0 ' '
0 ,..., 0 , 1 , 0 ' '
0 ,..., 0 , 0 , 1 ' '
adjectif nom verbe c b a
R256
RM
ê'
1' x
t'
2' x
r'
3' x
e'
4' x
Exemple pour N entrées et 1 sortie:
Analyse grammaticale (classification) : (ê.t.r.e)=>’verbe’
ê'
1' x
h1
h2
h3
h0
t'
2' x
r'
3' x
e'
' x
1
a xh i hh ii
f W x W h
h
3 4
4
W x W h
h
xh
hh
Même idée pour N entrées et N sorties:
ex.: Analyse vidéo (régression) : Images vidéo => nb_piétons
0 x
h1
h2
h3
h4
h0
1 x
2 x
3 x
00 y
11 y
23 y
32 y
1
i
hh i xh a
i f W x W h
h
i hy
i W h
y
Même idée pour N entrées et N sorties:
ex.: Analyse vidéo (régression) : Images vidéo => nb_piétons
0 x
h1
h2
h3
h4
h0
1 x
2 x
3 x
00 y
11 y
23 y
32 y
L1
L2
L3
L4
S
LossMême idée pour N entrées et N sorties:
ex.: Analyse vidéo (régression) : Images vidéo => nb_piétons
0 x
h1
h2
h3
h4
h0
1 x
2 x
3 x
00 y
11 y
23 y
32 y
L1
L2
L3
L4
S
LossNOTE: la couche verte peut être remplacée par un réseau à convolution convertissant ainsi une image en un vecteur à d-dim
Autre exemple: prédiction de caractères (modèle de langue)
Alphabet jouet:[a,e,m,s]
Représentation « one hot » jouet:
‘a’ = [1, 0, 0, 0]
‘e’ = [0, 1, 0, 0]
‘m’ = [0, 0, 1, 0]
‘s’ = [0, 0, 0, 1]
But : Entraîner un modèle à prédire les lettres du mot «masse».
Autre exemple: prédiction de caractères (modèle de langue)
'
0 'm
x
'
1 'a x
'
2 's x
'
3 's x
0 0 1 0
1 0 0 0
0 0 0 1
0 0 0 1
Alphabet :[a,e,m,s]
Entraînerun modèle à prédire les lettres du mot «masse».
Autre exemple: prédiction de caractères (modèle de langue)
'
0 'm
x
'
1 'a x
'
2 's x
' 's x
0 0 1 0
1 0 0 0
-0.3 -0.1 0.9
1.0 0.3 0.1
-0.1 -0.5 0.3
-0.9 Wxh
Whh
0 0 0 1
0 0
Alphabet :[a,e,m,s]
Entraînerun modèle à prédire les lettres du mot «masse».
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
00
1 0
-0.3 -0.1
0.9 tanh
i1
hh i xh
i W x W h
h
Wxh Whh
i
hy
i SMAXW h
x
y
Why .9.1 0 0
Alphabet :[a,e,m,s]
Entraînerun modèle à prédire les lettres du mot «masse».
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
'
2 'a x
0 0 1 0
1 0 0 0
-0.3 -0.1 0.9
1.0 0.3 0.1
1
tanh
i
hh i xh
i W x W h
h
Wxh Why .9.1 0 0
.1 .5 .4 0
Alphabet :[a,e,m,s]
Entraînerun modèle à prédire les lettres du mot «masse».
Whh
i
hy
i SMAXW h
x
y
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
'
2 'a x
'
3 's x
0 0 1 0
1 0 0 0
-0.3 -0.1 0.9
1.0 0.3 0.1
-0.1 -0.5 0.3
1
tanh
hh i
i xh
i W x W h
h
Wxh
0 0 0 1
Why .9.1 0 0
0 0 .09 .91 .1 .5 .4 0
Alphabet :[a,e,m,s]
Entraînerun modèle à prédire les lettres du mot «masse».
Whh
i
hy
i SMAXW h
x
y
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
'
2 'a x
'
3 's x
'
4 's x
0 0 1 0
1 0 0 0
-0.3 -0.1 0.9
1.0 0.3 0.1
-0.1 -0.5 0.3
-0.9 0.2 0.9
1
tanh
i
hh i xh
i W x W h
h
Wxh
0 0 0 1
0 0 0 1
Why .9.1 0 0
0 0 .09 .91
.3 .2 .4 .1 .1 .5 .4 0
Alphabet :[a,e,m,s]
Entraînerun modèle à prédire les lettres du mot «masse».
Whh
i
hy
i SMAXW h
x
y
Autre exemple: prédiction de caractères (modèle de langue)
Alphabet :[a,e,m,s]
Entraînerun modèle à prédire les lettres du mot «masse».
'
1 'm x
'
2 'a x
'
3 's x
'
4 's x
1000
'
1'a t
0 0 1 0
1 0 0 0
-0.3 -0.1 0.9
1.0 0.3 0.1
-0.1 -0.5 0.3
-0.9 0.2 0.9 Wxh
0 0 0 1
0 0 0 1
Why
0001
'
2's t
0010
'
4'e t
.9 .1 0 0
0 0 .09 .91
.3 .2 .4 .1 .1 .5 .4 0
0001
'
3's t
Cibles
Whh
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
'
2 'a x
'
3 's x
' 's x
0 0 1 0
1 0 0 0
-0.3 -0.1 0.9
1.0 0.3 0.1
-0.1 -0.5 0.3
-0.9 Wxh
0 0 0 1
0 0
Why .9.1 0 0
0 0 .09 .91
.3 .2 .1 .5 .4
0
S
Lossy1,t1
L
y2,t2
L
y3,t3
L
Alphabet :[a,e,m,s]
Entraînerun modèle à prédire les lettres du mot «masse».
1000
'
1'a t
0001
'
2's t
0001
'
3's t
Whh
Autre exemple: prédiction de caractères (modèle de langue)
Alphabet :[a,e,m,s]
En test: prédire les lettres les unes après les autres '
1 'm x
00
1 0
-0.3 -0.1 0.9 Wxh
Étape 1 : Calcul de la couche cachée
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
00
1 0
-0.3 -0.1 0.9 Wxh Why .9.1
0 0
Étape 2 : Calcul de la sortie (softmax)
Alphabet :[a,e,m,s]
En test: prédire les lettres les unes après les autres
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
00
1 0
-0.3 -0.1 0.9 Wxh Why .9.1
0 0
Étape 3: Sélectionner le caractère le plus probable
'
1 'a y Alphabet :[a,e,m,s]
En test: prédire les lettres les unes après les autres
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
00
1 0
-0.3 -0.1 0.9 Wxh Why .9.1
0 0
Étape 4 : Injecter le caractère prédit au début du réseau
' '
1 a
y '
1 'a y 100
0
Alphabet :[a,e,m,s]
En test: prédire les lettres les unes après les autres
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
00
1 0
-0.3 -0.1 0.9 Wxh Why .9.1
0 0
Et on recommence!
'
1 'a y '
1 'a y 100
0 0.1 -0.3 -0.4 Whh
.1 .1 .2 .6
'
2 's y Alphabet :[a,e,m,s]
En test: prédire les lettres les unes après les autres
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
00
1 0
-0.3 -0.1 0.9 Wxh Why .9.1
0 0
'
1 'a y '
1 'a y 100
0 0.1 -0.3 -0.4 Whh
.1 .1 .2 .6
' '
2 s
y
'
2 's y 000
1 0.9 -0.8 -0.7
.1 .1 .0 .8
'
3 's y Alphabet :[a,e,m,s]
En test: prédire les lettres les unes après les autres
Autre exemple: prédiction de caractères (modèle de langue)
'
1 'm x
00
1 0
-0.3 -0.1 0.9 Wxh Why .9.1
0 0
' '
1 a
y '
1 'a y 100
0 0.1 -0.3 -0.4 Whh
.1 .1 .2 .6
'
2 's y
'
2 's y 000
1 0.9 -0.8 -0.7
.1 .1 .0 .8
'
3 's y
'
3 's y 000
1 -0.1 -0.7 0.5
.0 .9 .1 .0
'
4 'e y Alphabet :[a,e,m,s]
En test: prédire les lettres les unes après les autres
Autre exemple: prédiction de caractères (modèle de langue)
Code python: “mini-char-RNN” de A. Karpathy https://gist.github.com/karpathy/d4dee566867f8291f086
Autre exemple: prédiction de caractères (modèle de langue)
Crédit: A. Karpathy, CS231
Autre exemple: prédiction de caractères (modèle de langue)
Crédit: A. Karpathy, CS231
Texte généré une fois le modèle entraîné
Autre exemple: prédiction de caractères (modèle de langue)
Crédit: A. Karpathy, CS231
Entraînement sur le code source de Linux en C++
Texte généré une fois le modèle entraîné
Limites des « one-hot vectors »
Souvent les modèles de langue utilisent l’encodage « one hot »
...
0 ,..., 1 , 0 , 0 ' '
0 ,..., 0 , 1 , 0 ' '
0 ,..., 0 , 0 , 1 ' '
c b a
R256
Pour des caractères…
Limites des « one-hot vectors »
46
Souvent les modèles de langue utilisent l’encodage « one hot »
...
0 ,..., 1 , 0 , 0 ..., ' '
0 ,..., 0 , 1 , 0 ..., ' '
0 ,..., 0 , 0 , 1 ..., ' ' ...
grandeur grandement grand
000 ,
R10
Pour des mots…
Limites des « one-hot vectors »
Bien que simple, cet encodage a plusieurs inconvénients
1- Peu efficace en mémoire lorsque non compressé
ex.: 10,000 bits pour encoder le mot «je» dans une langue à 10,000 mots!
2- Pas de distance sémantique entre les codes:
Ex.
distance[one-hot(‘bon’), one-hot(‘bien’)]=distance[one-hot(‘bon’), one-hot(‘trottoir’)]
Or, on souhaiterait un codetel que
distance[code(‘bon’), code(‘bien’)] << distance[code(‘bon’), code(‘trottoir’)]
distance[code(‘Jean’), code(‘Chantal’)] << distance[code(‘bon’), code(‘trottoir’)]
distance[code(‘Inde’), code(‘Liban’)] << distance[code(‘bon’), code(‘trottoir’)]
Limites du « one-hot vector »
http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
Un solution est d’utiliser l’encodage Word2Vecde [Mikolov et al. ’13]
T.Mikolov et al. (2013). "Efficient Estimation of Word Representations in Vector Space”, in ICLR 2013 Très bon tutoriel!
Word2Vecs’appuie sur 2 idées fondamentales
Idée 1: Dictionnaire = matrice d’encodage
Exemple jouet: on veut représenter ces 8 mots par un code à 4 éléments
2 3 4 5
-1 -3 -2 2
11 6 4 -3
-4 8 -4 4
24 -6 42 17
91 13 14 -5
0 36 4 56
-1 0 1 35
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1
‘the’
‘quick’
‘brown’
‘fox’
‘jumps’
‘over’
‘lazy’
‘dog’
« one-hot » Dictionnaire
1 ligne = code pour 1 mot
Word2Vecs’appuie sur 2 idées fondamentales
Idée 1: Dictionnaire = matrice d’encodage
Comment sélectionner le code d’un mot? En multipliant son vecteur One-hot par la matrice d’encodage (le dictionnaire!)
2 3 4 5
-1 -3 -2 2
11 6 4 -3
-4 8 -4 4
24 -6 42 17
91 13 14 -5
0 36 4 56
-1 0 1 35
Ex: sélectionner le code de « brown »
Dictionnaire (matrice d’encodage)
0 0 1 0 0 0 0 0
( ( =
11 6)
4-3
(
Word2Vecs’appuie sur 2 idées fondamentales
Idée 1: Dictionnaire = matrice d’encodage
Première couche d’un réseau de neurones
= matrice d’encodage
0 0
0 0
1
...
0 W0
' :'brown x
8 4
0
R
W
Word2Vecs’appuie sur 2 idées fondamentales
Idée 1: Dictionnaire = matrice d’encodage
Première couche d’un réseau de neurones
= matrice d’encodage
x W code x
0
Word2Vecs’appuie sur 2 idées fondamentales Idée 1: Dictionnaire = matrice d’encodage
On pourra donc utiliser un réseau de neurones pour calculer le contenu du dictionnaire
Word2Vecs’appuie sur 2 idées fondamentales
Idée 2: 2 mots proches dans un texte = 2 mots proches sémantiquement
Basé sur un corpus de texte, on va créer des millions de pairs de mots
Word2Vec
[Mikolov et al. ’13]0 0
0 0 1
0 0 0
W0
' :'brown x
0 0
1 0 0
0 0 0 W1 t:'fox'
Entraîner un réseau de neurones à reproduire le 2emot partant du 1er
Word2Vec
[Mikolov et al. ’13]0 0
0 0 1
0 0 0
W0
' :'brown x
0 0
1 0 0
0 0 0 W1 t:'fox'
Puisque la sortie est de type «one-hot» on utilise un softmax
S M
Word2Vec
[Mikolov et al. ’13]0 0
0 0 1
0 0 0
W0
' :'brown x
0 0
1 0 0
0 0 0 W1 S t:'fox'
M
x SMAX
W f
W x
y 1 0
Word2Vec
[Mikolov et al. ’13]0 0
0 0 1
0 0 0
W0
' :'brown x
0 0
1 0 0
0 0 0 W1 S t:'fox'
M
Lorsqu’entraîné, utiliser comme dictionnaire
W0
Word2Vec
[Mikolov et al. ’13]Cet algorithme vient avec d’autres détails
• Réduire l’occurrence des mots fréquents et sémantiquement faibles (the, of, for, this, or, and,…)
• Combiner des mots qui forment une entité (ex: nations unies)
• Divers trucs pour simplifier/accélérer l’entraînement
Word2Vec
[Mikolov et al. ’13][Ahmia et al. ’18]
Comment entraîner un RNN?
Histoire de gradients
y
x S
W
W x
y M 1tanh 0
yt L, L
yt L L EC ,
RN de classification avec entropie croisée
xW0 W1
Histoire de gradients
y x
y t L Lo S y
h W o
x W h
CE
M
, tanh
1 0
yt L, L
Simple RN de classification avec entropie croisée
o h W0 W1
Histoire de gradients
y
x L
y,t L Simple RN de classification avec entropie croiséeL
Wo
W1L Pour entraîner le réseau
il faut calculer
et
y tL L
o S y
h W o
x W h
CE
M
, tanh
1 0
o h W0 W1
Histoire de gradients
y
x L
y,t L Simple RN de classification avec entropie croiséeo y L
L y o W
W
1
1
Dérivée en chaîne
h o y L
L y o h W
Wo
0
o h W0 W1
y tL L
o S y
h W o
x W h
CE
M
, tanh
1 0
Histoire de gradients
y x L
yt, L
Rétro- propagation
o h W0 W1
y t L Lo S y
h W o
x W h
CE
M
, tanh
1 0
L
y
yL
Histoire de gradients
y
x L
y,t LRétro- propagation
o h W0 W1
y tL L
o S y
h W o
x W h
CE
M
, tanh
1 0
L y
y o
y L o y
Histoire de gradients
y
x L
y,t LRétro- propagation
o h W0 W1
y tL L
o S y
h W o
x W h
CE
M
, tanh
1 0
L y o
y o W
1
o y L o W y
1
Histoire de gradients
y x L
yt, L
o h W0 W1
y t L Lo S y
h W o
x W h
CE
M
, tanh
1 0
L y o o
y o W h
1
o y L o h y
Histoire de gradients
y
x L
y,t LRétro- propagation
o h W0 W1
y tL L
o S y
h W o
x W h
CE
M
, tanh
1 0
L y o o
h
y o W h W
1 0
h o y
L o h W
y
0
Ex.: 3 données, 3 rétro-propagations
y1
x1
o1 L
y1,t1 L1 h1W0 W1
y2
x2 o2 Ly2,t2 L2 h2
W0 W1
y3
x3 o3 Ly3,t3 L3 h3
W0 W1
1 1L
W
2 1L
W
3 1L
W
y1
x1
o1 L
y1,t1 L1 h1W0 W1
y2
x2 o2 Ly2,t2 L2 h2
W0 W1
y3
x3 Ly3,t3
3 L3 o h3
W0 W1
1 0L
W
2 0L
W
3 0L
W