Deep learning : votre propre cerveau artificiel avec Python

publicité
Deep learning : votre propre cerveau artificiel
avec Python
Nicolas Audebert (@nshaud)
[email protected]
15 octobre 2016
C’est quoi le deep learning ?
Outils, techniques et applications
Exemple d’implémentation avec Python
Pour aller plus loin
15 octobre 2016
https://nicolas.audebert.at
1/30
C’est quoi le deep learning ?
Du cortex visuel…
Le cortex visuel des mammifères est constitué de neurones
qui :
▶
▶
▶
calculent des convolutions (aka des filtres),
génèrent des représentations abstraites,
via des activations neuronales (impulsions électriques).
Par Selket, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=1679336
15 octobre 2016
https://nicolas.audebert.at
2/30
Du cortex visuel…
Comment ?
Le cerveau sait transformer l’image pour répondre à :
▶
”Où ?” : localisation
▶
”Quoi ?” : sémantique
15 octobre 2016
https://nicolas.audebert.at
3/30
Du cortex visuel…
15 octobre 2016
https://nicolas.audebert.at
4/30
Vers un modèle mathématique
L’activation d’un neurone peut se traduire par la
transformation (non-linéaire) d’une entrée en une sortie (une
fonction de transfert).
https://commons.wikimedia.org/wiki/File:Logistic-curve.svg
15 octobre 2016
https://nicolas.audebert.at
5/30
Vers un modèle mathématique
Exemple de convolution :
http://setosa.io/ev/image-kernels/
15 octobre 2016
https://nicolas.audebert.at
6/30
Vers un modèle mathématique
Simuler des neurones artificiels ? C’est possible !
15 octobre 2016
https://nicolas.audebert.at
7/30
L’apprentissage automatique
À quoi ça sert ?
Rendre l’ordinateur capable…d’apprendre !
Comment ?
Grâce à l’apprentissage par l’exemple
15 octobre 2016
https://nicolas.audebert.at
8/30
Pour quelles tâches ?
Bas niveau
▶
Reconnaissance vocale
▶
Détection d’objets
▶
Études statistiques
Haut niveau
▶
Conduite autonome
▶
Jeu de Go
▶
Traduction en temps réel
15 octobre 2016
https://nicolas.audebert.at
9/30
Principe de l’apprentissage
Minimiser l’erreur entre une prédiction et la vérité
15 octobre 2016
https://nicolas.audebert.at
10/30
Exemples
AlphaGo, Autopilot Tesla, Google Translate, Prisma, …
15 octobre 2016
https://nicolas.audebert.at
11/30
Outils, techniques et applications
Idée générale
▶
On définit une architecture (ou topologie) de réseau de
neurones artificiels.
▶
On apprend (optimise) les poids des connexions entre
neurones.
▶
Pour minimiser l’erreur entre prédiction et objectif.
Différentes architectures pour différentes tâches
L’architecture choisie dépend du format d’entrée (texte,
image…) et de la tâche à réaliser (détection, classification…).
15 octobre 2016
https://nicolas.audebert.at
12/30
Réseau de neurones ”entièrement connecté”
Michael A. Nielsen, ”Neural Networks and Deep Learning”, CC-NC-3.0
▶
▶
entrée = vecteur 1D, sortie = vecteur 1D
exemple : classer homme/femme en fonction d’un vecteur
de préférences de films
15 octobre 2016
https://nicolas.audebert.at
13/30
Réseau de neurones ”convolutif”
Maurice Peemen,
https://devblogs.nvidia.com/parallelforall/deep-learning-nutshell-core-concepts/
▶
entrée = image (matrice 2D), sortie = vecteur 1D
15 octobre 2016
https://nicolas.audebert.at
14/30
Auto-encodeurs
Hasan et al., ”Learning Temporal Regularity in Video Sequences”
▶
▶
entrée = n’importe, sortie = même que l’entrée
représentation au milieu = compression, débruitage…
15 octobre 2016
https://nicolas.audebert.at
15/30
L’analyse d’image
Noh et al., ”Learning Deconvolution Network for Semantic Segmentation”
▶
entrée = image (matrice 2D), sortie = carte (matrice 2D)
▶
exemple : détourer les objets dans un flux vidéo
15 octobre 2016
https://nicolas.audebert.at
16/30
Générer du contenu
Exemples : Prisma, mais aussi la génération de musique
15 octobre 2016
https://nicolas.audebert.at
17/30
Exemple d’implémentation avec
Python
Frameworks Python
▶
Beaucoup de frameworks
▶
Performances à peu près équivalentes
15 octobre 2016
https://nicolas.audebert.at
18/30
Frameworks Python
Les frameworks
Utilisent C++ et CUDA en back-end
▶
Caffe (Berkeley), orienté ”images”
▶
TensorFlow (Google)
▶
Theano (U. Montréal)
▶
Neon (Nervana Systems)
Les surcouches
▶
Keras : surcouche pour Theano et TensorFlow
▶
Lasagne : surcouche pour Theano
15 octobre 2016
https://nicolas.audebert.at
19/30
Matériel
GPU recommandé
Les réseaux de neurones sont très gourmands
en calcul mais bien adaptés au traitement
parallèle sur GPU (notamment pour les
convolutions).
▶
Avantage notable à NVIDIA
▶
Implémentations rapides avec CUDA/CuDNN
▶
≈ 10x plus rapide sur GPU vs CPU
15 octobre 2016
https://nicolas.audebert.at
+
20/30
Setup
1. Installer CUDA/CuDNN
2. Installer Python
3. pip install keras (Theano par défaut)
15 octobre 2016
https://nicolas.audebert.at
21/30
À quoi ça ressemble ?
Avec Keras :
15 octobre 2016
https://nicolas.audebert.at
22/30
À quoi ça ressemble ?
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
# input 32*32 flattened image
model.add(Dense(4096,input_dim=32*32,activation='relu'))
model.add(Dense(4096,activation='relu'))
model.add(Dense(4096,activation='relu'))
model.add(Dense(10,activation='softmax'))
# Compile model
model.compile(loss='categorical_crossentropy',
optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X_train,y_train,nb_epoch=10,batch_size=200)
15 octobre 2016
https://nicolas.audebert.at
23/30
À quoi ça ressemble ?
Avec Keras :
15 octobre 2016
https://nicolas.audebert.at
24/30
À quoi ça ressemble ?
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
model = Sequential()
# input: 32x32 images with 3 channels
model.add(Convolution2D(32, 3, 3, input_shape=(3, 32, 32
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(32, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
15 octobre 2016
https://nicolas.audebert.at
25/30
À quoi ça ressemble ?
# Flatten the feature maps
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
# 26 output classes (e.g. alphabet)
model.add(Dense(26))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam')
model.fit(X_train, Y_train, batch_size=32, nb_epoch=1)
15 octobre 2016
https://nicolas.audebert.at
26/30
Pour aller plus loin
Les concepts avancés
Modèles génératifs (créer des images, de la
musique…aléatoirement !)
15 octobre 2016
https://nicolas.audebert.at
27/30
Les concepts avancés
Apprentissage par renforcement (AlphaGo, Space Invaders,
Doom…)
15 octobre 2016
https://nicolas.audebert.at
28/30
Ressources pour débuter
En français
▶
Cours de Yann LeCun au Collège de France
▶
MOOC ”Réseaux de neurones” par G. Hinton (Coursera)
En anglais
▶
Deep Learning par Goodfellow et al.
▶
Documentation Caffe (notebooks)
▶
https://github.com/ChristosChristofidis/
awesome-deep-learning
▶
https://github.com/kjw0612/awesome-deep-vision
15 octobre 2016
https://nicolas.audebert.at
29/30
Fin
Questions ?
Et réponses ?
Contact
[email protected]
15 octobre 2016
https://nicolas.audebert.at
30/30
Téléchargement