Notes de cours - Département d`informatique et de recherche

Transcription

Notes de cours - Département d`informatique et de recherche
Notes de cours IFT6266 H12
Release 2012.01.05
Université de Montréal, DIRO
March 11, 2012
CONTENTS
1
2
3
IFT6266: Plan de chaque cours
1.1 2 Avril . . . . . . . . . .
1.2 29 Mars . . . . . . . . . .
1.3 26 Mars . . . . . . . . . .
1.4 22 Mars . . . . . . . . . .
1.5 19 Mars . . . . . . . . . .
1.6 15 Mars . . . . . . . . . .
1.7 12 Mars . . . . . . . . . .
1.8 1 Mars . . . . . . . . . .
1.9 27 Février . . . . . . . . .
1.10 20+23 Février . . . . . .
1.11 13+16 Février . . . . . .
1.12 6+9 Février . . . . . . . .
1.13 2 Février . . . . . . . . .
1.14 30 Janvier . . . . . . . . .
1.15 26 Janvier . . . . . . . . .
1.16 23 Janvier . . . . . . . . .
1.17 19 Janvier . . . . . . . . .
1.18 16 Janvier . . . . . . . . .
1.19 12 Janvier . . . . . . . . .
1.20 9 Janvier . . . . . . . . .
1.21 5 Janvier . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Introduction rapide à l’apprentissage machine pour l’IA
2.1 Intelligence . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Intelligence artificielle . . . . . . . . . . . . . . . . . . . . . .
2.3 Apprentissage machine . . . . . . . . . . . . . . . . . . . . . .
2.4 Formaliser l’apprentissage . . . . . . . . . . . . . . . . . . . .
2.5 Apprentissage supervisé . . . . . . . . . . . . . . . . . . . . .
2.6 Apprentissage non supervisé . . . . . . . . . . . . . . . . . . .
2.7 Généralisation locale . . . . . . . . . . . . . . . . . . . . . . .
2.8 Représentations locales ou distribuées, généralisation non locale
Introduction aux algorithmes d’apprentissage profonds
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
5
5
5
5
5
5
5
6
6
6
6
6
6
6
6
7
7
7
7
7
8
.
.
.
.
.
.
.
.
9
9
9
10
10
10
11
11
11
13
i
3.1
3.2
3.3
3.4
3.5
3.6
3.7
4
5
6
Profondeur . . . . . . . . . . . . . . . . . . . . . . . .
Motivations pour les architectures profondes . . . . . .
Manque de profondeur . . . . . . . . . . . . . . . . . .
Architecture profonde du cerveau . . . . . . . . . . . .
Profondeur des processus cognitifs . . . . . . . . . . .
Partage statistique . . . . . . . . . . . . . . . . . . . .
Percée dans l’apprentissage des architectures profondes
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
14
14
14
15
15
16
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
calcul efficace du gradient
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
20
20
21
21
21
22
Introduction aux perceptrons multi-couches (réseaux de neurones à propagation avant)
5.1 Réseaux de neurones multi-couches . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Critères d’entraînements communs et non-linéarités de sortie . . . . . . . . . . . . . .
5.3 L’algorithme de rétropropagation . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 Régression logistique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
25
25
26
26
28
.
.
.
.
.
.
.
.
.
29
29
29
30
31
31
31
32
33
33
Introduction à l’apprentissage par descente de gradient
4.1 Le gradient . . . . . . . . . . . . . . . . . . . . . . .
4.2 Descente de gradient . . . . . . . . . . . . . . . . . .
4.3 Descente de gradient stochastique . . . . . . . . . . .
4.4 Descente de gradient stochastique par mini-lots . . . .
4.5 Inertie (momentum) . . . . . . . . . . . . . . . . . .
4.6 Choisir l’échéancier du pas de gradient . . . . . . . .
4.7 Graphes de flot, dérivée en chaîne et rétropropagation :
L’entraînement de réseaux de neurones multi-couches
6.1 Problème fondamentalement difficile d’optimisation
6.2 Choix de l’architecture . . . . . . . . . . . . . . . .
6.3 Normalisation des entrées . . . . . . . . . . . . . .
6.4 Traitement des sorties désirées . . . . . . . . . . . .
6.5 Codage des sorties désirées et des entrées discrètes .
6.6 Algorithme d’optimisation . . . . . . . . . . . . . .
6.7 Initialisation des paramètres . . . . . . . . . . . . .
6.8 Contrôle de la saturation . . . . . . . . . . . . . . .
6.9 Contrôle de la capacité effective . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
Le défi d’entraîner des réseaux de neurones profonds
35
8
Auto-encodeurs débruitants vs auto-encodeurs ordinaires
37
9
Modèles probabilistes pour les architectures profondes
9.1 Rappels sur les modèles graphiques probabilistes . . .
9.2 Inférence . . . . . . . . . . . . . . . . . . . . . . . .
9.3 Inférence approximative . . . . . . . . . . . . . . . .
9.4 Inférence par MCMC . . . . . . . . . . . . . . . . .
9.5 Échantillonage de Gibbs . . . . . . . . . . . . . . . .
9.6 Le Gradient dans un Champs de Markov Log-Linéaire
9.7 Marginalisation sur les variables cachées . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
39
39
40
41
41
42
42
43
10 La Machine de Boltzmann
45
10.1 La Machine de Boltzmann Restreinte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
ii
10.2 Gibbs dans les RBMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
11 Entraînement des RBMs
47
11.1 Divergence Contrastive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
11.2 Divergence Contrastive Persistente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
12 RBMs empilés et DBNs
12.1 Deep Belief Networks . . . . . . . . . . . . . . . .
12.2 Dépliement d’une RBM et équivalence RBM - DBN
12.3 Inférence approximative dans les DBNs . . . . . . .
12.4 Deep Boltzmann Machine . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
49
49
50
51
51
13 Contents
13.1 IFT6266: Course Outline . . . . . . . . . . . . . . . . . . . . . . . . .
13.2 Very Brief Introduction to Machine Learning for AI . . . . . . . . . . .
13.3 Introduction to Deep Learning Algorithms . . . . . . . . . . . . . . . .
13.4 Introduction to Gradient-Based Learning . . . . . . . . . . . . . . . . .
13.5 Introduction to Multi-Layer Perceptrons (Feedforward Neural Networks)
13.6 Training Multi-Layer Neural Networks . . . . . . . . . . . . . . . . . .
13.7 The challenges of training deep neural networks . . . . . . . . . . . . .
13.8 Denoising autoencoders vs. ordinary autoencoders . . . . . . . . . . . .
13.9 Probabilistic models for deep architectures . . . . . . . . . . . . . . . .
13.10 The Boltzmann Machine . . . . . . . . . . . . . . . . . . . . . . . . . .
13.11 Training RBMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.12 Stacked RBMs and DBNs . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
53
53
57
60
64
68
71
76
77
78
82
84
86
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iii
iv
Notes de cours IFT6266 H12, Release 2012.01.05
English version
CONTENTS
1
Notes de cours IFT6266 H12, Release 2012.01.05
2
CONTENTS
CHAPTER
ONE
IFT6266: PLAN DE CHAQUE COURS
Tableau résumé des cours et lectures (cliquer sur la date pour les détails de chaque cours)
3
Notes de cours IFT6266 H12, Release 2012.01.05
4
Date
2 avril
29
mars
26
mars
Sujets
Examen
Révision
À lire en priorité
Réseaux à convolution
22
mars
19
mars
15
mars
12
mars
1 mars
27
février
20+23
février
13+16
février
6+9
février
2
février
30
janvier
26
janvier
23
janvier
19
janvier
16
janvier
12
janvier
9
janvier
5
janvier
Gradient profond.
DAE vs AE
Défi de la profondeur
Article sur le Neocognitron.
Article sur LeNet.
Tutoriel sur les réseaux à convolution.
fin de Présentation de Yoshua Bengio.
Auto-encodeurs débruitants vs auto-encodeurs ordinaires.
Le défi d’entraîner des réseaux de neurones profonds.
Pré-entraînement
Contracting AE
DBMs
Présentation de Dumitru Erhan.
Présentation de Yoshua Bengio.
Article sur les Contracting Auto-Encoders et le Manifold Tangent
Classifier
Article sur les Contracting Auto-Encoders
Deep Boltzmann Machine.
DBNs
RBMs empilés et DBNs.
RBMs
La Machine de Boltzmann Restreinte.
Modèles probabilistes
Modèles probabilistes pour les architectures profondes.
Modèles probabilistes,
Lancer de jobs au LISA
DAE
Intro aux Modèles probabilistes pour les architectures profondes.
Jobman.
Denoising Auto-Encoders
Auto-encodeurs
Section 4.6 de Learning Deep Architectures for AI.
python, numpy, Theano
Régression logistique
Réseaux de neurones
Documentation sur python, numpy, et Theano. Exemple avec la
Régression logistique. Notes sur l’entraînement des MLPs.
Efficient Backprop. Intro au tutorial profond de Theano.
Démarrage du tutoriel.
Notes sur le calcul du gradient.
Contracting AE et MTC
Le calcul du gradient
Intro aux architectures
profondes
Intro aux architectures
profondes
Intro au cours
Intro à l’apprentissage
Notes introductoires sur les architectures profondes, Sec. 1 de
Learning Deep Architectures for AI. Notes sur le gradient.
Notes introductoires sur les architectures profondes, Sec. 1 de
Learning Deep Architectures for AI.
plan de cours .
diapos. . Notes introductoires sur l’apprentissage, Sec. 1 et 2 de
Scaling Learning Algorithms towards AI.
Chapter 1. IFT6266: Plan de chaque cours
Notes de cours IFT6266 H12, Release 2012.01.05
1.1 2 Avril
• Examen théorique à livre ouvert
1.2 29 Mars
• Révision en vue de l’examen
1.3 26 Mars
• Réseaux à convolution
– Neocognitron
– LeNet
– Tutoriel sur les réseaux à convolution
1.4 22 Mars
• Propagation du gradient supervisé dans les réseaux profonds: Présentation de Yoshua Bengio Mai
2010.
• Auto-encodeurs débruitants vs auto-encodeurs ordinaires.
1.5 19 Mars
• Comprendre l’effet du pré-entraînement non-supervisé: Présentation de Yoshua Bengio Mai 2010.
• Le défi d’entraîner des réseaux de neurones profonds.
1.6 15 Mars
• Comprendre l’effet du pré-entraînement non-supervisé: Présentation de Dumitru Erhan Mars 2010.
• Comprendre l’effet du pré-entraînement non-supervisé: Présentation de Yoshua Bengio Mai 2010.
1.7 12 Mars
• Articles sur les Contracting Auto-Encoders et le Manifold Tangent Classifier
1.1. 2 Avril
5
Notes de cours IFT6266 H12, Release 2012.01.05
1.8 1 Mars
• Article sur les Contracting Auto-Encoders.
1.9 27 Février
• Deep Boltzmann Machine.
1.10 20+23 Février
• RBMs empilés et DBNs.
1.11 13+16 Février
• La Machine de Boltzmann Restreinte.
1.12 6+9 Février
• Suite des Modèles probabilistes pour les architectures profondes.
1.13 2 Février
• Tutorial sur les auto-encodeurs débruitants
• Intro aux Modèles probabilistes pour les architectures profondes.
1.14 30 Janvier
• Auto-encodeurs
1.15 26 Janvier
• Suite de l’entraînement des réseaux de neurones:
– Contrôle de la capacité: L’entraînement de réseaux de neurones multi-couches
• Auto-encodeurs
– Survol des auto-encodeurs: section 4.6 de Learning Deep Architectures for AI
6
Chapter 1. IFT6266: Plan de chaque cours
Notes de cours IFT6266 H12, Release 2012.01.05
1.16 23 Janvier
• Introduction aux perceptrons multi-couches (réseaux de neurones à propagation avant)
– L’algorithme de rétropropagation
– Régression logistique
– L’entraînement de réseaux de neurones multi-couches
• Intro au tutoriel profond de Theano
1.17 19 Janvier
• Introduction aux perceptrons multi-couches (réseaux de neurones à propagation avant)
– Réseaux de neurones multi-couches
– Critères d’entraînements communs et non-linéarités de sortie
• Introduction à Theano
• Intro au tutoriel profond de Theano
1.18 16 Janvier
• Introduction à l’apprentissage par descente de gradient
– Graphes de flot, dérivée en chaîne et rétropropagation : calcul efficace du gradient
1.19 12 Janvier
• Introduction aux algorithmes d’apprentissage profond
– Percée dans l’apprentissage des architectures profondes
• Introduction à l’apprentissage par descente de gradient
– Le gradient
– Descente de gradient
– Descente de gradient stochastique
1.20 9 Janvier
• Introduction aux algorithmes d’apprentissage profonds
1.16. 23 Janvier
7
Notes de cours IFT6266 H12, Release 2012.01.05
1.21 5 Janvier
• Introduction au cours, objectifs du cours, modalités d’évaluation (plan de cours)
• Introduction rapide à l’apprentissage machine pour l’IA
English version
8
Chapter 1. IFT6266: Plan de chaque cours
CHAPTER
TWO
INTRODUCTION RAPIDE À
L’APPRENTISSAGE MACHINE POUR
L’IA
Les sujets abordés ici sont couverts dans cette présentation.
2.1 Intelligence
La notion d’intelligence peut être définie de bien des façons. Ici, nous la définissons comme la capacité de
prendre la bonne décision, selon un certain critère (par exemple, survivre et se reproduire, pour la plupart des
animaux). Pour prendre de meilleures décisions, des connaissances sont nécessaires, et elles doivent être
dans un format opérationnel: elles doivent pouvoir être utilisées pour interpréter des données sensorielles et
prendre des bonnes décisions en conséquence.
2.2 Intelligence artificielle
Les ordinateurs possèdent déjà certaines formes d’intelligence, grâce à des programmes, créés par les humains, qui leur permettent de « faire des choses » considérées utiles (nous considérons généralement la
bonne décision comme celle qui est la plus utile). Cependant, il existe de nombreuses tâches faciles à
réaliser pour des animaux ou des humains, mais qui restent hors d’atteinte pour les ordinateurs, au début du
21 e siècle. La plupart de ces tâches font partie de ce que l’on appelle l’intelligence artificielle (IA), ce qui
inclut les tâches de perception et de contrôle. Comment se fait-il que nous n’ayons pas réussi à écrire de
programmes réalisant ces tâches ? Je crois que la principale raison est que nous ne savons pas explicitement
(de façon formelle) comment résoudre ces tâches, même si notre cerveau (avec notre corps) est capable
de les réaliser de façon instinctive. Les connaissances permettant de réaliser ces tâches sont actuellement
implicites, mais nous avons des informations, des données qui nous viennent d’exemples (par exemple, des
observations de ce qu’un humain ferait dans certaines situations, étant donné un but). Comment faire pour
que des machines puissent acquérir ce genre d’intelligence ? Par l’apprentissage, c’est-à-dire l’utilisation de
données et d’exemples pour construire des connaissances opérationnelles.
9
Notes de cours IFT6266 H12, Release 2012.01.05
2.3 Apprentissage machine
L’apprentissage machine (ou machine learning, ML) a une longue histoire, et de nombreux manuels couvrent ses principes. Parmi les manuels récents, je suggère :
• Christopher M. Bishop, *Pattern Recognition and Machine Learning*, 2007
• Simon Haykin, *Neural Networks: a Comprehensive Foundation*, 2009 (3rd edition)
• Richard O. Duda, Peter E. Hart and David G. Stork, *Pattern Classification*, 2001 (2nd edition)
Ici, nous allons nous concentrer sur certains concepts, qui sont les plus pertinents pour ce cours.
2.4 Formaliser l’apprentissage
Voici d’abord le formalisme mathématique le plus fréquemment utilisé pour décrire l’apprentissage. Nous
disposons d’exemples d’entraînement
D = {z1 , z2 , . . . , zn }
où les zi sont des exemples générés par un processus inconnu P (Z).
Nous avons également une fonction d’erreur L, qui prend comme arguments une fonction de décision f
et un exemple z, et qui renvoie un scalaire réel. Nous voulons minimizer l’espérance de L(f, Z) sous le
processus stochastique P (Z).
2.5 Apprentissage supervisé
Dans l’apprentissage supervisé, chaque exemple est une paire (entrée, cible): Z = (X, Y ), et f s’applique
à des exemples de X. Les deux exemples de problèmes supervisés les plus fréquents sont
• La régression : Y est un réel, ou un vecteur de réels, la sortie de f est dans le même espace que Y , et
l’erreur est souvent l’erreur quadratique:
L(f, (X, Y )) = kf (X) − Y k2
• La classification: Y est un entier fini (c’est-à-dire un symbole), qui correspond à l’indice d’une classe,
et la fonction d’erreur utilisée est souvent la log-vraisemblance conditionnelle négative, en interprétant
fi (X) comme une estimation de P (Y = i|X):
L(f, (X, Y )) = − log fY (X)
avec les contraintes suivantes:
fY (x) ≥ 0 ,
X
fi (X) = 1
i
10
Chapter 2. Introduction rapide à l’apprentissage machine pour l’IA
Notes de cours IFT6266 H12, Release 2012.01.05
2.6 Apprentissage non supervisé
Dans l’apprentissage non supervisé, nous apprenons une fonction f qui aide à caractériser une distribution
inconnue P (Z). f peut être un estimateur de P (Z) directement (estimation de densité). Dans d’autre cas,
f essaie d’estimer les zones où la densité de probabilité se concentre.
Les algorithmes de partitionnement (clustering) divisent l’espace des entrées en différentes régions (souvent
autour d’un exemple “prototype”, ou d’un centroïde). Certains algorithmes de partitionnement créent des
partitions “dures” (par exemple, l’algorithme des k moyennes, ou k-means), où chaque exemple appartient
seulement à une région. D’autres construisent une partition “douce” (soft) (par exemple, un mélange de
gaussiennes), qui assigne à chaque Z une probabilité d’appartenir à chaque cluster.
D’autres algorithmes non supervisés apprennent une transformation qui construit une nouvelle représentation pour Z. Beaucoup d’algorithmes d’apprentissage profonds appartiennent à cette catégorie, l’analyse en
composantes principales (ACP, ou principal components analysis, PCA) également.
2.7 Généralisation locale
La grande majorité des algorithmes d’apprentissage exploitent un seul principe pour généraliser : la généralisation locale. Par exemple, un tel algorithme suppose que si un exemple d’entrée xi est proche d’un autre
exemple xj , alors les sorties correspondantes f (xi ) et f (xj ) doivent aussi être proches. Ce principe est
utilisé pour l’interpolation locale.
Ce principe est très puissant, mais il a ses limitations: et si on essaie d’extrapoler ? ou si la fonction
inconnue (cible) a beaucoup plus de variations que le nombre d’exemples d’entraînement? Dans ce cas, il
est impossible que la généralisation locale fonctionne, puisqu’il nous faut au moins autant d’exemples que
de creux et de bosses dans la fonction cible pour couvrir toutes ces variations et généraliser par ce principe.
Ce problème est lié à ce que l’on appelle la malédiction de la dimensionalité (ou fléau de la dimension,
curse of dimensionality). Lorsque l’espace des entrées est de haute dimension, le nombre de variations
de la fonction d’intérêt peut facilement être une fonction exponentielle du nombre de dimensions d’entrée.
Par exemple, imaginons que nous voulons distinguer 10 valeurs différentes pour chaque variable d’entrée
(chaque élément du vecteur d’entrées), et que les 10n configurations de ces n variables sont importantes ou
nous intéressent. En utilisant uniquement la généralisation locale, nous avons besoin d’au moins un exemple
pour chacune de ces 10n configurations pour pouvoir généraliser dans chacune d’elles.
2.8 Représentations locales ou distribuées, généralisation non locale
Un entier N peut être représenté par une séquence de B bits, avec N < B, telle que tous les bits valent
0 sauf le N -ième. C’est une représentation binaire locale. Le même entier peut être représenté par une
séquence de B = log2 N + 1 bits, qui contient la représentation habituelle de N en base 2. Cette représentation binaire est distribuée. Cet exemple nous montre qu’une représentation distribuée peut être plus efficace
qu’une représentation locale, et ce, de manière exponentielle. De manière générale, pour les algorithmes
d’apprentissage, les représentations distribuées ont la capacité de capturer “exponentiellement” plus de variations que les représentations locales, pour le même nombre de paramètres libres. Ainsi, ils ont le potentiel
2.6. Apprentissage non supervisé
11
Notes de cours IFT6266 H12, Release 2012.01.05
d’une meilleure généralisation, puisque la théorie de l’apprentissage montre que le nombre d’exemples requis (pour atteindre un certain degré de performance en généralisation) pour ajuster O(B) degrés de liberté
effectifs est O(B).
La différence entre les représentations locales et distribuées peut aussi être illustrée par la différence entre
le partitionnement traditionnel, local, et l’analyse en composantes principales, ou les machines de Boltzmann restreintes (restricted Boltzmann machines, RBM), qui définissent des représentations distribuées. Par
exemple, k-means a besoin d’un vecteur de coordonnées pour chaque prototype (centroïde), c’est-à-dire un
vecteur pour chacune des régions distinguées par l’algorithme. L’ACP, au contraire, représente la distribution en gardant les directions où les variations sont les plus grande. Imaginons une interprétation simplifiée
de l’ACP, où tout ce qui nous intéresse, pour chaque direction de variation, est de savoir si la projection de la
donnée est au-dessus (ou en-dessous) d’un certain seuil. Avec d directions, on peut distinguer 2d régions. De
la même manière les RBMs définissent d hyperplans, et un bit indique si l’entrée est d’un côté ou de l’autre
de chaque hyperplan. Ainsi, une RBM associe une région de l’espace des entrées à chaque configuration
des bits de représentation (dans le vocabulaire des réseaux de neurones, ces bits correspondent à des unités
cachées). Le nombre de paramètres d’une RBM est environ le nombre de ces bits multiplié par le nombre
de dimensions de l’entrée.
Nous pouvons voir que le nombre de régions définies par une RBM, ou l’ACP, c’est-à-dire des représentations distribuées, croît selon l’exponentielle du nombre de paramètres, alors que le nombre de régions
définies par des algorithmes de partitionnement traditionnel (par exemple k-means, ou des mélanges de
gaussiennes), qui définissent des représentations locales, croît linéairement avec le nombre de paramètres.
Nous pouvons aussi voir que la RBM peut généraliser à une nouvelle région, c’est-à-dire à une configuration
des ses unités cachées, dans laquelle il n’y avait aucun exemple d’entraînement. C’est quelque chose qui
n’est pas possible pour les algorithmes de partitionnement classiques (ces algorithmes pourraient seulement
généraliser localement de façon triviale, en répétant ce qu’ils ont appris dans les régions voisines contenant
des exemples d’entraînement).
English version
12
Chapter 2. Introduction rapide à l’apprentissage machine pour l’IA
CHAPTER
THREE
INTRODUCTION AUX ALGORITHMES
D’APPRENTISSAGE PROFONDS
Pour une revue récente de l’apprentissage profond, voir: Yoshua Bengio, Learning Deep Architectures for
AI, Foundations and Trends in Machine Learning, 2(1), 2009
3.1 Profondeur
Les calculs effectués pour produire une sortie à partir d’entrées peuvent être représentés par un graphe
de flot: un graphe de flot est un graphe qui représente un calcul, dans lequel chaque nœud représente une
opération élémentaire et une valeur (le résultat de cette opération sur les enfants de ce nœud). Les nœuds
d’entrée n’ont pas d’enfants, et les nœuds de sortie n’ont pas de parents. Considérons l’ensemble des
opérations possibles dans chaque nœud, et l’ensemble des structures de graphes possibles, cela définit une
famille de fonctions.
Le graphe de flot de l’expression sin(a2 + b/a) peut être représenté par un graphe avec:
• deux noeuds d’entrée, a et b;
• un nœud pour la division, b/a, dont les entrées (les enfants) sont a et b;
• un nœud pour le carré, prenant seulement a comme entrée;
• un nœud pour l’addition, dont la valeur serait a2 + b/a, prenant comme entrées les nœuds a2 et b/a;
• un nœud de sortie calculant le sinus, dont la seule entrée est le nœud d’addition.
Une propriété particulière d’un tel graphe de flot est la profondeur: la longueur du plus long chemin depuis
une entrée jusqu’à une sortie.
La profondeur d’un réseau de neurones traditionnel (sans récurrence) peut être considérée comme égale
au nombre de couches (c’est-à-dire le nombre de couches cachées plus 1, pour la couche de sortie). Les
machines à vecteurs de support (support vector machines, SVM) ont une profondeur de 2: un premier
niveau pour la sortie des noyaux ou l’espace de redescription (feature space), et un deuxième niveau pour la
combinaison linéaire qui produit la sortie.
13
Notes de cours IFT6266 H12, Release 2012.01.05
3.2 Motivations pour les architectures profondes
Les motivations principales pour étudier les algorithmes d’apprentissage pour des architectures profondes
sont les suivantes :
• Le manque de profondeur peut être nuisible
• Le cerveau a une architecture profonde
• Les processus cognitifs semblent être profonds
3.3 Manque de profondeur
Une profondeur de 2 est suffisante dans de nombreux cas pour approcher n’importe quelle fonction avec
une précision arbitraire. C’est le cas, par exemple, pour les portes logiques, les neurones formels (à seuil),
les neurones avec une fonction d’activation sigmoïdale, et les unités à base radiale (radial basis function,
RBF) comme dans les SVMs. Mais cette possibilité a un prix : le nombre de nœuds requis dans le graphe
(c’est-à-dire le nombre d’opérations, mais aussi le nombre de paramètres à entraîner) peut devenir très large.
En fait, des résultats théoriques indiquent que, pour certaines familles de fonctions, le nombre de nœuds
nécessaires peut grandir selon l’exponentielle du nombre de dimensions des entrées. Cela a été montré
pour les portes logiques, les neurones formels, ainsi que les neurones à base radiale (RBF). Dans ce dernier
cas, Hastad a montré que certaines familles de fonctions, qui peuvent être représentées efficacement (de
façon compacte) avec O(n) nœuds (pour n entrées) lorsque la profondeur est d, onb besoin d’un nombre
exponentiel de nœuds (O(2n )) lorsque la profondeur est limitées à d − 1.
Une architecture profonde peut être vue comme une forme de factorisation. La plupart des fonctions choisies
au hasard ne peuvent pas être représentées efficacement, que ce soit avec une architecture profonde, ou peu
profonde. En revanche, beaucoup de fonctions qui peuvent être représentées efficacement par une architecture profonde ne peuvent pas l’être avec une architecture peu profonde (voir l’exemple des polynômes dans
l’article de revue de Bengio). L’existence d’une représentation compacte et profonde indique qu’il existe
une certaine structure dans la fonction représentée. Si la fonction n’a pas de structure du tout, il sera de
toutes façons impossible de généraliser.
3.4 Architecture profonde du cerveau
Les nombreuses études du cortex visuel montrent qu’il existe une série d’aires, qui contiennent chacune
une représentation de l’entrée (le champ visuel), et des signaux se propagent d’une aire à la suivante (il y a
aussi des connexions directes entre aires éloignées, et des chemins parallèles, donc la réalité est un peu plus
complexe).
Notons que les représentations dans le cerveau ne sont ni complètement denses et distribuées, ni purement
locales, mais entre les deux : ce sont des représentations éparses (ou clairsemées, sparse). Environ 1 % des
neurones sont actifs simultanément dans le cerveau. Considérant le grand nombre de neurones, cela reste
une représentation (exponentiellement) efficace.
14
Chapter 3. Introduction aux algorithmes d’apprentissage profonds
Notes de cours IFT6266 H12, Release 2012.01.05
3.5 Profondeur des processus cognitifs
• Les humains organisent leurs idées et leurs concepts de façon hiérarchique.
• Les humains apprennent d’abord des concepts simples, et les combinent ensuite pour représenter des
concepts plus abstrait.
• Les ingénieurs (généralement humains) construisent des solutions en combinant de nombreux niveaux
d’abstraction et de traitement.
Nous aimerions arriver à apprendre et découvrir ces concepts (peut-être que l’ingénierie des connaissances
n’a pas fonctionné car l’introspection n’était pas adéquate). L’introspection des concepts exprimable par
le langage suggère aussi une représentation éparse: la description d’une entrée donnée (par exemple, une
scène visuelle) fait appel uniquement à une faiblle fraction de tous les mots et concepts existants.
3.6 Partage statistique
Les représentations intermédiaires peuvent être exploitées pour partager la force statistique, en mettant
à contribution différents contextes. Premièrement, si des architectures plus profondes peuvent être plus
efficaces en termes du nombre d’unités de calcul (pour représenter la même fonction), cela signifie en
principe que le nombre de paramètres à estimer est plus petit, ce qui entraîne une plus grande efficacité
statistique.
Une autre façon de comprendre le partage de la force statistique, c’est de considérer ce qui se passe lorsque
différents composants de l’architecture sont réutilisés pour différents usages (par exemple, pour le calcul
de différentes sorties, ou pour différentes tâches, ou pour le calcul de différentes représentations intermédiaires). Comme les paramètres de ce composant sont utilisés dans différents contextes, cela permet d’utiliser
plus d’information (qui vient de plus d’exemples, ou de parties d’exemples) pour estimer ces paramètres,
donc de réduire l’incertitude sur ces paramètres.
Ce partage est similaire à celui qui a lieur dans l’apprentissage de représentations distribuées. Par exemple,
si les paramètres d’une unité cachées d’une RBM sont “utilisés” pour beaucoup d’exemples (parce que cette
unité est activée pour beaucoup d’exemples), alors il existe plus d’information disponible pour estimer ces
paramètres. Lorsqu’une nouvelle configuration des entrées se présente, même si elle ne correspond à aucun
des exemples vus pendant l’entraînement, ses “composantes” (qui peuvent être représentées explicitement,
à un plus haut niveau d’abstraction, dans une couche intermédiaire) peuvent avoir été vues précédemment.
Le partage de la force statistique est une idée fondamentale derrière de nombreuses avances dans
l’apprentissage machine. Des composants et des paramètres sont partagés entre différentes tâches dans
le cas de l’apprentissage multi-tâches (multi-task learning), et les architectures profondes sont particulièrement adaptées pour l’apprentissage multi-tâches (Collobert & Weston, ICML2008). De la même manière,
l’apprentissage semi-supervisé exploite le partage statistique entre les deux tâches suivantes : apprendre la
distribution des entrées P (X), et apprendre la distribution conditionnelle P (Y |X). Comme les algorithmes
d’apprentissage profond reposent souvent sur l’apprentissage non supervisé, ils sont bien positionnés pour
exploiter cette forme particulière de partage statistique.
Une forme voisine de partage est exploitée par l’apprentissage autodidacte (self-taught learning), (Raina et
al, 2007), où l’on utilise pendant l’entraînement des exemples non étiquetés, provenant de P (X|Y ), pour un
ensemble de classes Y donné, mais où le but est de généraliser à de à des tâches P (Y |X) pour un ensemble
3.5. Profondeur des processus cognitifs
15
Notes de cours IFT6266 H12, Release 2012.01.05
de tâches Y différentes. Des travaux récents ont montré que des architectures profondes bénéficient plus de
l’apprentissage autodidacte et de l’apprentissage multi-tâches que les architectures peu profondes (Bengio
et al, NIPS 2010 deep learning workshop).
C’est aussi une forme de généralisation hors-domaine (out-of-domain generalization), domaine dans lequel
les architectures profondes sont également appropriées, comme montré dans (Bengio et al, NIPS 2010 deep
learning workshop) en ce qui concerne la reconnaissance de patrons (pattern recognition) et dans (Glorot et
al, 2011) pour le traitement du langage naturel (natural language processing, NLP), plus particulièrement
l’analyse de sentiment.
3.7 Percée dans l’apprentissage des architectures profondes
Avant 2006, les tentatives d’entraîner des architectures profondes avaient échoué : un réseau de neurones
supervisé (non récurrent) profond donnait de moins bons résultats (en erreur d’entraînement et en erreur de
test) que des réseaux moins profonds (1 ou 2 couches cachées).
Trois articles, publiés en 2006, ont changé cela, dans le sillage du travail révolutionnaire de Hinton sur les
deep belief networks (DBNs) :
• Hinton, G. E., Osindero, S. and Teh, Y., A fast learning algorithm for deep belief nets Neural Computation 18:1527-1554, 2006
• Yoshua Bengio, Pascal Lamblin, Dan Popovici and Hugo Larochelle, Greedy Layer-Wise Training of
Deep Networks, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems 19 (NIPS
2006), pp. 153-160, MIT Press, 2007
• Marc’Aurelio Ranzato, Christopher Poultney, Sumit Chopra and Yann LeCun Efficient Learning of
Sparse Representations with an Energy-Based Model, in J. Platt et al. (Eds), Advances in Neural
Information Processing Systems (NIPS 2006), MIT Press, 2007
Les trois principes-clés suivants sont utilisés dans ces trois articles :
• L’apprentissage non supervisé de représentations est utilisé pour pré-entraîner chaque couche.
• L’apprentissage non supervisé se fait une couche à la fois, chaque couche entraînée après la couche
du dessous. La représentation apprise par une couche est utilisée comme entrée par la couche suivante
(du dessus).
• L’apprentissage supervisé est utilisé pour raffiner toutes les couches pré-entraînées (ainsi que la
couche de sortie, et éventuellement d’autres couches supplémentaires).
Les DBNs utilisent des RBMs pour la phase non supervisée (l’apprentissage de représentations à chaque
couche). L’article de Bengio et al. explore et compare des RBMs et des auto-encodeurs (un auto-encodeur
est un réseau de neurones entraîné pour prédire sa propre entrée, en passant par une couche cachée qui sert de
représentation intermédiaire). L’article de Ranzato et al. utilise des auto-encodeurs épars (qui sont similaires
au codage épars (sparse coding) dans le contexte d’une architecture à convolution. Les auto-encodeurs et
les architectures à convolution seront abordés plus tard dans le cours.
Depuis 2006, une pléthore d’autres articles sur le sujet de l’apprentissage profond ont été publiés, certains
exploitant d’autres principes pour guider l’entraînement de représentations intermédiaires. Voir Learning
Deep Architectures for AI pour une revue.
16
Chapter 3. Introduction aux algorithmes d’apprentissage profonds
Notes de cours IFT6266 H12, Release 2012.01.05
English version
3.7. Percée dans l’apprentissage des architectures profondes
17
Notes de cours IFT6266 H12, Release 2012.01.05
18
Chapter 3. Introduction aux algorithmes d’apprentissage profonds
CHAPTER
FOUR
INTRODUCTION À L’APPRENTISSAGE
PAR DESCENTE DE GRADIENT
Considérons une fonction de coût C, qui associe un vecteur de paramètres θ à un scalaire C(θ), que
nous voulons minimiser. En apprentissage machine, la fonction de coût est généralement la moyenne, ou
l’espérance, de la fonction d’erreur L :
n
C(θ) =
1X
L(fθ , zi )
n
i=1
(c’est ce que l’on appelle l’erreur d’entraînement), ou
Z
C(θ) = L(fθ , z)P (z)dz
(c’est l’erreur de généralisation). En apprentissage supervisé, on a z = (x, y), et fθ (x) est une prédiction
de y, indexée par les paramètres θ.
4.1 Le gradient
Le gradient de la fonction C par rapport à un scalaire θ est défini formellement comme suit :
C(θ + δθ) − C(θ)
∂C(θ)
= lim
δθ→0
∂θ
δθ
C’est-à-dire que c’est la variation ∆C provoquée par un changement ∆θ, dans la limite où ∆θ est très petit.
∂C(θ)
Lorsque θ est un vecteur, le gradient ∂C(θ)
∂θ est un vecteur, contenant un élément ∂θi pour chaque θi , en
considérant les autres paramètres fixés : on fait le changement ∆θi , et on mesure le ∆C résultant. Lorsque
∆C
∆θi est petit, alors ∆θ
devient ∂C(θ)
∂θi .
i
19
Notes de cours IFT6266 H12, Release 2012.01.05
4.2 Descente de gradient
Nous voulons trouver une valeur de θ qui minimise C(θ). Si nous arrivons à résoudre
∂C(θ)
=0
∂θ
alors nous pouvons trouver les minimums (et les maximums, et les points de selle), mais généralement
nous ne sommes pas capables de trouver les solutions de cette équation, donc nous utilisons des méthodes
numériques d’optimisation. La plupart de ces méthodes reposent sur l’idée de la descente locale : on modifie
itérativement θ pour diminuer C(θ), jusqu’à ce que ça devienne impossible, c’est-à-dire que nous sommes
arrivés à un minimum local (et peut-être global, avec de la chance).
La technique la plus simple, parmi les techniques d’optimisation à base de gradient, est la descente de
gradient. Il existe de nombreuses variantes de descente de gradient, commençons par la descente de gradient
ordinaire :
θk+1 = θk − k
∂C(θk )
∂θk
où θk représente nos paramètres à l’itération k, et k est un scalaire appelé pas de gradient (learning rate),
qui peut être fixé, adaptatif, ou déterminé par un échéancier (schedule).
4.3 Descente de gradient stochastique
Pour la descente de gradient stochastique, nous exploitons le fait que C est une moyenne sur des exemples
généralement i.i.d. (indépendants et identiquement distribués) pour faire des mises à jour de θ de manière
beaucoup plus fréquente, à la limite (et dans le cas le plus commun) après chaque exemple :
θk+1 = θk − k
∂L(θk , z)
∂θk
où z est le prochain exemple dans l’ensemble d’entraînement, ou le prochain exemple tiré de la distribution
d’entraînement dans le cas en ligne (online) (où l’on n’a pas accès à un ensemble d’entraînement de taille
fixe, mais à un flux d’exemples provenant d’un processus de génération de données).
La descente de gradient stochastique (stochastic gradient descent, SGD) est un principe plus général, dans
lequel la direction de la mise à jour est une variable aléatoire, dont l’espérance est le véritable gradient qui
nous intéresse. Les conditions de convergence de la SGD sont similaires à celles de la descente de gradient,
malgré la plus grande quantité de hasard.
La SGD peut être beaucoup plus rapide que la descente de gradient ordinaire (batch), parce que le nombre
de mises à jour est beaucoup plus grand. C’est particulièrement vrai pour des jeux de données volumineux,
ou pour le cas en ligne. En fait, dans les tâches d’apprentissage machine, on n’utilise la descente de gradient
ordinaire (au lieu de stochastique) que lorsque la fonction à minimiser ne peut pas être décomposée comme
ci-dessus (comme une moyenne).
20
Chapter 4. Introduction à l’apprentissage par descente de gradient
Notes de cours IFT6266 H12, Release 2012.01.05
4.4 Descente de gradient stochastique par mini-lots
C’est une variante de la SGD, dans laquelle on obtient la direction de la mise à jour en prenant la moyenne de
l’erreur sur un petit nombre d’exemples (mini-lot, ou minibatch) B (par exemple, 10, 20 ou 100). L’avantage
principal est qu’au lieu d’effectuer B produits vecteur-matrice, on peut souvent faire un produit matricematrice, la première matrice ayant B rangées, ce qui peut être implémenté de façon beaucoup plus efficace
(parfois 2 à 10 fois plus rapide, selon la taille des matrices).
La SGD par mini-lots a l’avantage de travailler avec un estimé du gradient qui est moins bruité (de moins
en moins bruité lorsque B augmente). Par contre, lorsque la taille du lot augmente, le nombre de mises à
jour diminue par rapport au nombre de calculs faits (à la limite, cela devient très inefficace, autant que la
descente de gradient ordinaire). Il y a un compromis optimal (en terme d’efficacité computationnelle), qui
peut varier selon la distribution des données et les particularités de la classe de fonctions considérée, ainsi
que de la manière dont les calculs sont réalisés (l’architecture matérielle et le parallélisme peuvent faire une
différence).
4.5 Inertie (momentum)
Une autre variation, dont l’esprit est similaire à celui de la SGD par mini-lots, est l’utilisation d’un terme
dit d’inertie (momentum): l’idée est de calculer à la volée une moyenne mobile des gradients précédents, et
d’utiliser cette moyenne mobile, et non le gradient de l’exemple courant, dans la formule de mise à jour. La
moyenne mobile est généralement une moyenne mobile exponentielle :
∆θk+1 = α∆θk + (1 − α)
∂L(θk , z)
∂θk
où α est un hyper-paramètre contrôlant le poids relatif des gradients plus ancients par rapport aux plus
récents.
4.6 Choisir l’échéancier du pas de gradient
Si le pas de gradient est trop grand – plus grand que le double de la plus grande valeur propre de la dérivée
seconde (hessienne) de C –, alors les mises à jour font augmenter le coût au lieu de le diminuer. Si le pas
de gradient est trop petit, la convergence est plus lente.
Les choix d’échéancier du pas de gradient (k ) sont les suivants:
• Valeur constante, k = 0 : c’est le choix le plus commun. En théorie, il donne un poids exponentiellement plus grand aux exemples les plus récents, et il est particulièrement adapté dans un environnement
non stationnaire, où la distribution peut changer. Il est très robuste, mais l’erreur arrête de diminué
après un certain temps, alors qu’un pas de gradient plus petit pourrait donner une solution plus précise
(s’approcher un peu plus du minimum).
4.4. Descente de gradient stochastique par mini-lots
21
Notes de cours IFT6266 H12, Release 2012.01.05
τ
. Il est garanti que cet échéancier arrivera à converger asymptotique• Diminution en 1/k : k = 0 τ +k
ment (lorsque k → ∞), car il satisfait aux conditions suivantes :
∞
X
k = ∞
k=1
∞
X
2k < ∞
k=1
Cette garantie est vraie quel que soit τ , mais 0 doit être assez petit pour éviter de diverger (lorsque
l’erreur augmente au lieu de diminuer).
Un des inconvénients est l’ajout d’un nouvel hyper-paramètre τ . Un autre problème est que, malgré
les garanties, un mauvais choix de τ peut entraîner une convergence très lente.
4.7 Graphes de flot, dérivée en chaîne et rétropropagation : calcul
efficace du gradient
Considérons une fonction (dans notre cas, ce sera L(θ, z)) de plusieurs arguments, nous voulons calculer
sa valeur, ainsi que celle de sa dérivée (son gradient) par rapport à certains de ses arguments. Nous allons
décomposer le calcul de la fonction en termes de calculs élémentaires, pour lesquels les dérivées partielles
sont faciles à calculer, formant ainsi un graphe de flot (comme déjà mentionné ici). Un graphe de flot est
un graphe dirigé acyclique, où chaque nœud représente le résultat d’un calcul qui est effectué sur les valeurs
associées aux nœuds du graphe qui lui sont connectés. Le graphe a des nœuds d’entrée (sans prédécesseurs),
et des nœuds de sortie (sans sucesseurs).
Chaque nœud du graphe de flot est associé à une expression symbolique, qui définit comment sa valeur est
calculée à partir des valeurs de ses enfants (les nœuds qui lui servent d’entrées). Nous nous concentrerons
sur l’utilisation des graphes de flot pour un calcul efficace du gradient, plus particulièrement du gradient
d’un nœud de sortie particulier, scalaire (noté L ici, on s’intéresse au gradient d’une fonction d’erreur par
rapport aux paramètres). À chaque nœud, nous associerons :
• la valeur du nœud,
• l’expression symbolique qui spécifie comment calculer la valeur du nœud à partir des valeurs de ses
prédécesseurs (ses enfants),
• la dérivée partielle de L par rapport à la valeur du nœud,
• l’expression symbolique qui spécifie comment calculer la valeur de cette dérivée partielle, à partir des
valeurs de ses prédécesseurs.
Soit L le nœud de sortie scalaire du graphe de flot, considérons un nœud arbitraire u, dont les parent (les
nœuds qui prennent comme entrée la valeur calculée par u) sont vi . En plus de la valeur u (c’est un abus de
notation) associée au nœud u, nous allons aussi associer à chaque nœud u une dérivée partielle : ∂L
∂u .
22
Chapter 4. Introduction à l’apprentissage par descente de gradient
Notes de cours IFT6266 H12, Release 2012.01.05
La règle de dérivation en chaîne spécifie comment la dérivée partielle ∂L
∂u pour un nœud u peut être obtenue,
∂L
de manière récursive, à partir des dérivées partielles ∂v
pour
ses
parents
vi :
i
∂L X ∂L ∂vi
=
∂u
∂vi ∂u
i
Notons que la récursion commence à ∂L
∂L = 1, pour le nœud racine du graphe (dans le cas général, c’est
bien un graphe et non un arbre, car il peut y avoir plusieurs chemins entre un nœud donné et le nœud racine,
i
ou sortie). Notons aussi que chaque ∂v
∂u est une expression (à laquelle correspond une valeur, lorsque les
valeurs d’entrée sont données) associée à un arc du graphe (et chaque arc est associé à une dérivée partielle
de ce type).
On remarque que les calculs de gradient utilisés dans cette méthode vont exactement dans le sens opposé
des calculs utilisés pour calculer L. En fait, on dit que les gradients sont rétropropagés, en suivant les arcs
dans le sens inverse. L’utilisation de cette procédure pour calculer le gradient dans le cas de réseaux de
neurones (sans récurrence) multi-couches est appelée l’algorithme de la rétropropagation du gradient.
Dans l’exemple vu plus tôt, L = sin(a2 + b/a), et il y a deux chemins de a vers L.
Cette méthode nous donne certaines garanties. Si le calcul de L s’exprime par n calculs, matérialisés par
n nœuds (et que le calcul chaque nœud requiert un temps constant) et m arcs, alors le calcul de toutes les
dérivées partielles ∂L
∂u requiert (au plus) O(m) calculs, en utilisant la récursion ci-dessus (en général, le
nombre d’entrées d’un nœud est borné, et c’est aussi O(n)). De plus, c’est aussi une borne inférieure, c’està-dire qu’il n’est pas possible de calculer le gradient plus vite (à une constante additive et multiplicative
près).
Notons enfin qu’il existe de nombreuses manières de calculer ces gradients, et qu’alors que l’algorithme
ci-dessus est le plus rapide, il est facile d’écrire une récursion, apparemment simple, qui serait exponentiellement plus lente, c’est-à-dire en O(2n ). De manière générale, ∂L
∂u peut être écrite comme la somme, sur
tous les chemins du graphe de u à L, du produit des dérivées partielles selon chaque chemin.
Illustrons cela avec un graphe qui a la structure suivante :
xt = f (xt−1 , yt−1 )
yt = g(xt−1 , yt−1 )
où il existe p = n/2 paires de nœuds (xt , yt ), terminant par L
√= nh(xp , yp ), et dont les nœuds d’entrée sont
p
n/2
x0 et y0 . Le nombre de chemins de x0 à L est 2 = 2
= ( 2) . Par construction, à chaque fois que l’on
ajoute une paire de nœuds, le nombre de chemins est doublé.
English version
4.7. Graphes de flot, dérivée en chaîne et rétropropagation : calcul efficace du gradient 23
Notes de cours IFT6266 H12, Release 2012.01.05
24
Chapter 4. Introduction à l’apprentissage par descente de gradient
CHAPTER
FIVE
INTRODUCTION AUX PERCEPTRONS
MULTI-COUCHES (RÉSEAUX DE
NEURONES À PROPAGATION AVANT)
On appelle réseau de neurone “à propagation avant” (feedforward neural network) un réseau de neurone
sans connection récurrente.
5.1 Réseaux de neurones multi-couches
Un perceptron multi-couches (PMC, ou multi-layer perceptron, MLP), ou réseau de neurones multi-couches,
définit une famille de fonctions. Considérons d’abord le cas le plus classique, celui d’un réseau de neurones
à une couche cachée, qui associe à un vecteur de dimension d un vecteur de longueur m (par exemple, pour
effectuer une régression) :
g(x) = b + W tanh(c + V x)
où :
• x est un vecteur de longueur d (l’entrée) ;
• V est une matrice k × d (les poids de la couche d’entrée vers la couche cachée) ;
• c est un vecteur de longueur k (les biais de la couche cachée) ;
• b est un vecteur de longueur m (les biais de la couche de sortie) ;
• W est une matrice m × h (les poids de la couche cachée vers la couche de sortie).
La fonction h(x) = tanh(x + V x), qui retourne un vecteur, est appelée la sortie de la couche cachée.
Notons que dans le réseau ci-dessus, la sortie est une transformation affine de la couche cachée. Une nonlinéarité peut être appliquée par dessus dans certaines architectures. Les éléments de la couche cachée sont
appelés unités cachées.
Il est possible d’appliquer à nouveau le même genre de transformation à h(x) elle-même, avec des
paramètres (biais et poids) différents. Cela donnerait un réseau de neurones multi-couches (à propagation avant) avec deux couches cachées. De manière plus générale, on peut construire un réseau de neurones
profond en empilant plusieurs de ces couches. Chacune des couches peut avoir une taille différente (le k
25
Notes de cours IFT6266 H12, Release 2012.01.05
utilisé ci-dessus). Une variante commune est l’ajout de connexions directes, c’est-à-dire qu’une couche
peut prendre comme entrée à la fois la couche précédente et d’autres couches plus basses (plus proches de
l’entrée).
5.2 Critères d’entraînements communs et non-linéarités de sortie
Soit f (x) = r(g(x)), où r représente la fonction non-linéaire de sortie. En apprentissage supervisé, la sortie
f (x) peut être comparée avec une valeur cible, y, par une fonction d’erreur, L(f, (x, y)). Voici quelques
fonctions d’erreur utilisées communément, avec la non-linéarité de sortie correspondante :
• Pour une régression
P (L2) ordinaire : pas de non-linéarité (r(a) = a), erreur quadratique L(f, (x, y)) =
kf (x) − yk2 = i (fi (x) − yi )2 .
• Pour une régression
P médiane (L1) : pas de non-linéarité (r(a) = a), erreur absolue : L(f, (x, y)) =
|f (x) − y|1 = i |fi (x) − yi |.
• Pour la classification probabiliste à deux classes : la non-linéarité est la sigmoïde logistique (r(a) =
sigmoid(a) = 1/(1 + e−a ), appliquée élément par élément), et l’erreur est l’entropie croisée (crossentropy) L(f, (x, y)) = −y log f (x) − (1 − y) log(1 − f (x)), pour y binaire. Notons que la sortie de
la sigmoide f (x) est dans l’intervalle (0, 1), et correspond à un estimateur de P (y = 1|x). La classe
1 est prédite si f (x) > 21 .
• Pour la classification binaire multiple : chaque élément du vecteur de sortie est traité comme ci-dessus.
• Pour la classification dure à deux classes, avec l’erreur charnière (hinge loss) : pas de non-linéarité, et
l’erreur charnière est L(f, (x, y)) = max(0, 1−(2y−1)f (x)) (ici aussi, pour y binaire). C’est l’erreur
utilisée par les classifieurs comme les machines à vecteurs de support (support vector machines, SVM).
• Le cas ci-dessus peut être généralisé à des classes multiples, en considérant séparément la classification binaire de chaque classe contre toutes les autres.
• PourP
la classification probabilistique multi-classes : la non-linéarité est le softmax (ri (a) =
eai / j eaj , avec une sortie
P par classe), l’erreur est la log-vraisemblance négative, L(f, (x, y)) =
− log fy (x). Notons que i fi (x) = 1 et que 0 < fi (x) < 1. Notons aussi que c’est équivalent à
l’entropie croisée dans le cas de 2 classes (la sortie pour la deuxième classe est en faite redondante).
5.3 L’algorithme de rétropropagation
Il s’agit simplement d’appliquer l’algorithme récursif de calcul du gradient, vu précédemment, au graphe
formé par le PMC, avec un nœud par unité d’entrée, par unité cachée, et par unité de sortie. Notons que
chaque paramètre (biais ou poids) correspond aussi à un nœud.
Voici quelques conventions de notation pour les PMC avec plus d’une couche cachée. On note hi le vecteur
de sortie de la couche i, en commençant par h0 (x) = x (l’entrée), jusqu’à la couche de sortie, hK , qui
produit la prédiction, ou sortie, du réseau.
Avec des unités tanh (dont la fonction d’activation est la tangente hyperbolique) dans les couches cachées,
nous avons (en utilisant la notation matricielle) :
• Pour k = 1 à K − 1:
26
Chapter 5. Introduction aux perceptrons multi-couches (réseaux de neurones à
propagation avant)
Notes de cours IFT6266 H12, Release 2012.01.05
– hk = tanh(bk + Wk hk−1 )
où bk est un vecteur de biais, et Wk est une matrice de poids, connectant la couche k − 1 à la
couche
k. Le calcul scalaire associé à une unité donnée i de la couche k est hk,i = tanh(bk,i +
P
W
k,i,j hk−1,j ).
j
Dans le cas d’un classifieur probabiliste, nous avons un softmax sur la couche de sortie, c’est-à-dire :
p = hK = softmax(bK + WK hK−1 )
où nous notons la sortie p parce que c’est un vecteur indiquant une distribution de probabilité sur les classes.
L’erreur est
L = − log py
où y est la classe cible, c’est-à-dire que l’on veut maximiser py = P (Y = y|x), qui est un estimateur de la
probabilité conditionnelle de la classe y étant donnée l’entrée x.
Voyons maintenant comment se fait, dans cette structure, l’application récursive de la règle de dérivation en
chaîne dans un graphe de flot. Soit
ak = bk + Wk hk−1
l’argument de la non-linéarité à chaque couche, que nous appellerons le potentiel, notons que (par une
dérivation rapide)
∂(− log py )
= (pi − 1y=i )
∂aK,i
et que
∂ tanh(u)
= (1 − tanh(u)2 ).
∂u
Maintenant, appliquons la méthode de la rétropropagation dans le graphe de flot correspondant. Chaque
paramètre (chaque poids et chaque biais) est un nœud, le potentiel ak,i et la sortie hk,i de chaque neurone
est aussi un nœud.
• On part du nœud de sortie:
∂L
=1
∂L
• Ensuite, on calcule le gradient de L par rapport à chacune des sommes précédant le softmax, aK,i :
∂L
∂L ∂L
=
= (pi − 1y=i ).
∂aK,i
∂L ∂aK,i
5.3. L’algorithme de rétropropagation
27
Notes de cours IFT6266 H12, Release 2012.01.05
• Maintenant, on peut répéter la procédure pour chaque couche. Pour k = K descendant jusqu’à 1 :
– On obtient facilement le gradient de L par rapport aux biais :
∂L
∂L ∂ak,i
∂L
=
=
.
∂bk,i
∂ak,i ∂bk,i
∂ak,i
– On calcule le gradient par rapport aux poids :
∂L ∂ak,i
∂L
∂L
=
=
hk−1,j .
∂Wk,i,j
∂ak,i ∂Wk,i,j
∂ak,i
– On rétropropage le gradient vers la couche précédente, si k > 1 :
X ∂L ∂ak,i
X ∂L
∂L
=
=
Wk,i,j
∂hk−1,j
∂ak,i ∂hk−1,j
∂ak,i
i
i
∂L
∂L ∂hk−1,j
∂L
=
=
(1 − h2k−1,j )
∂ak−1,j
∂hk−1,j ∂ak−1,j
∂hk−1,j
5.4 Régression logistique
La régression logistique est un cas particulier de PMC, qui n’a pas de couche cachée (l’entrée est directement
connectée à la sortie), dont l’erreur est l’entropie croisée (sortie sigmoïde), ou la log-vraisemblance négative
(sortie softmax). C’est un classifieur linéaire probabiliste, et le critère d’entraînement est convexe selon les
paramètres (ce qui garantit qu’il existe un seul minimum, global).
28
Chapter 5. Introduction aux perceptrons multi-couches (réseaux de neurones à
propagation avant)
CHAPTER
SIX
L’ENTRAÎNEMENT DE RÉSEAUX DE
NEURONES MULTI-COUCHES
De nombreux algorithmes pour entraîner des réseaux de neurones multi-couches ont été proposés, mais les
plus couramment utilisés sont à base de gradient.
Deux principes fondamentaux guident les différentes stratégies employées pour entraîner des PMC :
• Entraîner aussi efficacement que possible, c’est-à-dire faire baisser l’erreur d’entraînement aussi vite
que possible, éviter d’être bloqué dans une vallée étroite ou un minimum local de la fonction de coût ;
• Contrôler la capacité, de manière à éviter le sur-apprentissage, afin de minimiser l’erreur de généralisation.
6.1 Problème fondamentalement difficile d’optimisation
L’optimisation du critère d’apprentissage dans les réseaux de neurones multi-couches est difficile car il y
a de nombreux minima locaux. On peut même démontrer que de trouver les poids optimaux est NP-dur.
Cependant on se contente de trouver un bon minimum local, ou même simplement une valeur suffisamment
basse du critère. Comme ce qui nous intéresse est la généralisation et non pas l’erreur d’apprentissage (ce
qu’on minimise n’est pas ce qu’on voudrait vraiment minimiser), la différence entre “près d’un minimum”
et “au minimum” est souvent sans importance. Par ailleurs, comme il n’y a pas de solution analytique au
problème de minimisation, on est forcé de faire cette optimisation de manière itérative.
6.2 Choix de l’architecture
En principe, une manière d’accélérer la descente de gradient est de faire des choix qui rendent la matrice
2C
Hessienne ∂θ∂i ∂θ
mieux conditionnée. La dérivée seconde dans une certaine direction indique la courbure
j
de la fonction de coût dans cette direction. Plus la courbure est grande (vallée étroite) et plus petites doivent
être les mises à jour des paramètres si on éviter que l’erreur augmente. Plus précisement, le pas de gradient
optimal est 1 sur la courbure. On peut voir cela par une simple expansion de Taylor du coût et est derrière
le fameux algorithme de Newton pour l’optimisation. Mettons que l’on soit à θk et que l’on veuille choisir
29
Notes de cours IFT6266 H12, Release 2012.01.05
θk+1 pour qu’il soit un minimum:
C(θk+1 ) = C(θk ) + (θk+1 − θk )C 0 (θk ) + 0.5(θk+1 − θk )2 C 00 (θk )
0=
∂C(θk+1 )
= C 0 (θk ) + (θk+1 − θk )C 00 (θk )
∂θk+1
C 0 (θk )
θk+1 = θk − 00 k
C (θ )
Donc on veut un pas de gradient égal à l’inverse de la dérivée seconde. On peut montrer que le nombre
d’itération d’un algorithme de descente de gradient sera proportionnel au ratio de la plus grande à la plus
petite valeur propre de la matrice Hessienne (avec une approximation quadratique de la fonction de coût).
La raison de base en est que la plus grande valeur propre limite le pas de gradient maximum (on ne peut
aller plus vite que la courbure la plus forte parmi toutes les directions possibles, sinon l’erreur remonte),
mais qu’en utilisant le même pas de gradient dans toutes les directions, la convergence sera la plus longue
dans la direction la plus “plate” (valeur propre la plus petite).
• En théorie une couche cachée suffit, mais cette théorie ne dit pas que cette représentation de la fonction
sera efficace. En pratique cela a été le choix le plus commun avant 2006, sauf pour les réseaux de
neurones à convolution (qui peuvent avoir 5 ou 6 couches par exemple). Parfois on obtient de bien
meilleurs résultats avec 2 couches cachées. En fait on peut obtenir une bien meilleure généralisation
avec encore plus de couches, mais une initialisation aléatoire ne fonctionne pas bien avec plus de
deux couches (mais voir les travaux depuis 2006 sur l’initialisation non-supervisée vorace pour les
architectures profondes).
• Pour la régression ou avec des cibles réelles et non-bornées en général, il vaut généralement mieux
utiliser des neurones linéaires à la couche de sortie. Pour la classification, il vaut généralement mieux
utiliser des neurones avec non-linéralité (sigmoide ou softmax) à la couche de sortie.
• Dans certains cas une connexion directe entre l’entrée et la sortie peut être utile. Dans le cas de
la régression, elle peut aussi être initialisée directement par le résultat d’une régression linéaire des
sorties sur les entrées. Les neurones cachées servent alors seulement à apprendre la partie non-linéaire
manquante.
• Une architecture avec poids partagés, ou bien le partage de certains éléments de l’architecture (e.g.,
la première couche) entre les réseaux associés à plusieurs tâches connexes, peuvent significativement
améliorer la généralisation. Voir aussi la discussion à venir sur les réseaux à convolution.
• Il vaut mieux utiliser une non-linéarité symétrique dans les couches cachées (comme la tanh, et non
pas la sigmoide), afin d’améliorer le conditionnement du Hessien et éviter la saturation des couches
cachées.
6.3 Normalisation des entrées
Il est impératif que les entrées soient de moyenne pas trop loin de zéro et de variance pas trop loin de 1.
Les valeurs en entrées devraient aussi ne pas avoir une magnitude trop grande. On peut faire certaines
transformations monotones non-linéaires qui réduisent les grandes valeurs. Si on a une entrée très grande,
elle fait saturer plusieurs neurones et bloque l’apprentissage pour cet exemple. Les magnitudes (variances)
des entrées de chaque couche devraient aussi être du même ordre quand on utilise un pas de gradient commun
pour toute les couches, pour éviter que l’une des couches devienne le goulot d’étranglement (plus lent à
30
Chapter 6. L’entraînement de réseaux de neurones multi-couches
Notes de cours IFT6266 H12, Release 2012.01.05
entraîner). En fait, dans le cas linéaire, le conditionnement du Hessien est optimal quand les entrées sont
normalisées (donc avec matrice de covariance = identité), ce qui peut se faire en les projetant dans l’espace
des vecteurs propres de la matrice X 0 X, où X est la matrice de dimension nombre d’exemples par nombre
d’entrées.
6.4 Traitement des sorties désirées
Dans le cas d’apprentissage par minimisation d’un coût quadratique, on doit s’assurer que les sorties désirées
• sont toujours dans l’intervalle des valeurs que la non-linéarité de la couche de sortie peut produire (et
sont à peu près normales N(0,1) dans le cas linéaire),
• ne sont pas trop proches des valeurs limites de la non-linéarité de la couche de sortie: pour la classification, une valeur optimale est près d’un des deux points d’inflexion (i.e., les points de courbure
(dérivée seconde) maximale, environ -0.6 et 0.6 pour tanh, 0.2 et 0.8 pour la sigmoide).
• Il vaut mieux utiliser le critère d’entropie croisée (ou la vraisemblance conditionnelle) pour la classification probabiliste, ou bien le critère de marge “hinge” (comme pour le perceptron et les SVMs,
mais en pénalisant les écarts à la surface de décision au-delà d’une marge). Dans le cas multiclasse,
ça donne
X
(−11y=i fi (x) + 1)+ ,
i
où x+ = x1x>0 est la partie positive et fi (x) est la sortie (sans non-linéarité) pour la classe i.
6.5 Codage des sorties désirées et des entrées discrètes
En entrée comme en sortie, on va généralement représenter les variables discrètes par des groupes d’unités
(un groupe de k unités par variable discrète pouvant prendre k valeurs). L’exception pratique est le cas d’une
variable binaire, qu’on encode généralement avec une seule unité. Dans le cas des sorties on va associer à
chaque groupe une distribution discrète (binomiale pour un seul bit, multinomiale pour une variable discrète
générale).
6.6 Algorithme d’optimisation
Quand le nombre d’exemples est grand (plusieurs milliers) la descente de gradient stochastique est souvent
le meilleur choix (surtout pour la classification), en terme de vitesse et en terme de contrôle de la capacité:
il est plus difficile d’avoir de l’overfitting avec la descente de gradient stochastique. En effet, la descente de
gradient stochastique ne tombe pas facilement dans les minima très pointus (qui ne généralisent pas bien, car
une légére perturbation des données déplaçant la surface d’erreur donnerait une très mauvaise performance),
à cause du bruit induit par le pas de gradient et le gradient “bruité”. Ce gradient bruité aide aussi à sortir de
certains minima locaux, pour la même raison.
6.4. Traitement des sorties désirées
31
Notes de cours IFT6266 H12, Release 2012.01.05
Quand la descente de gradient stochastique est utilisée, il est IMPÉRATIF que les exemples soient bien
mélangés: par exemple si on a beaucoup d’exemples consécutifs de la même classe, la convergence sera
très lente. Il suffit de permuter aléatoirement les exemples une fois pour toute, pour éliminer toute dépendence entre les exemples successifs. Avec certaines architectures qui captent des dépendences temporelles
(signaux, musique, parole, séries chrono, vidéo) on a pas le choix de présenter des séquences dont les éléments sont fortement dépendents, mais on peut mélanger les séquences (l’ensemble d’apprentissage est une
suite de séquences).
En principe le pas de gradient devrait être graduellement réduit pendant l’apprentissage pour garantir la
convergence asymptotique. Pour certains problèmes (surtout de classification) cela ne semble pas nécessaire,
0 τ
et peut même nuire. Une cédule de descente raisonnable est par exemple t = t+τ
comme discuté ici. Si on
1
pouvait le calculer, le pas de gradient optimal serait λmax , i.e., l’inverse de la valeur propre la plus grande
de la matrice Hessienne, et le pas de gradient maximal (avant divergence) est deux fois plus grand. Le Cun
propose une méthode pour estimer efficacemenet λmax (voir son tutorial sur le sujet), mais cette technique
ne semble pas courramment utilisée.
Quand le nombre d’exemples (et donc de paramètres) est plus petit, et surtout pour la régression, les techniques du second degré (surtout la technique des gradients conjugués) permettent une convergence beaucoup plus rapide. Ces techniques sont batch (modification des paramètres après calcul de l’erreur et gradient
sur tous les exemples). Ces techniques sont généralement plus facile à ajuster que la descente de gradient
stochastique (moins d’hyper-paramètres ou moins nécessaire de les ajuster par rapport à une valeur par
défaut), mais la généralisation est parfois moins bonne à cause de la facilité de tomber dans des minima
pointus.
Jusqu’à quelques dizaines de milliers d’exemples, la descente de gradient conjugués reste une des meilleures
techniques pour l’optimisation des réseaux de neurones. Au-delà il vaut généralement mieux s’en tenir au
gradient stochastique ou à sa version minibatch.
6.7 Initialisation des paramètres
On ne peut initialiser tous les poids à zéro sans quoi tous les neurones cachés sont condamnés à toujours
faire la même chose (qu’on peut voir par un simple argument de symétrie). On veut aussi éviter la saturation
des neurones (sortie près des limites de la non-linéarité, donc gradient presque 0), mais ne pas être trop près
initialement d’une fonction linéaire. Quand les paramètres sont tous près de 0, le réseau multicouche calcule
une transformation affine (linéaire), donc sa capacité effective par sortie est égale au nombre d’entrées plus
1. En se basant sur ces considérations, le point idéal d’opération du neurone devrait être proche du point
d’inflexion de la non-linéarité (entre la partie linéaire près de l’origine et la partie saturation). Par ailleurs, on
aimerait que la variance moyenne des valeurs des unités cachées soit préservée quand on propage les “activations” de l’entrée vers la sortie, et de la même manière on aimerait que la variance des gradients le soit aussi
quand on les propage de la sortie vers l’entrée. Pour atteindre cet objectif, on
ppeut argumenter
p que les poids
initiaux devraient être initialisés de manière uniforme dans un intervalle [− 6/(ni + no ), 6/(ni + no )],
où ni est le fan-in, i.e., le nombre d’entrées du neurone, le nombre de neurones de la couche précédente, et
no est le fan-out, i.e., le nombre de neurones de la couche visée. Cela suppose que les entrées sont approximativement uniformes dans l’intervalle (-1,1) (et remarquez comme les sorties des unités cachées tanh sont
aussi dans le même intervalle).
32
Chapter 6. L’entraînement de réseaux de neurones multi-couches
Notes de cours IFT6266 H12, Release 2012.01.05
6.8 Contrôle de la saturation
Un des problèmes fréquents pendant l’apprentissage est la saturation des neurones, souvent dûe à une mauvaise normalisation des entrées ou des sorties désirées ou une mauvaise initialisation des poids, ou bien
à l’utilisation de la sigmoide plutôt qu’une fonction de non-linéarité symétrique comme la tanh. On peut
contrôler cela on observant la distribution des sorties des neurones (en particulier, la moyenne des valeurs absolues de la somme pondérée est un bon indice). Quand les neurones saturent fréquemment, l’apprentissage
est bloqué sur un plateau de la fonction de coût dû à de très petits gradients sur certains paramètres (donc un
très mauvais conditionnement du Hessien).
6.9 Contrôle de la capacité effective
La théorie du structural risk minimization de Vapnik nous dit qu’il existe une capacité optimale autour
de laquelle l’erreur de généralisation augmente (c’est un minimum global et unique). Les techniques de
contrôle de la capacité effective visent donc à chercher ce minimum (evidemment de façon approximative).
• early stopping: il s’agit d’une des techniques les plus populaires et les plus efficaces, mais elle
ne marche pas bien quand le nombre d’exemples disponibles est très petit. L’idée est très simple:
on utilise un ensemble d’exemples de validation non-utilisés pour l’apprentissage par descente de
gradient pour estimer l’erreur de généralisation au fur et à mesure que l’apprentissage itératif progresse (normalement, après chaque époque on mesure l’erreur sur l’ensemble de validation). On
garde les paramètres correspondant au minimum de cette courbe d’erreur de généralisation estimée
(et on peut s’arrêter quand cette erreur commence à remonter sérieusement ou qu’un minimum a été
atteint depuis un certain nombre d’époques). Cela a l’avantage de répondre à une des questions difficile de l’optimisation, qui est: quand arrêter? De plus on remarque qu’on a ainsi choisi pour pas
cher (en temps de calcul) un hyper-paramètre important (le nombre d’itérations d’entraînement) qui
touche à la fois l’optimisation et la généralisation.
• contrôle du nombre d’unités cachées: ce nombre influence directement la capacité. Dans ce cas
il faut malheureusement faire plusieurs d’expériences d’apprentissage, à moins d’utiliser un algorithme d’apprentissage constructif (qui rajoute des ressources au fur et à mesure), voir l’algorithme
de cascade-correlation (Fahlman, 1990). On peut utiliser un ensemble de validation ou la validation croisée pour estimer l’erreur de généralisation. Il faut faire attention au fait que cet estimé est
bruité (d’autant plus qu’il y a peu d’exemples de validation). Quand on a plusieurs couches cachées,
choisir le même nombre d’unités par couche semble bien fonctionner. Le prix à payer pour un nombre
d’unités trop grand est surtout que les calculs sont plus longs, car le nombre accru de paramètre est
généralement compensé par le early stopping. Par contre quand le nombre d’unités cachées est trop
petit, l’effet sur l’erreur de généralisation et sur l’erreur d’apprentissage peut être beaucoup plus grand.
On va généralement choisir la taille des réseau de façon empirique, en gardant ces considérations à
l’esprit pour éviter d’avoir à essayer trop de valeurs de la taille.
• weight decay: c’est une méthode de régularisation (pour contrôler la capacité, empêcher l’overfitting)
dont le but est de pénaliser les poids forts. En effet, on peut montrer que la capacité est bornée par la
magnitude des poids du réseau de neurones. On rajoute la pénalité
X
λ
θi2
i
6.8. Contrôle de la saturation
33
Notes de cours IFT6266 H12, Release 2012.01.05
à la fonction de coût. On l’appelle régularisation L2 car on minimise la norme 2 des paramètres.
Certains l’appliquent uniquement aux poids et non pas au biais.
Comme dans le cas précédent, il faut faire plusieurs expériences d’apprentissage et choisir le facteur
de pénalité λ (un hyper-paramètre) qui minimise l’erreur de généralisation estimée. On l’estime
avec un ensemble de validation ou bien par validation croisée.
Une forme de régularisation de plus en plus utilisée comme alternative à la régularisation L2 est
la régularisation L1, qui a comme avantage que les petits paramètres seront carrément amenés à 0,
donnant lieu à un vecteur de paramètres qui est sparse. On va donc minimiser la somme des valeurs
absolues des paramètres.
34
Chapter 6. L’entraînement de réseaux de neurones multi-couches
CHAPTER
SEVEN
LE DÉFI D’ENTRAÎNER DES RÉSEAUX
DE NEURONES PROFONDS
Ceci est un résumé de la section 4.2 de Learning Deep Architectures for AI.
• Plusieurs résultats expérimentaux confirment que l’entraînement de réseaux de neurones (supervisés,
initialisation aléatoire) est plus difficile quand ils sont profonds (3, 4 ou 5 couches cachées) que pas
profonds (1 ou 2 couche cachée). Voir Why Does Unsupervised Pre-training Help Deep Learning?.
L’erreur de généralisation est toujours pire, mais l’erreur d’apprentissage peut être pire ou meilleure.
Cela explique sans doute l’absence des architectures profondes dans la littérature scientifique avant
2006 (sauf pour les réseaux à convolution).
• Explications proposées:
– L’entraînement est coïncé dans des minima locaux, des plateaux, (ou bien sortir de l’apparent
minimum nécessiterait de passer par des zones de courbure trop élevée, où il faudrait un pas de
gradient minuscule pendant très longtemps pour en sortir).
– Plus le réseau est profond, plus le degré de non-linéarité du réseau augmente, ce qui augmenterait
les chances de trouver ces obstacles à l’optimisation.
– On peut plus facilement optimiser les couches près de la sortie, donc les couches inférieures
restent avec des transformations pas très utiles de l’entrée; le gradient se propage ‘mal’ en
descendant les couches, peut-être trop diffusé pour être utile pour guider l’apprentissage des
couches inférieures. Cela est confirmé par le succès des algorithmes comme celui de Weston et al (ICML 2008) qui guident une ou plusieurs couches intermédiaires par un algorithme d’apprentissage non-supervisé. L’hypothèse de diffusion du gradient est cohérente avec
l’observation qu’il est possible d’entraîner avec succès des réseaux à convolution profonds.
• L’avantage pour les réseaux profonds de faire un pré-entraînement non-supervisé est clair. Quelles en
sont les raisons? C’est l’objet principal de Why Does Unsupervised Pre-training Help Deep Learning?
et aussi de la section 4.2 de Learning Deep Architectures for AI. En voici les explications proposées
et les conclusions expérimentales principales:
– L’entraînement non-supervisé utilisé est local à chaque couche (pas besoin d’une optimisation
qui coordonne toutes les couches). Ainsi on remarque qu’une machine de Boltzmann profonde
et un auto-encodeur profond ne fonctionne pas bien non plus si ils ne sont pas pré-entraînés avec
des RBMs (apprentissage local à chaque couche).
35
Notes de cours IFT6266 H12, Release 2012.01.05
– Le pré-entraînement non-supervisé se comporte comme un régulariseur, qui favorise les poids
des couches inférieures qui sont cohérentes avec un bon modèle de la distribution des entrées,
P (x). Il peut nuire si on a pas assez d’unités cachées. L’a priori exploité est que les transformations des entrées qui sont bonnes pour P (x) sont proches de transformations qui sont bonnes
pour P (y|x). Cet a priori est similaire à celui utilisé en apprentissage semi-supervisé (d’un lien
entre P (y|x) et P (x) vues comme des fonctions de x).
– Il semble que le pré-entraînement non-supervisé initialise l’apprentissage supervisé dans une
bonne région de l’espace des paramètres, à partir de laquelle une descente locale trouve une
meilleure solution que celles trouvées à partir d’initialisation aléatoire. Les régions explorées
pendant l’apprentissage supervisé sont très différentes selon que l’on initialise aléatoirement ou
par pré-entraînement non-supervisé.
– Un pré-entraînement supervisé aide mais pas autant qu’un pré-entraînement non-supervisé, peutêtre parce qu’il est trop vorace (élimine des projections qui seront seulement utile dans le contexte d’une architecture plus profonde) et qu’il n’exploite pas l’a priori du pré-entraînement
non-supervisé.
– Contrairement aux régulariseurs habituels, l’effet du pré-entraînement non-supervisé ne disparaît pas quand le nombre d’exemples devient grand, à cause de son lien avec l’optimisation
non-convexe (même avec beaucoup d’exemples, l’apprentissage avec initialisation aléatoire
reste dans une région moins intéressante, minimum local).
– On a pas un problème d’optimisation au sens habituel du terme parce qu’on peut réduire l’erreur
d’apprentissage (et même l’amener à 0 avec suffisamment d’unités cachées dans les couches de
sortie) en optimisant bien les dernières couches, mais pour bien généraliser, il faut aussi que les
couches inférieures soient bien entraînées (à capter des caractéristiques pertinentes des entrées).
– Il faut plus d’unités cachées quand on utilise le pré-entraînement non-supervisé, peut-être parce
que la plupart des unités cachées apprises par entraînement non-supervisé apprennent des fonctions qui ne sont pas très pertinentes à la classification, alors que certaines sont très utiles (plus
utiles que celles obtenues par initialisation aléatoires).
English version
36
Chapter 7. Le défi d’entraîner des réseaux de neurones profonds
CHAPTER
EIGHT
AUTO-ENCODEURS DÉBRUITANTS VS
AUTO-ENCODEURS ORDINAIRES
Un auto-encodeur débruitant est comme un auto-encodeur, à la différence que pendant l’apprentissage,
l’entrée vue par l’auto-encodeur n’est pas l’entrée brute mais une version stochastiquement corrompue.
L’auto-encodeur débruitant est donc entraîné à reconstruire l’entrée originale à partir de la version bruitée.
Voir l’article d’ICML 2008: Denoising Auto-Encoders.
Différences principales entre les auto-encodeurs ordinaires et les auto-encodeurs débruitants:
Aspect
ce que ça fait
critère
d’apprentissage
nombre d’unités
cachées
choix de la
capacité (nombre
d’unités cachées)
choix du nombre
d’itérations
d’apprentissage
choix de la
quantité de
corruption des
entrées
Table 8.1: Comparaison des auto-encodeurs ordinaires et débruitants
Auto-encodeurs ordinaires
Auto-encodeurs débruitants
trouver une représentation compacte
capter la distribution jointe des entrées
déterministe
stochastique
on doit le limiter pour éviter
d’apprendre l’identité
impossible à partir du critère d’erreur
de reconstruction, car toujours plus
basse avec plus d’unités
impossible à partir de l’erreur de
reconstruction: utiliser l’erreur
classification après ajustement
supervisé
non-applicable
on peut avoir autant d’unités cachées que
nécessaire pour capter la distribution
on peut utiliser la moyenne de l’erreur
de reconstruction
on peut faire du early stopping sur
l’erreur de reconstruction moyenne
on ne peut pas utiliser l’erreur de
reconstruction: utiliser l’erreur de
classification après ajustement supervisé
Article plus complet sur les DAE avec une longue série d’expériences:
Pascal Vincent, Hugo Larochelle, Isabelle Lajoie, Yoshua Bengio and Pierre-Antoine Manzagol,
Stacked Denoising Autoencoders: Learning Useful Representations in a Deep Network with a
Local Denoising Criterion (2010), in: Journal of Machine Learning Research, 11:3371–3408
http://www.iro.umontreal.ca/~lisa/publications2/index.php/publications/show/474
English version
37
Notes de cours IFT6266 H12, Release 2012.01.05
38
Chapter 8. Auto-encodeurs débruitants vs auto-encodeurs ordinaires
CHAPTER
NINE
MODÈLES PROBABILISTES POUR LES
ARCHITECTURES PROFONDES
On s’intéresse particulièrement au modèle de la machine de Boltzmann, dont certaines variantes sont utilisées dans des architectures profondes comme les Deep Belief Networks et les Deep Boltzmann Machines.
Voir la section 5 de Learning Deep Architectures for AI.
La distribution de Boltzmann est généralement sur des variables binaires xi ∈ {0, 1}, avec
0
0
ex W x+b x
0
0
x̃ x̃ W x̃ + b x̃
P (x) = P
P
où le dénominateur est simplement un facteur de normalisation pour que x P (x) = 1, et les Wij indiquent
la nature de l’interaction (e.g. positive = xi et xj veulent prendre la même valeur) entre les paires de
variables, et bi indique la propension de xi à prendre la valeur 1.
9.1 Rappels sur les modèles graphiques probabilistes
Voir
Graphical models: probabilistic inference. M. I. Jordan and Y. Weiss. In M. Arbib (Ed.), The Handbook of
Brain Theory and Neural Networks, 2nd edition. Cambridge, MA: MIT Press, 2002.
On peut écrire certaines distributions P (x) pour un vecteur de variables x = (x1 , x2 , . . .) sous la forme
P (x) =
1 Y
ψc (xc )
Z c
où Z est le facteur de normalisation (appelée fonction de partition), et le produit est sur des cliques (des
sous-ensembles xc des éléments du vecteur x), et les ψc (.) sont des fonctions (une par clique) qui indiquent
comment intéragissent les variables de chaque clique.
Un cas particulier où Z peut-être simplifié un peu (factorisé sur les cliques) est celui des modèles dirigés
où les variables sont structurées dans un graphe dirigé acyclique, avec un ordre topologique associant un
39
Notes de cours IFT6266 H12, Release 2012.01.05
ensemble de parents parents(xi ) à chaque variable xi :
Y
P (x) =
Pi (xi |parents(xi ))
i
où donc on voit qu’il y a une clique pour chaque variable et ses parents, i.e., Pi (xi |parents(xi )) =
ψi (xi , parents(xi ))/Zi .
Dans le cas général (représenté avec un graphe non-dirigé), les fonctions de potentiel ψc sont directement paramétrisées, souvent dans l’espace du logarithme de ψc , ce qui donne lieu à la formulation appelée
champs aléatoire de Markov:
P (x) =
1 − Pc Ec (xc )
e
Z
P
où E(x) = c Ec (xc ), comme fonction de x, est appelée fonction d’énergie. La fonction d’énergie de la
machine de Boltzmann est donc un polynôme du second degré en x. La paramétrisation la plus commune
des champs aléatoires de Markov a la forme suivante, qui est log-linéaire:
P (x) =
1 − Pc θc fc (xc )
e
Z
où les seuls paramètres libres sont les θc , et où donc la log-vraisemblance complète (quand x est complètement observé dans chaque exemple) est log-linéaire en les paramètres θ, et on peut facilement montrer
qu’elle est convexe en θ.
9.2 Inférence
Un des obstacles les plus importants à l’application pratique de la plupart des modèles probabilistes est
l’inférence: étant données certaines variables (un sous-ensemble de x), prédire la distribution marginale
(chacune séparément) ou jointe de certaines autres. Soit x = (v, h) avec h (hidden) les variables nonobservées que l’on veut prédire, et v (visible) la partie observée. On voudrait calculer ou tout au moins
échantillonner de
P (h|v).
L’inférence est évidemment utile si certaines des variables sont manquantes, ou simplement si pendant
l’utilisation du modèle, on veuille prédire une variable (par exemple la classe de l’image) étant donnée
d’autres (par exemple l’image). Notons que si le modèle a des variables cachées (jamais observées dans les
données) qu’on ne cherche pas à prédire directement, on devra quand même implicitement marginaliser sur
ces variables (sommer sur toutes les configurations de ces variables).
L’inférence est aussi une composante essentielle de l’apprentissage, soit pour calculer un gradient directement (voir ci-bas le cas de la machine de Boltzmann), soit parce qu’on utilise l’algorithme E-M
(Expectation-Maximization), qui requière une marginalisation sur toutes les variables cachées.
40
Chapter 9. Modèles probabilistes pour les architectures profondes
Notes de cours IFT6266 H12, Release 2012.01.05
En général, l’inférence exacte a un coût de calcul exponentiel dans la taille des cliques du graphe (en fait
de la partie non-observée du graphe), car on doit considérer toutes les combinaisons possibles des valeurs
des variables dans chaque clique. Voir la section 3.4 de Graphical models: probabilistic inference pour un
survol des méthodes exactes d’inférence.
Une forme simplifiée d’inférence consiste à trouver non pas toute la distribution mais seulement le mode (la
configuation de valeurs la plus probable) de la distribution:
h∗ = argmaxh P (h|v)
En anglais on appelle cela l’inférence MAP = Maximum A Posteriori.
9.3 Inférence approximative
Les deux familles principales d’inférence approximative pour les modèles probabilistes sont l’inférence par
MCMC (chaîne de Markov Monte-Carlo) et l’inférence variationnelle.
Le principe de l’inférence variationnelle est le suivant. On va définir un modèle plus simple que le modèle
cible (celui qui nous intéresse), dans lequel l’inférence sera facile, avec un jeu de variables semblables
(mais généralement avec des dépendances plus simples entre elles que dans le modèle cible). On va ensuite
optimiser les paramètres du modèle simple de façon à ce qu’il s’approche le plus possible du modèle cible.
On va finalement faire l’inférence en utilisant le modèle simple. Voir la section 4.2 de Graphical models:
probabilistic inference pour plus de détails et un survol.
9.4 Inférence par MCMC
En général, la loi P (h|v) peut être exponentiellement chère à représenter (en terme du nombre de variables
cachées, car il faut considérer toutes les configurations des h). Le principe de l’inférence par Monte-Carlo est
que l’on va approximer la distribution P (h|v) par des échantillons tirés de cette loi. En effet, en pratique on a
seulement besoin de faire une espérance (par exemple l’espérance du gradient) sous cette loi conditionnelle.
On va donc remplacer l’espérance recherchée par une moyenne sur ces échantillons. Voir la page du site du
zéro sur Monte-Carlo pour une introduction en douceur.
Malheureusement, pour la plupart des modèles probabilistes, même tirer de P (h|v) de manière exacte n’est
pas faisable facilement (en un temps de calcul qui n’est pas exponentiel dans la dimension de h). C’est
pourquoi l’approche la plus générale est basée sur une approximation de l’échantillonage Monte-Carlo,
appelé Chaîne de Markov Monte-Carlo (MCMC en anglais).
Une chaîne de Markov (d’ordre 1) est une suite de variables aléatoires Z1 , Z2 , . . ., telle que Zk est indépendente de Zk−2 , Zk−3 , . . . étant donnée Zk−1 :
P (Zk |Zk−1 , Zk−2 , Zk−3 , . . .) = P (Zk |Zk−1 )
n
Y
P (Z1 . . . Zn ) = P (Z1 )
P (Zk |Zk−1 )
k=2
Le principe du tirage MCMC est que l’on va construire une chaîne de Markov dont la distribution marginale
asymptotique, i.e., la loi de Zn , quand n → ∞, converge vers une distribution cible, telle que P (h|v) ou
P (x).
9.3. Inférence approximative
41
Notes de cours IFT6266 H12, Release 2012.01.05
9.5 Échantillonage de Gibbs
Il existe de nombreuses méthodes d’échantillonage MCMC. Celle la plus couramment utilisée pour les
architectures profondes est la méthode d’échantillonage de Gibbs (Gibbs sampling). Elle est simple et
présente une certaine analogie avec le fonctionnement plausible du cerveau, où chaque neurone décide
d’envoyer des impulsions avec un certain aléa, en fonction des impulsions qu’il reçoit d’autres neurones.
Supposons que l’on veuille échantillonner de la loi P (x) où x est un groupe de variables xi (et optionnellement on pourrait avoir des variables conditionnantes, mais elles ne changent rien à la procédure à part de conditionner tout, donc nous les ignorons dans la notation ici). On notera x−i =
(x1 , x2 , . . . , xi−1 , xi+1 , . . . , xn ), soit toutes les variables de x sauf xi . L’échantillonage de Gibbs ordinaire
est donné par l’algorithme suivant:
• Choisir un x initial de manière arbitraire (aléatoire ou pas)
• Pour chaque pas de la chaîne de Markov
– Itérer sur chaque xk dans x
* Tirer xk de la loi conditionnelle P (xk |x−k )
Dans certains cas on peut regrouper les variables dans x en blocs ou groupes de variables tels que tirer d’un
groupe étant donnés les autres est facile. Dans ce cas il est avantageux d’interpréter l’algorithme ci-haut
avec xi le i-eme groupe plutôt que la i-eme variable. On appelle cela l’échantillonage de Gibbs par blocs.
9.6 Le Gradient dans un Champs de Markov Log-Linéaire
Voir Learning Deep Architectures for AI pour les dérivations en détail.
Les champs de Markov log-linéaires sont des modèles probabilistes non-dirigés où la fonction d’énergie est
linéaire en terme des paramètres θ du modèle:
P (x) ∝ e−
P
i θi fi (x)
où les fi (.) sont appelées les statistiques suffisantes du modèles car les espérances E[fi (x)] sont suffisantes
pour caractériser la distribution et estimer les paramètres. Notons que eθi fi (x) = ψi (x) est associé à chaque
clique du modèle (en général seulement un sous-vecteur de x influence fi (x)).
Revenons au statistiques suffisantes. On peut montrer que le gradient de la log-vraisemblance se développe
ainsi:
X
−∂ log P (x)
= fi (x) −
P (x)fi (x)
∂θi
x
et le gradient moyen sur les exemples d’apprentissage xt est donc
X
1 X −∂logP (xt )
1X
=
fi (xt ) −
P (x)fi (x)
T t
∂θi
T t
x
42
Chapter 9. Modèles probabilistes pour les architectures profondes
Notes de cours IFT6266 H12, Release 2012.01.05
On voit donc que le gradient est annullé quand la moyenne des statistiques suffisantes sur la distribution
d’apprentissage égale leur espérance sur le modèle P.
Malheureusement, même calculer le gradient est difficile. On ne veut pas sommer sur tous les x possibles,
mais heureusement, on peut obtenir une approximation Monte-Carlo en faisant un ou plusieurs tirages de
P (x), ce qui donne un gradient stochastique. En général, cependant, même faire un tirage sans biais de
P (x) est exponentiellement coûteux, et on utilise donc une méthode MCMC.
On appelle ‘partie positive’ la partie du gradient dûe au numérateur de la probabilité (−fi (x)), et ‘partie
négative’ la partie correspondant au gradient de la fonction de partition (le dénominateur).
9.7 Marginalisation sur les variables cachées
Quand certaines variables sont cachées, le gradient devient un peu plus compliqué car il faut marginaliser
sur les variables cachées. Soit x = (v, h), avec v la partie visible et h la partie cachée, avec les statistiques
des fonctions des deux, fi (v, h). Le gradient moyen de la moins log-vraisemblance des données observées
devient
X
1 X −∂ log P (vt )
1 XX
P (h|vt )fi (vt , h) −
P (v, h)fi (v, h).
=
T t
∂θi
T t
h
h,v
Il faudra donc dans ce cas généralement se résoudre à du MCMC non seulement pour la partie négative mais
aussi pour la partie négative, pour échantillonner P (h|vt ).
9.7. Marginalisation sur les variables cachées
43
Notes de cours IFT6266 H12, Release 2012.01.05
44
Chapter 9. Modèles probabilistes pour les architectures profondes
CHAPTER
TEN
LA MACHINE DE BOLTZMANN
La machine de Boltzmann est un modèle probabiliste non-dirigé, une forme particulière de champs de
Markov log-linéaire dans laquelle certaines variables sont observées (parfois) et d’autres ne le sont jamais
(les variables cachées), et où la fonction d’énergie est un polynôme du second degré par rapport aux
variables:
E(x) = −d0 x − x0 Ax
La machine de Boltzmann classique a des variables binaires et l’inférence est faite par une MCMC de Gibbs,
ce qui nécessite de faire des tirages de P (xi |x−i ), et l’on peut montrer facilement que
P (xi = 1|x−i ) = sigmoid(di + ωi x−i )
où ωi est la i-ème rangée de A sauf le i-ème élément, et dans ce modèle la diagonale de A est 0. On voit le
lien avec les réseaux de neurones.
10.1 La Machine de Boltzmann Restreinte
En anglais Restricted Boltzmann Machine ou RBM, c’est une machine de Boltzmann sans connections
latérales entre les vi ou entre les hi . La fonction d’énergie devient donc
E(v, h) = −b0 h − c0 v − v 0 W h.
où la matrice A est donc pleine de zéro sauf dans sa sous-matrice W. L’avantage de cette restriction dans la
connectivité est que l’inférence P (h|v) (et aussi P (v|h)) devient très facile et analytique et se factorise:
Y
P (h|v) =
P (hi |v)
i
et
P (v|h) =
Y
P (vi |h)
i
45
Notes de cours IFT6266 H12, Release 2012.01.05
Dans le cas où les variables (= unités) sont binaires, on obtient encore la formule de neurone sigmoidal:
X
P (hj = 1|v) = sigmoid(bj +
Wij vi )
i
P (vi = 1|h) = sigmoid(ci +
X
Wij hj )
j
Un autre avantage de la RBM c’est qu’on peut calculer analytiquement P (v) a une constante près (cette
constante est la fonction de partition Z). Cela permet aussi de définir une généralisation de la notion de
fonction d’énergie au cas où on veut marginaliser sur les variables cachées: l’énergie libre (free energy,
aussi inspirée de considérations physiques):
P −E(v,h)
e
e−F E(v) X
P (v) =
=
P (v, h) = h
Z
Z
h
X
F E(v) = − log
e−E(v,h)
h
et dans le cas des RBMs, on a
F E(v) = −c0 v −
X
log
i
X
0
ehi (bi +v W.i )
hi
où la somme sur hi est une somme sur les valeurs que les variables cachées peuvent prendre, ce qui, dans le
cas d’unités binaires donne
X
0
F E(v) = −c0 v −
log(1 + ebi +v W.i )
i
0
F E(v) = −c v −
X
softplus(bi + v 0 W.i )
i
10.2 Gibbs dans les RBMs
Bien que tirer de P (h|v) est facile et immédiat dans une RBM, tirer de P (v) ou de P (v, h) ne peut pas se
faire de manière exacte et se fait donc généralement par une MCMC, la plus commune étant la MCMC de
Gibbs par bloc, où l’on prend avantage du fait que les tirages P (h|v) et P (v|h) sont faciles:
v (1) ∼ exemple d0 apprentissage
h(1) ∼ P (h|v (1) )
v (2) ∼ P (v|h(1) )
h(2) ∼ P (h|v (2) )
v (3) ∼ P (v|h(2) )
...
(k)
Pour visualiser les données générées à l’étape k, il vaut mieux utiliser les espérances (i.e. E[vi |h(k−1) ] =
(k)
P (vi = 1|h(k−1) )) qui sont moins bruitées que les échantillons v (k) eux-mêmes.
46
Chapter 10. La Machine de Boltzmann
CHAPTER
ELEVEN
ENTRAÎNEMENT DES RBMS
Le gradient exact sur les paramètres d’une RBM (pour un exemple v) est
∂ log P (v)
= v 0 E[h|v] − E[v 0 h]
∂W
∂ log P (v)
= E[h|v] − E[h]
∂b
∂ log P (v)
= v − E[v]
∂c
où les espérances sont prises sur la loi de la RBM. Les espérances conditionnelles sont calculables analytiquement (puisque E[hi |v] = P (hi = 1|v) = sortie du neurone caché, pour des hi binaires) mais les
espérances inconditionnelles doivent se faire par MCMC.
11.1 Divergence Contrastive
La première et plus simple approximation de E[v 0 h], i.e., pour obtenir des ‘exemples négatifs’ (pour la
‘partie négative’ du gradient), consiste à faire une courte chaîne de Gibbs (de k étapes) commencée sur
un exemple d’apprentissage. On appelle cet algorithme CD-k (Contrastive Divergence with k steps). Voir
l’algorithme 1 dans Learning Deep Architectures for AI:
0
0
W ← W + (v (1) ĥ(1) − v (2) ĥ(2) )
b ← b + (ĥ(1) − ĥ(2) )
c ← c + (v (1) − v (2) )
où est le pas de gradient, et l’on réfère à la notation de la chaîne de Gibbs des RBMs ci-haut, avec ĥ(1)
(1)
(2)
(2)
dénote le vecteur des probabilités P (hi = 1|v1 ) et de la même manière ĥi = P (hi = 1|v (2) ).
Ce qui est étonnant c’est que même avec k=1, on obtient des RBMs qui fonctionnent bien dans le sens
qu’elles extraient des bonnes caractéristiques des entrées (ce qu’on peut vérifier visuellement en regardant
les filtres, les reconstructions stochastiques après 1 étape de Gibbs, ou bien quantitativement en initialisant
chaque couche d’un réseau profond avec W et b par pré-entraînement de la RBM associée à chaque couche).
On peut montrer que CD-1 est très proche de l’entraînement d’un auto-encodeur par minimisation de l’erreur
de reconstruction, et on voit que l’erreur de reconstruction diminue de manière assez monotone pendant
l’entraînement par CD-1.
47
Notes de cours IFT6266 H12, Release 2012.01.05
On peut aussi montrer que CD-k tends vers le vrai gradient (en espérance) quand k devient grand, mais à ce
moment on multiplie le temps de calcul par k.
11.2 Divergence Contrastive Persistente
Pour obtenir un estimateur moins biaisé du vrai gradient sans augmenter beaucoup le temps de calcul, on
peut utiliser l’algorithme de Divergence Contrastive Persistente (en anglais Persistent Contrastive Divergence, ou PCD). Plutôt que de redémarrer une chaîne de Gibbs après avoir vu chaque exemple v, il s’agit
de garder une chaîne de Gibbs toujours en activité pour obtenir nos échantillons d’exemples négatifs. Cette
chaîne est un peu particulière car ses probabilités de transition changent (lentement), au fur et à mesure
qu’on met à jour les paramètres de la RBM. Soit (v − , h− ) l’état de notre chaîne négative. L’algorithme
d’apprentissage est le suivant:
ĥi = P (hi = 1|v)
∀i, v̂i− = P (vi = 1|h− )
v − ∼ v̂ −
−
∀i, hbi = P (hi = 1|v − )
h− ∼ ĥ−
0
W ← W + (v ĥ0 − v − ĥ− )
b ← b + (ĥ − ĥ− )
c ← c + (v − v̂ − )
On trouve expérimentalement que PCD est meilleur en terme de génération d’exemples (et en terme de
vraisemblance log P (v)) que CD-k, et est moins sensible à l’initialisation de la chaîne de Gibbs.
48
Chapter 11. Entraînement des RBMs
CHAPTER
TWELVE
RBMS EMPILÉS ET DBNS
On peut utiliser les RBMs comme les auto-encodeurs, pour pré-entraîner de manière non-supervisée un
réseau de neurones profonds, pour ensuite finaliser son entraînement de manière supervisée habituelle. On
va donc empiler les RBMs, la couche cachée de l’un (étant donnée son entrée), i.e., les P (h|v) ou bien des
h ∼ P (h|v), devenant l’entrée de la couche suivante.
Le pseudo-code de l’entraînement vorace couche par couche d’une pile de RBMs est présenté dans la section
6.1 (algorithme 2) de Learning Deep Architectures for AI. Pour entraîner la k-ième RBM, on propage soit
des échantillons (h ∼ P (h|v)) ou des posterieurs (P (h|v)) à travers les k-1 premières RBMs, et on les
utilise comme données d’entraînement pour la k-ième RBM. On les entraîne donc une à la fois: une fois
qu’on arrête l’entraînement de la k-ième, on peut procéder à la k+1 ième.
Une RBM a la même paramétrisation qu’une couche classique de réseau de neurones (avec des unités
sigmoides), à la différence près qu’on utilise seulement les poids W et les biais b des unités cachées (car on
a seulement besoin de P (h|v) et non pas de P (v|h)).
12.1 Deep Belief Networks
On peut aussi considérer un empilement de RBMs de manière générative, et l’on appelle ce modèle le Deep
Belief Network:
!
`−2
Y
P (x, h1 , . . . , h` ) =
P (hk |hk+1 ) P (h`−1 , h` )
k=0
h0
où l’on dénote x =
et la variable (vecteur) aléatoire associée à la couche k est hk . Les deux dernières
couches ont une distribution jointe qui est donnée par une RBM (la dernière de la pile). Les RBMs du
dessous servent seulement à définir les probabilités conditionnelles P (hk |hk+1 ) du DBN, où hk joue le rôle
d’unités visibles et hk+1 joue celui des unités cachées dans la RBM k+1.
Échantilloner d’un DBN se fait donc ainsi:
• échantillonner un h`−1 de la RBM du dessus (numéro `), par exemple en faisant du Gibbs
• pour k de ` − 1 à 1
– échantillonner les unités visibles (hk ) étant données les unités cachées (hk+1 ) dans la RBM
k
• retourner le dernier échantillon produit hk , qui est le résultat de la génération par le DBN
49
Notes de cours IFT6266 H12, Release 2012.01.05
12.2 Dépliement d’une RBM et équivalence RBM - DBN
On peut montrer (voir section 8.1 de Learning Deep Architectures for AI.) qu’une RBM correspond à un
DBN avec une architecture particulière, dont les poids sont partagés entre toutes les couches: le niveau 1 du
DBN utilise les poids W de la RBM, le niveau 2 utilise les poids W’, le niveau 3 utilise les poids W, etc. en
alternant entre W et W’. La dernière paire de couches du DBN est une RBM avec les poids W ou W’ selon
qu’on déplie un nombre impair ou pair de couches. Remarquons que dans cette équivalence, le DBN a des
tailles de couches qui alternent (nombre de visibles de la RBM, nombre de cachées de la RBM, nombre de
visibles de la RBM, etc.).
En fait on peut continuer le dépliement d’une RBM jusqu’à l’infini et obtenir un réseau dirigé infini à poids
partagés, équivalent. Voir la figure 13 de la même section 8.1. On peut voir que ce réseau infini correspond
exactement à une chaîne de Gibbs (infinie) qui culmine (finit) sur la couche visible de la RBM originale,
i.e., qui génère les mêmes exemples. Les couches paires correspondent à échantillonner P(v|h) (de la RBM
originale) et les couches impaires à échantillonner P(h|v).
Finalement, on peut montrer que si on prend une RBM, qu’on la déplie une fois (en miroir), le fait de continuer l’entraînement de la nouvelle RBM du dessus (initialisée avec W’) va maximiser une borne inférieure sur
la vraisemblance du DBN correspondant. Dans le passage d’une RBM à un DBN, on remplace la marginale
P(h) de la RBM (qui est obtenue implicitement à travers les paramètres de la RBM, et par exemple une
chaîne de Gibbs dans la RBM) par la distribution générée par la partie de DBN au-dessus de cette RBM (le
DBN formé de toutes les couches au-dessus de h), puisque ce h correspond aux unités visibles de ce DBN.
La démo est simple et instructive, et utilise la lettre Q pour les probabilités selon la RBM (du bas) et la lettre
P pour les probabilités selon la DBN obtenue en modélisant les h différemment (i.e. en remplaçant Q(h) par
P(h)). On remarque aussi que P(x|h)=Q(x|h), mais ce n’est pas vrai pour P(h|x) et Q(h|x).
!
X
X
P (x, h)
log P (x) =
Q(h|x) log P (x) =
Q(h|x) log
P (h|x)
h
h
X
P (x, h) Q(h|x)
log P (x) =
Q(h|x) log
P (h|x) Q(h|x)
h
X
X
Q(h|x)
log P (x) = HQ(h|x) +
Q(h|x) log P (x, h) +
Q(h|x) log
P (h|x)
h
h
X
log P (x) = KL(Q(h|x)||P (h|x)) + HQ(h|x) +
Q(h|x) (log P (h) + log P (x|h))
h
log P (x) ≥
X
Q(h|x) (log P (h) + log P (x|h))
h
On voit donc effectivement que l’on peut augmenter la borne inférieure (dernière ligne) en faisant de
l’entraînement maximum de vraisemblance de P(h) utilisant comme données d’entraînement des h tirés
de Q(h|x), où x est tiré de la distribution d’entraînement de la RBM du dessous. Étant donné qu’on a découplé les poids du dessous de ceux du dessus, on ne touche pas à la RBM du dessous (P(x|h) et Q(h|x)), on
modifie seulement P(h).
50
Chapter 12. RBMs empilés et DBNs
Notes de cours IFT6266 H12, Release 2012.01.05
12.3 Inférence approximative dans les DBNs
Contrairement à la RBM, l’inférence dans les DBNs (choisir les unités cachées étant données les entrées
visibles) est très difficile. Étant donné qu’on initialise les DBNs comme une pile de RBMs, on utilise en
pratique l’approximation suivante: on échantillonne les hk étant donné les hk−1 en utilisant les poids du
niveau k. Il s’agirait de l’inférence exacte si c’était effectivement une RBM isolée, mais ça ne l’est plus avec
le DBN.
On a vu que c’est une approximation à la section précédente parce que la marginale P(h) (du DBN) diffère
de la marginale Q(h) (de la RBM du dessous), après qu’on modifie les poids du dessus qui ne sont plus la
transposée des poids du dessous, et donc P(h|x) diffère de Q(h|x).
12.4 Deep Boltzmann Machine
Finalement, on peut aussi utiliser un empilement de RBMs pour initializer une machine de Boltzmann profonde (Salakhutdinov et Hinton, AISTATS 2009: http://www.mit.edu/~rsalakhu/papers/dbm.pdf). Il s’agit
d’une machine de Boltzmann organisée en couches, où chaque couche est seulement connectée à celle du
dessous et celle du dessus.
On remarque que les poids sont en quelque sorte deux fois trop gros quand on fait cette initialisation, car
maintenant chaque unité reçoit son entrée de la couche au-dessus d’elle et aussi de la couche d’en dessous,
alors que dans la RBM originale c’était soit de l’un, ou de l’autre. Salakhutdinov propose donc de diviser les
poids par deux quand on fait le passage de l’empilement de RBMs vers la machine de Boltzmann profonde.
Il est intéressant de noter aussi que selon Salakhutdinov, il est crucial de faire l’initialisation de la machine
de Boltzmann profonde à partir de l’empilement de RBMs, plutôt qu’à partir de poids aléatoires. Cela
suggère que la difficulté d’entraînement des réseaux MLP profonds déterministes ne leur est pas unique, et
qu’une difficulté semblable se retrouve dans les machines de Boltzmann profondes. Dans les deux cas, le fait
d’initialiser chaque couche selon un entraînement local à la couche semble aider beaucoup. Salakutdinov
obtient des résultats meilleurs avec sa machine de Boltzmann profonde qu’avec un DBN équivalent, mais
l’entraînement est plus long.
Voir cet article:
An Efficient Learning Procedure for Deep Boltzmann Machines. Ruslan Salakhutdinov and Geoffrey Hinton. MIT Technical Report MIT-CSAIL-TR-2010-037, 2010 http://www.mit.edu/~rsalakhu/papers/MITCSAIL-TR-2010-037.pdf
Pour accélérer l’inférence dans les DBMs:
Efficient Learning of Deep Boltzmann Machines. Ruslan Salakhutdinov and Hugo Larochelle. AI and
Statistics, 2010 http://www.mit.edu/~rsalakhu/papers/dbmrec.pdf
Version en français
12.3. Inférence approximative dans les DBNs
51
Notes de cours IFT6266 H12, Release 2012.01.05
52
Chapter 12. RBMs empilés et DBNs
CHAPTER
THIRTEEN
CONTENTS
13.1 IFT6266: Course Outline
The following table contains a summary of each class of the course (click on the date for more details for
each entry):
53
Notes de cours IFT6266 H12, Release 2012.01.05
Date
April 2nd
March
29th
March
26th
Subject
Exam
Review session
To read
Convolutional networks
March
22nd
March
19th
March
15th
March
12th
March 1st
February
27th
February
20th+23rd
February
13rd+16th
February
6th+9th
February
2nd
Gradient propagation
DAE vs AE
Challenges for deep networks
Neocognitron article.
LeNet article.
Convolutional networks tutorial.
final part of Yoshua Bengio’s presentation.
Denoising autoencoders vs. ordinary autoencoders.
The challenges of training deep neural networks.
January
30th
January
26th
January
23rd
January
19th
January
16th
January
12th
January
9th
January
5th
Probabilistic models
54
Pre-training
Contracting AE,
DBMs
Yoshua Bengio’s presentation.
Dumitru Erhan presentation.
Articles on Contracting Auto-Encoders and on Manifold
Tangent Classifier
Article on Contracting Auto-Encoders
The Boltzmann Machine.
DBNs
Stacked RBMs and DBNs.
RBMs
Restricted Boltzmann Machines.
Probabilistic models
Computing gradients
Probabilistic models Probabilistic models for deep
architectures.
Introduction to Probabilistic models for deep
architectures.
Jobman.
Introduction to Probabilistic models for deep
architectures.
Section 4.6 de Learning Deep Architectures for AI.
Denoising Auto-Encoders
Documentation on python, numpy, et Theano. Logistic
regression tutorial. Notes on training MLPs.
Efficient Backprop. Introduction to the Deep Learning
Tutorials. The Getting Started tutorial.
Notes on computing gradients.
Introduction to deep
networks
Introduction to deep
networks
Introduction to this class
Introduction to Machine
Learning
Introduction to deep networks, Sec. 1 of Learning Deep
Architectures for AI. Notes on gradient based learning.
Introduction to deep networks, Sec. 1 of Learning Deep
Architectures for AI.
course outline .
slides . Introduction to Machine Learning, Sec. 1 and 2 of
Scaling Learning Algorithms towards AI.
Contracting AE and MTC
Probabilistic models
Launching jobs
Auto-encoders, DAE
python, numpy, Theano
Logistical regression
Neural networks
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
13.1.1 April 2nd
• Open book theoretical exam
13.1.2 March 29th
• Review session before the exam
13.1.3 March 26th
• Convolutional neural networks
– Neocognitron
– LeNet
– Convolutional neural networks tutorial
13.1.4 March 22nd
• Gradient propagation for deep neural networks: Yoshua Bengio’s presentation, May 2010.
• Denoising autoencoders vs. ordinary autoencoders.
13.1.5 March 19th
• The challenges of training deep neural networks.
13.1.6 March 15th
• Understanding the effects of non-supervised pre-training: Yoshua Bengio’s presentation, May 2010.
• Understanding the effects of non-supervised pre-training: Dumitru Erhan’s presentation, March 2010.
13.1.7 March 12th
• Articles on Contracting Auto-Encoders and on Manifold Tangent Classifier
13.1.8 March 1st
• Article on Contracting Auto-Encoders.
13.1.9 February 27th
• The Boltzmann Machine.
13.1. IFT6266: Course Outline
55
Notes de cours IFT6266 H12, Release 2012.01.05
13.1.10 February 20th+23rd
• Stacked RBMs and DBNs.
13.1.11 February 13rd+16th
• Restricted Boltzmann Machines.
13.1.12 February 6th+9th
• More of Probabilistic models for deep architectures.
13.1.13 February 2nd
• More on introduction to Probabilistic models for deep architectures.
13.1.14 January 30th
• Introduction to Probabilistic models for deep architectures.
13.1.15 January 26th
• On training neural networks:
– Controlling capacity Training Multi-Layer Neural Networks
• Auto-Encoders
– Survery on auto-encoders: section 4.6 of Learning Deep Architectures for AI
– Denoising auto-encoders tutorial
13.1.16 January 23rd
• Introduction to Multi-Layer Perceptrons (Feedforward Neural Networks)
– The Back-Propagation Algorithm
– Logistic Regression
– Training Multi-Layer Neural Networks
• Introduction
to
the
Deep
<http://deeplearning.net/tutorial/intro.html>‘_
56
Learning
Tutorials
(using
Theano)
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
13.1.17 January 19th
• Introduction to Multi-Layer Perceptrons (Feedforward Neural Networks)
– Multi-Layer Neural Networks
– Most Common Training Criteria and Output Non-Linearities
• Introduction to Theano
• Introduction
to
the
Deep
<http://deeplearning.net/tutorial/intro.html>‘_
Learning
Tutorials
(using
Theano)
13.1.18 January 16th
• Introduction to Gradient-Based Learning
– Flow Graphs, Chain Rule and Backpropagation: Efficient Computation of the Gradient
13.1.19 January 12th
• Introduction to deep learning
– Breakthrough in Learning Deep Architectures
• Introduction to Gradient-Based Learning
– The Gradient
– Gradient Descent
– Stochastic Gradient Descent
13.1.20 January 9th
• Introduction to Deep Learning Algorithms
13.1.21 January 5th
• Introduction and motivation of the course as well as evaluation methodology (course outlie)
• Very Brief Introduction to Machine Learning for AI
Version en français
13.2 Very Brief Introduction to Machine Learning for AI
The topics summarized here are covered in these slides.
13.2. Very Brief Introduction to Machine Learning for AI
57
Notes de cours IFT6266 H12, Release 2012.01.05
13.2.1 Intelligence
The notion of intelligence can be defined in many ways. Here we define it as the ability to take the right
decisions, according to some criterion (e.g. survival and reproduction, for most animals). To take better
decisions requires knowledge, in a form that is operational, i.e., can be used to interpret sensory data and
use that information to take decisions.
13.2.2 Artificial Intelligence
Computers already possess some intelligence thanks to all the programs that humans have crafted and which
allow them to “do things” that we consider useful (and that is basically what we mean for a computer to take
the right decisions). But there are many tasks which animals and humans are able to do rather easily but
remain out of reach of computers, at the beginning of the 21st century. Many of these tasks fall under the
label of Artificial Intelligence, and include many perception and control tasks. Why is it that we have failed
to write programs for these tasks? I believe that it is mostly because we do not know explicitly (formally)
how to do these tasks, even though our brain (coupled with a body) can do them. Doing those tasks involve
knowledge that is currently implicit, but we have information about those tasks through data and examples
(e.g. observations of what a human would do given a particular request or input). How do we get machines to
acquire that kind of intelligence? Using data and examples to build operational knowledge is what learning
is about.
13.2.3 Machine Learning
Machine learning has a long history and numerous textbooks have been written that do a good job of covering
its main principles. Among the recent ones I suggest:
• Christopher M. Bishop, “Pattern Recognition and Machine Learning”, 2007
• Simon Haykin, “Neural Networks: a Comprehensive Foundation”, 2009 (3rd edition)
• Richard O. Duda, Peter E. Hart and David G. Stork, “Pattern Classification”, 2001 (2nd edition)
Here we focus on a few concepts that are most relevant to this course.
13.2.4 Formalization of Learning
First, let us formalize the most common mathematical framework for learning. We are given training examples
D = {z1 , z2 , . . . , zn }
with the zi being examples sampled from an unknown process P (Z). We are also given a loss functional L
which takes as argument a decision function f and an example z, and returns a real-valued scalar. We want
to minimize the expected value of L(f, Z) under the unknown generating process P (Z).
58
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
13.2.5 Supervised Learning
In supervised learning, each examples is an (input,target) pair: Z = (X, Y ) and f takes an X as argument.
The most common examples are
• regression: Y is a real-valued scalar or vector, the output of f is in the same set of values as Y , and
we often take as loss functional the squared error
L(f, (X, Y )) = ||f (X) − Y ||2
• classification: Y is a finite integer (e.g. a symbol) corresponding to a class index, and we often take
as loss function the negative conditional log-likelihood, with the interpretation that fi (X) estimates
P (Y = i|X):
L(f, (X, Y )) = − log fY (X)
where we have the constraints
fY (X) ≥ 0 ,
X
fi (X) = 1
i
13.2.6 Unsupervised Learning
In unsupervised learning we are learning a function f which helps to characterize the unknown distribution
P (Z). Sometimes f is directly an estimator of P (Z) itself (this is called density estimation). In many other
cases f is an attempt to characterize where the density concentrates.
Clustering algorithms divide up the input space in regions (often centered around a prototype example or
centroid). Some clustering algorithms create a hard partition (e.g. the k-means algorithm) while others
construct a soft partition (e.g. a Gaussian mixture model) which assign to each Z a probability of belonging
to each cluster.
Another kind of unsupervised learning algorithms are those that construct a new representation for Z. Many
deep learning algorithms fall in this category, and so does Principal Components Analysis.
13.2.7 Local Generalization
The vast majority of learning algorithms exploit a single principle for achieving generalization: local generalization. It assumes that if input example xi is close to input example xj , then the corresponding outputs
f (xi ) and f (xj ) should also be close. This is basically the principle used to perform local interpolation.
This principle is very powerful, but it has limitations: what if we have to extrapolate? or equivalently, what
if the target unknown function has many more variations than the number of training examples? in that case
there is no way that local generalization will work, because we need at least as many examples as there are
ups and downs of the target function, in order to cover those variations and be able to generalize by this
principle.
13.2. Very Brief Introduction to Machine Learning for AI
59
Notes de cours IFT6266 H12, Release 2012.01.05
This issue is deeply connected to the so-called curse of dimensionality for the following reason. When the
input space is high-dimensional, it is easy for it to have a number of variations of interest that is exponential
in the number of input dimensions. For example, imagine that we want to distinguish between 10 different
values of each input variable (each element of the input vector), and that we care about about all the 10n
configurations of these n variables. Using only local generalization, we need to see at least one example of
each of these 10n configurations in order to be able to generalize to all of them.
13.2.8 Distributed versus Local Representation and Non-Local Generalization
A simple-minded binary local representation of integer N is a sequence of B bits such that N < B, and
all bits are 0 except the N -th one. A simple-minded binary distributed representation of integer N is a
sequence of B = log2 N + 1 bits with the usual binary encoding for N . In this example we see that
distributed representations can be exponentially more efficient than local ones. In general, for learning
algorithms, distributed representations have the potential to capture exponentially more variations than local
ones for the same number of free parameters. They hence offer the potential for better generalization because
learning theory shows that the number of examples needed (to achieve a desired degree of generalization
performance) to tune O(B) effective degrees of freedom is O(B).
Another illustration of the difference between distributed and local representation (and corresponding local
and non-local generalization) is with (traditional) clustering versus Principal Component Analysis (PCA) or
Restricted Boltzmann Machines (RBMs). The former is local while the latter is distributed. With k-means
clustering we maintain a vector of parameters for each prototype, i.e., one for each of the regions distinguishable by the learner. With PCA we represent the distribution by keeping track of its major directions
of variations. Now imagine a simplified interpretation of PCA in which we care mostly, for each direction
of variation, whether the projection of the data in that direction is above or below a threshold. With d directions, we can thus distinguish between 2d regions. RBMs are similar in that they define d hyper-planes
and associate a bit to an indicator of being on one side or the other of each hyper-plane. An RBM therefore
associates one input region to each configuration of the representation bits (these bits are called the hidden
units, in neural network parlance). The number of parameters of the RBM is roughly equal to the number
these bits times the input dimension.
Again, we see that the number of regions representable by an RBM or a PCA (distributed representation) can
grow exponentially in the number of parameters, whereas the number of regions representable by traditional
clustering (e.g. k-means or Gaussian mixture, local representation) grows only linearly with the number of
parameters. Another way to look at this is to realize that an RBM can generalize to a new region corresponding to a configuration of its hidden unit bits for which no example was seen, something not possible
for clustering algorithms (except in the trivial sense of locally generalizing to that new regions what has
been learned for the nearby regions for which examples have been seen).
Version en français
13.3 Introduction to Deep Learning Algorithms
See the following article for a recent survey of deep learning:
Yoshua Bengio, Learning Deep Architectures for AI, Foundations and Trends in Machine Learning, 2(1),
2009
60
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
13.3.1 Depth
The computations involved in producing an output from an input can be represented by a flow graph: a flow
graph is a graph representing a computation, in which each node represents an elementary computation and
a value (the result of the computation, applied to the values at the children of that node). Consider the set
of computations allowed in each node and possible graph structures and this defines a family of functions.
Input nodes have no children. Output nodes have no parents.
The flow graph for the expression sin(a2 + b/a) could be represented by a graph with two input nodes a
and b, one node for the division b/a taking a and b as input (i.e. as children), one node for the square (taking
only a as input), one node for the addition (whose value would be a2 + b/a) and taking as input the nodes a2
and b/a, and finally one output node computing the sinus, and with a single input coming from the addition
node.
A particular property of such flow graphs is depth: the length of the longest path from an input to an output.
Traditional feedforward neural networks can be considered to have depth equal to the number of layers (i.e.
the number of hidden layers plus 1, for the output layer). Support Vector Machines (SVMs) have depth 2
(a first level for the kernel outputs or for the feature space, and a second level for the linear combination
producing the output).
13.3.2 Motivations for Deep Architectures
The main motivations for studying learning algorithms for deep architectures are the following:
• Insufficient depth can hurt
• The brain has a deep architecture
• Cognitive processes seem deep
• Statistical sharing
13.3.3 Insufficient depth can hurt
Depth 2 is enough in many cases (e.g. logical gates, formal [threshold] neurons, sigmoid-neurons, Radial
Basis Function [RBF] units like in SVMs) to represent any function with a given target accuracy. But this
may come with a price: that the required number of nodes in the graph (i.e. computations, and also number
of parameters, when we try to learn the function) may grow very large. Theoretical results showed that
there exist function families for which in fact the required number of nodes may grow exponentially with
the input size. This has been shown for logical gates, formal neurons, and RBF units. In the latter case
Hastad has shown families of functions which can be efficiently (compactly) represented with O(n) nodes
(for n inputs) when depth is d, but for which an exponential number (O(2n )) of nodes is needed if depth is
restricted to d − 1.
One can see a deep architecture as a kind of factorization. Most randomly chosen functions can’t be represented efficiently, whether with a deep or a shallow architecture. But many that can be represented efficiently
with a deep architecture cannot be represented efficiently with a shallow one (see the polynomials example
in the Bengio survey paper). The existence of a compact and deep representation indicates that some kind of
13.3. Introduction to Deep Learning Algorithms
61
Notes de cours IFT6266 H12, Release 2012.01.05
structure exists in the underlying function to be represented. If there was no structure whatsoever, it would
not be possible to generalize well.
13.3.4 The brain has a deep architecture
For example, the visual cortex is well-studied and shows a sequence of areas each of which contains a
representation of the input, and signals flow from one to the next (there are also skip connections and at
some level parallel paths, so the picture is more complex). Each level of this feature hierarchy represents
the input at a different level of abstraction, with more abstract features further up in the hierarchy, defined
in terms of the lower-level ones.
Note that representations in the brain are in between dense distributed and purely local: they are sparse:
about 1% of neurons are active simultaneously in the brain. Given the huge number of neurons, this is still
a very efficient (exponentially efficient) representation.
13.3.5 Cognitive processes seem deep
• Humans organize their ideas and concepts hierarchically.
• Humans first learn simpler concepts and then compose them to represent more abstract ones.
• Engineers break-up solutions into multiple levels of abstraction and processing
It would be nice to learn / discover these concepts (knowledge engineering failed because of poor introspection?). Introspection of linguistically expressible concepts also suggests a sparse representation: only a
small fraction of all possible words/concepts are applicable to a particular input (say a visual scene).
13.3.6 Statistical Sharing
Intermediate representations can be exploited to share statistical strength across different contexts. First, if
deeper architectures can be more efficient in terms of number of computational units (to represent the same
function), that in principle means that the number of parameters than need to be estimated is smaller, which
gives rise to greater statistical efficiency.
Another way to see this is to consider the sharing of statistical strength that occurs when different components of an architecture are re-used for different purposes (e.g., in the computation for different outputs, or
different tasks, or in the computation for different intermediate features). Since the parameters of a component are used for different purposes, they share statistical strength among the different examples (or parts of
examples) that rely on these parameters: using more examples, from more contexts, gives more information
on these parameters, allowing to reduce the uncertainty on their values.
This is similar and related to the sharing of statistical strength that occurs in distributed representations. For
example, if the parameters of one hidden unit of an RBM are “used” for many examples (because that unit
turns on for many examples), then there is more information available to estimate those parameters. When
a new configuration of the input is presented, it may not correspond to any of those seen in the training set,
but its “components” (possibly represented at a higher level of abstraction in intermediate representations)
may have been seen previously.
62
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
Sharing of statistical strength is a core idea behind many advances in machine learning. Components and
parameters are shared across tasks in the case of multi-task learning, and deep architectures are particularly
well suited for multi-task learning~(Collobert & Weston, ICML‘2008). Similarly semi-supervised learning
exploits statistical sharing between the tasks of learning the input distribution P(X) and learning the conditional distribution P(Y|X). Because deep learning algorithms often rely heavily on unsupervised learning,
they are well suited to exploit this particular form of statistical sharing.
A very related form of sharing occurs in self-taught learning~(Raina et al, 2007), whereby we consider
unlabeled training data from P(X|Y) for a set of classes Y’s but really care about generalizing to tasks
P(Y|X) for a different set of Y’s. Recent work showed that deep learners benefit more from the self-taught
learning and multi-task learning frameworks than shallow learners~(Bengio et al, NIPS 2010 deep learning
workshop).
This is also a form of out-of-domain generalization, for which deep learners are also well suited, as shown
in (Bengio et al, NIPS 2010 deep learning workshop) for pattern recognition and in (Glorot et al, 2011) for
natural language processing (sentiment analysis).
13.3.7 Breakthrough in Learning Deep Architectures
Before 2006, attempts at training deep architectures failed: training a deep supervised feedforward neural
network tends to yield worse results (both in training and in test error) then shallow ones (with 1 or 2 hidden
layers).
Three papers changed that in 2006, spearheaded by Hinton’s revolutionary work on Deep Belief Networks
(DBNs):
• Hinton, G. E., Osindero, S. and Teh, Y., A fast learning algorithm for deep belief nets Neural Computation 18:1527-1554, 2006
• Yoshua Bengio, Pascal Lamblin, Dan Popovici and Hugo Larochelle, Greedy Layer-Wise Training of
Deep Networks, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems 19 (NIPS
2006), pp. 153-160, MIT Press, 2007
• Marc’Aurelio Ranzato, Christopher Poultney, Sumit Chopra and Yann LeCun, Efficient Learning of
Sparse Representations with an Energy-Based Model, in J. Platt et al. (Eds), Advances in Neural
Information Processing Systems (NIPS 2006), MIT Press, 2007
The following key principles are found in all three papers:
• Unsupervised learning of representations is used to (pre-)train each layer.
• Unsupervised training of one layer at a time, on top of the previously trained ones. The representation
learned at each level is the input for the next layer.
• Use supervised training to fine-tune all the layers (in addition to one or more additional layers that are
dedicated to producing predictions).
The DBNs use RBMs for unsupervised learning of representation at each layer. The Bengio et al paper
explores and compares RBMs and auto-encoders (neural network that predicts its input, through a bottleneck
internal layer of representation). The Ranzato et al paper uses sparse auto-encoder (which is similar to sparse
coding) in the context of a convolutional architecture. Auto-encoders and convolutional architectures will
be covered later in the course.
13.3. Introduction to Deep Learning Algorithms
63
Notes de cours IFT6266 H12, Release 2012.01.05
Since 2006, a plethora of other papers on the subject of deep learning has been published, some of them exploiting other principles to guide training of intermediate representations. See Learning Deep Architectures
for AI for a survey.
Version en français
13.4 Introduction to Gradient-Based Learning
Consider a cost function C which maps a parameter vector θ to a scalar C(θ) which we would like to minimize. In machine learning the cost function is typically the average or the expectation of a loss functional:
n
C(θ) =
1X
L(fθ , zi )
n
i=1
(this is called the training loss) or
Z
C(θ) =
L(fθ , z)P (z)dz
(this is called the generalization loss), where in supervised learning we have z = (x, y) and fθ (x) is a
prediction of y, indexed by the parameters theta.
13.4.1 The Gradient
The gradient of the function C of a single scalar θ is formally defined as follows:
C(θ + δθ) − C(θ)
∂C(θ)
= lim
δθ→0
∂θ
δθ
Hence it is the variation ∆C induced by a change ∆θ, when ∆θ is very small.
∂C(θ)
When θ is a vector, the gradient ∂C(θ)
∂θ is a vector with one element ∂θi per θi , where we consider the other
parameters fixed, we only make the change ∆θi and we measure the resulting ∆C. When ∆θi is small then
∂C(θ)
∆C
∆θi becomes ∂θi .
13.4.2 Gradient Descent
We want to find a θ that minimizes C(θ). If we are able to solve
∂C(θ)
=0
∂θ
then we can find the minima (and maxima and saddle points), but in general we are not able to find the
solutions of this equation, so we use numerical optimization methods. Most of these are based on the idea
64
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
of local descent: iteratively modify θ so as to decrease C(θ), until we cannot anymore, i.e., we have arrived
at a local minimum (maybe global if we are lucky).
The simplest of all these gradient-based optimization techniques is gradient descent. There are many variants
of gradient descent, so we define here ordinary gradient descent:
θk+1 = θk − k
∂C(θk )
∂θk
where θk represents our parameters at iteration k and k is a scalar that is called the learning rate, which
can either be chosen fixed, adaptive or according to a fixed decreasing schedule.
13.4.3 Stochastic Gradient Descent
We exploit the fact that C is an average, generally over i.i.d. (independently and identically distributed) examples, to make updates to θ much more often, in the extreme (and most common) case after each example:
θk+1 = θk − k
∂L(θk , z)
∂θk
where z is the next example from the training set, or the next example sampled from the training distribution,
in the online setting (where we have not a fixed-size training set but instead access to a stream of examples
from the data generating process). Stochastic Gradient Descent (SGD) is a more general principle in which
the update direction is a random variable whose expectations is the true gradient of interest. The convergence
conditions of SGD are similar to those for gradient descent, in spite of the added randomness.
SGD can be much faster than ordinary (also called batch) gradient descent, because it makes updates much
more often. This is especially true for large datasets, or in the online setting. In fact, in machine learning
tasks, one only uses ordinary gradient descent instead of SGD when the function to minimize cannot be
decomposed as above (as a mean).
13.4.4 Minibatch Stochastic Gradient Descent
This is a minor variation on SGD in which we obtain the update direction by taking the average over a small
batch (minibatch) of B examples (e.g. 10, 20 or 100). The main advantage is that instead of doing B Vector
x Matrix products one can often do a Matrix x Matrix product where the first matrix has B rows, and the
latter can be implemented more efficiently (sometimes 2 to 10 times faster, depending on the sizes of the
matrices).
Minibatch SGD has the advantage that it works with a slightly less noisy estimate of the gradient (more so as
B increases). However, as the minibatch size increases, the number of updates done per computation done
decreases (eventually it becomes very inefficient, like batch gradient descent). There is an optimal trade-off
(in terms of computational efficiency) that may vary depending on the data distribution and the particulars of
the class of function considered, as well as how computations are implemented (e.g. parallelism can make a
difference).
13.4. Introduction to Gradient-Based Learning
65
Notes de cours IFT6266 H12, Release 2012.01.05
13.4.5 Momentum
Another variation that is similar in spirit to minibatch SGD is the use of so-called momentum: the idea is
to compute on-the-fly (online) a moving average of the past gradients, and use this moving average instead
of the current example’s gradient, in the update equation. The moving average is typically an exponentially
decaying moving average, i.e.,
∆θk+1 = α∆θk + (1 − α)
∂L(θk , z)
∂θk
where α is a hyper-parameter that controls how much weight is given in this average to older vs most recent
gradients.
13.4.6 Choosing the Learning Rate Schedule
If the step size is too large – larger than twice the largest eigenvalue of the second derivative matrix (Hessian) of C –, then gradient steps will go upward instead of downward. If the step size is too small, then
convergence is slower.
The most common choices of learning rate schedule (k ) are the following:
• constant schedule, k = 0 : this is the most common choice. It in theory gives an exponentially larger
weight to recent examples, and is particularly appropriate in a non-stationary environment, where the
distribution may change. It is very robust but error will stop improving after a while, where a smaller
learning rate could yield a more precise solution (approaching the minimum a bit more).
τ
• 1/k schedule: k = 0 τ +k
.
This schedule is guaranteed to reach asymptotic convergence (as k → ∞) because it satisfies the
following requirements:
∞
X
k = ∞
k=1
∞
X
2k < ∞
k=1
and this is true for any τ but 0 must be small enough to avoid divergence, where the error rises instead
of decreasing.
A disadvantage is that an additional hyper-parameter τ is introduced. Another is that in spite of its
guarantees, a poor choice of τ can yield very slow convergence.
66
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
13.4.7 Flow Graphs, Chain Rule and Backpropagation: Efficient Computation of
the Gradient
Consider a function (in our case it is L(θ, z)) of several arguments, and we wish to compute it as well as
its derivative (gradient) w.r.t. some of its arguments. We will decompose the computation of the function in
terms of elementary computations for which partial derivatives are easy to compute, forming a flow graph
(as already discussed there). A flow graph is an acyclic graph where each node represents the result of a
computation that is performed using the values associated with connected nodes of the graph. It has input
nodes (with no predecessors) and output nodes (with no successors).
Each node of the flow graph is associated with a symbolic expression that defines how its value is computed
in terms of the values of its children (the nodes from which it takes its input). We will focus on flow graphs
for the purpose of efficiently computing gradients, so we will keep track of gradients with respect to a special
output node (denoted L here to refer to a loss to be differentiated with respect to parameters, in our case).
We will associate with each node
• the node value
• the symbolic expression that specifies how to compute the node value in terms of the value of its
predecessors (children)
• the partial derivative of L with respect to the node value
• the symbolic expressions that specify to how compute the partial derivative of each node value with
respect to the values of its predecessors.
Let L be the output scalar node of the flow graph, and consider an arbitrary node u whose parents (the nodes
taking the value computed at u as input) are vi . In addition to the value u (abuse of notation) associated with
node u, we will also associate with each node u a partial derivative ∂L
∂u .
The chain rule for derivatives specifies how the partial derivative
∂L
for its parents vi :
sively from the partial derivatives ∂v
i
∂L
∂u
for a node u can be obtained recur-
∂L X ∂L ∂vi
=
∂u
∂vi ∂u
i
Note that ∂L
∂L = 1 which starts the recursion at the root node of the graph (node that in general it is a graph,
not a tree, because there may be multiple paths from a given node to the root – output – node). Note also
i
that each ∂v
∂u is an expression (and a corresponding value, when the inputs are given) that is associated with
an arc of the graph (and each arc is associated with one such partial derivative).
Note how the gradient computations involved in this recipe go exactly in the opposite direction compared
to those required to compute L. In fact we say that gradients are back-propagated, following the arcs
backwards. The instantiation of this procedure for computing gradients in the case of feedforward multilayer neural networks is called the back-propagation algorithm.
In the example already shown earlier, L = sin(a2 + b/a) and there are two paths from a to L.
This recipe gives us the following nice guarantee. If the computation of L is expressed with n computations
expressed through n nodes (and each node computation requires a constant computation time) and m arcs,
13.4. Introduction to Gradient-Based Learning
67
Notes de cours IFT6266 H12, Release 2012.01.05
then computing all the partial derivatives ∂L
∂u requires (at most) O(m) computations, using the above recursion (in general, with a bounded in-degree, this is also O(n)). Furthermore, this is a lower bound, i.e., it is
not possible to compute the gradients faster (up to an additive and multiplicative constant).
Note that there are many ways in which to compute these gradients, and whereas the above algorithm is
the fastest one, it is easy to write down an apparently simple recursion that would instead be exponentially
slower, e.g., in O(2n ). In general ∂L
∂u can be written as a sum over all paths in the graph from u to L of the
products of the partial derivatives along each path.
An illustration of this is with a graph with the following structure:
xt = f (xt−1 , yt−1 )
yt = g(xt−1 , yt−1 )
where there are p = n/2 such (xt , yt ) pairs of node, ending with
√ nL = h(xp , yp ) and with input nodes x0
p
n/2
and y0 . The number of paths from x0 to L is 2 = 2
= ( 2) . Note by mental construction how the
number of paths doubles as we increase p by 1.
13.5 Introduction to Multi-Layer Perceptrons (Feedforward Neural
Networks)
13.5.1 Multi-Layer Neural Networks
An MLP (for Multi-Layer Perceptron) or multi-layer neural network defines a family of functions. Let us
first consider the most classical case of a single hidden layer neural network, mapping a d-vector to an
m-vector (e.g. for regression):
g(x) = b + W tanh(c + V x)
where:
• x is a d-vector (the input),
• V is an k × d matrix (called input-to-hidden weights),
• c is a k-vector (called hidden units offsets or hidden unit biases),
• b is an m-vector (called output units offset or output units biases),
• and W is an m × h matrix (called hidden-to-output weights).
The vector-valued function h(x) = tanh(c + V x) is called the output of the hidden layer. Note how the
output is an affine transformation of the hidden layer, in the above network. A non-linearity may be tacked
on to it in some network architectures. The elements of the hidden layer are called hidden units.
The kind of operation computed by the above h(x) can be applied on h(x) itself, but with different parameters (different biases and weights). This would give rise to a feedforward multi-layer network with two
hidden layers. More generally, one can build a deep neural network by stacking more such layers. Each of
these layers may have a different dimension (k above). A common variant is to have skip connections, i.e.,
a layer can take as input not only the layer at the previous level but also some of the lower layers.
68
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
13.5.2 Most Common Training Criteria and Output Non-Linearities
Let f (x) = r(g(x)) with r representing the output non-linearity function. In supervised learning, the output
f (x) can be compared with a target value y through a loss functional L(f, (x, y)). Here are common loss
functionals, with the associated output non-linearity:
2
• for
P ordinary (L2)2 regression: no non-linearity (r(a) = a), squared loss L(f, (x, y)) = ||f (x) − y|| =
i (fi (x) − yi ) .
• for median
P (L1) regression: no non-linearity (r(a) = a), absolute value loss L(f, (x, y)) = |f (x) −
y|1 = i |fi (x) − yi |.
• for 2-way probabilistic classification: sigmoid non-linearity (r(a) = sigmoid(a) = 1/(1 + e−a ),
applied element by element), and cross-entropy loss L(f, (x, y)) = −y log f (x) − (1 − y) log(1 −
f (x)) for y binary. Note that the sigmoid output f (x) is in the (0,1) interval, and corresponds to an
estimator of P (y = 1|x). The predicted class is 1 if f (x) > 21 .
• for multiple binary probabilistic classification: each output element is treated as above.
• for 2-way hard classification with hinge loss: no non-linearity (r(a) = a) and the hinge loss is
L(f, (x, y)) = max(0, 1 − (2y − 1)f (x)) (again for binary y). This is the SVM classifier loss.
• the above can be generalized to multiple classes by separately considering the binary classifications
of each class against the others.
P
• multi-way probabilistic classification: softmax non-linearity (ri (a) = eai / j eaj with
P one output
per class) with the negative log-likelihood loss L(f, (x, y)) = − log fy (x). Note that i fi (x) = 1
and 0 < fi (x) < 1. Note also how this is equivalent to the cross-entropy loss in the 2-class case (the
output for the one of the classes is actually redundant).
13.5.3 The Back-Propagation Algorithm
We just apply the recursive gradient computation algorithm seen previously to the graph formed naturally by
the MLP, with one node for each input unit, hidden unit and output unit. Note that each parameter (weight
or bias) also corresponds to a node, and the final
Let us formalize a notation for MLPs with more than one hidden layer. Let us denote with hi the output
vector of the i-th layer, starting with h0 = x (the input), and finishing with a special output layer hK which
produces the prediction or output of the network.
With tanh units in the hidden layers, we have (in matrix-vector notation):
• for k = 1 to K − 1:
• hk = tanh(bk + Wk hk−1 )
where bk is a vector of biases and Wk is a matrix of weights connecting layer k − 1 to layer k. The
scalar computation associated with a single unit i of layer k is
P
hk,i = tanh(bk,i + j Wk,i,j hk−1,j )
13.5. Introduction to Multi-Layer Perceptrons (Feedforward Neural Networks)
69
Notes de cours IFT6266 H12, Release 2012.01.05
In the case of a probabilistic classifier, we would then have a softmax output layer, e.g.,
p = hK = softmax(bK + WK hK−1 )
where we used p to denote the output because it is a vector indicating a probability distribution over classes.
And the loss is
L = − log py
where y is the target class, i.e., we want to maximize py = P (Y = y|x), an estimator of the conditional
probability of class y given input x.
Let us now see how the recursive application of the chain rule in flow graphs is instantiated in this structure.
First of all, let us denote
ak = bk + Wk hk−1
(for the argument of the non-linearity at each level) and note (from a small derivation) that
∂(− log py )
= (pi − 1y=i )
∂aK,i
and that
∂ tanh(u)
= (1 − tanh(u)2 ).
∂u
Now let us apply the back-propagation recipe in the corresponding flow graph. Each parameter (each weight
and each bias) is a node, each neuron potential ak,i and each neuron output hk,i is also a node.
• starting at the output node:
∂L
=1
∂L
• then compute the gradient with respect to each pre-softmax sum aK,i :
∂L
∂L ∂L
=
= (pi − 1y=i )
∂aK,i
∂L ∂aK,i
• We can now repeat the same recipe for each layer. For k = K down to 1:
70
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
– obtain trivially the gradient wrt biases:
∂L
∂L ∂ak,i
∂L
=
=
∂bk,i
∂ak,i ∂bk,i
∂ak,i
– compute the gradient wrt weights:
∂L
∂L ∂ak,i
∂L
=
=
hk−1,j
∂Wk,i,j
∂ak,i ∂Wk,i,j
∂ak,i
– back-propagate the gradient into lower layer, if k > 1:
X ∂L ∂ak,i
X ∂L
∂L
=
=
Wk,i,j
∂hk−1,j
∂ak,i ∂hk−1,j
∂ak,i
i
i
∂L ∂hk−1,j
∂L
∂L
=
=
(1 − h2k−1,j )
∂ak−1,j
∂hk−1,j ∂ak−1,j
∂hk−1,j
13.5.4 Logistic Regression
Logistic regression is a special case of the MLP with no hidden layer (the input is directly connected to
the output) and the cross-entropy (sigmoid output) or negative log-likelihood (softmax output) loss. It
corresponds to a probabilistic linear classifier and the training criterion is convex in terms of the parameters
(which guarantees that there is only one minimum, which is global).
13.6 Training Multi-Layer Neural Networks
Many algorithms have been proposed to train multi-layer neural networks but the most commonly used ones
are gradient-based.
Two fundamental issues guide the various strategies employed in training MLPs:
• training as efficiently as possible, i.e., getting training error down as quickly as possible, avoiding to
get stuck in narrow valleys or even local minima of the cost function,
• controlling capacity so as to achieve the largest capacity avoids overfitting, i.e., to minimize generalization error.
13.6.1 A fundamentally difficult optimization problem
Optimization of the training criterion of a multi-layer neural network is difficult because there are numerous
local minima. It can be demonstrated that finding the optimal weights is NP-hard. However, we are often
happy to find a good local minimum, or even just a sufficiently low value of the training criterion. Since
what interests us is the generalization error and not just the training error (what we are minimizing is not
13.6. Training Multi-Layer Neural Networks
71
Notes de cours IFT6266 H12, Release 2012.01.05
what we would truly like to minimize), the difference between “close to a minimum” and “at a minimum”
is often of no importance. Also, as there is no analytic solution to the minimization problem, we are forced
to perform the optimization in an iterative manner.
13.6.2 Choice of architecture
In principle, one way of accelerating gradient descent is to make choices which render the Hessian matrix
∂2C
∂θi ∂θj well conditioned. The second derivative in a certain direction indicates he curvature of the cost
function in that direction. The larger the curvature (as in narrow valleys), the smaller our updates must be
in order to avoid increasing the error. More precisely, the optimal step size for a gradient step is 1 over the
curvature. This can be seen by a simple Taylor expansion of the cost function, and is behind the famous
optimization algorithm known as Newton’s method. Suppose we are at θk and we wish to choose θk+1 such
that it is a minimum:
C(θk+1 ) = C(θk ) + (θk+1 − θk )C 0 (θk ) + 0.5(θk+1 − θk )2 C 00 (θk )
0=
∂C(θk+1 )
= C 0 (θk ) + (θk+1 − θk )C 00 (θk )
∂θk+1
C 0 (θk )
θk+1 = θk − 00 k
C (θ )
Thus, we want a step size equal to the inverse of the second derivative. One can show that the number
of iterations of a gradient descent algorithm will be proportional to the ratio of the largest to the smallest
eigenvalue of the Hessian matrix (with a quadratic approximation of the cost function). The basic reason is
that the largest eigenvalue limits the maximum step size. One cannot go faster than the highest curvature in
all possible directions, otherwise the error will increase, but if we use the same step size in all directions,
the convergence will be the slowest in the flattest direction (the direction corresponding to the smallest
eigenvalue).
• In theory one hidden layer suffices, but this theorem does not say that this representation of the function will be efficient. In practice, this was the most common choice before 2006, with the exception
of convolutional neural networks (which can have 5 or 6 hidden layers, for example). Sometimes one
obtains much better results with two hidden layers. In fact, we obtain a much better generalization
error with even more layers, but a random initialization does not work well with more than two hidden
layers (but see the work since 2006 on greedy unsupervised initialization for deep architectures).
• For regression or with real-valued targets that are not bounded, it is generally better to use linear
neurons in the output layer. For classification, it is generally better to use neurons with a non-linearity
(sigmoid or softmax) in the output layer.
• In certain cases, direct connections between the input and the output layer can be useful. In the case
of regression, they can also be directly initialized by a linear regression of the outputs on the inputs.
The hidden layer neurons then serve only to learn the missing non-linear part.
• An architecture with shared weights, or sharing certain parts of the architecture (e.g. the first layer)
between networks associated with several related tasks, can significantly improve generalization. See
the following discussion on convolutional networks.
• It is better to use a symmetric nonlinearity in the hidden layers (such as the hyperbolic tangent, or
“tanh”, and unlike the logistic sigmoid), in order to improve the conditioning of the Hessian and avoid
saturation of the nonlinearity in the hidden layers.
72
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
13.6.3 Normalizing the inputs
It is imperative that the inputs have a mean not too far from zero, and a variance not far from one. Values of
the input must also not be too large in magnitude. If this is not the case, one can perform certain monotonic,
non-linear transformation that reduce large values. If we have a very large input, it will saturate many
neurons and block the learning algorithm for that example. The magnitudes (variances) of inputs to each
layer must also be of the same order when using a single learning rate for all of the layers, in order to avoid
one layer becoming a bottleneck (the slowest to train).
In fact, in the linear case, the Hessian is optimally conditioned when the inputs are normalized (so that the
covariance matrix is the identity), which can be done by projecting into the eigenspace of the matrix X 0 X,
where X is the matrix where xij is input j of training example i.
13.6.4 Preprocessing of the target outputs
In the case of learning by minimizing a quadratic cost function (e.g. mean squared error) it must be assured
that the target outputs
• are always in the interval of values that the nonlinearity in the output layer can produce (and are
roughly normal N(0, 1) in the linear case)
• are not too near to the limits of the nonlinearity in the output layer: for classification, an optimal value
is close to the two inflection points (i.e., the points of maximal curvature/second derivative, -0.6 and
0.6 for tanh, 0.2 and 0.8 for sigmoid).
• It is best to use the cross-entropy criterion (or conditional log likelihood) for probabilistic classification, or the “hinge” margin criterion (as is used for the perceptron and SVMs, but by penalizing
departures from the decision surface beyond a margin). In the case of multiclass classification, this
gives
where x+ = x1x>0 is the “positive part” of x and fi (x) is the output (without a nonlinearity) for class
i.
13.6.5 Coding of target outputs and discrete inputs
With inputs and outputs, we generally represent discrete variables by groups of units (a group of k units for
a discrete variable that can take k values). The practical exception is the case of a binary variable, which
we generally encode with a single unit. In the case of outputs, we will associate with each group a discrete
distribution (binomial for a single bit, multinomial for a general discrete variable).
13.6.6 Optimization algorithms
When the number of examples is large (many thousands) stochastic gradient descent is often the best choice
(especially for classification), in terms of speed and in terms of capacity control: it is more difficult for the
network to overfit when training with stochastic gradient descent. Indeed, stochastic gradient descent does
not fall easily into very sharp minima (which do not generalize well, since a slight perturbation of the data
that changes the error surface will yield very bad performance) due to noise induced by gradient steps and
the “noisy” gradient. This noisy gradient also helps to escape certain local minima for the same reason.
13.6. Training Multi-Layer Neural Networks
73
Notes de cours IFT6266 H12, Release 2012.01.05
When stochastic gradient descent is used, it is critical that the examples be well mixed. For example if
we have many consecutive examples of the same class, the convergence will be very slow. It is enough
to randomly permute the examples once per training session, in oder to eliminate all dependence between
successive examples. With certain architectures that capture temporal dependencies (music, speech, video
or other time series) we have no choice but to present sequences whose elements are highly dependent, but
we can mix up the sequences (the training set is a group of of sequences).
In principle, the gradient step size should be gradually reduced during learning in order to guarantee asymptotic convergence. For certain problems (especially classification), this does not seem necessary, and can
0 τ
even hurt. A reasonable annealing schedule, for example, is t = t+τ
as discussed here. If you could
1
calculate it, the optimal gradient step would be λmax , i.e. the inverse of the largest eigenvalue of the Hessian
matrix, and the maximal step size (before divergence) would be twice as large. Le Cun proposes an efficient
method for estimating λmax (see his tutorial on the subject) but this technique is not often used.
When the number of examples (and thus, of parameters) is very small, especially for regression, second
order methods (often the conjugate gradient method) allow for much faster convergence. These methods
are batch methods (updating parameters only after calculating the error and gradient on all examples). These
techniques are generally easier to use than stochastic gradient descent (there are less hyperparameters, or it
is less necessary to modify them from the default values), but the generalization is often worse because of
the ease with which such methods fall into sharp minima.
Up to several tens of thousands of training examples, conjugate gradient descent remains one of the best optimization techniques for neural networks. Beyond that, it is generally best to stick with stochastic gradient
descent or the minibatch variant thereof.
13.6.7 Parameter initialization
We cannot initialize all the weights to zero without condemning all the hidden units to always computing
the same thing (which can be seen by a simple symmetry argument). We would also like to avoid saturating
units (outputs close to the limits of the non-linearity, such that the gradient is close to zero), while also
avoiding units being too close initially to a linear function. When the parameters are too close to zero, a
multilayer network calculates an affine (linear) transformation, so its effective capacity per output is the
number of inputs plus one. Based on these considerations, the ideal operating regime of a unit would be
close to the inflection point of the nonlinearity (between the linear part of the activation close to the origin
and the saturating part). Also, we would like the average variance of the hidden unit values to be preserved
when we propagate the “activations” from the output to the input, and in the same way we would like the
variance of the gradients to be preserved as we propagate them backwards.
In order to achieve
p this objective,
p it can be argued that the initial weights should be drawn uniformly from
the interval [− 6/(ni + no ), 6/(ni + no )], where ni is the fan-in, i.e., the number of inputs to a neuron
(the number of neurons in the previous layer), and no is the fan-out, i.e., the number of neurons in the
following layer. This supposes that the inputs are approximately uniformly distributed in the interval (-1,1)
(note that the outputs of tanh hidden units fall in the same interval).
13.6.8 Controlling saturation
One frequent problem during learning is the saturation of neurons, often due to a bad normalization of inputs
or target outputs or a bad initialization of weights, or using the logistic signmoid instead of a symmetric
74
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
nonlinearity such as tanh. This can be controlled by observing the distribution of outputs of neurons (in
particular, the mean of the absolute value of the weighted sum is a good indicator). When the neurons
saturate frequently, learning is blocked on a plateau of the cost function due to the very small gradients on
certain parameters (and thus a very badly conditioned Hessian).
13.6.9 Controlling the effective capacity
Vapnik’s theory of structural risk minimization tells us that there exists an optimal capacity around which the
generalization error increases (i.e. there is a unique, global minimum of generalization error as a function of
model capacity). Techniques for controlling the effective capacity thus seek to find this minimum (obviously
in an approximate fashion):
• early stopping: this is one of the most popular and most efficient techniques, but it does not work
well when the number of examples is very small. The idea is very simple: we use a validation set
of examples held out from training via gradient descent to estimate the generalization error as the
iterative learning proceeds (normally, after each epoch we measure the error on the validation set).
We keep the parameters corresponding to the minimum of this estimated generalization error curve
(and we can stop when this error begins to seriously climb or if a better minimum is not found in a
certain number of epochs). This has the advantage of responding to one of the difficult questions of
optimization, that is: when do we stop? As well, we note that it is a cheap (in terms of computing
time) way to choose an important hyperparameter (number of training iterations) that affects both
optimization and generalization.
• controlling the number of hidden units: This number directly influences the capacity. In this case
we must unfortunately perform several experiments, unless you use a constructive learning algorithm
which adds resources if and when they are needed), see for example the cascade-correlation algorithm
(Fahlman, 1990). We can use a validation set or cross-validation to estimate the generalization error.
One must be careful, as this estimate is noisy (especially if there are few examples in the validation
set). When there are many hidden layers, choosing the same number of hidden units per layer seems
to work well. The price paid in longer computation time for a larger number of hidden units (because
of the increased number of parameters) is generally offset by early stopping. By contrast, when
the number of hidden units is too small, the effect on the generalization error and the training error
can be much larger. We generally choose the size of networks empirically, bearing in mind these
consideration in order to avoid having to try too many different sizes.
• weight decay: This is a regularization method (for controlling capacity, to prevent overfitting) where
the aim is to penalize weights with large magnitude. Indeed, it can be shown that the capacity is
bounded by the magnitude of the weights of a neural network. We add the penalty
X
λ
θi2
i
to the cost function. This is known as L2 regularization, since it minimizes the L2 norm of the
parameters. Sometimes this is applied only to the weights and not to biases.
As in the previous case, we must run several leaning experiments and choose the penalty parameter λ
(a hyperparameter) that minimizes the estimated generalization error. This can be estimated with a
validation set or with cross-validation.
13.6. Training Multi-Layer Neural Networks
75
Notes de cours IFT6266 H12, Release 2012.01.05
A form of regularization that is more and more used as an alternative to L2 regularization is L1
regularization, which has the advantage that small parameters will be shrunk to exactly 0, giving rise
to a sparse vector of parameters. It thus minimizes the sum of the absolute values of the parameters
(the L1 norm).
13.7 The challenges of training deep neural networks
This is a summary of section 4.2 of Learning Deep Architectures for AI.
• Several experimental results show that training neural networks (supervised training from random
initialization) is more difficult when the network is deep (3, 4 or 5 layers) compared to shallow (1
or 2 layers). See Why Does Unsupervised Pre-training Help Deep Learning?. In this regime, the
generalization error is always worse for deep models compared to shallow ones (not the same can be
said about training error). This could very well explain the absence of scientific literature on deep
architectures before 2006 (with the exception of convolutional networks).
• Proposed explications:
– The learning gets stuck into local minima or in a plateau (where due to low curvature the gradients become extremely small; because the weights do not change that much, in this case, it
might seem like the model had already reached a local minima)
– Every layer of a deep network means an extra layer of nonlinearities which increases the chances
of the optimization process to be even more difficult
– In a deep network, one could easily be just learning the top layer, while the lower layers remain
random transformations that do not capture much of the input. This is due to the fact that by
the time the gradients reach the lower layers they are too diluted to be able to guide the learning
process. This view is confirmed by the success of algorithms like the one proposed by Weston
et al. (ICML 2008) which uses additional error signal from solving some unsupervised tasks for
some or all of the intermediate layers. This hypothesis of diluted gradients is also coherent with
the observation that one can train successfully a convolutional deep network.
• While it is clear that pre-training deep networks (using some unsupervised training procedure) helps,
we still have to address the question of why it works? This has been the focus of the paper Why Does
Unsupervised Pre-training Help Deep Learning? and of section 4.2 of Learning Deep Architectures
for AI. The main proposed reasons are:
– The unsupervised pre-training procedure is applied locally at each layer and does not have to
deal with the difficulties of learning deep models. Note that even training Deep Boltzmann
Machines or a Deep Auto-Encoders is difficult and usually requires layer-wise pre-training.
– Unsupervised pre-training behaves like a regularizer, pushing the lower layers towards modelling
the distribution of the input, P (x). The semi-supervised hypothesis says that learning aspects of
P (x) can improve models of the conditional distribution of the target given the input, P (y|x),
because transformations useful for P (x) are useful or closely related to those needed for P (y|x),
i.e. the two distribution share something. Note that, if there are not sufficiently many hidden
units, the regularization can harm by wasting resources on modeling aspects of P (x) which are
not helpful for P (y|x).
76
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
– It seems that the weights obtained through pre-training lie in a good region of the parameter
space, from where one reaches better local minima through supervised training, compared to
random initialization. The learning trajectory (in the parameter space) also seems quite different
if the model has been pre-trained or randomly initialised.
– A supervised pre-training procedure is worse then an unsupervised one. A reason might be that
supervised pre-training is to greedy, eliminating projections of the data that are not helpful for
the local cost, but are helpful for the global cost of the deep model. This might not happen in the
unsupervised case, because when modeling the input locally, we model all its aspects, not only
those helpful for some local cost.
– Unlike other regularizers, the unsupervised pre-training still has an effect when the number of
training examples grows to be very large, due to its link with non-convex optimization (even
with a lot of examples, starting from a random initialization the reachable local minima are still
worse then those reachable from the pre-trained model).
– One does not deal with an optimization problem in the usual sense because the training error
can be reduced by optimizing only the last layer (and it can even reach 0 if this last layer is
sufficiently large). However, in order to improve the generalize error one needs to be able to
train the lower layers as well. They need to capture all the relevant variations and characteristics
of the input.
– One might need more hidden units when using unsupervised pre-training because most of them
are used to learn features which while they are useful to reconstruct the input, they are not useful
for the discriminative task of classification. Nonetheless a subset of these features are helpful
for classification, and much more so, then those obtained by random initialization.
Version française
13.8 Denoising autoencoders vs. ordinary autoencoders
A denoising autoencoder is like an ordinary autoencoder, with the difference that during learning, the input
seen by the autoencoder is not the raw input but a stochastically corrupted version. A denoising autoencoder
is thus trained to reconstruct the original input from the noisy version. For more information see the article
from ICML 2008: Denoising Auto-Encoders.
Principal differences between ordinary autoencoders and denoising autoencoders:
13.8. Denoising autoencoders vs. ordinary autoencoders
77
Notes de cours IFT6266 H12, Release 2012.01.05
Table 13.1: Comparison of ordinary/denoising autoencoder
Ordinary autoencoders
Denoising autoencoders
Finds a compact representation
Capture the joint distribution of
the inputs
Learning criterion
Deterministic
Stochastic
Number of hidden units
Must be limited to avoid learning the
As many as are necessary for
identity function
capturing the distribution
How to choose model
Impossible using standard
Can use the mean reconstruction
capacity (i.e. the number reconstruction error, since it will
error
of hidden units)
always be lower with more hidden units
Choosing the number of
Impossible using reconstruction error:
Can do early stopping using the
learning iterations
use classification error after supervised mean reconstruction error
fine-tuning
Choosing the amount of
not applicable
Cannot use reconstruction error:
corrupting noise
use classification error after
supervised fine-tuning
Aspect
What it does
A more comprehensive article about the Denoising Auto-Encoder, having a long list of experiments:
Pascal Vincent, Hugo Larochelle, Isabelle Lajoie, Yoshua Bengio and Pierre-Antoine Manzagol,
Stacked Denoising Autoencoders: Learning Useful Representations in a Deep Network with a
Local Denoising Criterion (2010), in: Journal of Machine Learning Research, 11:3371–3408
http://www.iro.umontreal.ca/~lisa/publications2/index.php/publications/show/474
Version française
13.9 Probabilistic models for deep architectures
Of particular interest are Boltzmann machine models, certain variants of which are used in deep architectures
such as Deep Belief Networks and Deep Boltzmann Machines. See section 5 of Learning Deep Architectures
for AI.
The Boltzmann distribution is generally defined on binary variables xi ∈ {0, 1}, with
0
0
ex W x+b x
P (x) = P 0
0
x̃ x̃ W x̃ + b x̃
P
where the denominator is simply a normalizing constant such that x P (x) = 1, and the Wij indicates the
nature of the interaction (e.g. a positive value indicates that xi et xj prefer to take the same value) between
pairs of variables, and bi indicates the inclination of a given xi to take a value of 1.
13.9.1 Readings on probabilistic graphical models
See
Graphical models: probabilistic inference. M. I. Jordan and Y. Weiss. In M. Arbib (Ed.), The Handbook of
Brain Theory and Neural Networks, 2nd edition. Cambridge, MA: MIT Press, 2002.
78
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
Certain distributions can be written P (x) for a vector of variables x = (x1 , x2 , . . .) in the form
P (x) =
1 Y
ψc (xc )
Z c
where Z is the normalizing constant (called the partition function), and the product is over cliques (subsets
xc of elements of the vector x), and the ψc (.) are functions (one per clique) that indicate how the variables
in each clique interact.
A particular case where Z may be simplified a bit (factorized over cliques) is the case of directed models
where variables are structured as a directed acyclic graph, with a topological ordering that associates a group
of parent variables parents(xi ) with each variable xi :
Y
P (x) =
Pi (xi |parents(xi ))
i
where it can be seen that there is one clique for a variable and its parents, i.e., Pi (xi |parents(xi )) =
ψi (xi , parents(xi ))/Zi .
In the general case (represented with an undirected graph), the potential functions ψc are directly parameterized, often in the space of logarithms of ψc , leading to a formulation known as a Markov random
field:
P (x) =
1 − Pc Ec (xc )
e
Z
where:math:E(x)=sum_c E_c(x_c) is called the energy function. The energy function of a Boltzmann
machine is a second degree polynomial in x. The most common parameterization of Markov random fields
has the following form, which is log-linear:
P (x) =
1 − Pc θc fc (xc )
e
Z
where the only free parameters are the θc , and where the complete log likelihood (when x is completely
observed in each training example) is log-linear in the parameters θ. One can easily show that this function
is convex in θ.
13.9.2 Inference
One of the most important obstacles in the practical application of the majority of probabilistic models is the
difficulty of inference: given certain variables (a subset of x), predict the marginal distribution (separately
for each) or joint distribution of certain other variables. Let x = (v, h) with h (hidden) being the variables
we would like to predict, and v (visible) being the observed subset. One would like to calculate, or at least
sample from,
P (h|v).
13.9. Probabilistic models for deep architectures
79
Notes de cours IFT6266 H12, Release 2012.01.05
Inference is obviously useful if certain variables are missing, or if, while using the model, we wish to predict
a certain variable (for example the class of an image) given some other variables (for example, the image
itself). Note that if the model has hidden variables (variables that are never observed in the data) we do not
try to predict the values directly, but we will still implicitly marginalize over these variables (sum over all
configurations of these variables).
Inference is also an essential component of learning, in order to calculate gradients (as seen below in the
case of Boltzmann machines) or in the use of the Expectation-Maximization (EM) algorithm which requires
a marginalization over all hidden variables.
In general, exact inference has a computational cost exponential in the size of the cliques of a graph (in
fact, the unobserved part of the graph) because we must consider all possible combinations of values of the
variables in each clique. See section 3.4 of Graphical models: probabilistic inference for a survey of exact
inference methods.
A simplifed form of inference consists of calculating not the entire distribution, but only the mode (the most
likely configuration of values) of the distribution:
h∗ = argmaxh P (h|v)
This is known as MAP = Maximum A Posteriori inference.
13.9.3 Approximate inference
The two principal families of methods for approximate inference in probabilistic models are Markov chain
Monte Carlo (MCMC) methods and variational inference.
The principle behind variational inference is the following. We will define a simpler model than the target
model (the one that interests us), in which inference is easy, with a similar set of variables (though generally with more simple dependencies between variables than those contained in the target model). We then
optimize the parameters of the simpler model so as to approximate the target model as closely as possible. Finally, we do inference using the simpler model. See section 4.2 of Graphical models: probabilistic
inference for more details and a survey.
13.9.4 Inference with MCMC
In general P (h|v) can be exponentially expensive to represent (in terms of the number of hidden variables,
because we must consider all possible configurations of h). The principle behind Monte Carlo inference is
that we can approximate the distribution P (h|v) using samples from this distribution. Indeed, in practice we
only need an expectation (for example, the expectation of the gradient) under this conditional distribution.
We can thus approximate the desired expectation with an average of these samples.
See the page site du zéro sur Monte-Carlo (in French) for a gentle introduction.
Unfortunately, for most probabilistic models, even sampling from P (h|v) exactly is not feasible (taking time
exponential in the dimension of de h). Therefore the most general approach is based on an approximation
of Monte-Carlo sampling called Markov chain Monte Carlo (MCMC).
80
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
A (first order) Markov chain is a sequence of random variables Z1 , Z2 , . . ., where Zk is independent of
Zk−2 , Zk−3 , . . . given Zk−1 :
P (Zk |Zk−1 , Zk−2 , Zk−3 , . . .) = P (Zk |Zk−1 )
n
Y
P (Z1 . . . Zn ) = P (Z1 )
P (Zk |Zk−1 )
k=2
The goal of MCMC is to construct a Markov chain whose asymptotic marginal distribution, i.e. the distribution of Zn as n → ∞, converges towards a given target distribution, such as P (h|v) or P (x).
13.9.5 Gibbs sampling
Numerous MCMC-based sampling methods exist. The one most commonly used for deep architectures is
Gibbs sampling. It is simple and has a certain plausible analogy with the functioning of the brain, where
each neuron decides to send signals with a certain probability as a function of the signals it receives from
other neurons.
Let us suppose that we wish to sample from the distribution P (x) where x is a set of variables xi (we could
optionally have a set of variables upon which we have conditioned, but this would not change the procedure,
so we ignore them in the following description).
Let x−i = (x1 , x2 , . . . , xi−1 , xi+1 , . . . , xn ), i.e. all variables in x excluding xi . Gibbs sampling is performed using the following algorithm:
• Choose an initial value of x in an arbitrary manner (random or not)
• For each step of the Markov chain:
– Iterate over each xk in x
* Draw xk from the conditional distribution P (xk |x−k )
In some cases one can group variables in x into blocks or groups of variables such that drawing samples for
an entire group, given the others, is easy. In this case it is advantageous to interpret the algorithm above with
xi as the ith group rather than the ith variable. This is known as block Gibbs sampling.
13.9.6 The gradient in a log-linear Markov random field
See Learning Deep Architectures for AI for detailed derivations.
Log-linear Markov random fields are undirected probabilistic models where the energy function is linear in
the parameters θ of the model:
P (x) ∝ e−
P
i θi fi (x)
where fi (.) are known as sufficient statistics of the model, because the expectations E[fi (x)] are sufficient
for characterizing the distribution and estimating parameters.
Note that eθi fi (x) = ψi (x) is associated with each clique in the model (in general, only a sub-vector of x
influences each fi (x)).
13.9. Probabilistic models for deep architectures
81
Notes de cours IFT6266 H12, Release 2012.01.05
Getting back to sufficient statistics, one can show that the gradient of the log likelihood is as follows:
X
−∂ log P (x)
= fi (x) −
P (x)fi (x)
∂θi
x
and the average gradient over training examples xt is thus
X
1 X −∂logP (xt )
1X
P (x)fi (x)
=
fi (xt ) −
T t
∂θi
T t
x
Thus, it is clear that the gradient vanishes when the average of the sufficient statistics under the training
distribution equals their expectation under the model distribution :math:‘P‘.
Unfortunately, calculating this gradient is difficult. We do not want to sum over all possible x, but fortunately
one can obtain a Monte-Carlo approximation by one or more samples from P (x), which gives us a noisy
estimate of the gradient. In general, however, even to obtain an unbiased sample from P (x) is exponentially
costly, and thus one must use an MCMC method.
We refer to the terms of the gradient due to the numerator of the probability density (−fi (x)) as the ‘positive
phase’ gradient, and the terms of the gradient corresponding to the partition function (denominator of the
probability density) as the ‘negative phase’ gradient.
13.9.7 Marginalization over hidden variables
When a model contains hidden variables, the gradient becomes a bit more complicated since one must
marginalize over the hidden variables. Let x = (v, h), with v being the visible part and h being the hidden
part, with statistics from functions of the two, fi (v, h). The average gradient of the negative log likelihood
of the observed data is thus
X
1 X −∂ log P (vt )
1 XX
=
P (h|vt )fi (vt , h) −
P (v, h)fi (v, h).
T t
∂θi
T t
h
h,v
In the general case, it will be necessary to resort to MCMC not only for the negative phase gradient but also
for the positive phase gradient, i.e. to sample P (v|ht ).
13.10 The Boltzmann Machine
A Boltzmann machine is an undirected probabilistic model, a particular form of log-linear Markov random
field, containing both visible and hidden variables, where the energy function is a second degree polynomial
of the variables x:
E(x) = −d0 x − x0 Ax
82
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
The classic Boltzmann machine has binary variables and inference is conducted via Gibbs sampling, which
requires samples from P (xi |x−i ). It can be easily shown that
P (xi = 1|x−i ) = sigmoid(di + ωi x−i )
where ωi is the ith row of A excluding the ith element (the diagonal of A is 0 in this model). Thus, we see
the link with networks of neurons.
13.10.1 Restricted Boltzmann Machines
A Restricted Boltzmann Machine, or RBM, is a Boltzmann machine without lateral connections between
the visible units vi or between the hidden units hi . The energy function thus becomes
E(v, h) = −b0 h − c0 v − v 0 W h.
where the matrix A is entirely 0 except in the submatrix W . The advantage of this connectivity restriction is that inferring P (h|v) (and also P (v|h)) becomes very easy, can be performed analytically, and the
distribution factorizes:
Y
P (h|v) =
P (hi |v)
i
and
P (v|h) =
Y
P (vi |h)
i
In the case where the variables (“units”) are binary, we obtain once again have a sigmoid activation probability:
X
P (hj = 1|v) = sigmoid(bj +
Wij vi )
i
P (vi = 1|h) = sigmoid(ci +
X
Wij hj )
j
Another advantage of the RBM is that the distribution P (v) can be calculated analytically up to a constant
(the unknown constant being the partition function). This permits us to define a generalization of the notion
of an energy function in the case when we wish to marginalize over the hidden variables: the free energy
(inspired by notions from physics)
P −E(v,h)
e
e−F E(v) X
=
P (v, h) = h
P (v) =
Z
Z
h
X
F E(v) = − log
e−E(v,h)
h
13.10. The Boltzmann Machine
83
Notes de cours IFT6266 H12, Release 2012.01.05
and in the case of RBMs, we have
F E(v) = −b0 v −
X
log
i
X
0
ehi (ci +v W.i )
hi
where the sum over hi is a sum over values that the hidden variables can take, which in the case of binary
units yields
X
0
F E(v) = −b0 v −
log(1 + eci +v W.i )
i
0
F E(v) = −b v −
X
softplus(ci + v 0 W.i )
i
13.10.2 Gibbs sampling in RBMs
Although sampling from P (h|v) is easy and immediate in an RBM, drawing samples from P (v) or from
P (v, h) cannot be done exactly and is thus generally accomplished with MCMC, most commonly with block
Gibbs sampling, where we take advantage of the fact that sampling from P (h|v) and P (v|h) is easy:
v (1) ∼ exemple d0 apprentissage
h(1) ∼ P (h|v (1) )
v (2) ∼ P (v|h(1) )
h(2) ∼ P (h|v (2) )
v (3) ∼ P (v|h(2) )
...
(k)
In order to visualize the generated data at step k, it is better to use expectations (i.e. E[vi |h(k−1) ] =
(k)
P (vi = 1|h(k−1) )) which are less noisy than the samples v (k) themselves.
13.11 Training RBMs
The exact gradient of the parameters of an RBM (for an example v) is
∂ log P (v)
= v 0 E[h|v] − E[v 0 h]
∂W
∂ log P (v)
= E[h|v] − E[h]
∂b
∂ log P (v)
= v − E[v]
∂c
where the expectations are under the distribution of the RBM. The conditional expectations can be calculated
analytically (since E[hi |v] = P (hi = 1|v) = the output of a hidden unit, for binary hi ) but the unconditional
expectations must be approximated using MCMC.
84
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
13.11.1 Contrastive Divergence
The first and simplest approximation of E[v 0 h], i.e., for obtaining ‘negative examples’ (for the ‘negative
phase’ gradient), consists of running a short Gibbs chain (of k steps) beginning at a training example. This
algorithm is known as CD-k (Contrastive Divergence with k steps). See algorithm 1 in Learning Deep
Architectures for AI:
0
0
W ← W + (v (1) ĥ(1) − v (2) ĥ(2) )
b ← b + (ĥ(1) − ĥ(2) )
c ← c + (v (1) − v (2) )
where is the gradient step size, and we refer to the notation for Gibbs sampling from RBMs above, with
(1)
(2)
(2)
ĥ(1) denotes the vector of probabilities P (hi = 1|v1 ) and in the same fashion ĥi = P (hi = 1|v (2) ).
What is surprising is that even with k = 1, we obtain RBMs that work well in the sense that they extract good
features from the data (which we can verify visually byt looking at the filters, the stochastic reconstructions
after one step of Gibbs, or quantitatively by initializing each layer of a deep network with W and b obtained
by pretraining an RBM at each layer).
It can be shown that CD-1 is very close to the training procedure of an autoencoder by minimizing reconstruction error, and one can see that the reconstruction error diminishes in a mostly monotonic fashion
during CD-1 training.
It can also be shown that CD-k tends to the true gradient (in expected value) when k becomes large, but at
the same time increases computation time by a factor of k.
13.11.2 Persistent Contrastive Divergence
In order to obtain a less biased estimator of the true gradient without significantly increasing the necessary
computation time, we can use the Persistent Contrastive Divergence (PCD) algorithm. Rather than restarting
a Gibbs chain after each presentation of a training example v, PCD keeps a chain running in order to obtain
negative examples. This chain is a bit peculiar because its transition probabilities change (slowly) as we
update the parameters of the RBM. Let v − , h− be the state of our negative phase chain. The learning
algorithm is then
ĥi = P (hi = 1|v)
∀i, v̂i− = P (vi = 1|h− )
v − ∼ v̂ −
−
∀i, hbi = P (hi = 1|v − )
h− ∼ ĥ−
0
W ← W + (v ĥ0 − v − ĥ− )
b ← b + (ĥ − ĥ− )
c ← c + (v − v̂ − )
Experimentally we find that PCD is better in terms of generating examples that resemble the training data
(and in terms of the likelihood log P (v)) than CD-k, and is less sensitive to the initialization of the Gibbs
chain.
13.11. Training RBMs
85
Notes de cours IFT6266 H12, Release 2012.01.05
13.12 Stacked RBMs and DBNs
RBMs can be used, like autoencoders, to pretrain a deep neural network in an unsupervised manner, and
finish training in the usual supervised fashion. One stacks RBMs with the hidden layer of one (given its
input) i.e., les P (h|v) or h ∼ P (h|v), becomes the data for the next layer.
The pseudocode for greedy layer-by-layer training of a stack of RBMs is presented in section 6.1 (algorithm
2) of Learning Deep Architectures for AI. To train the k th RBM, we propagate forward samples h ∼ P (h|v)
or the posteriors P (h|v) through the k − 1 previously trained RBMs and use them as data for training the
k th RBM. They are trained one at a time: once we stop training the k th , we move on to the k + 1th .
An RBM has the same parameterization as a layer in a classic neural network (with logistic sigmoid hidden
units), with the difference that we use only the weights W and the biases b of the hidden units (since we
only need P (h|v) and not P (v|h)).
13.12.1 Deep Belief Networks
We can also consider a stacking of RBMs in a generative manner, and we call these models Deep Belief
Networks:
!
`−2
Y
P (x, h1 , . . . , h` ) =
P (hk |hk+1 ) P (h`−1 , h` )
k=0
where we denote x = h0 and hk as the random variable (vector) associated with layer k. The last two
layers have a joint distribution given by an RBM (the last of the stack). The RBMs below serve only to
define the conditional probabilities P (hk |hk+1 ) of the DBN, where hk play the role of visible units and
:math:‘h^{k+1}‘similarly play the role of hidden units in RBM k+1.
Sampling from a DBN is thus performed as follows:
• Sample a h`−1 from the top RBM (number `), for example by running a Gibbs chain
• For k from ` − 1 to 1
– sample the visible units (hk ) given the hidden units (hk+1 ) in RBM k
• Return hk , the last sample obtained, which is the result of generating from the DBN
13.12.2 Unfolding an RBM and RBM - DBN equivalence
It can be shown (see section 8.1 of Learning Deep Architectures for AI.) that an RBM corresponds to DBN
with a particular architecture, where the weights are shared between all the layers: level 1 of the DBN uses
the weights W of the RBM, level 2 uses the weights W 0 , level 3 uses W , etc. alternating between W and
W 0 . The last pair of layers of the DBN is an RBM with weights W or :math‘W’‘ depending on whether
the number of layers is odd or even. Note that in this equivalence, the DBN has layer sizes that alternate
(number of visible units of the RBM, number of hidden units of the RBM, number of visible units, etc.)
In fact we can continue the unfolding of an RBM infinitely and obtain an infinite directed network with
shared weights, equivalently. See figure 13 in the same section, 8.1.
86
Chapter 13. Contents
Notes de cours IFT6266 H12, Release 2012.01.05
It can be seen that this infinite network corresponds exactly to an infinite Gibbs chain that leads to (finishes
on) the visible layer of the original RBM, i.e. that generates the same examples. The even layers correspond
to sampling P (v|h) (of the original RBM) and the odd layers to sampling P (h|v).
Finally, it can be shown that if we take an RBM and unfold it one time (mirrored), the continued training
of the new RBM on top (initialized with W 0 ) maximizes a lower bound on the log likelihood of the corresponding DBN. In passing from an RBM to a DBN, we replace the marginal distribution P (h) of the RBM
(which is encoded implicitly in the parameters of the RBM) with the distribution generated by the part of
the DBN above this RBM (the DBN consists of all layers above h), since this h corresponds to visible units
of this DBN. The proof is simple and instructive, and uses the letter Q for the probabilities according to the
RBM (at the bottom) and the letter P for the probabilities according to the DBN obtained by modeling h
differently (i.e. by replacing Q(h) by P (h)). We also remark that P (x|h) = Q(x|h), but this is not true for
P (h|x) and Q(h|x).
!
X
X
P (x, h)
log P (x) =
Q(h|x) log P (x) =
Q(h|x) log
P (h|x)
h
h
X
P (x, h) Q(h|x)
log P (x) =
Q(h|x) log
P (h|x) Q(h|x)
h
X
X
Q(h|x)
log P (x) = HQ(h|x) +
Q(h|x) log P (x, h) +
Q(h|x) log
P (h|x)
h
h
X
log P (x) = KL(Q(h|x)||P (h|x)) + HQ(h|x) +
Q(h|x) (log P (h) + log P (x|h))
h
log P (x) ≥
X
Q(h|x) (log P (h) + log P (x|h))
h
This shows that one can actually increase the lower bound (last line) by doing maximum likelihood training
of P (h) using as training data the h drawn from Q(h|x), where x is drawn from the training distribution of
the bottom RBM. Since we have decoupled the weights below from those above, we don’t touch the bottom
RBM (P (x|h) and Q(h|x)), and only modify P (h).
13.12.3 Approximate inference in DBNs
Contrary to the RBM, inference in DBNs (inferring the states of the hidden units given the visible units) is
very difficult. Given that we initialize DBNs as a stack of RBMs, in practice the following approximation is
used: sample the hk given the hk−1 using the new weights of level k. This would be exact inference if this
was still an isolated RBM, but it is no longer exact with the DBN.
We saw that this is an approximation in the previous section because the marginal P (h) (of the DBN) differs
from the marginal Q(h) (of the bottom RBM), after modifying the upper weights so that they are no longer
the transpose of the bottom weights, and thus P (h|x) differs from Q(h|x).
13.12.4 Deep Boltzmann Machines
Finally, we can also use a stack of RBMs for initializing a deep Boltzmann machine (Salakhutdinov and
Hinton, AISTATS 2009). This is a Boltzmann machine organized in layers, where each layer is connected
the layer below and the layer above, and there are no within-layer connections.
13.12. Stacked RBMs and DBNs
87
Notes de cours IFT6266 H12, Release 2012.01.05
Note that the weights are somehow two times too big when doing the initialization described above, since
now each unit receives input from the layer above and the layer below, whereas in the original RBM it
was either one or the other. Salakhutdinov proposes thus dividing the weights by two when we make the
transition from stacking RBMs to deep Boltzmann machines.
It is also interesting to note that according to Salakhutdinov, it is crucial to initialize deep Boltzmann machines as a stack of RBMs, rather than with random weights. This suggests that the difficulty of training
deep deterministic MLP networks is not unique to MLPs, and that a similar difficulty is found in deep Boltzmann machines. In both cases, the initialization of each layer according to a local training procedure seems
to help a great deal. Salakhutdinov obtains better results with his deep Boltzmann machine than with an
equivalent-sized DBN, although training the deep Boltzmann machine takes longer.
88
Chapter 13. Contents