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
W xy 1 a 0
fa
fa
fa
fa
fa
x W h yx 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
W fa
W x
1 0
fa
fa
fa
fa
fa
x SMAX
y yh 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 x
y
1T a 0
fa
fa
fa
x w h
y
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
fa
fa
w1
h1
h2
h3
h4
h5
x w f W x h
y
a
0
,
1
x w h
y
h x W f h
T
a
1
0
,
5 1
5 8 5 0
8 3
,
R w
R h
R W
R h x
R x
x
W0
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 h
y
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 h 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 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
verbe'
' y h4
h0
t'
2' x
r'
3' x
e'
4' x
1
a xh i hh ii
f W x W h
h
3 4
4
W x W h
h
xh
hh
SMAX W h
3
y
hy
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
a xh i hh ii
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
'
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
-0.9 0.2 0.9
Wxh
Whh
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)
'
1 'm x 00
1 0
-0.3 -0.1
0.9
h
i tanh W
xhx
i W
hhh
i1
Wxh
Whh
i
hy
i
SMAX W 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
xh i hh ii
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
SMAX W 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
xh i hh ii
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
SMAX W 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
xh i hh ii
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
SMAX W 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
'
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
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
S
Loss
y1,t1
L
y2,t2
L
y3,t3
L
y4,t4
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
0010
'
4'e 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 autresAutre 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 autresAutre 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 autresAutre 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 autresAutre 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 autresAutre 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 autresAutre 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 »
45
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 ,
R
10
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!
Word2Vec s’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
Word2Vec s’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
(
Word2Vec s’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 0 0
W0
' :'brown x
8 4
0
R
W
Word2Vec s’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
Word2Vec s’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
Word2Vec s’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 a 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 1 0
tanh
y tL , L
y t
L
L
EC
,
RN de classification avec entropie croisée x W0 W1
Histoire de gradients
y x
y t
L L
o S y
h W o
x W h
CE
M
, tanh
1 0
y tL
, L
Simple RN de classification avec entropie croisée
Propagation avant
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 t
L 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 WW
1
1
Dérivée en chaîne
h o y L
L
y o h WWo
0
o h W0 W1
y t
L L
o S y
h W o
x W h
CE
M
, tanh
1 0
Histoire de gradients
y
x L
y,t LRétro- propagation
o h W0 W1
y t
L L
o S y
h W o
x W h
CE
M
, tanh
1 0
yL
yL
Histoire de gradients
y
x L
y,t LRétro- propagation
o h W0 W1
y t
L 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 t
L 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