Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. L'Intelligence Artificielle pour les développeurs
  3. Réseaux de neurones
Extrait - L'Intelligence Artificielle pour les développeurs Concepts et implémentations en C# (2e édition)
Extraits du livre
L'Intelligence Artificielle pour les développeurs Concepts et implémentations en C# (2e édition) Revenir à la page d'achat du livre

Réseaux de neurones

Présentation du chapitre

L’intelligence artificielle a longtemps eu pour but de simuler l’intelligence humaine, et d’obtenir un système artificiel capable de réflexion, de prise de décision et d’apprentissage.

Les chercheurs se sont donc assez rapidement intéressés au fonctionnement du cerveau pour le reproduire. C’est ainsi que les premiers neurones artificiels ont été définis par Mac Culloch et Pitts en 1943.

Aujourd’hui, on ne cherche plus à créer des cerveaux avec toutes leurs capacités, mais à obtenir des systèmes pouvant résoudre certains problèmes complexes sur lesquels les systèmes classiques sont limités. C’est ainsi que sont nés les réseaux de neurones artificiels.

Ce chapitre commence par en expliquer les origines biologiques, en s’intéressant au fonctionnement des encéphales, et plus précisément aux neurones.

Le Machine Learning, domaine n’ayant que quelques années, mais couvrant plusieurs techniques dont les réseaux de neurones, est ensuite présenté, avec les formes d’apprentissage et les types de problèmes liés, ainsi que les techniques mathématiques.

Ces techniques ayant des limites, le neurone formel est ensuite présenté. Le perceptron, un des modèles les plus simples...

Origine biologique

On sait depuis longtemps que la réflexion se fait grâce au cerveau. Celui-ci a donc été étudié assez tôt (dès le 18e siècle).

Il existe des "cartes" du cerveau, indiquant ses principales structures et leurs rôles associés. Si tout n’est pas encore compris, on sait par exemple que le cervelet est très important pour la coordination des mouvements ou que l’hypothalamus gère des fonctions importantes comme le sommeil, la faim ou la soif.

Contrairement à une idée reçue que l’on retrouve même dans des films récents comme Lucy de Luc Besson sorti en 2014, on utilise bien 100 % de notre cerveau. Cependant, à un moment donné, seule une partie de celui-ci est mobilisée, en fonction des besoins. Une zone qui ne serait pas utilisée subirait une forte dégénérescence et disparaîtrait rapidement.

Les cellules les plus importantes du cortex cérébral sont les neurones. Ceux-ci sont très nombreux, vu que l’on en compte presque une centaine de milliards chez l’être humain. Ces cellules demandant énormément d’énergie et étant fragiles, elles sont protégées et nourries par les cellules gliales (90 % des cellules du cerveau), qui n’ont par contre aucun rôle dans...

Machine Learning

Le Machine Learning ou ML (traduit généralement en français par "apprentissage automatique") comprend toutes les techniques qui permettent à un algorithme d’apprendre à partir d’exemples, sans programmation directe de la résolution.

Le ML est devenu vital à de nombreux domaines dans lesquels on demande à un ordinateur de résoudre des problèmes que l’on ne sait pas modéliser exactement, mais pour lesquels on peut obtenir des exemples.

La majorité des techniques de ML sont des algorithmes purement mathématiques (issus des statistiques), mais on y trouve aussi des techniques liées à l’intelligence artificielle. C’est ainsi le cas des métaheuristiques ou des algorithmes génétiques, mais surtout des réseaux de neurones (souvent appelés Deep Learning).

1. Formes d’apprentissage et exemples

Le ML permet de résoudre différents types de problèmes, qui sont répartis dans deux formes d’apprentissage principales. Une troisième forme d’apprentissage, bien que très peu utilisée, est aussi présentée.

a. Apprentissage non supervisé

L’apprentissage non supervisé n’est pas la forme d’apprentissage la plus courante, mais son utilisation a tendance à augmenter ces dernières années. Dans cette forme d’apprentissage, il n’y a pas de résultat attendu. On utilise cette forme d’apprentissage pour réaliser du clustering (aussi appelé segmentation) : on a un ensemble de données, et on cherche à déterminer des classes de faits.

En réalité, il existe d’autres applications de l’apprentissage non supervisé, mais le clustering représente la grande majorité des applications actuelles. On peut par exemple citer les systèmes de recommandations, utilisés pour les boutiques en ligne ou les publicités.

On peut imaginer une situation où l’on possède une base de données de clients, et dans laquelle on cherche à obtenir les différents profils, en fonction de leurs achats ou budgets. On ne sait pas a priori combien il y a de profils ou ce qu’ils sont. C’est typiquement un problème de clustering.

On va donc chercher à maximiser la cohérence des données à l’intérieur d’une même classe (qui pourrait par exemple être "les sportifs de 20 à 25 ans") et à minimiser celle-ci entre les classes.

Imaginons que nous ayons l’ensemble de données suivant :

images/DP7-1-NEW.png

Si nous cherchions à déterminer des classes dans ces données, il serait possible de définir les trois suivantes...

Neurone formel et perceptron

Le neurone artificiel, aussi appelé neurone formel, reprend le fonctionnement du neurone biologique.

1. Principe

Un neurone reçoit des entrées et fournit une sortie, grâce à différentes caractéristiques :

  • Des poids accordés à chacune des entrées, permettant de modifier l’importance de certaines par rapport aux autres.

  • Une fonction d’agrégation, qui permet de calculer une unique valeur à partir des entrées et des poids correspondants.

  • Un seuil (ou biais), permettant d’indiquer quand le neurone doit agir.

  • Une fonction d’activation, qui associe à chaque valeur agrégée une unique valeur de sortie dépendant du seuil.

La notion de temps, importante en biologie, n’est pas prise en compte pour la majorité des neurones formels.

Le neurone formel peut donc se résumer sous la forme suivante :

images/07DP02.png

Comme pour la régression linéaire et la régression logistique, la principale difficulté sera l’apprentissage des poids (et du seuil, qui peut être vu comme un poids particulier). Les fonctions d’agrégation et d’activation sont choisies a priori.

C’est la présence de la fonction d’activation, si elle est non linéaire, qui permettra de dépasser la condition de linéarité des algorithmes de Machine Learning vus précédemment, ainsi que le nombre de neurones et leurs connexions entre eux (car on peut bien sûr avoir plusieurs neurones, c’est même le cas majoritaire).

2. Réseaux de type "perceptron"

Le perceptron est le plus simple des réseaux de neurones. Un perceptron est un réseau contenant p neurones formels. Chacun est relié aux n entrées. Ce réseau permet d’avoir p sorties.

Dans le cas d’une tâche de régression, on aura une seule sortie (et donc un seul neurone), qui donnera une valeur réelle. Dans le cas d’une tâche de classification, on aura une sortie par classe, et c’est la sortie avec la plus forte valeur qui indiquera la classe choisie par le réseau.

Dans le cas particulier où l’on n’a que 2 classes, on n’utilisera qu’une seule sortie, et l’on choisira la classe en fonction de la valeur obtenue (en général, ça sera la première classe si la valeur est inférieure à 0.5 et la deuxième classe sinon). 

Avec 3 neurones et 5 entrées, on a donc un réseau avec 3 sorties. Voici la structure obtenue dans ce cas :

images/07DP06.png

Chaque neurone effectue l’agrégation et l’activation, avec des poids et un seuil différent des autres neurones. Le réseau possède donc ici 3 * 5 = 15 poids à ajuster, auxquels s’ajoutent...

Réseaux feed-forward

Les réseaux de type feed-forward ou à couches permettent de dépasser les limites des perceptrons. En effet, ceux-ci ne sont plus limités aux problèmes linéairement séparables.

1. Réseaux avec couche cachée

Ils sont composés d’une ou plusieurs couches cachées de neurones, reliées aux entrées ou aux couches précédentes, et d’une couche de sortie, reliée aux neurones cachés. On les appelle feed-forward car l’information ne peut aller que des entrées aux sorties, sans revenir en arrière.

Le nombre de couches cachées et le nombre de neurones de chaque couche sont à choisir par l’utilisateur (généralement en faisant des tests sur plusieurs valeurs). On parle de Deep Learning quand le nombre de couches est important (à partir de 3 ou 4 couches cachées).

Plus le réseau possède de couches et plus il est complexe, permettant un meilleur apprentissage plus rapidement qu’avec une ou deux couches cachées. En effet, chaque couche peut être vue comme étant une étape supplémentaire dans l’algorithme (par exemple pour la reconnaissance de chiffres, on peut imaginer que la première couche détecte des traits et des boucles, que la couche suivante permet de cumuler certaines caractéristiques de la première couche, et qu’une troisième couche en déduise le nombre écrit).

Voici un exemple de réseau avec cinq entrées et trois sorties, ainsi que deux neurones cachés.

images/07DP09.png

Dans ce cas-là, il faut ajuster les poids et seuils de tous les neurones cachés (ici 12 paramètres) ainsi que les poids et seuils des neurones de sortie (9 paramètres). Le problème complet contient donc 21 valeurs à déterminer.

Les réseaux utilisant des neurones de type perceptron sont dits MLP pour MultiLayer Perceptron, alors que ceux utilisant des neurones à fonction d’activation gaussienne sont dits RBF (pour Radial Basis Function). Les réseaux MLP et RBF sont courants, mais sont de plus en plus remplacés par des réseaux plus adaptés pour les images (CNN) ou pour les séries temporelles et les sons (SNN). Ces deux types de réseaux sont vus ultérieurement, mais ils sortent du cadre de ce livre.

2. Apprentissage par rétropropagation du gradient

L’algorithme de descente de gradient tel qu’expliqué précédemment ne fonctionne que pour les perceptrons, qui ne possèdent pas de couche cachée.

Dans le cas des réseaux feed-forward, il existe un apprentissage possible : par rétropropagation du gradient (nommé Backpropagation en anglais). C’est une extension...

Autres architectures

Les réseaux feed-forward sont fortement utilisés, mais ce ne sont pas les seuls réseaux, et il existe de multiples architectures permettant de travailler sur des problèmes différents.

Nous ne rentrerons pas dans les détails de leurs implémentations, mais nous allons en présenter les principales.

1. Réseaux de neurones à convolution

Les réseaux de neurones convolutifs (ou à convolution, notés CNN en anglais) sont très adaptés pour travailler sur des images. En effet, les pixels ne sont pas complètement indépendants, et il est souvent utile de travailler sur des zones de l’image.

Ces réseaux sont composés de multiples couches, pouvant avoir des rôles différents. En particulier, on distingue les couches de convolution, qui traitent des parties de l’image (il faut les voir comme des extracteurs de caractéristiques), les couches de pooling (qui combinent les sorties des couches de convolution pour en détecter des fonctionnalités de plus haut niveau) et les couches plus classiques de classification (souvent avec la fonction ReLU comme fonction d’activation).

Ces réseaux sont cependant très durs à entrainer en partant de 0. Généralement, on utilise un réseau connu préentrainé, et on ne fera que de l’entrainement...

Domaines d’application

Les réseaux de neurones sont utilisés dans de nombreux domaines. Ils sont une très bonne technique lorsque les critères suivants sont remplis :

  • De nombreux exemples sont disponibles pour l’apprentissage, ou alors il est possible d’en créer facilement.

  • Il n’existe pas de liens connus entre les entrées et les sorties exprimables par des fonctions.

  • La sortie est plus importante que la façon de l’obtenir, les réseaux de neurones ne permettant pas d’avoir une explication sur le processus utilisé en interne.

1. Reconnaissance de patterns

La tâche la plus courante donnée à des réseaux de neurones est la reconnaissance de patterns.

Dans cette tâche, différents patterns sont présentés au réseau pendant l’apprentissage. Lorsque de nouveaux exemples doivent être classés, il peut alors reconnaître les motifs : il s’agit d’une tâche de classification.

C’est ainsi que les réseaux de neurones peuvent reconnaître des caractères manuscrits ou des formes. Des applications permettent de lire les plaques d’immatriculation dans une image même en présence de défauts d’éclairage ou sur la plaque en elle-même.

2. Estimation de fonctions

L’estimation de fonctions ou régression consiste...

Implémentation

Les MLP (MultiLayer Perceptron) sont des réseaux très utilisés. Ce sont des réseaux feed-forward, avec des neurones de type perceptron. La fonction d’agrégation est une somme pondérée, et la fonction d’activation une sigmoïde, ce qui permet un apprentissage par rétropropagation. On les retrouve surtout en régression.

Le réseau codé ici possède une seule couche cachée. Le nombre de neurones des différentes couches comme le nombre d’entrées sont paramétrables.

Deux problèmes sont ensuite présentés :

  • Le problème du XOR (ou exclusif) qui est simple à résoudre et permet de tester que les algorithmes fonctionnent.

  • Le problème "Abalone", qui est de type régression et est très utilisé pour comparer des algorithmes d’apprentissage.

À l’exception du programme principal, qui est une application Windows de type console, le reste du code est compatible avec l’ensemble des plateformes .Net 4.5, ASP.Net 1.0 et plus, et Windows 8 et plus, permettant de l’utiliser dans un maximum d’applications.

1. Points et ensembles de points

Les problèmes utilisés avec les réseaux de neurones nécessitent de nombreux points pour l’apprentissage. Il n’est donc pas concevable de les rentrer à la main dans le code.

On utilisera donc des fichiers textes, avec des tabulations comme séparateurs.

La première classe est DataPoint, correspondant à un exemple. Celui-ci contient un tableau de valeurs considérées comme des entrées et un tableau de valeurs de sortie. On rajoute deux propriétés permettant de récupérer ces tableaux qui ne sont pas modifiables.

Le début de la classe est le suivant :


using System;  
   
internal class DataPoint  
{  
    double[] inputs;          
    internal double[] Inputs  
    {  
           get  
           {  
                 return inputs;  
           }  
    }  
   
    double[] outputs;  
    internal double[] Outputs  
    {  
           get  
           {  
                return outputs;  
           }  
    }  
   
    // Constructeur ici  
}
 

Le constructeur prend...

Synthèse

Les réseaux de neurones ont été inspirés par le fonctionnement du cerveau des êtres vivants. En effet, de simples cellules ne faisant que transmettre des impulsions électriques en fonction des entrées reçues permettent l’ensemble des comportements et des réflexions. Leur puissance émerge du nombre des cellules grises et de leurs connexions.

Leur principale utilisation se trouve dans le Machine Learning. Les principales formes d’apprentissage sont l’apprentissage non supervisé (pour des tâches de clustering) et l’apprentissage supervisé (pour la régression ou la classification). Cependant, les techniques purement mathématiques ne permettent pas la résolution de problèmes complexes, en particulier non linéairement séparables. Les réseaux de neurones et en particulier le Deep Learning permettent de lever ces limites.

Le neurone artificiel, dit neurone formel, combine une fonction d’agrégation permettant d’obtenir une unique valeur à partir de l’ensemble des entrées, des poids du neurone et de son biais, et une fonction d’activation, permettant d’obtenir sa sortie.

La fonction d’agrégation est généralement une somme pondérée. La fonction d’activation est plus variée, mais correspond à la fonction...