Posted by

Machine Learning : le concept derrière l’intelligence artificielle

10 May 2018
https://martechtoday.com/machine-learning-critical-multi-touch-attribution-194976

   Le machine learning décide pour vous des posts que vous voyez sur Facebook. Il décide pour vous des musiques que vous écoutez sur les plateformes de streaming. Le machine learning est partout dans votre vie, partout dans les médias, mais pourtant seule une poignée de personnes en connaissent les rouages.

Dans cet article, nous étudierons les principes de base du machine learning et ses principaux enjeux, en se penchant plus particulièrement sur le cas du deep learning, qui en est la forme la plus en vogue.

Le machine learning est un domaine de l’intelligence artificielle qui concerne la conception de méthodes permettant à une machine (typiquement un ordinateur) de résoudre des problèmes de manière systématique.

Le deep learning est une catégorie d’algorithmes de machine learning, basés sur l’utilisation de réseaux de neurones. C’est par exemple un algorithme de deep learning qui se cache derrière AlphaGo, le premier algorithme à battre l’humain au jeu de Go. Le deep learning est aussi beaucoup utilisé dans la reconnaissance d’images, et fait parler de lui sur le web pour sa capacité à générer des images ‘psychédéliques’, comme l’a démontré le programme DeepDream de Google.

 

Mais à quoi ça sert le machine learning 

 

   Le but du machine learning, c’est qu’un ordinateur apprenne à partir d’exemples ; qu’il ait connaissance d’énormément de déroulements possibles à partir d’une situation donnée, afin, par la suite, de pouvoir prédire le déroulement le plus probable lié à une situation quelconque.

Mais cette définition est très théorique, et semble abstraite. Basons nous sur un exemple très simpliste, afin de mieux saisir les enjeux du machine learning.

   Imaginez que vous possédez un commerce de fleurs, et que chaque mois, vous vous retrouvez avec une part de stock invendu, qui doit être jeté. Ce stock invendu est variable. Il dépend de la météo (les gens vous achètent plus de fleurs quand il fait beau et chaud que lorsqu’il pleut), et de la commande précédente que vous avez passée (peut-être que les fleurs rouges dans votre boutique se vendent mieux quand elles sont nombreuses, alors que les jaunes sont plus susceptibles d’être achetées si elles sont présentées individuellement). Imaginez de plus que vous ne passez vos commandes auprès de votre fournisseur qu’une fois par mois, et que chaque commande que vous passez est différente des précédentes. Comment connaitre la commande optimale à passer afin de minimiser le stock d’invendu ? C’est à cette question que va répondre le machine learning, en examinant les corrélations entre météo, couleurs des fleurs, et stock restant à la fin du mois.

   Ainsi, en connaissant la météo qu’il fera le mois prochain, vous serez en mesure de prédire quelle est la commande optimale pour minimiser l’invendu. Mais pour cela, votre algorithme de machine learning a besoin de beaucoup de données, dans notre cas il doit connaître la météo pour chaque mois écoulé ainsi que la quantité d’invendu.

   Le machine learning, c’est donc d’abord une phase ‘d’apprentissage’, où l’on fournit beaucoup, beaucoup de données à l’algorithme de sorte à ce qu’il trouve des corrélations entre données d’entrées, et déroulement de la réalité.

 Nous nous sommes limités à un exemple très basique ; et en réalité la nature des relations entre les données d’entrées et la sortie de l’algorithme peut être extrêmement compliquée, et il peut y avoir un nombre de données d’entrées très important, qui rend l’établissement de corrélations laborieux.

Et les réseaux de neurones dans tout cela ? 

   La nature des relations entre les données d’entrées et la sortie de l’algorithme peut être extrêmement compliquée, et il peut y avoir beaucoup, beaucoup de données d’entrées (exemple de la reconnaissance d’image : le nombre de pixel qui codent l’image correspond au nombre de données en entrées). C’est ici que sont introduits les réseaux de neurones.

   Un neurone artificiel est une fonction mathématique dont le fonctionnement est semblable à celui d’un neurone biologique. Un neurone artificiel possède donc comme un neurone biologique un axone, qui correspond à la sortie de la fonction dans le cas artificiel. Il possède aussi des entrées, typiquement plusieurs, qui sont simplement les sorties des autres neurones qui lui sont connectés. Imaginons un neurone sur lequel sont connectées 3 sorties d’autres neurones, et qui possède un axone, cela correspond simplement à une fonction qui prend 3 arguments en entrée, et renvoie un signal en sortie (par analogie aux neurones biologiques, on dit qu’il « décharge »).

https://stackoverflow.com/questions/40537503/deep-neural-networks-precision-for-image-recognition-float-or-double

Fonction de 3 entrée – Neurone artificiel

Dans la pratique, il faut plus d’un neurone pour résoudre un problème, il faut en fait en assembler beaucoup entre eux, c’est cela qu’on appelle un ‘réseau de neurones’.

 Comme avant, nous pouvons alors présenter des données d’entrées et de sorties à notre réseau; c’est la phase ‘d’apprentissage’, puis lui demander de prédire la sortie, à partir d’un nouvel ensemble de données d’entrées, c’est  la phase dite de ‘prédiction’.

    Comment savoir le bon nombre de neurones à utiliser dans notre réseau de neurones artificiels ? En s’inspirant du cerveau humain, on obtient environ 100 milliards de neurones, avec plusieurs milliers de synapses pour un neurone, ce qui donne à peu près un million de milliards de connections. C’est beaucoup trop de connections pour un algorithme, et la phase d’apprentissage devient impossible.

Ainsi, dans la pratique, on se limite à des constructions en 3 couches de neurones. La première couche correspond aux différentes entrées de l’algorithme, la dernière couche, c’est la sortie qui est fonction des entrées. Et, entre ces deux couches, on utilise une couche intermédiaire de neurones qui fait des connections entre les entrées, et la sortie. Alors plus il y a de neurones dans cette couche intermédiaire, plus le programme sera ‘puissant’, mais plus longue et laborieuse sera la phase d’apprentissage.

 Nous sommes donc face à un problème : on ne peut pas juste charger le plus possible notre réseau en neurones pour le rendre efficace, et on ne peut pas non plus traiter directement un problème avec trop d’entrées.

   Pour revenir au problème de reconnaissance d’images, imaginez seulement une image 300 x 300, cela correspond déjà à 90 000 pixels en entrées, c’est beaucoup trop et notre programme ne fonctionnera pas, alors que l’image est finalement assez petite. On peut donc imaginer qu’un autre programme, utilisé en amont de notre réseau de neurones ait pour objectif de relever les caractéristiques de l’image (dans le cas d’une voiture : relever qu’il y à des roues, mesurer le rapport hauteur-longueur, remarquer qu’il y à des vitres, etc…), et qui donne ensuite ces différentes caractéristiques en entrées à notre réseau. Ainsi, on a drastiquement réduit le nombre d’entrées de notre réseau, en nous concentrant sur les caractéristiques principales de l’image, qui permettent de mettre un mot sur ce que ‘voit l’ordinateur’.

Mais pour cela, il faut apprendre à l’ordinateur ce qu’est une roue, il faut lui apprendre toutes les caractéristiques qu’il est censé reconnaitre, ce qui est très inefficace. C’est ici qu’arrive le Deep Learning.

   Pour créer un algorithme de Deep Learning, on met en place un réseau ‘profond’, c’est-à-dire avec beaucoup de couches intermédiaires, et alors en recevant en entrée une image brute, le réseau sera capable de déterminer par lui-même les caractéristiques essentielles d’un objet. Dans l’exemple de la voiture, il apprendra par lui-même à reconnaitre une roue, et apprendra que c’est un élément essentiel pour caractériser une voiture. Mais alors pourquoi est-ce que ça marche ? Si la solution était de mettre beaucoup de neurones, on l’avait déjà fait, en vain. Cette question est complexe, mais pour faire simple, on ne dispose pas n’importe comment les couches de neurones, ni les neurones à l’intérieur des couches. Il existe des architectures bien particulières qui permettent de traiter les données de façon optimale.

Aussi, la puissance de calcul a bien progressé depuis le temps où l’on essayait simplement de remplir notre réseau avec énormément de neurones, ce qui marque une révolution technologique. Une autre raison est la disponibilité de ‘banques d’images’,  qui permettent aux ordinateurs de s’entrainer sur des millions d’images libres de droits.

   Finalement, on peut ‘prendre le réseau dans l’autre sens’, et demander à un algorithme en lui donnant des caractéristiques, de créer une image, à partir de tout ce qu’il a appris, et alors on obtiendra une image qui n’existait pas, qui vient d’être ‘inventée’ par l’ordinateur, c’est ce que l’on appelle des ‘modèles génératifs’, ce sont notamment les images de Google qui ont fait parler d’elles récemment, en voici un exemple : 

https://medium.freecodecamp.org/how-to-create-a-neural-network-in-javascript-in-only-30-lines-of-code-343dafc50d49

https://medium.freecodecamp.org/how-to-create-a-neural-network-in-javascript-in-only-30-lines-of-code-343dafc50d49

 

Article rédigé par Théodore Curtil

 

Liens utiles : 

   -https://fr.wikipedia.org/wiki/DeepDream

   -https://fr.wikipedia.org/wiki/Apprentissage_automatique

 

Sources : 

   -https://sciencetonnante.wordpress.com/2016/04/08/le-deep-learning/

   -https://fr.wikipedia.org/wiki/R%C3%A9seau_de_neurones_artificiels

 

 

 

Comments

comments