ID
15130
Auteurs
Ikram Chraibi Kaadoud
Thierry Viéville
Introduction
Il y a en science quelques buzz-words — littéralement « mots-rumeurs » — qui font la Une avant de céder la place au mot à la mode suivant. Le deep-learning — ou en français « apprentissage profond » — en est un.

L'apprentissage profond : une idée à creuser ?

Contenu
En effet, des scientifiques ont su médiatiser cette méthode avec des résultats expérimentaux spectaculaires. Cette approche a permis plusieurs avancées majeures : la plus connue est sans doute le programme de reconnaissance des visages de Facebook, récemment c'est la victoire d'AlphaGo qui a fait la Une, mais cela s'applique aussi à des secteurs comme l'automobile avec NVIDIA qui fournit des outils d'aide à la conduite assistée et autonome (ADAS), ou la santé avec la recherche de cellules cancéreuses par la start-up DreamQuark, ou encore la reconnaissance de parole. Ici, en nous basant notamment sur l'ouvrage de Yoshua Bengio Learning Deep Architectures for AI et les travaux de l'équipe de Yann LeCun, nous souhaitons montrer les apports de cette construction scientifique multi-disciplinaire au machine learning ou « apprentissage automatique ». Commençons par un exemple qui montre l'intérêt de ce formalisme. Précisons ensuite ce que calcule un réseau de neurones artificiels. Cela nous permettra de donner les idées-clés de l'apprentissage profond, des réseaux de neurones profonds et de leur complexité.

Apprentissage profond pour l’analyse de scènes

En associant l'apprentissage profond à des mécanismes algorithmiques de vision par ordinateur, il est possible d'analyser automatiquement une scène visuelle. Voici deux exemples tirés des travaux de Yann LeCun et de son équipe : tout d'abord, des scènes où il a été possible de reconnaître les objets (verdure sur-coloriée en vert, bâtiments en ocre et véhicules en magenta). [caption id="" align="alignnone" width="750"]scene1 Source : Clément Farabet, Camille Couprie, Laurent Najman, Yann LeCun Learning Hierarchical Features for Scene Labeling (2013).[/caption] Autre exemple, cette scène panoramique urbaine où chaque objet est catégorisé. [caption id="" align="alignnone" width="750"]scene2 Source : Clément Farabet, Camille Couprie, Laurent Najman, Yann LeCun Learning Hierarchical Features for Scene Labeling (2013).[/caption] Précisons que l'algorithme ne « comprend » rien, il ne fait que classifier. Le terme de route (road),  bâtiment (building) ou personne (person) n’a pas de sens pour lui, ce ne sont que des étiquettes. Mais d'autres algorithmes peuvent être programmés à partir de ces données. Par exemple, cela permet à un système de surveillance d'autoroute, doté de milliers de caméras dont les flux vidéo ne sont humainement pas exploitables, de veiller au mieux à la sécurité des automobilistes. Cela pourrait aussi aider, par exemple, à identifier automatiquement les véhicules en cause suite à un accident. Les mécanismes d'apprentissage profond ont fait leurs preuves en reconnaissance d’image, comme le montrent les exemples précédents. Les réseaux de neurones profonds, qui sont à la base de l’apprentissage profond, font aussi partie intégrante des systèmes de reconnaissance de parole ou encore de traitement du langage naturel, auxquels ils apportent une amélioration indiscutable. Voir par exemple la bibliothèque open source proposée par Google, TensorFlow, ou MonkeyLearn, ou aussi scikit-learn. Comment ces mécanismes fonctionnent-ils ? Afin d’aider à la compréhension des éléments les plus théoriques, gardons à l’esprit l’exemple d’un système qui doit deviner quelles étiquettes poser sur une image.

Que calcule un réseau de neurones artificiels ?

schema1 Un unique neurone artificiel est une « machine » très simple. À partir de plusieurs entrées, il produit une seule sortie. Les entrées (xi) sont mélangées, c’est-à-dire additionnées en pondérant chacune d’elles d'un poids wi positif (qui excite le neurone) ou négatif (qui inhibe le neurone), et en ajoutant au total une valeur b appelée biais. Une fonction seuil appliquée à ce total classifie le résultat comme valeur basse ou valeur élevée : si le total dépasse le seuil, le neurone « produit » une sortie, sinon il ne produit rien. Un neurone unique effectue ainsi un calcul très rudimentaire de classification. Par exemple, un neurone avec deux entrées, qui prend en entrées les coordonnées d’un point dans le plan, détermine si ce point se trouve d’un côté ou de l’autre d’une droite donnée. Considérons maintenant un réseau de neurones, le plus simple étant formé de deux couches. La première couche est constituée d’un ensemble de neurones, connectés en parallèle, et fournissant un ensemble de sorties y. Si ces sorties (y) sont maintenant combinées en étant les entrées d’un nouvel ensemble de neurones formant une seconde couche, nous obtenons alors un réseau de neurones à deux couches qui peut séparer un ensemble de données en deux. Nous verrons plus loin la possibilité de généraliser cette architecture et de passer d’un réseau à deux couches à un réseau à plusieurs couches. Regardons maintenant comment un réseau à deux couches permet d’apprendre une fonction mathématique. Considérons une suite d’exemples, chacun constitué d’un ensemble d’entrées xi et de la sortie y attendue correspondante, que nous présentons au réseau. Durant cette phase dite « d’entraînement », le réseau va ajuster automatiquement les paramètres de chaque neurone, c’est-à-dire les valeurs des poids et du biais afin de minimiser l'erreur moyenne calculée sur l’ensemble des exemples entre la sortie attendue et celle observée. Il s’agit alors d’apprentissage supervisé puisque nous apprenons au réseau à fournir une réponse connue à l’avance. L‘hypothèse est qu’après cette phase d’entraînement, le réseau sera capable de traiter de manière satisfaisante de nouveaux exemples, dont la sortie est inconnue, en fonction de ce qu’il a « appris ». Il est à noter que plus le corpus d’exemples pour la phase d’entraînement est important, plus la précision du réseau sera élevée. Ce type de réseau trop simple pour faire de la reconnaissance d’images peut néanmoins permettre de réaliser par exemple de la classification de données comme le propose le schéma suivant. Si l’on considère un plan contenant des données, soit un espace à deux dimensions, un neurone seul réalisera une séparation linéaire de ce plan. La fonction mathématique qu’il représente est alors l’équation d’une droite séparant ce plan en deux, comme le montre le schéma ci-dessous à gauche. Si les données, et donc le problème de séparation, sont plus complexes, la fonction mathématique sera non plus l’équation d’une droite mais une équation polynomiale de degré 3 par exemple. Un neurone ne sera pas suffisant, c’est un réseau de neurones qui réalisera cette séparation complexe du plan. Dans l’exemple ci-dessous, l’augmentation du nombre de couches et du nombre de neurones accroît le pouvoir de séparation. [caption id="" align="alignnone" width="750"]schema2 Schéma d'après Nicolas Rougier : Perceptron simple, Perceptron Multi-couches.[/caption] Selon sa structure, un réseau de neurones fournit une approximation de différents types de fonction. En effet, les réseaux à deux couches peuvent représenter des fonctions booléennes ou des fonctions continues, alors qu’un réseau à une couche ne permet de représenter que des fonctions booléennes. L’idée forte de l’apprentissage par réseaux de neurones est de pouvoir, à partir d'un ensemble de calculs rudimentaires et locaux à chaque neurone, apprendre une fonction plus complexe. On peut alors avoir l'impression d’ouvrir la voie à la création d'algorithmes universels, qui pourraient, avec suffisamment de mécanismes élémentaires, donc de neurones, et suffisamment d'exemples d'apprentissage, apprendre des fonctions aussi sophistiquées que voulu. Mais pourrait-on ainsi, en ajoutant des neurones et des couches, obtenir une approximation de n’importe quelle fonction mathématique ? Dans les faits, cet espoir se heurte malheureusement à la malédiction de la complexité. On pourrait certes, théoriquement, obtenir une approximation de toutes les fonctions avec un réseau volumineux en termes de couches et de neurones, mais ce serait à condition d’utiliser un nombre déraisonnablement élevé de neurones. Que se passe-t-il si le nombre de paramètres intervenant dans un problème et donc le nombre de dimensions augmentent ? Le nombre de neurones nécessaires pour calculer une telle fonction augmentera exponentiellement avec la complexité de cette fonction. Si l’on reprend notre exemple d’étiquetage des images, et que l’on considère une image en couleurs de 300x300 pixels, nous aurions 90 000 pixels pour chacune des trois couleurs rouge, vert et bleu, soit 270 000 pixels au total. Si nous associons un neurone à chaque pixel, il faudrait déjà 270 000 neurones rien que dans la couche d’entrée. Or ceci est tout simplement trop volumineux en termes de complexité de calcul, à l’heure actuelle, pour un réseau de neurones artificiels. Et il ne s’agit  que d’une petite image ! Cela illustre le fait qu'un réseau comportant des millions de neurones n’est pas pour tout de suite. Ce n'est du reste pas la seule difficulté. D’autres limitations importantes sont le nombre souvent faramineux d'exemples nécessaires pour apprendre les paramètres et le souci que ce qui a été appris sur ces exemples se généralise bien à tous les autres cas (en évitant de se baser seulement sur quelques cas particuliers). Que pourrions-nous proposer pour fabriquer un système qui aurait un comportement satisfaisant avec un nombre raisonnable d'unités de calcul ? Serait-ce en utilisant des unités de calcul plus sophistiquées que ces neurones artificiels ? Ou plutôt en changeant l'architecture du réseau, c'est–à-dire ses connexions ? Nous avons présenté ci-dessus un réseau dont l'architecture est simple : avec des connexions dans un seul sens, des entrées vers les sorties, et uniquement deux couches de neurones, essentiellement capable d’approximer des phénomènes linéaires. Que se passerait-il si nous utilisions une architecture plus complexe ? Il existe en effet différentes manières de complexifier un réseau de neurones notamment en changeant la topologie en fonction du but recherché. Le réseau peut par exemple comporter plus de deux couches. Il est alors qualifié de « multicouche » : avec une couche d’entrée, une couche de sortie, et une ou plusieurs couches cachées ou intermédiaires. Le perceptron multicouche, capable de traiter des phénomènes non linéaires, est un exemple de ce type de réseau. Un réseau de neurones peut aussi comporter des connexions récurrentes : il est alors doté d’une seule couche dans laquelle tous les neurones sont interconnectés afin de créer, par exemple, une mémoire adressable par son contenu. Mathématiquement, il correspond alors à une matrice de poids. Voir l'encadré ci-dessous.
Contenu
En effet, des scientifiques ont su médiatiser cette méthode avec des résultats expérimentaux spectaculaires. Cette approche a permis plusieurs avancées majeures : la plus connue est sans doute le programme de reconnaissance des visages de Facebook, récemment c'est la victoire d'AlphaGo qui a fait la Une, mais cela s'applique aussi à des secteurs comme l'automobile avec NVIDIA qui fournit des outils d'aide à la conduite assistée et autonome (ADAS), ou la santé avec la recherche de cellules cancéreuses par la start-up DreamQuark, ou encore la reconnaissance de parole. Ici, en nous basant notamment sur l'ouvrage de Yoshua Bengio Learning Deep Architectures for AI et les travaux de l'équipe de Yann LeCun, nous souhaitons montrer les apports de cette construction scientifique multi-disciplinaire au machine learning ou « apprentissage automatique ». Commençons par un exemple qui montre l'intérêt de ce formalisme. Précisons ensuite ce que calcule un réseau de neurones artificiels. Cela nous permettra de donner les idées-clés de l'apprentissage profond, des réseaux de neurones profonds et de leur complexité.

Apprentissage profond pour l’analyse de scènes

En associant l'apprentissage profond à des mécanismes algorithmiques de vision par ordinateur, il est possible d'analyser automatiquement une scène visuelle. Voici deux exemples tirés des travaux de Yann LeCun et de son équipe : tout d'abord, des scènes où il a été possible de reconnaître les objets (verdure sur-coloriée en vert, bâtiments en ocre et véhicules en magenta). [caption id="" align="alignnone" width="750"]scene1 Source : Clément Farabet, Camille Couprie, Laurent Najman, Yann LeCun Learning Hierarchical Features for Scene Labeling (2013).[/caption] Autre exemple, cette scène panoramique urbaine où chaque objet est catégorisé. [caption id="" align="alignnone" width="750"]scene2 Source : Clément Farabet, Camille Couprie, Laurent Najman, Yann LeCun Learning Hierarchical Features for Scene Labeling (2013).[/caption] Précisons que l'algorithme ne « comprend » rien, il ne fait que classifier. Le terme de route (road),  bâtiment (building) ou personne (person) n’a pas de sens pour lui, ce ne sont que des étiquettes. Mais d'autres algorithmes peuvent être programmés à partir de ces données. Par exemple, cela permet à un système de surveillance d'autoroute, doté de milliers de caméras dont les flux vidéo ne sont humainement pas exploitables, de veiller au mieux à la sécurité des automobilistes. Cela pourrait aussi aider, par exemple, à identifier automatiquement les véhicules en cause suite à un accident. Les mécanismes d'apprentissage profond ont fait leurs preuves en reconnaissance d’image, comme le montrent les exemples précédents. Les réseaux de neurones profonds, qui sont à la base de l’apprentissage profond, font aussi partie intégrante des systèmes de reconnaissance de parole ou encore de traitement du langage naturel, auxquels ils apportent une amélioration indiscutable. Voir par exemple la bibliothèque open source proposée par Google, TensorFlow, ou MonkeyLearn, ou aussi scikit-learn. Comment ces mécanismes fonctionnent-ils ? Afin d’aider à la compréhension des éléments les plus théoriques, gardons à l’esprit l’exemple d’un système qui doit deviner quelles étiquettes poser sur une image.

Que calcule un réseau de neurones artificiels ?

schema1 Un unique neurone artificiel est une « machine » très simple. À partir de plusieurs entrées, il produit une seule sortie. Les entrées (xi) sont mélangées, c’est-à-dire additionnées en pondérant chacune d’elles d'un poids wi positif (qui excite le neurone) ou négatif (qui inhibe le neurone), et en ajoutant au total une valeur b appelée biais. Une fonction seuil appliquée à ce total classifie le résultat comme valeur basse ou valeur élevée : si le total dépasse le seuil, le neurone « produit » une sortie, sinon il ne produit rien. Un neurone unique effectue ainsi un calcul très rudimentaire de classification. Par exemple, un neurone avec deux entrées, qui prend en entrées les coordonnées d’un point dans le plan, détermine si ce point se trouve d’un côté ou de l’autre d’une droite donnée. Considérons maintenant un réseau de neurones, le plus simple étant formé de deux couches. La première couche est constituée d’un ensemble de neurones, connectés en parallèle, et fournissant un ensemble de sorties y. Si ces sorties (y) sont maintenant combinées en étant les entrées d’un nouvel ensemble de neurones formant une seconde couche, nous obtenons alors un réseau de neurones à deux couches qui peut séparer un ensemble de données en deux. Nous verrons plus loin la possibilité de généraliser cette architecture et de passer d’un réseau à deux couches à un réseau à plusieurs couches. Regardons maintenant comment un réseau à deux couches permet d’apprendre une fonction mathématique. Considérons une suite d’exemples, chacun constitué d’un ensemble d’entrées xi et de la sortie y attendue correspondante, que nous présentons au réseau. Durant cette phase dite « d’entraînement », le réseau va ajuster automatiquement les paramètres de chaque neurone, c’est-à-dire les valeurs des poids et du biais afin de minimiser l'erreur moyenne calculée sur l’ensemble des exemples entre la sortie attendue et celle observée. Il s’agit alors d’apprentissage supervisé puisque nous apprenons au réseau à fournir une réponse connue à l’avance. L‘hypothèse est qu’après cette phase d’entraînement, le réseau sera capable de traiter de manière satisfaisante de nouveaux exemples, dont la sortie est inconnue, en fonction de ce qu’il a « appris ». Il est à noter que plus le corpus d’exemples pour la phase d’entraînement est important, plus la précision du réseau sera élevée. Ce type de réseau trop simple pour faire de la reconnaissance d’images peut néanmoins permettre de réaliser par exemple de la classification de données comme le propose le schéma suivant. Si l’on considère un plan contenant des données, soit un espace à deux dimensions, un neurone seul réalisera une séparation linéaire de ce plan. La fonction mathématique qu’il représente est alors l’équation d’une droite séparant ce plan en deux, comme le montre le schéma ci-dessous à gauche. Si les données, et donc le problème de séparation, sont plus complexes, la fonction mathématique sera non plus l’équation d’une droite mais une équation polynomiale de degré 3 par exemple. Un neurone ne sera pas suffisant, c’est un réseau de neurones qui réalisera cette séparation complexe du plan. Dans l’exemple ci-dessous, l’augmentation du nombre de couches et du nombre de neurones accroît le pouvoir de séparation. [caption id="" align="alignnone" width="750"]schema2 Schéma d'après Nicolas Rougier : Perceptron simple, Perceptron Multi-couches.[/caption] Selon sa structure, un réseau de neurones fournit une approximation de différents types de fonction. En effet, les réseaux à deux couches peuvent représenter des fonctions booléennes ou des fonctions continues, alors qu’un réseau à une couche ne permet de représenter que des fonctions booléennes. L’idée forte de l’apprentissage par réseaux de neurones est de pouvoir, à partir d'un ensemble de calculs rudimentaires et locaux à chaque neurone, apprendre une fonction plus complexe. On peut alors avoir l'impression d’ouvrir la voie à la création d'algorithmes universels, qui pourraient, avec suffisamment de mécanismes élémentaires, donc de neurones, et suffisamment d'exemples d'apprentissage, apprendre des fonctions aussi sophistiquées que voulu. Mais pourrait-on ainsi, en ajoutant des neurones et des couches, obtenir une approximation de n’importe quelle fonction mathématique ? Dans les faits, cet espoir se heurte malheureusement à la malédiction de la complexité. On pourrait certes, théoriquement, obtenir une approximation de toutes les fonctions avec un réseau volumineux en termes de couches et de neurones, mais ce serait à condition d’utiliser un nombre déraisonnablement élevé de neurones. Que se passe-t-il si le nombre de paramètres intervenant dans un problème et donc le nombre de dimensions augmentent ? Le nombre de neurones nécessaires pour calculer une telle fonction augmentera exponentiellement avec la complexité de cette fonction. Si l’on reprend notre exemple d’étiquetage des images, et que l’on considère une image en couleurs de 300x300 pixels, nous aurions 90 000 pixels pour chacune des trois couleurs rouge, vert et bleu, soit 270 000 pixels au total. Si nous associons un neurone à chaque pixel, il faudrait déjà 270 000 neurones rien que dans la couche d’entrée. Or ceci est tout simplement trop volumineux en termes de complexité de calcul, à l’heure actuelle, pour un réseau de neurones artificiels. Et il ne s’agit  que d’une petite image ! Cela illustre le fait qu'un réseau comportant des millions de neurones n’est pas pour tout de suite. Ce n'est du reste pas la seule difficulté. D’autres limitations importantes sont le nombre souvent faramineux d'exemples nécessaires pour apprendre les paramètres et le souci que ce qui a été appris sur ces exemples se généralise bien à tous les autres cas (en évitant de se baser seulement sur quelques cas particuliers). Que pourrions-nous proposer pour fabriquer un système qui aurait un comportement satisfaisant avec un nombre raisonnable d'unités de calcul ? Serait-ce en utilisant des unités de calcul plus sophistiquées que ces neurones artificiels ? Ou plutôt en changeant l'architecture du réseau, c'est–à-dire ses connexions ? Nous avons présenté ci-dessus un réseau dont l'architecture est simple : avec des connexions dans un seul sens, des entrées vers les sorties, et uniquement deux couches de neurones, essentiellement capable d’approximer des phénomènes linéaires. Que se passerait-il si nous utilisions une architecture plus complexe ? Il existe en effet différentes manières de complexifier un réseau de neurones notamment en changeant la topologie en fonction du but recherché. Le réseau peut par exemple comporter plus de deux couches. Il est alors qualifié de « multicouche » : avec une couche d’entrée, une couche de sortie, et une ou plusieurs couches cachées ou intermédiaires. Le perceptron multicouche, capable de traiter des phénomènes non linéaires, est un exemple de ce type de réseau. Un réseau de neurones peut aussi comporter des connexions récurrentes : il est alors doté d’une seule couche dans laquelle tous les neurones sont interconnectés afin de créer, par exemple, une mémoire adressable par son contenu. Mathématiquement, il correspond alors à une matrice de poids. Voir l'encadré ci-dessous.
Thèmes scientifiques
ID
15130
Auteurs
Ikram Chraibi Kaadoud
Thierry Viéville
Introduction
Il y a en science quelques buzz-words — littéralement « mots-rumeurs » — qui font la Une avant de céder la place au mot à la mode suivant. Le deep-learning — ou en français « apprentissage profond » — en est un.
Contenu
En effet, des scientifiques ont su médiatiser cette méthode avec des résultats expérimentaux spectaculaires. Cette approche a permis plusieurs avancées majeures : la plus connue est sans doute le programme de reconnaissance des visages de Facebook, récemment c'est la victoire d'AlphaGo qui a fait la Une, mais cela s'applique aussi à des secteurs comme l'automobile avec NVIDIA qui fournit des outils d'aide à la conduite assistée et autonome (ADAS), ou la santé avec la recherche de cellules cancéreuses par la start-up DreamQuark, ou encore la reconnaissance de parole. Ici, en nous basant notamment sur l'ouvrage de Yoshua Bengio Learning Deep Architectures for AI et les travaux de l'équipe de Yann LeCun, nous souhaitons montrer les apports de cette construction scientifique multi-disciplinaire au machine learning ou « apprentissage automatique ». Commençons par un exemple qui montre l'intérêt de ce formalisme. Précisons ensuite ce que calcule un réseau de neurones artificiels. Cela nous permettra de donner les idées-clés de l'apprentissage profond, des réseaux de neurones profonds et de leur complexité.

Apprentissage profond pour l’analyse de scènes

En associant l'apprentissage profond à des mécanismes algorithmiques de vision par ordinateur, il est possible d'analyser automatiquement une scène visuelle. Voici deux exemples tirés des travaux de Yann LeCun et de son équipe : tout d'abord, des scènes où il a été possible de reconnaître les objets (verdure sur-coloriée en vert, bâtiments en ocre et véhicules en magenta). [caption id="" align="alignnone" width="750"]scene1 Source : Clément Farabet, Camille Couprie, Laurent Najman, Yann LeCun Learning Hierarchical Features for Scene Labeling (2013).[/caption] Autre exemple, cette scène panoramique urbaine où chaque objet est catégorisé. [caption id="" align="alignnone" width="750"]scene2 Source : Clément Farabet, Camille Couprie, Laurent Najman, Yann LeCun Learning Hierarchical Features for Scene Labeling (2013).[/caption] Précisons que l'algorithme ne « comprend » rien, il ne fait que classifier. Le terme de route (road),  bâtiment (building) ou personne (person) n’a pas de sens pour lui, ce ne sont que des étiquettes. Mais d'autres algorithmes peuvent être programmés à partir de ces données. Par exemple, cela permet à un système de surveillance d'autoroute, doté de milliers de caméras dont les flux vidéo ne sont humainement pas exploitables, de veiller au mieux à la sécurité des automobilistes. Cela pourrait aussi aider, par exemple, à identifier automatiquement les véhicules en cause suite à un accident. Les mécanismes d'apprentissage profond ont fait leurs preuves en reconnaissance d’image, comme le montrent les exemples précédents. Les réseaux de neurones profonds, qui sont à la base de l’apprentissage profond, font aussi partie intégrante des systèmes de reconnaissance de parole ou encore de traitement du langage naturel, auxquels ils apportent une amélioration indiscutable. Voir par exemple la bibliothèque open source proposée par Google, TensorFlow, ou MonkeyLearn, ou aussi scikit-learn. Comment ces mécanismes fonctionnent-ils ? Afin d’aider à la compréhension des éléments les plus théoriques, gardons à l’esprit l’exemple d’un système qui doit deviner quelles étiquettes poser sur une image.

Que calcule un réseau de neurones artificiels ?

schema1 Un unique neurone artificiel est une « machine » très simple. À partir de plusieurs entrées, il produit une seule sortie. Les entrées (xi) sont mélangées, c’est-à-dire additionnées en pondérant chacune d’elles d'un poids wi positif (qui excite le neurone) ou négatif (qui inhibe le neurone), et en ajoutant au total une valeur b appelée biais. Une fonction seuil appliquée à ce total classifie le résultat comme valeur basse ou valeur élevée : si le total dépasse le seuil, le neurone « produit » une sortie, sinon il ne produit rien. Un neurone unique effectue ainsi un calcul très rudimentaire de classification. Par exemple, un neurone avec deux entrées, qui prend en entrées les coordonnées d’un point dans le plan, détermine si ce point se trouve d’un côté ou de l’autre d’une droite donnée. Considérons maintenant un réseau de neurones, le plus simple étant formé de deux couches. La première couche est constituée d’un ensemble de neurones, connectés en parallèle, et fournissant un ensemble de sorties y. Si ces sorties (y) sont maintenant combinées en étant les entrées d’un nouvel ensemble de neurones formant une seconde couche, nous obtenons alors un réseau de neurones à deux couches qui peut séparer un ensemble de données en deux. Nous verrons plus loin la possibilité de généraliser cette architecture et de passer d’un réseau à deux couches à un réseau à plusieurs couches. Regardons maintenant comment un réseau à deux couches permet d’apprendre une fonction mathématique. Considérons une suite d’exemples, chacun constitué d’un ensemble d’entrées xi et de la sortie y attendue correspondante, que nous présentons au réseau. Durant cette phase dite « d’entraînement », le réseau va ajuster automatiquement les paramètres de chaque neurone, c’est-à-dire les valeurs des poids et du biais afin de minimiser l'erreur moyenne calculée sur l’ensemble des exemples entre la sortie attendue et celle observée. Il s’agit alors d’apprentissage supervisé puisque nous apprenons au réseau à fournir une réponse connue à l’avance. L‘hypothèse est qu’après cette phase d’entraînement, le réseau sera capable de traiter de manière satisfaisante de nouveaux exemples, dont la sortie est inconnue, en fonction de ce qu’il a « appris ». Il est à noter que plus le corpus d’exemples pour la phase d’entraînement est important, plus la précision du réseau sera élevée. Ce type de réseau trop simple pour faire de la reconnaissance d’images peut néanmoins permettre de réaliser par exemple de la classification de données comme le propose le schéma suivant. Si l’on considère un plan contenant des données, soit un espace à deux dimensions, un neurone seul réalisera une séparation linéaire de ce plan. La fonction mathématique qu’il représente est alors l’équation d’une droite séparant ce plan en deux, comme le montre le schéma ci-dessous à gauche. Si les données, et donc le problème de séparation, sont plus complexes, la fonction mathématique sera non plus l’équation d’une droite mais une équation polynomiale de degré 3 par exemple. Un neurone ne sera pas suffisant, c’est un réseau de neurones qui réalisera cette séparation complexe du plan. Dans l’exemple ci-dessous, l’augmentation du nombre de couches et du nombre de neurones accroît le pouvoir de séparation. [caption id="" align="alignnone" width="750"]schema2 Schéma d'après Nicolas Rougier : Perceptron simple, Perceptron Multi-couches.[/caption] Selon sa structure, un réseau de neurones fournit une approximation de différents types de fonction. En effet, les réseaux à deux couches peuvent représenter des fonctions booléennes ou des fonctions continues, alors qu’un réseau à une couche ne permet de représenter que des fonctions booléennes. L’idée forte de l’apprentissage par réseaux de neurones est de pouvoir, à partir d'un ensemble de calculs rudimentaires et locaux à chaque neurone, apprendre une fonction plus complexe. On peut alors avoir l'impression d’ouvrir la voie à la création d'algorithmes universels, qui pourraient, avec suffisamment de mécanismes élémentaires, donc de neurones, et suffisamment d'exemples d'apprentissage, apprendre des fonctions aussi sophistiquées que voulu. Mais pourrait-on ainsi, en ajoutant des neurones et des couches, obtenir une approximation de n’importe quelle fonction mathématique ? Dans les faits, cet espoir se heurte malheureusement à la malédiction de la complexité. On pourrait certes, théoriquement, obtenir une approximation de toutes les fonctions avec un réseau volumineux en termes de couches et de neurones, mais ce serait à condition d’utiliser un nombre déraisonnablement élevé de neurones. Que se passe-t-il si le nombre de paramètres intervenant dans un problème et donc le nombre de dimensions augmentent ? Le nombre de neurones nécessaires pour calculer une telle fonction augmentera exponentiellement avec la complexité de cette fonction. Si l’on reprend notre exemple d’étiquetage des images, et que l’on considère une image en couleurs de 300x300 pixels, nous aurions 90 000 pixels pour chacune des trois couleurs rouge, vert et bleu, soit 270 000 pixels au total. Si nous associons un neurone à chaque pixel, il faudrait déjà 270 000 neurones rien que dans la couche d’entrée. Or ceci est tout simplement trop volumineux en termes de complexité de calcul, à l’heure actuelle, pour un réseau de neurones artificiels. Et il ne s’agit  que d’une petite image ! Cela illustre le fait qu'un réseau comportant des millions de neurones n’est pas pour tout de suite. Ce n'est du reste pas la seule difficulté. D’autres limitations importantes sont le nombre souvent faramineux d'exemples nécessaires pour apprendre les paramètres et le souci que ce qui a été appris sur ces exemples se généralise bien à tous les autres cas (en évitant de se baser seulement sur quelques cas particuliers). Que pourrions-nous proposer pour fabriquer un système qui aurait un comportement satisfaisant avec un nombre raisonnable d'unités de calcul ? Serait-ce en utilisant des unités de calcul plus sophistiquées que ces neurones artificiels ? Ou plutôt en changeant l'architecture du réseau, c'est–à-dire ses connexions ? Nous avons présenté ci-dessus un réseau dont l'architecture est simple : avec des connexions dans un seul sens, des entrées vers les sorties, et uniquement deux couches de neurones, essentiellement capable d’approximer des phénomènes linéaires. Que se passerait-il si nous utilisions une architecture plus complexe ? Il existe en effet différentes manières de complexifier un réseau de neurones notamment en changeant la topologie en fonction du but recherché. Le réseau peut par exemple comporter plus de deux couches. Il est alors qualifié de « multicouche » : avec une couche d’entrée, une couche de sortie, et une ou plusieurs couches cachées ou intermédiaires. Le perceptron multicouche, capable de traiter des phénomènes non linéaires, est un exemple de ce type de réseau. Un réseau de neurones peut aussi comporter des connexions récurrentes : il est alors doté d’une seule couche dans laquelle tous les neurones sont interconnectés afin de créer, par exemple, une mémoire adressable par son contenu. Mathématiquement, il correspond alors à une matrice de poids. Voir l'encadré ci-dessous.
Thèmes scientifiques