Apprentissage Automatique et Réseaux Neuronaux - page 59

 

Cours 13.2 — Réseaux de croyance



Conférence 13.2 — Belief Nets [Réseaux de neurones pour l'apprentissage automatique]

J'ai abandonné la rétropropagation dans les années 1990 en raison de sa dépendance à un grand nombre d'étiquettes, qui étaient rares à l'époque. Cependant, j'ai été inspiré par le succès de l'apprentissage avec peu d'étiquettes explicites. Pour préserver les avantages de l'apprentissage par descente de gradient sans avoir besoin d'étiquettes détaillées, j'ai exploré des fonctions objectives alternatives. Les modèles génératifs, qui visent à modéliser les données d'entrée plutôt que de prédire les étiquettes, s'inscrivent bien dans cette poursuite. Les modèles graphiques, un concept combinant des structures de graphes discrets avec des calculs à valeurs réelles, sont apparus comme une approche prometteuse en statistique et en intelligence artificielle. Alors que les machines Boltzmann étaient les premiers exemples de modèles graphiques non dirigés, en 1992, Bradford Neil a introduit des modèles graphiques dirigés appelés réseaux de croyances sigmoïdes , utilisant des unités similaires aux machines Boltzmann. Le défi est alors devenu comment apprendre ces réseaux de croyances sigmoïdes.

L'apprentissage des réseaux de croyances sigmoïdes a rencontré plusieurs problèmes. Les réseaux profonds avec plusieurs couches cachées ont souffert d'un apprentissage lent. Il a été découvert qu'une mauvaise initialisation du poids contribuait à ce problème. La rétropropagation avait également tendance à rester bloquée dans des optima locaux sous-optimaux, qui, bien que raisonnablement bons, étaient loin d'être optimaux pour les réseaux profonds. Bien qu'il soit possible de se replier sur des modèles plus simples permettant une optimisation convexe, cela ne traitait pas la complexité des données du monde réel. Pour surmonter ces limitations, l'apprentissage non supervisé est apparu comme une solution. En utilisant l'apprentissage non supervisé, nous pourrions tirer parti de l'efficacité et de la simplicité des méthodes de gradient et de la descente stochastique de mini-lots pour l'ajustement du poids. Cependant, l'accent s'est déplacé sur la modélisation de la structure de l'entrée sensorielle plutôt que sur la relation entrée-sortie. Les poids seraient ajustés pour maximiser la probabilité que le modèle génératif produise l'entrée sensorielle observée.

Deux problèmes principaux se sont posés : le problème d'inférence et le problème d'apprentissage. Le problème d'inférence consistait à déduire les états de variables non observées, visant à dériver des distributions de probabilité sur ces variables étant donné qu'elles n'étaient pas indépendantes les unes des autres. Le problème d'apprentissage consistait à ajuster les interactions entre les variables pour rendre le réseau plus susceptible de générer les données d'apprentissage. Cela impliquait de déterminer quels nœuds influençaient les autres et la force de leur effet.

Le mariage des modèles graphiques et des réseaux de neurones avait une dynamique unique. Les premiers modèles graphiques reposaient sur des structures de graphes définies par des experts et des probabilités conditionnelles, visant à résoudre le problème d'inférence. D'autre part, les réseaux de neurones donnaient la priorité à l'apprentissage et évitaient les connaissances manuelles. Bien que les réseaux de neurones manquaient d'interprétabilité et de connectivité clairsemée pour une inférence facile, ils avaient l'avantage d'apprendre à partir des données de formation. Cependant, des versions de réseaux de neurones des filets de croyance ont été développées. Lors de la construction de modèles génératifs utilisant des neurones idéalisés, deux types ont émergé : les modèles basés sur l'énergie et les modèles causaux. Les modèles basés sur l'énergie ont utilisé des connexions symétriques entre les neurones stochastiques binaires, ce qui a donné des machines de Boltzmann. Alors que l'apprentissage des machines Boltzmann s'est avéré difficile, la restriction de la connectivité a facilité l'apprentissage pour les machines Boltzmann restreintes. Cependant, cette approche a limité la puissance des réseaux de neurones à plusieurs couches cachées. Les modèles causaux, qui utilisaient des graphes acycliques dirigés avec des neurones stochastiques binaires, ont donné naissance aux réseaux de croyances sigmoïdes. En 1992, Neil a démontré que les réseaux de croyances sigmoïdes étaient légèrement plus faciles à apprendre que les machines Boltzmann. Dans un réseau de croyances sigmoïde, toutes les variables sont des neurones stochastiques binaires, et la génération de données implique de prendre des décisions stochastiques couche par couche, produisant finalement des échantillons non biaisés de valeurs visibles.

En adoptant des modèles causaux ou des approches hybrides, nous pourrions surmonter les limites de la rétropropagation et tirer parti de l'apprentissage non supervisé pour modéliser efficacement la structure de l'entrée sensorielle.

Avant de se plonger dans les réseaux de croyances causales constitués de neurones, il est essentiel de fournir quelques informations sur la relation entre l'intelligence artificielle (IA) et la probabilité. Dans les années 1970 et au début des années 1980, il y avait une forte résistance au sein de la communauté de l'IA envers la probabilité. La probabilité était considérée comme défavorable et les chercheurs en IA ont préféré le traitement des symboles discrets sans incorporer d'éléments probabilistes. Cependant, une exception notable était John von Neumann, qui a reconnu le potentiel d'un lien entre la logique formelle et la thermodynamique, en particulier le travail de Boltzmann. Malheureusement, les idées de von Neumann n'ont pas gagné en popularité de son vivant.

Finalement, les probabilités ont trouvé leur place dans l'IA grâce au développement de modèles graphiques, qui combinent la théorie des graphes et la théorie des probabilités. Dans les années 1980, les chercheurs en intelligence artificielle travaillaient sur des problèmes pratiques impliquant des incertitudes, comme le diagnostic médical ou l'exploration minière. Bien qu'il y ait eu une aversion pour les probabilités, il est devenu clair que l'utilisation des probabilités était plus efficace que les méthodes ad hoc. Les modèles graphiques, introduits par Perl Hackerman Lauritzen et d'autres, ont fourni un cadre pour représenter l'incertitude et effectuer des calculs probabilistes basés sur des structures de graphes.

Les modèles graphiques englobent divers types de modèles, et un sous-ensemble est celui des réseaux de croyances. Les Belief Nets sont des graphes orientés acycliques constitués de variables stochastiques. Ces graphes ont souvent des nœuds peu connectés et permettent des algorithmes d'inférence efficaces qui calculent les probabilités des nœuds non observés. Cependant, ces algorithmes deviennent exponentiellement complexes lorsqu'ils sont appliqués à des réseaux densément connectés.

Un réseau de croyances sert de modèle génératif et son problème d'inférence consiste à déterminer les états de variables non observées, ce qui entraîne des distributions de probabilité sur ces variables. Le problème d'apprentissage se concentre sur l'ajustement des interactions entre les variables pour augmenter la probabilité de générer les données d'apprentissage observées.

Dans le contexte des réseaux de neurones, il existe un lien entre les modèles graphiques et les réseaux de neurones. Les premiers modèles graphiques reposaient sur des structures de graphes définies par des experts et des probabilités conditionnelles, abordant principalement le problème d'inférence. D'autre part, les réseaux de neurones ont mis l'accent sur l'apprentissage à partir des données de formation et ont évité les connaissances artisanales. Alors que les réseaux de neurones manquaient d'interprétabilité et de connectivité clairsemée, ils offraient l'avantage de l'adaptabilité par l'apprentissage.

Pour construire des modèles génératifs avec des neurones idéalisés, deux types principaux peuvent être considérés. Les modèles basés sur l'énergie, tels que les machines de Boltzmann, connectent symétriquement les neurones stochastiques binaires. Cependant, l'apprentissage des machines Boltzmann est un défi. Une autre option est les modèles causaux, qui utilisent des graphes acycliques dirigés composés de neurones stochastiques binaires. En 1992, Neil a introduit les réseaux de croyances sigmoïdes, qui étaient plus faciles à apprendre que les machines Boltzmann. Les réseaux de croyances sigmoïdes sont des modèles causaux où toutes les variables sont des neurones stochastiques binaires.

Pour générer des données à partir d'un modèle causal tel qu'un réseau de croyances sigmoïde, des décisions stochastiques sont prises couche par couche, en commençant par la couche supérieure et en descendant jusqu'aux effets visibles. Ce processus donne un échantillon impartial de valeurs visibles selon les croyances du réseau neuronal.

En adoptant un apprentissage non supervisé et en utilisant des modèles causaux ou des approches hybrides, il est possible de surmonter les limites de la rétropropagation et de tirer parti de la puissance de l'apprentissage non supervisé pour modéliser efficacement la structure des entrées sensorielles. Ces avancées offrent une voie prometteuse pour relever les défis posés par les réseaux de neurones profonds et ouvrent la voie à des algorithmes d'apprentissage plus sophistiqués et plus efficaces.

En conclusion, l'exploration des réseaux de croyances et leur connexion aux réseaux de neurones a ouvert de nouvelles possibilités pour l'IA et la modélisation probabiliste. La résistance initiale à la probabilité dans l'IA a été surmontée et les modèles graphiques sont devenus un cadre puissant pour représenter l'incertitude et effectuer des calculs probabilistes.

Les réseaux de croyance, en particulier les réseaux de croyance sigmoïdes, offrent une approche alternative à la modélisation générative par rapport aux modèles basés sur l'énergie comme les machines de Boltzmann. En utilisant des graphes acycliques dirigés et des neurones stochastiques binaires, les réseaux de croyances sigmoïdes fournissent un moyen de générer des données et d'apprendre plus efficacement à partir d'ensembles d'apprentissage.

L'intégration de l'apprentissage non supervisé avec des modèles causaux ou des approches hybrides a le potentiel de remédier aux limites de la rétropropagation dans les réseaux de neurones profonds. En modélisant la structure des entrées sensorielles et en maximisant la probabilité des données observées, ces approches offrent un moyen de tirer parti de l'efficacité et de la simplicité des méthodes de gradient tout en capturant la complexité des données du monde réel.

L'évolution de l'IA et l'adoption de la probabilité ont remodelé le domaine, permettant aux chercheurs de développer des modèles plus robustes et adaptables. Au fur et à mesure que le voyage se poursuit, de nouvelles avancées dans la modélisation probabiliste, les réseaux de neurones et l'apprentissage non supervisé sont susceptibles d'émerger, conduisant à des systèmes d'IA plus sophistiqués et intelligents.

En combinant les atouts des modèles graphiques et des réseaux de neurones, les chercheurs peuvent continuer à repousser les limites de l'IA, ouvrant de nouvelles possibilités de compréhension, d'apprentissage et de prise de décision dans des environnements complexes et incertains.

Lecture 13.2 — Belief Nets [Neural Networks for Machine Learning]
Lecture 13.2 — Belief Nets [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 13.3 — Apprentissage des réseaux de croyances sigmoïdes



Cours 13.3 — Apprentissage des réseaux de croyances sigmoïdes [Réseaux de neurones pour l'apprentissage automatique]

La vidéo traite des défis de l'apprentissage des réseaux de croyances sigmoïdes et présente deux méthodes différentes pour relever ces défis. Contrairement aux machines Boltzmann, les réseaux de croyances sigmoïdes ne nécessitent pas deux phases différentes pour l'apprentissage, ce qui simplifie le processus. Ce sont des modèles localement normalisés, éliminant le besoin de traiter les fonctions de partition et leurs dérivées.

L'apprentissage dans les réseaux de croyances sigmoïdes devient facile si nous pouvons obtenir des échantillons non biaisés à partir de la distribution a posteriori sur les unités cachées compte tenu des données observées. Cependant, l'obtention d'échantillons non biaisés est difficile en raison d'un phénomène appelé « explication », qui affecte la distribution postérieure. Ce phénomène provient de l'anti-corrélation entre les causes cachées lorsqu'un effet observé se produit.

Apprendre dans des réseaux de croyances sigmoïdes profonds avec plusieurs couches de variables cachées devient encore plus difficile. La distribution a posteriori sur la première couche de variables cachées n'est pas factorielle en raison de l'explication, et des corrélations entre les variables cachées existent à la fois dans l'a priori et dans l'a posteriori. Le calcul du terme a priori pour la première couche nécessite l'intégration de tous les schémas d'activité possibles dans les couches supérieures, ce qui rend le processus d'apprentissage complexe.

Deux méthodes d'apprentissage des réseaux de croyances profondes sont discutées : la méthode de Monte Carlo et les méthodes variationnelles. La méthode de Monte Carlo consiste à exécuter une chaîne de Markov pour approximer la distribution a posteriori et obtenir des échantillons. Cependant, cela peut être lent pour les grands réseaux de croyances profondes. Les méthodes variationnelles, quant à elles, visent à obtenir des échantillons approximatifs à partir d'une distribution différente qui se rapproche de la distribution postérieure. Bien qu'ils ne soient pas impartiaux, ces échantillons peuvent toujours être utilisés pour l'apprentissage du maximum de vraisemblance, et en augmentant la limite inférieure de la probabilité logarithmique, des améliorations peuvent être apportées à la modélisation des données.

L'apprentissage dans les réseaux de croyances sigmoïdes pose des défis, en particulier dans les réseaux profonds, mais la méthode de Monte Carlo et les méthodes variationnelles fournissent des approches pour résoudre ces difficultés et rendre l'apprentissage faisable.

Lecture 13.3 — Learning sigmoid belief nets [Neural Networks for Machine Learning]
Lecture 13.3 — Learning sigmoid belief nets [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 13.4 — L'algorithme du sommeil d'éveil



Cours 13.4 — L'algorithme de veille [Réseaux de neurones pour l'apprentissage automatique]

L'algorithme veille-sommeil est une méthode d'apprentissage utilisée pour les modèles graphiques dirigés comme les réseaux de croyances sigmoïdes. Il se compose de deux phases : la phase d'éveil et la phase de sommeil. Contrairement aux machines de Boltzmann, qui sont utilisées pour les modèles graphiques non orientés, l'algorithme veille-sommeil est spécifiquement conçu pour les réseaux de croyances sigmoïdes.

L'algorithme fait partie de l'apprentissage variationnel, une approche d'apprentissage automatique qui se rapproche de la distribution postérieure pour apprendre des modèles graphiques complexes. Au lieu de calculer la distribution a posteriori exacte, ce qui est souvent difficile, l'apprentissage variationnel s'en rapproche avec une approximation moins chère. Ensuite, l'apprentissage par maximum de vraisemblance est appliqué sur la base de cette approximation.

Étonnamment, le processus d'apprentissage fonctionne toujours efficacement, grâce à deux facteurs : l'amélioration de la capacité du modèle à générer des données observées et l'ajustement de la postérieure approximative à la postérieure réelle. Cet effet permet à l'apprentissage variationnel de bien fonctionner pour les réseaux de croyances sigmoïdes.

L'algorithme veille-sommeil utilise deux ensembles de pondérations : les pondérations génératives et les pondérations de reconnaissance. Dans la phase d'éveil, les données sont introduites dans la couche visible et un passage vers l'avant est effectué à l'aide des poids de reconnaissance. Des décisions binaires stochastiques sont prises indépendamment pour chaque unité cachée, générant des états binaires stochastiques. Ces états sont traités comme des échantillons de la vraie distribution a posteriori, et l'apprentissage du maximum de vraisemblance est appliqué aux poids génératifs.

Dans la phase de sommeil, le processus est inversé. À partir d'un vecteur aléatoire dans la couche cachée supérieure, des états binaires sont générés pour chaque couche à l'aide des poids génératifs. Le but est de récupérer les états cachés des données. Les poids de reconnaissance sont formés pour y parvenir.

L'algorithme veille-sommeil présente des défauts, tels que les poids de reconnaissance ne suivant pas le bon gradient et une moyenne de mode incorrecte en raison de l'approximation de l'indépendance. Malgré ces limitations, certains chercheurs, comme Karl Friston, pensent que cela ressemble au fonctionnement du cerveau. Cependant, d'autres pensent que de meilleurs algorithmes seront découverts à l'avenir.

L'algorithme veille-sommeil se rapproche de la distribution postérieure et alterne entre les phases de veille et de sommeil pour apprendre un modèle génératif. Malgré ses limites, il a été influent dans le domaine de l'apprentissage automatique.

Lecture 13.4 — The wake sleep algorithm [Neural Networks for Machine Learning]
Lecture 13.4 — The wake sleep algorithm [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 14.1 — Apprendre des couches de fonctionnalités en empilant des RBM



Conférence 14.1 — Apprendre des couches de fonctionnalités en empilant des RBM [Réseaux de neurones pour l'apprentissage automatique]

Dans cette vidéo, le conférencier discute d'une approche différente de l'apprentissage des réseaux de croyances sigmoïdes. Ils expliquent qu'en travaillant sur les réseaux de croyances sigmoïdes, ils se sont concentrés sur les machines Boltzmann et ont découvert que les machines Boltzmann restrictives pouvaient être apprises efficacement. Ils ont réalisé qu'en traitant les caractéristiques apprises par une machine de Boltzmann restrictive comme des données, ils pouvaient appliquer une autre machine de Boltzmann restrictive pour modéliser les corrélations entre ces caractéristiques. Cela a conduit à l'idée d'empiler plusieurs machines Boltzmann pour apprendre plusieurs couches de caractéristiques non linéaires, ce qui a suscité un regain d'intérêt pour les réseaux de neurones profonds.

L'orateur explore ensuite le défi de combiner des machines Boltzmann empilées en un seul modèle. Alors que l'on s'attendrait à une machine Boltzmann multicouche, un étudiant nommé Yitay a découvert que le résultat ressemblait davantage à un réseau de croyances sigmoïde. Cette découverte inattendue a résolu le problème de l'apprentissage des réseaux de croyances sigmoïdes profonds en se concentrant sur l'apprentissage de modèles non dirigés comme les machines de Boltzmann.

L'orateur décrit le processus de formation d'une couche de fonctionnalités qui reçoivent directement l'entrée des pixels et l'utilisation des modèles d'activation de ces fonctionnalités pour apprendre une autre couche de fonctionnalités. Ce processus peut être répété pour apprendre plusieurs couches, chaque couche modélisant l'activité corrélée dans la couche en dessous. Il est prouvé que l'ajout d'une autre couche de caractéristiques améliore une borne inférieure variationnelle sur la probabilité logarithmique de générer les données.

Pour combiner les machines Boltzmann en un seul modèle, l'orateur explique la procédure d'apprentissage de chaque machine individuellement, puis de les composer ensemble. Le modèle combiné résultant est appelé un réseau de croyance profond, qui se compose de couches supérieures qui ressemblent à une machine de Boltzmann restrictive et de couches inférieures qui ressemblent à un réseau de croyance sigmoïde. Le conférencier discute également des avantages de l'empilement des machines de Boltzmann et explique le concept de la moyenne des distributions factorielles. Ils démontrent comment la moyenne de deux distributions factorielles ne se traduit pas par une distribution factorielle. La vidéo approfondit le processus d'apprentissage de l'empilement des machines Boltzmann et du réglage fin du modèle composite à l'aide d'une variante de l'algorithme veille-sommeil. Les trois étapes d'apprentissage impliquent l'ajustement des poids génératifs et de reconnaissance, l'échantillonnage des unités cachées et visibles et la mise à jour des poids à l'aide de la divergence contrastive.

Un exemple est présenté où 500 unités binaires cachées sont utilisées pour apprendre toutes les classes à dix chiffres dans des images de 28x28 pixels. Après la formation du RBM, les fonctionnalités apprises sont utilisées pour les tâches de reconnaissance et de génération.

La vidéo met en lumière la découverte inattendue de l'utilisation de machines Boltzmann empilées pour apprendre des réseaux de croyances profondes et donne un aperçu des processus d'apprentissage et d'ajustement impliqués.

Lecture 14.1 — Learning layers of features by stacking RBMs [Neural Networks for Machine Learning]
Lecture 14.1 — Learning layers of features by stacking RBMs [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 14.2 — Apprentissage discriminant pour les DBN



Conférence 14.2 — Apprentissage discriminant pour les DBN [Réseaux de neurones pour l'apprentissage automatique]

Dans cette vidéo, nous explorons le processus d'apprentissage d'un réseau de croyances profondes. Nous commençons par empiler des machines de Boltzmann restrictives pour former les couches initiales, qui sont ensuite traitées comme un réseau neuronal profond. Nous affinons ce réseau en utilisant des méthodes discriminatives au lieu de méthodes génératives, visant à améliorer sa capacité à discriminer entre les classes. Cette approche a eu un impact significatif sur la reconnaissance vocale, conduisant de nombreux groupes de premier plan à adopter des réseaux de neurones profonds pour réduire les taux d'erreur dans ce domaine.

Pour affiner le réseau profond, nous suivons une phase de pré-formation où nous apprenons une couche de fonctionnalités à la fois en utilisant des machines Boltzmann restrictives empilées. Cette phase de pré-formation fournit un bon ensemble initial de pondérations pour le réseau neuronal profond. Nous utilisons ensuite la rétropropagation, une procédure de recherche locale, pour affiner et optimiser davantage le réseau de discrimination. Cette combinaison de pré-formation et de réglage fin surmonte les limites de la rétropropagation traditionnelle, facilitant l'apprentissage des réseaux de neurones profonds et améliorant leurs capacités de généralisation.

La préformation offre des avantages en termes d'optimisation et de généralisation. Il s'adapte bien aux grands réseaux, en particulier lorsque chaque couche présente une localité. Le processus d'apprentissage devient plus parallèle, car il y a moins d'interaction entre des emplacements très éloignés. De plus, la pré-formation nous permet de commencer la rétropropagation avec des détecteurs de caractéristiques sensibles, ce qui donne des gradients initiaux plus significatifs par rapport aux poids aléatoires. De plus, les réseaux pré-entraînés présentent moins de surajustement car la majorité des informations dans les poids finaux proviennent de la modélisation de la distribution d'entrée, qui contient généralement plus d'informations que les étiquettes elles-mêmes.

L'utilisation de la pré-formation répond également à l'objection selon laquelle elle peut conduire à l'apprentissage de caractéristiques non pertinentes pour la tâche discriminative à accomplir. S'il est vrai que nous pouvons apprendre des fonctionnalités qui ne sont jamais utilisées, la puissance de calcul des ordinateurs modernes nous permet de nous permettre cette inefficacité. Parmi les fonctionnalités apprises, il y en aura toujours qui seront très utiles, dépassant les entrées brutes et compensant les fonctionnalités inutilisées. De plus, la pré-formation réduit le fardeau de la rétropropagation pour découvrir de nouvelles fonctionnalités, réduisant ainsi le besoin de grandes quantités de données étiquetées. Les données non étiquetées restent précieuses pour découvrir de bonnes fonctionnalités pendant la phase de pré-formation.

Pour illustrer l'efficacité de la pré-formation et du réglage fin, la vidéo traite de la modélisation de l'ensemble de données MNIST. Trois couches cachées de fonctionnalités sont apprises de manière entièrement non supervisée, générant des chiffres d'aspect réaliste à partir de différentes classes. Pour évaluer l'utilité de ces fonctionnalités pour la discrimination, une dernière couche softmax à dix voies est ajoutée et la rétropropagation est utilisée pour un réglage fin. Les résultats montrent des performances améliorées par rapport à la formation purement discriminative, en particulier sur les tâches invariantes de permutation où la rétropropagation standard a du mal à atteindre de faibles taux d'erreur.

Diverses expériences démontrent les avantages de la pré-formation. Lors de l'utilisation d'une pile de machines Boltzmann pour la pré-formation et le réglage fin, le taux d'erreur sur la tâche MNIST invariante par permutation peut être réduit à 1,0 %. En ajoutant une couche softmax à 10 voies directement au-dessus des machines Boltzmann pré-formées, le taux d'erreur peut être encore amélioré à 1,15 % avec quelques ajustements. Les travaux de Micro Yerin, avec le groupe de Yan Lecun, montrent que la pré-formation est particulièrement efficace avec plus de données et de meilleurs a priori. Leurs expériences, impliquant des images numériques déformées supplémentaires et un réseau neuronal convolutif, ont atteint des taux d'erreur aussi bas que 0,39 %, établissant de nouveaux records en reconnaissance vocale.

Ces progrès dans la pré-formation et le réglage fin des réseaux de neurones profonds ont eu un impact significatif sur la reconnaissance vocale, conduisant à des améliorations dans le domaine. De nombreux chercheurs et groupes, dont Microsoft Research, ont adopté les réseaux de neurones profonds pour les tâches de reconnaissance vocale, citant le succès et les progrès rendus possibles par cette approche.

Le succès de la pré-formation et du réglage fin des réseaux de neurones profonds a suscité un regain d'intérêt pour les réseaux de neurones pour diverses applications au-delà de la reconnaissance vocale. Les chercheurs ont commencé à explorer le potentiel des réseaux de neurones profonds dans la vision par ordinateur, le traitement du langage naturel et d'autres domaines. La combinaison de la pré-formation et du réglage fin s'est avérée être une technique puissante pour apprendre les représentations hiérarchiques et améliorer les performances des réseaux de neurones.

L'une des raisons pour lesquelles la pré-formation est efficace est qu'elle aide à surmonter les limites de la rétropropagation traditionnelle, en particulier lorsqu'il s'agit de réseaux profonds. Les réseaux profonds avec de nombreuses couches peuvent souffrir du problème de gradient de fuite, où les gradients diminuent à mesure qu'ils se propagent à travers les couches, ce qui rend difficile l'entraînement efficace du réseau. En préformant le réseau couche par couche et en initialisant les pondérations en fonction des caractéristiques apprises, nous fournissons un bon point de départ pour la rétropropagation, ce qui conduit à une optimisation plus efficace.

Un autre avantage de la pré-formation est qu'elle aide à capturer des représentations significatives et hiérarchiques des données d'entrée. Les couches du réseau apprennent des caractéristiques de plus en plus complexes et abstraites à mesure que nous progressons dans le réseau. Cette représentation hiérarchique permet au réseau d'extraire des caractéristiques de haut niveau utiles pour la discrimination. En préformant le réseau pour modéliser la distribution des vecteurs d'entrée, nous nous assurons que les caractéristiques apprises capturent des modèles et des variations importants dans les données, ce qui contribue à améliorer les performances de généralisation du réseau.

La combinaison de la pré-formation générative et du réglage fin discriminatif est devenue un paradigme populaire dans l'apprentissage en profondeur. Il tire parti des avantages de l'apprentissage non supervisé pour apprendre des fonctionnalités initiales utiles, puis affine ces fonctionnalités à l'aide de données étiquetées pour la tâche discriminative spécifique. Cette approche s'est avérée efficace dans diverses applications et a conduit à des percées en matière de performances.

Alors que le domaine de l'apprentissage en profondeur continue d'évoluer, les chercheurs explorent constamment de nouvelles techniques et architectures pour améliorer la formation et les performances des réseaux de neurones profonds. Le succès de la pré-formation et de la mise au point a ouvert la voie à des avancées dans d'autres domaines, tels que l'apprentissage par transfert, où des modèles pré-formés sont utilisés comme point de départ pour de nouvelles tâches, et l'apprentissage auto-supervisé, où les modèles apprennent de données non étiquetées en prédisant certains aspects des données.

En conclusion, la combinaison de la pré-formation et de la mise au point a révolutionné le domaine de l'apprentissage en profondeur. En tirant parti de l'apprentissage non supervisé pour apprendre les fonctionnalités initiales, puis en affinant ces fonctionnalités à l'aide de l'apprentissage supervisé, les réseaux de neurones profonds peuvent obtenir de meilleures performances et des capacités de généralisation. Cette approche a eu un impact significatif sur diverses applications, notamment la reconnaissance vocale, la vision par ordinateur et le traitement du langage naturel, et continue de stimuler les progrès dans le domaine de l'apprentissage en profondeur.

Lecture 14.2 — Discriminative learning for DBNs [Neural Networks for Machine Learning]
Lecture 14.2 — Discriminative learning for DBNs [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 14.3 — Réglage fin discriminant



Conférence 14.3 — Réglage fin discriminatif [Réseaux de neurones pour l'apprentissage automatique]

Dans cette vidéo, nous allons approfondir le processus de réglage fin discriminatoire après avoir pré-formé un réseau de neurones à l'aide d'une pile de machines Boltzmann. Nous observons que lors du réglage fin, les poids dans les couches inférieures subissent des changements minimes, mais ces petits ajustements ont un impact significatif sur les performances de classification du réseau en plaçant avec précision les limites de décision.

La pré-formation améliore également l'efficacité des réseaux plus profonds par rapport aux réseaux moins profonds. Sans formation préalable, les réseaux moins profonds ont tendance à surpasser les réseaux plus profonds. Cependant, la pré-formation inverse cette tendance, où les réseaux profonds fonctionnent mieux tandis que les réseaux superficiels sans pré-formation fonctionnent moins bien.

De plus, nous fournissons un argument convaincant pour commencer par la formation générative avant d'envisager la formation discriminative. En comparant les sorties des réseaux sur une suite de cas de test et en les visualisant à l'aide de t-SNE, nous observons deux classes distinctes : les réseaux sans pré-formation en haut et les réseaux avec pré-formation en bas. Les réseaux au sein de chaque classe présentent des similitudes, mais il n'y a pas de chevauchement entre les deux classes.

La pré-formation permet aux réseaux de découvrir des solutions qualitativement différentes par rapport au démarrage avec de petits poids aléatoires. Les solutions trouvées grâce à la pré-formation générative conduisent à des régions distinctes dans l'espace fonctionnel, tandis que les réseaux sans pré-formation présentent une plus grande variabilité.

Enfin, nous discutons pourquoi la pré-formation est justifiée. Lors de la génération de paires image-étiquette, il est plus plausible que l'étiquette dépende des objets du monde réel plutôt que des pixels de l'image. L'information véhiculée par l'image dépasse celle de l'étiquette, car l'étiquette contient des informations limitées. Dans de tels cas, il est logique d'inverser d'abord la voie à large bande passante du monde à l'image pour récupérer les causes sous-jacentes, puis déterminer l'étiquette correspondante. Cela justifie la phase de pré-formation, où la cartographie image-causes est apprise, suivie de la phase discriminative pour cartographier les causes sur l'étiquette, avec un ajustement potentiel de la cartographie image-causes.

Pour illustrer les avantages de la pré-formation, nous examinons une expérience spécifique menée dans le laboratoire de Yoshi Banjo. L'expérience se concentre sur le réglage fin après une pré-formation générative. Avant le réglage fin, les champs récepteurs dans la première couche cachée de détecteurs de caractéristiques présentent des changements minimes. Cependant, ces changements subtils contribuent de manière significative à améliorer la discrimination.

L'expérience consiste à discriminer les chiffres dans un grand nombre de chiffres déformés. Les résultats montrent que les réseaux avec pré-formation obtiennent systématiquement des erreurs de test inférieures à celles des réseaux sans pré-formation, même lorsqu'ils utilisent des réseaux avec une seule couche cachée. L'avantage de la pré-formation devient plus prononcé lors de l'utilisation de réseaux plus profonds. Les réseaux profonds avec pré-formation présentent peu ou pas de chevauchement avec les réseaux peu profonds, ce qui souligne encore l'efficacité de la pré-formation dans l'amélioration des performances du réseau.

De plus, nous explorons l'effet du nombre de couches sur l'erreur de classification. Sans pré-entraînement, deux couches semblent être le choix optimal, car une augmentation supplémentaire du nombre de couches entraîne des performances nettement inférieures. En revanche, la pré-formation atténue ce problème, car les réseaux à quatre couches sont plus performants que ceux à deux couches. La variation d'erreur est réduite et les performances globales sont améliorées.

Pour représenter visuellement les changements de poids du réseau pendant l'entraînement, des visualisations t-SNE sont utilisées. Les poids des réseaux pré-formés et non pré-formés sont tracés dans le même espace. Les graphiques résultants révèlent deux classes distinctes : les réseaux sans pré-formation en haut et les réseaux avec pré-formation en bas. Chaque point représente un modèle dans l'espace des fonctions, et les trajectoires montrent la progression de la similarité au cours de l'apprentissage. Les réseaux sans formation préalable se retrouvent dans différentes régions de l'espace fonctionnel, ce qui indique une plus grande diffusion des solutions. Les réseaux avec pré-formation, en revanche, convergent vers une région spécifique, indiquant une plus grande similitude entre eux.

La comparaison des vecteurs de poids seul est insuffisante car les réseaux avec différentes configurations de poids peuvent présenter le même comportement. Au lieu de cela, les sorties des réseaux sur les cas de test sont concaténées en vecteurs, et t-SNE est appliqué pour visualiser leur similarité. Les couleurs des tracés t-SNE représentent différentes étapes de formation, illustrant davantage la progression de la similarité.

Les réseaux de neurones de pré-entraînement utilisant l'entraînement génératif avant l'entraînement discriminatif offrent plusieurs avantages. Il améliore les performances de classification en plaçant avec précision les limites de décision, améliore l'efficacité des réseaux plus profonds et fournit des solutions distinctes dans l'espace fonctionnel. En considérant la voie à large bande passante du monde à l'image et la voie à faible bande passante du monde à l'étiquette, la pré-formation permet de récupérer les causes sous-jacentes avant de déterminer l'étiquette. Cette approche en deux phases justifie l'utilisation de la pré-formation dans la formation des réseaux de neurones.

Lecture 14.3 — Discriminative fine tuning [Neural Networks for Machine Learning]
Lecture 14.3 — Discriminative fine tuning [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 14.4 — Modélisation de données à valeurs réelles avec un RBM



Cours 14.4 — Modélisation de données à valeurs réelles avec un RBM [Neural Networks for Machine Learning]

Je décrirai comment utiliser une machine de Boltzmann restreinte (RBM) pour modéliser des données à valeur réelle. Dans cette approche, les unités visibles sont transformées d'unités stochastiques binaires en unités linéaires avec bruit gaussien. Pour relever les défis d'apprentissage, les unités cachées sont définies comme des unités linéaires rectifiées.

Apprendre un RBM pour des données à valeur réelle est relativement simple. Initialement, les RBM étaient utilisés avec des images de chiffres manuscrits, où les probabilités représentaient des intensités intermédiaires causées par des pixels partiellement encrés. Ces probabilités, allant de 0 à 1, modélisaient la probabilité d'activation d'une unité logistique. Cette approximation a bien fonctionné pour les pixels partiellement encrés, bien qu'elle soit techniquement incorrecte.

Cependant, lorsqu'il s'agit d'images réelles, l'intensité d'un pixel est généralement proche de l'intensité moyenne de ses pixels voisins. Une unité logistique ne peut pas représenter avec précision ce comportement. Les unités logistiques de champ moyen ont du mal à saisir les différences fines d'intensité. Pour résoudre ce problème, des unités linéaires avec bruit gaussien sont utilisées pour modéliser les intensités de pixels en tant que variables gaussiennes.

L'échantillonnage de Gibbs alterné, utilisé dans l'apprentissage par divergence contrastive, peut toujours être appliqué pour exécuter la chaîne de Markov. Cependant, un taux d'apprentissage plus faible est nécessaire pour éviter l'instabilité. La fonction énergétique utilisée dans l'équation RBM consiste en un terme de confinement parabolique qui empêche l'explosion et un terme interactif entre les unités visibles et cachées.

Le terme interactif représente la contribution des unités cachées à la fonction énergétique. En différenciant le terme, on obtient un gradient constant. L'effet combiné de la fonction de confinement parabolique et de la contribution descendante des unités cachées se traduit par une fonction parabolique avec une moyenne décalée du biais de l'unité visible.

Cependant, apprendre avec des RBM binaires gaussiens pose des défis. Il est difficile d'apprendre des écarts serrés pour les unités visibles. Lorsque l'écart type d'une unité visible est faible, les effets ascendants sont exagérés, tandis que les effets descendants sont atténués. Cela conduit à des unités cachées qui saturent et sont fermement activées ou désactivées, perturbant le processus d'apprentissage.

Pour résoudre ce problème, il est nécessaire d'avoir un plus grand nombre d'unités cachées par rapport aux unités visibles. Cela permet aux petites pondérations entre les unités visibles et cachées d'avoir un effet descendant significatif en raison de l'abondance d'unités cachées. De plus, le nombre d'unités cachées devrait changer à mesure que l'écart type des unités visibles diminue.

Pour y parvenir, des unités sigmoïdes étagées sont introduites. Ces unités sont des copies multiples de chaque unité cachée binaire stochastique, chacune avec les mêmes poids et biais mais un décalage fixe par rapport au biais. Ce décalage varie entre les membres de la famille des unités sigmoïdes, ce qui entraîne une courbe de réponse qui augmente de manière linéaire à mesure que l'entrée totale augmente. Cette approche fournit davantage d'effets descendants pour piloter les unités visibles avec de petits écarts-types.

Bien que l'utilisation d'une grande population d'unités stochastiques binaires avec des biais de décalage puisse être coûteuse en calcul, des approximations rapides peuvent être faites qui donnent des résultats similaires. Ces approximations impliquent l'approximation de la somme des activités des unités sigmoïdes avec des biais de décalage comme le logarithme de 1 plus l'exponentielle de l'entrée totale. Alternativement, des unités linéaires rectifiées peuvent être utilisées, qui sont plus rapides à calculer et présentent une équivariance d'échelle, ce qui les rend adaptées aux représentations d'images.

Les unités linéaires rectifiées ont la propriété d'équivariance d'échelle, ce qui signifie que si les intensités des pixels d'une image sont multipliées par un scalaire, les activités des unités cachées seront également mises à l'échelle par le même facteur. Cette propriété est similaire à l'équivariance translationnelle présentée par les réseaux de neurones convolutifs (CNN). Dans les CNN, le déplacement d'une image entraîne une représentation décalée dans chaque couche sans affecter de manière significative le comportement global du réseau.

En utilisant des RBM avec des unités linéaires et des unités linéaires rectifiées, il devient possible de modéliser efficacement des données à valeur réelle.

Lecture 14.4 — Modeling real valued data with an RBM [Neural Networks for Machine Learning]
Lecture 14.4 — Modeling real valued data with an RBM [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 14.5 — Les RBM sont des réseaux de croyances sigmoïdes infinis



Conférence 14.5 — Les RBM sont des réseaux de croyances sigmoïdes infinis [Réseaux de neurones pour l'apprentissage automatique]

Dans cette vidéo, nous discutons de matériel avancé lié aux origines de l'apprentissage en profondeur et aux aspects mathématiques des réseaux de neurones profonds. Nous explorons la relation entre les machines de Boltzmann restreintes (RBM) et les réseaux de croyances sigmoïdes infiniment profonds avec des poids partagés.

Les RBM peuvent être considérés comme un cas particulier de réseaux de croyances sigmoïdes, où le RBM correspond à un réseau infiniment profond avec des poids partagés. En comprenant l'équivalence entre les RBM et les réseaux infiniment profonds, nous obtenons un aperçu de l'efficacité de l'apprentissage couche par couche et de la divergence contrastive.

La chaîne de Markov utilisée pour échantillonner à partir d'un RBM équivaut à échantillonner à partir de la distribution d'équilibre d'un réseau infiniment profond. L'inférence dans le réseau infiniment profond est simplifiée grâce à la mise en œuvre d'un prior complémentaire, qui annule les corrélations causées par l'explication. Cela simplifie le processus d'inférence à chaque couche du réseau.

L'algorithme d'apprentissage pour les réseaux de croyances sigmoïdes peut être utilisé pour dériver l'algorithme d'apprentissage pour les RBM. En liant les poids du filet et en gelant les poids de la couche inférieure, nous pouvons apprendre les couches restantes en tant que RBM. Ce processus, connu sous le nom d'apprentissage par divergence contrastive, fournit une borne variationnelle sur la probabilité logarithmique des données.

Dans l'apprentissage par divergence contrastive, nous coupons les dérivées supérieures des poids, car le mélange de la chaîne de Markov est rapide et les couches supérieures se rapprochent de la distribution d'équilibre. Au fur et à mesure que les poids augmentent, il devient nécessaire d'exécuter plus d'itérations de divergence contrastive. Cependant, pour apprendre plusieurs couches de caractéristiques dans une pile de RBM, le CD un (divergence contrastive en une étape) est suffisant et peut même être meilleur que l'apprentissage par probabilité maximale.

Comprendre la relation entre les RBM et les réseaux de croyances sigmoïdes infiniment profonds fournit des informations précieuses sur le fonctionnement des réseaux de neurones profonds et sur l'efficacité de l'apprentissage couche par couche et de la divergence contrastive.

Lecture 14.5 — RBMs are infinite sigmoid belief nets [Neural Networks for Machine Learning]
Lecture 14.5 — RBMs are infinite sigmoid belief nets [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 15.1 — De l'ACP aux auto-encodeurs



Conférence 15.1 — De l'ACP aux auto-encodeurs [Réseaux de neurones pour l'apprentissage automatique]

L'analyse en composantes principales (ACP) est une technique largement utilisée dans le traitement du signal qui vise à représenter des données de grande dimension à l'aide d'un code de dimension inférieure. L'idée clé derrière l'ACP est de trouver une variété linéaire dans l'espace de grande dimension où se trouvent les données. En projetant les données sur ce collecteur, nous pouvons représenter son emplacement sur le collecteur, en perdant un minimum d'informations.

L'ACP peut être mise en œuvre efficacement à l'aide de méthodes standard ou moins efficacement à l'aide d'un réseau de neurones avec des unités linéaires cachées et de sortie. L'avantage d'utiliser un réseau de neurones est la possibilité de généraliser la technique aux réseaux de neurones profonds, où le code et la reconstruction des données deviennent des fonctions non linéaires de l'entrée. Cela nous permet de gérer les variétés courbes dans l'espace d'entrée, ce qui donne une représentation plus puissante.

Dans l'ACP, nous visons à représenter des données à n dimensions en utilisant moins de n nombres. En identifiant m directions orthogonales avec le plus de variance, appelées directions principales, on ignore les directions avec peu de variation. Ces m directions principales forment un sous-espace de dimension inférieure, et nous représentons un point de données à n dimensions en le projetant sur ces directions dans l'espace de dimension inférieure. Bien que les informations sur l'emplacement du point de données dans les directions orthogonales soient perdues, elles ne sont pas significatives en raison de leur faible variance.

Pour reconstruire un point de données à partir de sa représentation à l'aide de m nombres, nous utilisons la valeur moyenne pour les directions non représentées (n - m). L'erreur de reconstruction est calculée comme la différence au carré entre la valeur du point de données sur les directions non représentées et la valeur moyenne sur ces directions.

Pour implémenter l'ACP en utilisant la rétropropagation, nous pouvons créer un réseau de neurones avec une couche de goulot d'étranglement ayant m unités cachées, représentant les composants principaux. L'objectif du réseau est de minimiser l'erreur quadratique entre l'entrée et la sortie reconstruite. Si les unités cachées et de sortie sont linéaires, le réseau apprendra des codes qui minimisent l'erreur de reconstruction, similaire à PCA. Cependant, les unités cachées peuvent ne pas correspondre précisément aux composants principaux, ayant potentiellement une rotation et une inclinaison des axes. Néanmoins, l'espace couvert par les vecteurs de poids entrants de l'unité de code sera le même que l'espace couvert par les m composantes principales.

L'utilisation de la rétropropagation dans un réseau de neurones permet de généraliser l'ACP en incorporant des couches non linéaires avant et après la couche de code. Cela permet la représentation de données se trouvant sur des variétés courbes dans des espaces de grande dimension, ce qui rend l'approche plus polyvalente. Le réseau se compose d'un vecteur d'entrée, d'unités cachées non linéaires, d'une couche de code (qui peut être linéaire), d'unités cachées non linéaires supplémentaires et d'un vecteur de sortie formé pour ressembler au vecteur d'entrée.

L'analyse en composantes principales est une technique permettant de représenter des données de grande dimension à l'aide d'un code de dimension inférieure en identifiant les directions principales à forte variance. Il peut être mis en œuvre efficacement en utilisant des méthodes traditionnelles ou moins efficacement en utilisant un réseau de neurones. La version réseau de neurones permet la généralisation aux réseaux de neurones profonds et la représentation des données sur des variétés courbes.

Lecture 15.1 — From PCA to autoencoders [Neural Networks for Machine Learning]
Lecture 15.1 — From PCA to autoencoders [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...
 

Cours 15.2 — Auto-encodeurs profonds



Conférence 15.2 — Auto-encodeurs profonds [Réseaux de neurones pour l'apprentissage automatique]

Les auto-encodeurs profonds ont révolutionné la réduction de la dimensionnalité en dépassant les capacités des techniques linéaires telles que l'analyse des composantes principales. Leur capacité à capturer des relations complexes et non linéaires au sein des données en a fait un outil inestimable dans divers domaines.

Dans le cas de l'auto-encodeur profond mis en œuvre par Salakhutdinov et Hinton, les chiffres reconstruits présentent une qualité supérieure par rapport à leurs homologues à composantes principales linéaires. Cette amélioration découle de la capacité de l'auto-encodeur profond à apprendre une hiérarchie de représentations de plus en plus abstraites à travers ses multiples couches cachées. Chaque couche capture des caractéristiques de niveau supérieur qui contribuent à une reconstruction plus fidèle des données d'entrée.

La puissance des auto-encodeurs profonds réside dans leur capacité à apprendre des mappages hautement expressifs dans les directions d'encodage et de décodage. L'encodeur mappe les données d'entrée de grande dimension sur une représentation de code de dimension inférieure, capturant efficacement les caractéristiques les plus saillantes. D'autre part, le décodeur reconstruit l'entrée d'origine à partir de cette représentation de code compressée. Cette cartographie bidirectionnelle garantit que des informations précieuses sont conservées pendant le processus de réduction de la dimensionnalité.

La formation des auto-encodeurs profonds était initialement difficile en raison du problème de gradient de fuite. Cependant, avec les progrès des techniques d'optimisation, telles que les stratégies de pré-entraînement et d'initialisation du poids non supervisées, le processus d'entraînement est devenu beaucoup plus efficace et efficace. Ces méthodes permettent à l'auto-encodeur profond d'apprendre des représentations significatives sans rester coincé dans des solutions sous-optimales.

De plus, les auto-encodeurs profonds ont ouvert la voie au développement d'architectures plus avancées, telles que les auto-encodeurs variationnels et les réseaux antagonistes génératifs. Ces modèles étendent les capacités des auto-encodeurs profonds en incorporant des techniques d'apprentissage probabilistes et contradictoires, permettant des tâches telles que la génération de données, la détection d'anomalies et l'apprentissage semi-supervisé.

En conclusion, les auto-encodeurs profonds ont révolutionné la réduction de la dimensionnalité en fournissant des mappages flexibles et non linéaires qui surpassent les techniques linéaires traditionnelles. Leur capacité à apprendre des représentations hiérarchiques et à reconstruire des données de haute qualité les a propulsés dans une position de premier plan dans le domaine de l'apprentissage en profondeur. Avec la poursuite de la recherche et du développement, les auto-encodeurs profonds devraient ouvrir de nouvelles possibilités pour comprendre et manipuler des structures de données complexes dans divers domaines.

Lecture 15.2 — Deep autoencoders [Neural Networks for Machine Learning]
Lecture 15.2 — Deep autoencoders [Neural Networks for Machine Learning]
  • 2016.02.04
  • www.youtube.com
Lecture from the course Neural Networks for Machine Learning, as taught by Geoffrey Hinton (University of Toronto) on Coursera in 2012. Link to the course (l...