Le Deep Learning est devenu l'une des branches de l'intelligence artificielle les plus en vogue ces derniers temps. Tous les grands du web investissent des fortunes pour faire avancer la recherche ainsi que le développement d'applications utilisant ces techniques. Cette présentation a pour but de vous introduire au Deep Learning en répondant à une question concrète : Peut-on détecter le sentiment d'une personne à partir d'une simple photo ? La question est simple, mais le chemin pour y répondre est semé d'embuches ! Nous parlerons pour cela des principaux concepts ainsi que des outils à votre disposition, avec un focus particulier sur TensorFlow.
11. @xebiconfr #xebiconfr
En quoi ce problème est-il difficile ?
● Système visuel humain extrêmement
complet
● L’être humain est très bon pour donner
du sens à ce qu’il voit
○ Mais ce travail est fait de manière
inconsciente
11
2e
12. @xebiconfr #xebiconfr
En quoi ce problème est-il difficile ?
● Très difficile d’exprimer de manière
algorithmique ce qui permet de
reconnaître une image
● Machine Learning
○ Large échantillon d’images pour
lesquelles on connaît le label
=> Apprentissage automatique de
règles
12
2f
16. @xebiconfr #xebiconfr
Comment fonctionne un Réseau de Neurones ?
16
3b
Softmax
Chaque neurone
intermédiaire représente
une somme pondérée des
valeurs des neurones de la
couche précédente,
associés à une fonction
d’activation
La dernière couche
(softmax) est une
normalisation de la
couche de sortie afin que
les résultats correspondent
à des probabilités
(sommant à 1)
18. @xebiconfr #xebiconfr
Tout est une histoire de matrices
18
3d
Y = XW + b
classes = softmax(Y)
[4, 2][K, 4][K, 2]
Avec des batches d’images
...
[2]
19. @xebiconfr #xebiconfr
Tout est une histoire de matrices
19
3e
Y = f(XW1 + b1) W2 + b2
classes = softmax(Y)
[3, 2]
[3][K, 2]
[2][K, 4]
[4, 3]
fonction d’activation
20. @xebiconfr #xebiconfr
Comment trouver les poids ?
20
3f
Back-propagation: Mise à jour des poids en fonction du gradient des erreurs, de la dernière
couche à la première
21. @xebiconfr #xebiconfr
Comment trouver les poids ?
21
3f
Back-propagation: Mise à jour des poids en fonction du gradient des erreurs, de la dernière
couche à la première
22. @xebiconfr #xebiconfr
Comment trouver les poids ?
22
3f
Back-propagation: Mise à jour des poids en fonction du gradient des erreurs, de la dernière
couche à la première
23. @xebiconfr #xebiconfr
TensorFlow
● Framework de programmation open-sourcé par
Google en 2016
● Aujourd’hui en version 0.11
● APIs en Python, C++
● Principalement utilisé pour l’entraînement et
l’utilisation de Réseaux de Neurones, et plus
particulièrement pour le Deep Learning
23
3g
Aujourd’hui l’un des frameworks les plus utilisés pour le Deep Learning, avec une
documentation très riche.
50. @xebiconfr #xebiconfr
Pourquoi les résultats ne s’améliorent pas ?
50
7e
● Normalement, un réseau plus profond
permet d’apprendre des fonctions plus
complexes
Mais ...
● Différentes vitesses d’apprentissage des
poids selon les couches
● La mise à jours des poids d’une couche
dépend de celle des poids de la couche
suivante (back-propagation)
51. @xebiconfr #xebiconfr
Quelles solutions ?
51
7f
Changement d’architecture de réseau ?
Algorithme d’apprentissage plus avancé ?
Changement de fonction d’activation ?
57. @xebiconfr #xebiconfr
Réfléchissons un peu
57
8a
● Est-ce une bonne idée d’utiliser des réseaux de neurones où tous
les neurones entre deux couches sont connectés entre eux ?
● Ce type de réseau ne prend pas en compte la structure spatiale de
l’image
58. @xebiconfr #xebiconfr
Réfléchissons un peu
● Est-ce une bonne idée d’utiliser des réseaux de neurones où tous
les neurones entre deux couches sont connectés entre eux ?
● Ce type de réseau ne prend pas en compte la structure spatiale de
l’image
58
8a
59. @xebiconfr #xebiconfr
Réfléchissons un peu
59
8a
● Est-ce une bonne idée d’utiliser des réseaux de neurones où tous
les neurones entre deux couches sont connectés entre eux ?
● Ce type de réseau ne prend pas en compte la structure spatiale de
l’image
60. @xebiconfr #xebiconfr
Réfléchissons un peu
60
8a
● Est-ce une bonne idée d’utiliser des réseaux de neurones où tous
les neurones entre deux couches sont connectés entre eux ?
● Ce type de réseau ne prend pas en compte la structure spatiale de
l’image
61. @xebiconfr #xebiconfr
Réfléchissons un peu
61
8a
● Est-ce une bonne idée d’utiliser des réseaux de neurones où tous
les neurones entre deux couches sont connectés entre eux ?
● Ce type de réseau ne prend pas en compte la structure spatiale de
l’image
73. @xebiconfr #xebiconfr
Hypothèses principales
● Associations locales
○ Tous les pixels ne sont pas connectés à tous les neurones
cachés
○ Les connexions sont faites dans des petites zones localisées
de l’image
● Mêmes poids et biais pour tous les neurones d’une même couche
○ Tous les neurones d’une même couche cachée détectent le
même pattern (ex : un coin)
● Pooling
○ Souvent utilisés juste après une couche de convolution
○ Condenser l’information autour d’une région (max/mean)
73
8c
88. @xebiconfr #xebiconfr
BE SMART!
● Exploiter au mieux la structure de
vos données.
● Certaines architectures sont plus
adaptées pour les images,
d’autres pour le texte, etc.
89. @xebiconfr #xebiconfr
TEST AND
LEARN!
● Pas de règles absolues sur les
structures de réseaux de
neurones qui fonctionnent le
mieux.
● Tester intelligemment différentes
structures et essayer de
comprendre pourquoi l’une
fonctionne mieux que l’autre.
90. @xebiconfr #xebiconfr
DO NOT
REINVENT
THE WHEEL!
● L’écosystème autour du Deep
Learning est en croissance
continue.
● De plus en plus de frameworks sont
disponibles et bien documentés
(TensorFlow, Keras, etc.).
● Commencer avec des exemples
connus puis se perfectionner par
rapport aux données à disposition.
91. @xebiconfr #xebiconfr
HAVE FUN!
● Introduction à TensorFlow - Martin
Görner (Google)
https://docs.google.com/presentation/d/1TVixw6ItiZ8igjp6U17tcgoFrLSaHWQm
MOwjlgQY9co/pub?start=false&loop=false&delayms=3000
● Neural Networks and Deep Learning -
Online Book
http://neuralnetworksanddeeplearning.com/
● TensorFlow documentation
https://www.tensorflow.org/