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