Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
  1. Livres et vidéos
  2. L'Intelligence Artificielle pour les développeurs
  3. Réseau de neurones
Extrait - L'Intelligence Artificielle pour les développeurs Concepts et implémentations en Java (2e édition)
Extraits du livre
L'Intelligence Artificielle pour les développeurs Concepts et implémentations en Java (2e édition) Revenir à la page d'achat du livre

Réseau 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 à avoir 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 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 de réseaux, ainsi que son apprentissage...

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 cependant 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 faire 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ù 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....

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ù on n’a que deux classes, on n’utilisera qu’une seule sortie et on choisira la classe en fonction de la valeur obtenue (en général...

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 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 trois ou quatre 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...

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 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 à entraîner en partant de 0. Généralement, on utilise un réseau connu pré-entraîné, et on ne fera que de l’entraînement...

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’application est en Java et n’utilise que les librairies standards, de manière à être facilement réutilisable.

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 texte, avec des tabulations comme séparateurs.

La première classe est PointND, correspondant à un exemple (contenant N dimensions). Celui-ci contient un tableau de valeurs considérées comme des entrées et un tableau de valeurs de sortie. On rend ces attributs publics, mais on les déclare final. De cette façon, ils ne seront pas modifiables.

Le début de la classe est le suivant :

public class PointND { 
   public final double[] entrees; 
   public final double[] sorties; 
  
   // Constructeur ici  
} 

Le constructeur prend en paramètres la chaîne correspondant à la ligne du fichier texte et le nombre de sorties des exemples (les valeurs sont soit des entrées, soit des sorties). Le contenu est d’abord séparé sur les caractères correspondant à la touche tabulation (’\t’) grâce à la fonction split. Ensuite, les entrées et les sorties sont transformées...

Synthèse

Les réseaux de neurones ont été inspirés du 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 de la régression ou de 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 à...