Introduction à l'apprentissage profond
10 mai 2016
Intelligence Artificielle
Introduction et logistique
Bonjour à tous. Merci d'être venus si nombreux. On me dit qu'une autre salle est pleine, je suis impressionné par l'intérêt que vous portez à ce sujet.
Bienvenue à tous. Merci pour cette belle participation. J'ai entendu dire qu'une autre salle est pleine, et je suis émerveillé par l'intérêt que vous manifestez.
J'espère que vous allez prendre plaisir à ça autant que j'en prends à en parler. Je vais vous parler d'apprentissage profond, deep learning. Les diapositives sont en anglais, mais je vais parler en français car le Collège de France traduit tous les cours pour qu'un maximum de personnes puisse les lire. Mes diapos sont un peu compliquées.
J'espère que vous l'apprécierez autant que j'apprécie d'en parler. Je vais vous parler de l'apprentissage profond. Les diapositives sont en anglais, mais je parlerai en français car le Collège de France traduit les cours pour que le plus grand nombre puisse les lire. Mes diapositives sont un peu compliquées.
Dans ce premier cours, j'ai modifié l'ordre du jour. Il y aura une introduction sur l'apprentissage profond pour donner les raisons et les techniques de base pour construire des réseaux multicouches à partir d'un assemblage de modules. La semaine prochaine, on parlera des réseaux convolutifs plus en détail. Il y aura également un séminaire de Stéphane Mallat sur la théorie justifiant ces architectures.
Dans ce premier cours, j'ai changé l'ordre du jour ce matin. Nous aurons une introduction à l'apprentissage profond pour expliquer les raisons et les techniques de base pour construire des réseaux multicouches à partir d'un assemblage de modules. La semaine prochaine, nous parlerons des réseaux convolutifs plus en détail. Stéphane Mallat donnera un séminaire sur la théorie justifiant ces architectures.
Principes de l'apprentissage profond
La justification principale de l'apprentissage profond est d'entraîner un système de bout en bout. Au lieu d'utiliser les méthodes conventionnelles avec un extracteur de caractéristiques suivi d'un classifieur, on veut que l'extracteur soit lui-même entraînable pour représenter les données le plus efficacement possible.
La raison principale de l'apprentissage profond est d'entraîner un système de bout en bout. Au lieu d'utiliser les méthodes conventionnelles pour construire des systèmes de reconnaissance de formes avec un extracteur de caractéristiques suivi d'un classificateur entraînable, on veut que l'extracteur de caractéristiques soit entraînable afin qu'il y ait le moins de travail d'ingénierie possible.
Régression linéaire et fonctions de coût
Ce sera intéressant. Je ne vais pas entrer dans les détails de la théorie, mais juste clarifier les choses. J'ai écrit ici une méthode d'apprentissage simple : la régression linéaire. Supposons un vecteur d'entrée X représentant la forme à classer ; c'est de l'apprentissage supervisé.
Ce sera intéressant. Je n'entrerai pas dans les détails de la théorie, mais je vais juste clarifier les choses. Ici, j'ai écrit l'une des méthodes d'apprentissage les plus simples : la régression linéaire. Disons que nous avons un vecteur d'entrée X représentant la forme à classer ; il s'agit d'un apprentissage supervisé.
Nous allons calculer une combinaison linéaire des entrées avec un vecteur de poids W. Le produit scalaire de X et W, soit W transposé X, nous donne un score pour une classe. Si c'est au-delà d'un certain seuil, c'est une classe, sinon c'est une autre. C'est la fonction de coût la plus simple à minimiser. Pour un ensemble d'apprentissage composé de paires X et Y, on minimise la différence entre la sortie produite et la sortie désirée. C'est un coût quadratique.
Nous calculons une combinaison linéaire des entrées avec un vecteur de poids W. Le produit scalaire de X et W, ou la transposée de W par X, donne un score. S'il est au-delà d'un certain seuil, c'est une classe ; sinon, c'en est une autre. C'est la fonction de coût la plus simple à minimiser. Pour un ensemble d'apprentissage donné de paires X et Y, on minimise la différence entre la sortie produite par le système et la sortie souhaitée. C'est un coût quadratique.
Algorithme du gradient et gradient stochastique
On peut calculer le gradient par rapport au vecteur de paramètres et obtenir un terme d'erreur, qui est la différence entre la sortie désirée et la sortie produite à un moment T. Si la sortie est inférieure à celle désirée, on ajoute au vecteur de poids le vecteur d'entrée multiplié par cette erreur. L'algorithme de gradient consiste à déplacer le paramètre dans la direction opposée au gradient.
Vous pouvez calculer le gradient par rapport au vecteur de paramètres et obtenir un terme d'erreur. C'est la différence entre la sortie désirée et la sortie produite par le système. Si la sortie est inférieure à la sortie désirée, vous ajoutez au vecteur de poids le vecteur d'entrée multiplié par cette erreur. L'algorithme de gradient prend la valeur du paramètre actuel et se déplace dans la direction opposée au gradient.
Si vous utilisez une méthode de gradient stochastique, c'est la chose la plus simple et la plus efficace. On met à jour le vecteur de poids en soustrayant le gradient du coût multiplié par une constante. On fait cela pour chaque exemple.
Une méthode de gradient stochastique est la plus simple et la plus efficace. Nous mettons à jour le vecteur de poids en prenant sa valeur actuelle et en soustrayant le gradient du coût multiplié par une constante. Vous faites cela pour chaque exemple.
C'est une règle d'apprentissage simple par correction d'erreur. Si l'erreur est trop petite, vous augmentez les poids dans l'entrée correspondante. Si l'entrée est trop grande, vous la réduisez. Vous augmentez les poids pour une entrée négative.
C'est une règle d'apprentissage simple par correction d'erreur. Si l'erreur est trop petite, vous augmentez les poids de l'entrée correspondante. Si l'entrée est trop grande, vous la réduisez. Vous augmentez les poids pour une entrée négative.
C'est presque magique. Beaucoup de gens en France ont travaillé sur ce problème. Quand vous utilisez cette règle de mise à jour basée on un seul exemple, après de nombreuses itérations, vous finissez par minimiser la moyenne de la fonction de coût sur tous les échantillons d'apprentissage.
C'est presque magique. Beaucoup de gens en France ont travaillé sur ce problème. Lorsque vous utilisez cette règle de mise à jour basée sur un seul exemple, vous finissez par minimiser la moyenne de la fonction de coût sur tous les échantillons d'apprentissage.
C'est ce qu'on appelle les méthodes de gradient stochastique. Elles sont également utilisées dans de nombreux systèmes qui ne sont pas des systèmes d'apprentissage conventionnels, par exemple dans les anciens modems acoustiques.
C'est ce qu'on appelle une méthode de gradient stochastique. Celles-ci sont également utilisées dans de nombreux systèmes, par exemple dans les anciens modems acoustiques.
Le bruit que vous entendiez sur un modem acoustique est la séquence d'apprentissage permettant au modem d'adapter ses paramètres internes pour corriger les défauts sur la ligne téléphonique. C'est un filtre adaptatif dont l'algorithme est très similaire à celui-ci.
Le bruit que vous entendiez sur un modem acoustique est la séquence d'apprentissage permettant au modem d'adapter ses paramètres internes pour corriger les défauts sur la ligne téléphonique. C'est un filtre adaptatif, et l'algorithme utilisé est très similaire à celui-ci.
De nombreuses théories prouvent qu'en utilisant la méthode du gradient stochastique, vous minimisez la moyenne du coût. Ce travail date des années 70 en France avec Benveniste et Francis Bach plus récemment. C'est revenu au goût du jour grâce à l'apprentissage.
Certaines théories prouvent que la méthode du gradient stochastique minimise la moyenne du coût. Ce travail remonte aux années 70 en France avec Benveniste, et plus récemment Francis Bach. C'est revenu à la mode grâce à l'apprentissage automatique.
C'est un peu décevant pour les spécialistes de l'optimisation car l'optimisation stochastique est l'algorithme le plus simple imaginable. Trois lignes de code battent des algorithmes sophistiqués. Concevoir des algorithmes compliqués pour impressionner vos collègues ne fonctionnera pas en pratique.
C'est décevant pour ceux qui s'intéressent à l'optimisation car l'optimisation stochastique est l'algorithme le plus simple que l'on puisse imaginer. Trois lignes de code peuvent surpasser des algorithmes sophistiqués. Concevoir des algorithmes compliqués pour impressionner vos collègues ne fonctionnera pas en pratique.
Perceptron et régression logistique
Il existe des formes similaires pour cette règle d'apprentissage, comme celle du perceptron. La règle de mise à jour est identique à la précédente : c'est Y moins W transposé X pondéré par les poids, avec une fonction de seuil F.
Il existe des formes similaires pour cette règle d'apprentissage, comme celle utilisée pour le perceptron. La règle de mise à jour est identique à la précédente. C'est Y moins la transposée de W par X pondéré par les poids, avec une fonction de seuil F.
F prend la valeur plus un si l'argument est positif et moins un s'il est négatif. L'erreur est binaire ou ternaire. Si Y et F sont tous deux à plus un, l'erreur est nulle. On peut écrire le perceptron et une minimisation quadratique de la même manière en remplaçant F par l'identité.
F prend la valeur plus un si l'argument est positif et moins un s'il est négatif. Cette erreur est binaire ou ternaire. Si Y et F valent tous deux plus un, l'erreur est nulle. Nous pouvons écrire le perceptron et une minimisation quadratique de la même manière en remplaçant F par la fonction identité.
Voici la régression logistique, une méthode très utilisée. La règle de mise à jour est la même, mais F est une fonction sigmoïde ou tangente hyperbolique évoluant doucement entre moins un et plus un.
Voici la régression logistique, une méthode largement utilisée par les statisticiens. La règle de mise à jour est la même, mais au lieu d'une fonction de seuil, F est une fonction sigmoïde ou tangente hyperbolique qui passe doucement de moins un à plus un.
Ces trois algorithmes d'apprentissage simples utilisent des gradients stochastiques et ont la même forme. La seule différence est la nature de la fonction F : sigmoïde, seuil ou identité.
Ces trois algorithmes d'apprentissage simples utilisent des gradients stochastiques et ont la même forme. La seule différence est la nature de la fonction F : une sigmoïde, une fonction de seuil ou une identité.
Limites des modèles linéaires et séparabilité
Les machines linéaires combinant des caractéristiques pour prendre une décision ont leurs limites. La surface de décision produite par un perceptron ou une régression logistique est un hyperplan.
Les machines linéaires qui combinent des caractéristiques pour prendre une décision ont leurs limites. La surface de décision produite par un perceptron ou une régression logistique est un hyperplan.
Y est égal à plus un si le produit scalaire est supérieur à zéro, et moins un s'il est inférieur. L'équation W transposé X égal zéro définit la frontière entre les catégories dans l'espace de décision.
Y est égal à plus un si le produit scalaire est supérieur à zéro et moins un s'il est inférieur à zéro. L'équation de la transposée de W par X égale zéro est l'équation de la surface de décision.
Si le vecteur X a N dimensions, cette surface est un hyperplan séparant l'espace en deux demi-espaces. En dimension deux, il s'agit d'une ligne.
Si le vecteur X a N dimensions, cette surface est un hyperplan. En dimension deux, nous séparons les points par une ligne.
La surface de décision passe par l'origine, ce qui n'est pas optimal. On augmente donc la dimension du vecteur X d'une unité constante égale à un. Le poids correspondant devient un seuil permettant de déplacer l'hyperplan.
La surface de décision passe par l'origine, ce qui n'est pas idéal. Nous augmentons la dimension du vecteur X de un, une composante étant une constante. Le poids correspondant agit comme un seuil pour déplacer l'hyperplan.
Nous préférons inclure le seuil dans le paramètre W. Cette dimension supplémentaire, le biais, permet de déplacer les surfaces de séparation selon la fonction W.
Nous préférons ne pas montrer le seuil séparément. Avec le paramètre W augmenté d'une dimension comme biais, nous obtenons des surfaces de séparation qui se déplacent en fonction de la fonction W.
Certains ensembles de points ne sont pas linéairement séparables. Vous ne pouvez pas les séparer avec un hyperplan ou une ligne.
Certains ensembles de points ne peuvent pas être séparés par un hyperplan. Dans ces exemples, les catégories ne peuvent pas être séparées par une ligne.
Dans les années 60, Tom Cover a établi un théorème : la probabilité qu'un échantillon de P points en dimension N soit linéairement séparable est proche de un quand P est inférieur à N, et proche de zéro s'il est supérieur.
Dans les années 60, Tom Cover a établi que la probabilité que P points en N dimensions soient linéairement séparables est proche de un quand P est plus petit que N, et proche de zéro s'il est plus grand.
Si vous avez plus de N points pour un vecteur de N dimensions, les chances de séparabilité linéaire sont extrêmement faibles. Les données naturelles sont souvent plus séparables qu'un échantillon aléatoire, mais de nombreux problèmes ne le sont pas.
Si vous avez plus de N points dans N dimensions, la probabilité qu'ils soient linéairement séparables est extrêmement faible. Les données naturelles sont souvent plus séparables qu'un échantillon aléatoire, mais de nombreux problèmes ne sont pas du tout linéairement séparables.
On ne peut pas se contenter d'un classifieur linéaire pour la reconnaissance vocale. Comment rendre un problème linéairement séparable ?
On ne peut pas se contenter d'un classificateur linéaire pour la reconnaissance vocale. Comment pouvons-nous rendre un problème linéairement séparable ?
Extraction de caractéristiques et dimensionnalité
Depuis des années, on travaille sur l'extraction de caractéristiques. L'idée est qu'en extrayant les caractéristiques appropriées, le problème devient plus facile à résoudre pour un classifieur.
On travaille depuis des années sur l'extraction de caractéristiques. L'idée est qu'en extrayant les caractéristiques appropriées, le problème devient plus facile à résoudre pour un classificateur.
Une astuce consiste à augmenter les dimensions. Selon le théorème de Cover, une fonction a plus de chances d'être linéairement séparable si elle est représentée par des vecteurs de grande dimension.
Vous pouvez augmenter les dimensions. Selon le théorème de Cover, une fonction a plus de chances d'être linéairement séparable si elle est représentée par des vecteurs de grande dimension.
Pour une image de trois pixels, on cherche une transformation non linéaire pour augmenter la dimension de l'espace. Si elle est linéaire, elle ne fonctionnera pas.
Nous trouvons une transformation non linéaire de l'espace pour augmenter sa dimension. Si la transformation est linéaire, elle ne fonctionnera pas.
Une transformation linéaire projetterait les points dans un espace de haute dimension, mais ils resteraient alignés. Cette transformation non linéaire est le principe de l'extracteur de caractéristiques.
Une transformation linéaire projetterait les points dans un espace de haute dimension, mais ils seraient toujours alignés. Cette transformation non linéaire est l'idée derrière un extracteur de caractéristiques.
On conçoit cette boîte pour augmenter la dimension de la représentation, puis on connecte un classifieur linéaire avec une fonction de coût comme le perceptron ou la fonction hinge.
Nous concevons une boîte pour augmenter la dimension de la représentation, puis nous connectons un classificateur linéaire avec une fonction de coût comme le perceptron ou la fonction de coût charnière (hinge).
C'est un moyen simple d'augmenter les dimensions de manière non linéaire. On peut prendre les variables d'origine, leur carré et leur produit.
C'est un moyen simple d'augmenter les dimensions de manière non linéaire. On prend les variables d'origine, leurs carrés et leurs produits.
En utilisant une combinaison linéaire de ces variables, la surface de décision devient une section conique ou quadratique (ellipse, parabole ou hyperbole). C'est plus flexible, mais on ne peut pas augmenter le degré indéfiniment.
En prenant une combinaison linéaire de ces variables, la surface de décision devient une section conique ou quadratique. C'est plus flexible, mais on ne peut pas trop augmenter le degré.
Cela ne fonctionne pas en grande dimension. Pour la reconnaissance de chiffres manuscrits (16x16 pixels), on a 256 variables. Le degré deux donne 32 000 variables, le degré trois 2,8 millions, et le degré quatre 250 millions.
Cela ne fonctionne pas en grandes dimensions. Pour la reconnaissance de chiffres manuscrits avec des images de 16x16 pixels, vous avez 256 variables. Le degré deux donne 32 000 variables, le degré trois 2,8 millions et le degré quatre 250 millions.
Ce n'est pas pratique pour les images. Au lieu de calculer un polynôme, on peut représenter l'espace comme une collection de régions où les fonctions de base s'activent lorsque le point d'entrée est dans une zone spécifique.
Au lieu de calculer un polynôme, nous pouvons représenter l'espace comme une collection de régions où les fonctions sont activées lorsque le point d'entrée se trouve dans une région spécifique.
Si l'entrée est une seule variable, on utilise de petites fenêtres juxtaposées. Lorsqu'une valeur X est atteinte, l'une des sorties devient élevée. Cependant, nous sommes victimes de la malédiction de la dimensionnalité.
Si l'entrée est une seule variable, vous pouvez utiliser de petites fenêtres de sorte que lorsque X atteint une valeur spécifique, une sortie soit élevée. Cependant, nous sommes victimes de la malédiction de la dimensionnalité.
Méthodes à noyaux et SVM
Si la variable a plusieurs dimensions, couvrir l'espace avec ces fonctions coûterait trop cher. Cela ne fonctionne pas au-delà de quelques dimensions, sauf avec une astuce.
Si notre variable a plusieurs dimensions, couvrir l'espace avec ces fonctions devient très coûteux. Cela ne fonctionne pas avec plus de quelques dimensions sans une astuce intelligente.
On ne place ces fonctions de base qu'aux endroits où se trouvent les données d'apprentissage. La méthode la plus simple consiste à placer une bosse autour de chaque point d'apprentissage.
Vous ne placez ces fonctions qu'aux endroits où vous avez des points d'apprentissage. La méthode la plus simple consiste à placer une de ces bosses autour de chaque point d'apprentissage.
Avec P échantillons d'apprentissage, on obtient un vecteur de caractéristiques à P dimensions. Lorsqu'on présente un exemple, une fonction étroite s'active. C'est ce qu'on appelle les méthodes à base de noyaux.
Avec P échantillons d'apprentissage, vous obtenez un vecteur de caractéristiques à P dimensions. Lorsque vous présentez un exemple d'apprentissage, une fonction est activée. C'est ce qu'on appelle la méthode à base de noyaux.
L'idée est d'utiliser une fonction noyau K. Si X et XK sont proches, la fonction prend une valeur élevée ; sinon, elle est faible.
L'idée est d'utiliser une fonction bosse, ou noyau K. Si X et XK sont proches, elle prend une valeur importante ; sinon, elle est petite.
La fonction discriminante est une combinaison linéaire de ces noyaux. Cela nous donne un paramètre ajustable par ensemble d'apprentissage. En rendant ces noyaux étroits, on peut apprendre l'ensemble sans erreur, mais l'objectif reste la performance en test.
La fonction discriminante est une combinaison linéaire de ces bosses. Cela nous donne un paramètre ajustable par ensemble d'apprentissage. En rendant ces bosses étroites, nous pouvons apprendre l'ensemble sans erreur, mais nous sommes intéressés par les performances lors des tests.
Les machines à vecteurs de support (SVM) utilisent une architecture à deux niveaux. Le premier compare le vecteur d'entrée avec les échantillons d'apprentissage pour calculer un score de ressemblance.
Les machines à vecteurs de support utilisent une architecture à deux niveaux. Le premier niveau compare le vecteur d'entrée avec des échantillons d'apprentissage pour calculer un score de ressemblance.
Chaque boîte donne un score calculé par la fonction K, suivi d'une combinaison linéaire. C'est un extracteur de caractéristiques simple. Le problème est qu'il faut inventer une fonction K pour chaque nouveau problème.
Chaque boîte donne un score de ressemblance à l'aide de la fonction K, suivi d'une combinaison linéaire. La difficulté est qu'il faut inventer une fonction K pour chaque nouveau problème.
Utiliser la distance entre les pixels ne fonctionne pas bien. Bien que la théorie des méthodes à noyaux soit belle, cela ne garantit pas leur efficacité.
Utiliser la distance entre les pixels ne fonctionne pas bien. Même si la théorie est belle, cela ne signifie pas que la méthode fonctionne bien.
Les machines à noyaux sont sur-paramétrées : le vecteur de caractéristiques a autant de dimensions que d'échantillons, offrant une grande flexibilité.
Les machines à base de noyaux sont sur-paramétrées : le vecteur de caractéristiques a autant de dimensions que d'échantillons, ce qui donne beaucoup de flexibilité.
On rend le modèle flexible dans une dimension élevée pour apprendre l'ensemble d'apprentissage, puis on applique une régularisation sur les poids pour garantir la performance sur d'autres ensembles.
L'idée est de rendre le modèle suffisamment flexible dans une dimension élevée pour apprendre l'ensemble d'apprentissage, puis de régulariser les poids pour assurer la performance sur différents ensembles.
La régularisation typique d'un SVM utilise une fonction de coût pour que peu de poids soient non nuls, ce qui produit une combinaison linéaire éparse.
La régularisation typique d'un SVM utilise une fonction de coût de sorte que seuls quelques poids soient non nuls, ce qui donne une combinaison linéaire éparse (sparse).
Cela garantit une meilleure généralisation. Selon les théorèmes de Vapnik, l'erreur sur de nouveaux exemples est réduite si le nombre de termes non nuls est faible. C'est pourquoi on parle de machine à vecteurs de support.
Cela donne de meilleures garanties sur la généralisation. Selon les théorèmes de Vapnik, l'erreur sur les nouveaux exemples est plus faible si le nombre de termes non nuls est petit. C'est ce qu'on appelle une machine à vecteurs de support.
C'est de l'apprentissage superficiel. J'établis ces bases pour montrer la relation entre les méthodes à noyaux et les réseaux de neurones.
Il s'agit d'un apprentissage superficiel. J'établis ces fondements pour montrer la relation entre les méthodes à base de noyaux et les réseaux de neurones.
Architecture des réseaux de neurones
L'architecture du réseau de neurones le plus simple est similaire. Sur la première couche, on calcule le produit scalaire du vecteur d'entrée avec une série de poids, puis on passe le résultat dans une fonction sigmoïde.
L'architecture la plus simple des réseaux de neurones est similaire. Dans la première couche, vous calculez le produit scalaire du vecteur d'entrée avec des vecteurs de poids et vous passez le résultat par une fonction sigmoïde.
Chaque boîte prend une décision élémentaire avec des poids différents, puis on les combine linéairement. Contrairement aux SVM, on ajuste tous les poids du système via la descente de gradient.
Chaque boîte prend une décision élémentaire avec des poids différents, puis les combine linéairement. Contrairement aux SVM, vous ajustez tous les poids du système via une descente de gradient.
Évolution des systèmes de reconnaissance
Avant l'apprentissage profond, les systèmes de reconnaissance utilisaient un pipeline standard.
Jusqu'à l'émergence de l'apprentissage profond, les systèmes de reconnaissance reposaient sur le même pipeline.
Il s'agissait d'un prétraitement fixe extrayant des motifs locaux (MFCC pour le son, SIFT ou HOG pour les images). SIFT signifie shift invariant feature transform et HOG histogram of oriented gradients.
Il s'agissait d'un prétraitement fixe extrayant des motifs locaux (MFCC pour le son, SIFT ou HOG pour les images). SIFT signifie "shift invariant feature transform" et HOG est "histogram of oriented gradients".
Ces méthodes fixes ont été développées sur plusieurs décennies. Avant l'apprentissage profond, on utilisait un niveau intermédiaire pour augmenter la dimension des représentations.
Ces méthodes fixes ont été développées sur plusieurs décennies. Avant l'apprentissage profond, un niveau intermédiaire était utilisé pour augmenter la dimension des représentations.
Pour la parole, on utilise un vecteur de 30 ou 40 dimensions toutes les 10 millisecondes. Pour les images, SIFT ou HOG extrait un vecteur de dimension 128 pour chaque point.
Pour la parole, cela correspond à un vecteur d'environ 30 ou 40 dimensions toutes les 10 millisecondes. Pour les images, SIFT ou HOG extrait un vecteur de caractéristiques de dimension 128 pour chaque point.
Ces dimensions ne suffisent pas pour une bonne classification. La deuxième étape est une transformation non linéaire pour rendre les vecteurs épars (sparse), avec beaucoup de zéros et peu de valeurs significatives.
Ces dimensions ne suffisent pas pour une bonne classification. La deuxième étape est une transformation non linéaire pour rendre les vecteurs épars, avec de nombreux zéros et un petit nombre de valeurs significatives.
On peut utiliser le clustering, K-means ou le codage épars. Les architectures profondes sont similaires, mais leurs paramètres ne sont plus définis à la main par des ingénieurs.
Vous pouvez le faire par clustering, K-means ou codage épars. Les architectures profondes sont similaires, mais leurs paramètres ne sont plus produits à la main par des ingénieurs.
Compositionnalité et hiérarchie
L'apprentissage profond consiste à empiler des modules entraînables. Ces techniques fonctionnent car les données naturelles sont compositionnelles.
L'apprentissage profond consiste à empiler des modules entraînables. Ces techniques fonctionnent parce que les données naturelles sont compositionnelles.
Une scène est une collection de motifs locaux (bords orientés) qui forment des parties d'objets (œil, bouche). En les assemblant, on identifie des objets plus complexes (main, doigt).
Une scène est une collection de motifs locaux, tels que des bords orientés, qui forment des parties d'objets comme un œil ou une bouche. En assemblant ces motifs, vous pouvez identifier des objets plus compliqués comme une main ou un doigt.
Plus on monte en hiérarchie, plus les détecteurs deviennent abstraits et couvrent des zones larges de l'image. Le monde étant composé de parties assemblées hiérarchiquement, ces systèmes ont de bonnes chances de fonctionner.
À mesure que vous montez, les détecteurs identifient des combinaisons de plus en plus abstraites et grandes dans l'image. Puisque le monde est composé de parties assemblées hiérarchiquement, ces systèmes ont de bonnes chances de fonctionner.
Cette compositionnalité existe aussi pour le texte et la parole. Comme le disait Einstein, le monde est compréhensible car il est compositionnel.
Cette compositionnalité existe également pour le texte et la parole. Comme Einstein l'a plaisanté, le monde est compositionnel, sinon Dieu existe.
Si plusieurs couches sont nécessaires, chaque boîte doit apprendre des fonctions utiles aux autres. L'algorithme d'apprentissage veille à cette coordination.
Si plusieurs couches sont nécessaires, l'algorithme d'apprentissage doit s'assurer que chaque boîte apprend des choses utiles aux autres.
Les couches inférieures produisent des détecteurs de motifs utiles à la couche suivante jusqu'à atteindre les catégories. Il faut apprendre à représenter le monde à plusieurs niveaux avant de classer.
Les boîtes du bas produisent des caractéristiques utiles pour la couche suivante jusqu'à ce que nous arrivions aux catégories. Vous devez apprendre à représenter le monde à plusieurs niveaux avant de classer.
Inspiration biologique et neurosciences
L'apprentissage profond permet d'apprendre des représentations hiérarchiques des données. Cela rejoint des questions en neurosciences et en intelligence artificielle : comment le cerveau apprend-il à représenter le monde en l'observant ?
L'apprentissage profond nous permet d'apprendre des représentations hiérarchiques de données. Cela concerne des questions en neurosciences et en intelligence artificielle : comment le cerveau apprend-il à représenter le monde en l'observant ?
L'hypothèse de l'apprentissage profond est qu'une règle simple appliquée à tous les modules suffit. Longtemps, on n'a pas cru aux réseaux de neurones à cause de cette idée jugée présomptueuse.
L'hypothèse derrière l'apprentissage profond est qu'une règle d'apprentissage simple appliquée à tous les modules suffit. Pendant des années, les gens ne croyaient pas aux réseaux de neurones parce que cette idée semblait présomptueuse.
Les systèmes visuels et auditifs montrent que le traitement cérébral est hiérarchique. Simon Thorpe a montré que le traitement dans le cortex visuel est extrêmement rapide.
Les systèmes visuels et auditifs montrent que le traitement cérébral est hiérarchique. Simon Thorpe a montré que le traitement dans le cortex visuel est extrêmement rapide.
Bien que le cortex visuel occupe un quart du cerveau, la reconnaissance d'objets est un processus hiérarchique rapide. Selon Thorpe, pour les objets quotidiens, ce processus est essentiellement feed-forward, sans boucle ni inférences complexes.
Le cortex visuel représente une grande partie du cerveau et la reconnaissance d'objets est un processus hiérarchique rapide. Selon Thorpe, pour les objets du quotidien, ce processus était essentiellement à propagation avant (feed-forward), sans rétroaction ni inférences compliquées.
Il estime le temps qu'il faut pour que le signal aille de la rétine au corps genouillé latéral puis V1, V2, V3, V4.
Cela ne prend pas longtemps pour un grand nombre de synapses ici. Il faut environ 100 millisecondes pour reconnaître des objets simples.
Ce qui signifie qu'il n'y a pas de temps pour la rétroaction. Pas de temps pour beaucoup de couches, peut-être 10 couches, pas plus.
Nous pouvons réaliser une vision relativement compliquée avec beaucoup de propagation avant, mais nous construisons des réseaux de neurones qui sont entièrement à propagation avant et sans boucles.
Types d'apprentissage et modèles
Dans la littérature sur l'apprentissage profond, il existe différents types d'apprentissage profond. La plupart sont de type propagation avant (feed-forward).
Les réseaux récurrents sont également utilisés, mais pour les entraîner, il faut les déplier pour les transformer en un réseau à propagation avant.
Dans les modèles génératifs, le modèle essaie de trouver une sortie qui peut expliquer l'entrée.
C'est ce qu'on appelle des modèles génératifs, un peu comme des modèles inverses, extrêmement lents.
Utiliser une variante bayésienne pour calculer la probabilité d'une entrée étant donné la sortie et trouver la sortie qui peut le mieux reconstruire l'entrée.
Il y a un ancien modèle et un plus récent utilisant des connexions bidirectionnelles, comme les machines de Boltzmann profondes ou les auto-encodeurs empilés.
Nous nous concentrerons principalement sur les réseaux à propagation avant et les réseaux récurrents.
Il existe des techniques d'apprentissage non supervisé où le système doit découvrir la structure cachée de la nature sans étiquettes.
Le problème n'est pas bien défini, et un gros problème avec l'apprentissage non supervisé est que nous ne pouvons pas vérifier si cela fonctionne bien. J'en parlerai dans les deux derniers cours.
Un mélange d'apprentissage supervisé et non supervisé où l'on effectue un pré-entraînement de manière non supervisée, puis on l'affine de manière entièrement supervisée.
Ces méthodes étaient populaires entre 2005 et 2011 parce que les bases de données d'entraînement étaient relativement petites.
Le pré-entraînement non supervisé augmentait les performances, mais cela a disparu lorsque nous avons commencé à avoir de très grandes bases de données.
Il y a de nombreux problèmes que nous ne pouvons imaginer résoudre autrement qu'en utilisant l'apprentissage non supervisé.
Théorie et efficacité des réseaux profonds
Les théoriciens étaient réticents à accepter l'apprentissage profond lorsqu'il a émergé.
Une machine à noyaux peut approximer presque n'importe quelle fonction en choisissant le bon noyau.
Un réseau de neurones peut affiner n'importe quelle fonction avec seulement deux couches. Théoriquement, pourquoi en avons-nous besoin de plus ?
Ces théorèmes sur l'approximation avec deux couches datent de la fin des années 80.
D'une certaine manière, ces machines sont universelles. Pourquoi s'embêter à imaginer des choses plus compliquées ?
Ces machines peuvent approximer n'importe quelle fonction aussi près que nous le souhaitons, mais pas nécessairement de manière efficace.
Le nombre de paramètres requis pour approximer une fonction particulière peut croître très lentement.
La fonction K est censée comparer deux vecteurs d'entrée. Imaginez que vous vouliez faire de la reconnaissance d'images directement sur les pixels ; c'est une mauvaise idée.
La fonction K mesure la ressemblance entre deux images en comparant les pixels.
Lorsque vous prenez une photo de cette chaise et que vous la comparez à une image de la même chaise un peu tournée, les images seront très différentes en termes de pixels.
Si vous ne bougez pas la caméra et que vous déplacez la chaise, la chaise ne sera pas au même endroit, ce qui donne une grande distance bien que ce soit le même objet.
Si vous voulez un système qui reconnaisse ce type de chaise dans n'importe quelle position, il faudra de nombreux exemples auxquels se comparer.
Cela commencera à faire grimper en flèche le nombre de paramètres. Vous auriez également besoin d'exemples de toutes les chaises.
Il n'y a aucun espoir qu'une méthode par comparaison de prototypes puisse fonctionner au niveau d'un pixel.
Pour pouvoir convaincre la communauté scientifique, nous devons trouver un exemple qui fonctionne.
Il n'y a pas de preuve que cela ne fonctionne pas ; cela prouve simplement que vous n'avez pas réussi.
Il y a des résultats récents dans la théorie des circuits, provenant principalement du laboratoire de Bengio, sur ce qui peut être fait via des systèmes en couches.
Il faut toujours faire un compromis entre l'espace mémoire occupé et le temps nécessaire au calcul.
Imaginez que vous vouliez construire un circuit calculant la parité de N bits.
Nous voulons une fonction qui ne nous donne qu'un seul bit : un classifieur si le nombre de bits activés en entrée est pair.
On peut calculer la parité avec un système à deux couches, comme dans les SVM.
Mais cela nécessite un nombre exponentiel d'unités intermédiaires pour ce calcul.
Alors que si vous avez log N couches en base 2, la complexité du circuit est linéaire.
Vous calculez le OU exclusif pour toutes les paires de bits, puis vous combinez les sorties.
Ce qui nous donne un arbre de OU exclusifs. La complexité est linéaire par rapport au nombre de bits d'entrée.
Autre exemple : calculer la somme de deux séquences binaires.
Vous calculez le bit le plus significatif de la somme. Vous pouvez le faire en deux couches, mais cela nécessiterait un très grand circuit.
C'est beaucoup plus facile de le faire en autant de couches que de bits en propageant la retenue.
Ces exemples montrent que l'on peut passer d'un circuit de complexité exponentielle à un circuit de complexité linéaire en ajoutant des couches.
Il est possible d'obtenir des résultats similaires pour les unités de seuil utilisées dans les réseaux de neurones.
Non-convexité et éducation
Les réseaux à base de noyaux ne sont pas profonds. Fondamentalement, les méthodes à base de noyaux comportent deux couches.
L'apprentissage profond est un cauchemar pour les théoriciens car les fonctions de coût à optimiser sont non-convexes.
Il est très difficile de donner une preuve de convergence ou de bornes de généralisation.
C'est ce qui rebute les théoriciens qui estiment que, comme ce n'est pas convexe, ils ne peuvent rien dire.
Ce n'est pas parce que vous n'avez pas fait la théorie que vous ne devriez pas travailler dessus, surtout si cela fonctionne bien.
Tout apprentissage intéressant est non-convexe. Si la fonction est convexe, nous pouvons prouver que les algorithmes convergeront.
Si l'apprentissage humain était convexe, l'ordre dans lequel nous apprenons les choses n'aurait pas d'importance. Nous atteindrions toujours le même minimum, quel que soit l'ordre.
De nombreuses théories sur le développement cognitif montrent que nous développons des concepts simples avant d'autres plus compliqués.
L'éducation consiste à mettre les étudiants dans une situation où leur fonction de coût les amène dans une région intéressante.
Nous complexifions ensuite la tâche, en les menant à un niveau où ils peuvent résoudre des problèmes beaucoup plus compliqués.
L'existence de l'éducation est un symptôme du fait que l'apprentissage n'est pas convexe.
Apprentissage de représentations et variétés
Comment construire des systèmes d'apprentissage profond pour que les caractéristiques qu'ils extraient soient bonnes ?
Nous voulons que la machine apprenne à identifier les variables explicatives indépendantes du monde.
Par exemple, vous pouvez représenter la position et l'orientation d'un objet par six paramètres.
À partir d'un grand ensemble de données, nous voulons que le système trouve les paramètres explicatifs afin de pouvoir ensuite produire une image correspondante.
C'est ce qui se fait dans le traitement d'images par ordinateur.
À partir des données, nous voulons découvrir les caractéristiques explicatives, tout comme un physicien développe une théorie.
Nous recherchons des explications simples avec un petit nombre de paramètres qui permettront de mieux prévoir.
Le travail qu'effectue un algorithme d'apprentissage est le même que celui d'une personne qui développe une théorie.
Si vous preniez une photo de moi et que je faisais une grimace, les images représenteraient des points dans un espace à plusieurs millions de dimensions.
Un appareil photo de 15 millions de pixels vous donne 45 millions de variables.
Toutes les images de mon visage formeraient une surface dans cet espace. Quelle est la dimension de cette surface ?
Les degrés de liberté du visage sont limités par le nombre de muscles.
Le degré de liberté du visage est d'environ 50, pas plus.
La surface formée par toutes les images d'un visage sera une surface d'environ 50 dimensions.
Il serait intéressant d'avoir un système d'apprentissage qui nous dise si nous sommes sur cette surface pour la reconnaissance faciale.
Il devrait également savoir où vous vous trouvez sur cette surface afin de pouvoir connaître l'expression ou la position de la tête.
Le système découvrirait automatiquement le paramétrage de la surface afin que vous puissiez générer une image correspondante.
Nous commençons à explorer cela avec l'apprentissage non supervisé.
Transformation et démêlage de l'espace
Une technique d'extraction de caractéristiques serait une fonction non linéaire étendant la dimension.
Le rôle de cette fonction est de démêler les morceaux d'espace qui sont sémantiquement différents.
Cette extension de dimension rend les points plus faciles à séparer. Ensuite, nous agrégeons, en réduisant de nouveau la dimension.
Imaginez que vous ayez des images représentées par deux dimensions.
Ce sont des exemples de 3 et de 8. Ces deux-là sont très similaires, leurs vecteurs sont très proches.
Ce 3 et ces 3 n'ont aucun pixel en commun, ils sont donc loin les uns des autres. Nous ne pouvons pas les séparer par une ligne.
On peut ajouter une dimension, passer de deux à trois, pour pouvoir déplacer l'hyperplan.
On peut à nouveau projeter cette transformation sur deux dimensions, et maintenant les choses sont séparables.
Ici nous avons six unités et chaque unité détecte si un vecteur d'entrée est proche de son prototype.
Ce composant de vote s'activera si un point d'entrée est proche de ces prototypes.
Nous transformons un vecteur à deux dimensions en un vecteur à six dimensions. C'est la quantification vectorielle.
Ainsi le 3 et le 8 sont séparés, il nous faut assembler les pièces.
C'est l'architecture utilisée dans la reconnaissance d'images et de la parole conventionnelle.
Rétropropagation du gradient
Les réseaux profonds utilisent une transformation linéaire, une non-linéarité, puis une agrégation.
C'est un module de base pour un système profond et vous l'empilez plusieurs fois.
Comment s'entraîne-t-on ? Avec l'algorithme de rétropropagation.
Combien de personnes l'ont utilisé ?
Vous entraînez un système profond par descente de gradient. La fonction de coût mesurera l'erreur entre la sortie et la cible Y.
La fonction de chaque module prend l'entrée et est paramétrée par W.
Comment calculer les gradients ? Nous utilisons les règles de dérivation en chaîne.
Nous voulons calculer le gradient de la fonction de coût par rapport au paramètre de cette boîte et de ces sorties.
La raison pour laquelle nous voulons calculer le gradient par rapport aux entrées est que nous voulons rétropropager le gradient. Les paramètres correspondent à un point dans l'espace.
L'algorithme de gradient consiste à trouver la direction de la pente la plus forte et à faire un pas dans cette direction.
Le vecteur gradient est formé par les dérivées partielles de la fonction de coût par rapport à chaque paramètre.
Si vous vous déplacez un peu dans une direction et que vous regardez de combien l'altitude descend, cela vous donne la pente.
L'optimisation consiste à calculer le gradient et à faire un pas dans la direction opposée.
Puisque nous utilisons une méthode de gradient stochastique, l'estimation est bruitée car elle concerne un exemple spécifique.
Nous le faisons sur la base d'un seul exemple et passons au suivant.
C'est un vecteur gradient de la fonction de coût par rapport aux entrées d'un module.
Nous regardons chaque entrée et la variation de la fonction de coût lorsque nous modifions légèrement chaque entrée.
La dérivée par rapport à l'entrée est égale à la dérivée par rapport à la sortie multipliée par la matrice jacobienne.
Cela recueille la sensibilité de chaque sortie de module par rapport à chaque entrée.
Ce qui nous donne une équation de récurrence.
Je peux faire cela jusqu'à l'entrée. Le gradient par rapport au paramètre W utilise une autre matrice jacobienne.
Pour chaque module, pour calculer le gradient par rapport à l'entrée à partir du gradient pour la sortie, je le multiplie par la matrice jacobienne.
Implémentation avec Torch
On peut construire un logiciel d'apprentissage profond en ayant une liste d'objets, chacun représentant un module.
La machine entraînable est un graphe de ces modules assemblés, calculant la sortie et les gradients.
Prenons un vecteur d'entrée et un module linéaire qui multiplie par une matrice et ajoute un vecteur de biais.
Nous mettons une couche de non-linéarité qui transforme chaque composant.
Une fonction ReLU est une demi-rectification : la sortie est zéro si l'entrée est négative, et l'identité si elle est positive.
Ce réseau est branché sur une fonction de coût, comme la distance euclidienne au carré.
Voici un exemple de code pour créer ces outils à l'aide de Torch.
Torch est utilisé par Facebook, DeepMind, Twitter et d'autres entreprises.
Il utilise un langage interactif appelé Lua, qui est simple et rapide.
Vous avez la taille de l'entrée (28x28), 1 000 unités cachées et 10 sorties.
Nous créons une instance d'une classe séquentielle pour empiler des modules.
Nous ajoutons un module linéaire, une ReLU, un autre module linéaire et un log softmax.
Ensuite, nous mettons un module de coût, qui est NLL (log-vraisemblance négative).
Nous voulons maximiser la vraisemblance. Puisque nous préférons minimiser, nous prenons l'opposé du logarithme.
Nous prenons un vecteur d'entrée et calculons la sortie et la fonction de coût.
Vous annulez les gradients puis calculez la rétropropagation.
Ceci calcule le gradient par rapport aux paramètres et peut ensuite être branché sur des modules d'optimisation.
De nombreux modules pré-implémentés peuvent être assemblés pour construire des modules compliqués.
Il existe des fonctions pour calculer les logarithmes, les sinus, ou pour dupliquer une entrée.
Détails mathématiques des modules
Pour chaque état interne, vous devez stocker l'état propagé vers le haut et le gradient de coût par rapport à cet état.
Dans un module linéaire, le gradient du coût par rapport à l'entrée est égal au gradient du coût par rapport à la sortie multiplié par la matrice de poids.
Le gradient du coût par rapport à l'entrée transposée est égal au gradient par rapport à la sortie multiplié par la matrice transposée.
Le gradient du coût par rapport à un poids IJ est égal au produit de l'entrée J par le gradient I.
Pour une fonction non linéaire, vous multipliez le gradient par rapport à la sortie par la dérivée de la fonction.
Un module de distance euclidienne calcule la norme au carré de la différence entre les deux vecteurs.
Lors de la rétropropagation dans un module de duplication, vous devez additionner les gradients.
Dans la rétropropagation d'un commutateur, vous avez une copie de l'entrée qui a été activée et vous mettez les autres à zéro.
Softmax transforme les scores en une distribution de probabilité.
Chaque sortie est égale à l'exponentielle divisée par la somme de toutes les exponentielles.
Pendant l'entraînement, vous entraînez le réseau de sorte que la probabilité de la bonne classe soit aussi élevée que possible.
Nous préférons minimiser l'opposé du logarithme de la vraisemblance.
Il est préférable d'utiliser un module appelé log softmax.
Le log softmax calcule la différence entre les vecteurs d'entrée et le terme de normalisation.
Pour la rétropropagation, le gradient par rapport à une entrée est égal au gradient par rapport à la sortie multiplié par les résultats du softmax.