---
title: L intelligence artificielle vue par un autodidacte
tags: post, reboot, learn
robots: noindex, nofollow
author: Julien Noyer
---
# L'intelligence artificielle vue par un autodidacte
*Article réalisé dans le cadre d'une participation à une conférence sur l'IA*

> Blog post From [dwsapp.io](https://dwsapp.io) - © 2021/2022 [Julien Noyer](https://www.linkedin.com/in/julien-n-21219b28/) all rights reserved
---
## Introduction
Dès les années 1950 les informaticiens mettaient en place des principes d'*apprentissage automatique* mais les technologies de l'époque ne permettaient pas des résultats impressionnants : les envies de l'humain dépassaient les capacités de la machine à cette époque. Faire des recherches dans le domaine de l'intelligence artificielle au début de l'informatique demandait aux chercheurs de faire preuve d'une patience infinie pour être prêt à attendre des semaines ou des mois pour additionner des nombres binaires sur l'[**IBM 701**](https://fr.wikipedia.org/wiki/IBM_701) qui n'effectuait _que_ 16 000 calcules par seconde. Une formule un à l'époque ! L'*apprentissage automatique* - ou "*Machine Learning*" regroupe les méthodes qui concerne la conception, l'analyse, le développement et l'implémentation de processus qui permettent à une machine de faire évoluer son propre algorithme. Des capacités spécifiques déclinées en cinq critères sont nécessaires pour réussir à développer une *machine apprenante* :
- **Classification :** capacité à organiger des données
- **Régression :** capacité à établir une relation linéaire entre des données
- **Regroupement :** capacité de créer des ensembles de données cohérentes
- **Modèles génératifs :** capacité de créer des critères de regroupement
- **Apprentissage par renforcement :** capacité apprendre par expérience
### La classification : organiser des données
La **classification** est une des premières problématiques abordées dans l'étude de l'*apprentissage automatique* : comment faire pour reconnaitre un chat d'un chien.

> Découvrez [ImageNet](https://image-net.org) pour tester la classification
Ces deux animaux ont été proposés par Microsoft en 2007 pour réaliser des [CAPCHA](https://fr.wikipedia.org/wiki/CAPTCHA) pour que les êtres humains puissent être identifiés, car l'intelligence artificielle n'en était pas capable à l'époque. C'est aujourd'hui possible, mais pour rendre efficace à grande ampleur la classification visuelle pour les IA il est nécessaire de travailler sur l'identification des millions d'objets possibles et les critères de reconnaissances de ces objets qu'il faudra enseigner aux AI.
### La régression : établir des relations entre les données
La _régression_ consiste à prévoir un calcule permettant de prévoir un résultat en envoyant des données dans une machine qui les analyse et les places sur un plan à deux dimensions afin de repérer une suite logique entre les données.

> Pour la création d'une maison par exemple, **différents critères** rentrent en jeu, en analysant tous les critères des toutes les maisons d'un quartier, il est possible de définir la **moyenne de prix d'une nouvelle maison** qui suit ces mêmes critères.
### # Le regroupement : créer des ensembles de données
Le *regroupement* permet à un système de réaliser des ensembles de données, elles sont envoyées dans la machine qui en effectue l'analyse pour les regrouper de façon logique, selon des critères qu'elle définie en fonction des données quelle reçoit.

> Il est à noter dans cette démarche que le regroupement opéré est complètement défini par la machine et non par celui qui lui envoie les données.
### Les modèles génératifs : créer des critères de regroupement
Les *modèles génératifs* sont très en vogue aujourd'hui, ils permettent de générer des données à partir de données similaires.

> En savoir plus sur le [Least Squares Generative Adversarial Networks](https://arxiv.org/abs/1611.04076)
Le [Least Squares Generative Adversarial Networks](https://arxiv.org/abs/1611.04076) à réaliser l'expérience en donnant à traiter des millions d'images de chambres à son IA pour qu'elle puisse créer des images de chambre d'elle-même, le résultat est assez psychédélique, mais de prochains modèles permettront surement d'aller beaucoup plus loin.
### L'apprentissage par renforcement : apprendre par expérience
L'*apprentissage par renforcement* permet de réaliser des machines capables d'apprendre d'elles-mêmes : en leur indiquant la marche à suivre l'algorithme et en quelque sorte capable de se tester lui-même afin de contourner ses failles.

> En savoir plus sur le [AlphaGo](https://deepmind.com/research/case-studies/alphago-the-story-so-far)
[AlphaGo](https://deepmind.com/research/alphago/) de [Deep Mind](https://deepmind.com) en est un parfait exemple dans la mesure ou les programmeurs ont donné les règles du Go à la machine qui a joué contre elle-même jusqu'à réussir à battre le meilleur jour au monde.
---
## Apprendre à lire : utilisation de la base de données MNIST

Un cas d'usage très courant dans l'étude de l'apprentissage automatique est l'utilisation d'un jeu de données normalisé [**MNIST**](https://fr.wikipedia.org/wiki/Base_de_données_MNIST) que permet d'entrainer une machine à reconnaitre des chiffres manuscrits. Le jeu de données est constitué de 70 000 fichiers image en noir et blanc de 28 x 28 pixels représentant des chiffre écrit à la main.
**Base de données [MNIST](https://fr.wikipedia.org/wiki/Base_de_données_MNIST)**
- 10 chiffres arabes
- 70 000 fichiers
- 28 x 28 pixels
- Noir et Blanc
- Ecritures maniscrites

La méthode de **classification** consiste à récupérer la valeur de chaque point de l'image en considérant que le blanc vaut 0 et le noir vaut 255. Le résultat de l'analyse est un vecteur de 784 nombres compris entre 0 et 255 pour toutes les déclinaisons du blanc au noir. Nous pouvons grâce à ce vecteur calculer la valeur de noir pour chaque image :
```bash
blackValue = (px1 + px2 + px3 + ... + px782 + px783 + px784)
```
> Avec une seule image le calcul est très simple, mais quand est-il avec plusieurs images ?
### Classifier les données de départ

L'image ci-dessus nous apprend plusieurs éléments reconnaissables mais l'oeil humain est bien plus puissant qu'une machine, la démarche n'est alors pas de faire en sorte que la machine imite l'homme, mais plutôt de définir comment la machine doit fonctionner.
Il faut commencer en organisant les données à envoyer comme référence à la machine pour qu'elle puisse avoir un point de départ dans son apprentissage.

### Tester la regression
Une fois que la machine à analyser les images nous pouvons lui soumettre de nouvelles images qu'elle va comparer avec ses milliers de références pour tester sa classification.

Avec la quantité d'image que la machine a analysé elle a été capable de définir précisément la valeur de point noir de chaque image. Une fois ces données récupérées la machine est en mesure de créer des tableaux de points dont la [distance](https://fr.wikipedia.org/wiki/Distance_(mathématiques)) est calculable. En mathématiques, [une distance](https://fr.wikipedia.org/wiki/Distance_(mathématiques)) formalise la longueur qui sépare deux ou plusieurs points.
### Calculer la distance entre des points
La distance dites "[_euclidienne_](https://fr.wikipedia.org/wiki/Distance_(mathématiques))" de l'intervalle entre deux points sur une dimension est facilement calculable :

```bash
D(A, B) = b1 - a1
```
Pour le passage en deux dimensions ça ce complique un avec la formule :

```bash
D(A, B) = V (b1 - a1)^2 + (b2 - a2)^2
```
Et pour trois dimensions la formule devient plus complèxe mais permet de comprendre la logique du calcule de la distance [_euclidienne_](https://fr.wikipedia.org/wiki/Distance_(mathématiques)) :

```bash
D(A, B) = V: (b1 - a1)^2 + (b2 - a2)^2 + (b3 - a3)^2
```
> V: = Vecteur de
### Regroupement des données
C'est à cet endroit qu'une machine peut sembler intelligente dans sa capacité à résoudre des opérations incalculables par un cerveau humain, mais c'est grâce au travail fait au préalable que la machine y parvient et une fois qu'elle à a disposition cette masse d'informations, elle est capable de retrouver le bon chiffre depuis un nouvel exemple.

### Comparaison à grande échelle
Les écarts sont minces entre les mauvais résultats et plus grand avec le bon, le calcule des distances fonctionne donc avec un taux d'erreur assez mince :

- __60 000 exemples__ de référence
- __10 000 exemples__ de test
- Taux d'erreur __3.8%__
---
## Apprentissage supervisé : former une machine intelligente

Les étapes que nous venons de suivre pour permettre à notre machine de reconnaitre des chiffres manuscrits n'ont pas à proprement parlé permit à la machine d'apprendre, nous avons simplement gavé une base de données et créer des algorithmes pour y accéder, mais il reste du chemin avant que notre machine soit capable d'apprendre d'elle-même.
### # Apprendre pour prévoir
Le tableau de données ci-dessous va nous permettre de comprendre la méthode permettant à la machine de faire des prédictions : quelles sont les individus qui représentent le plus grand risque de non-sovabilité. Nous commençons en comparant les salaires et le niveau de diligence, chaque individu est représenté sur la ligne des salaires par la couleur correspondant à son niveau de diligence.

La machine constate une chose simple : il y à plus de points rouges à gauche qu'à droite. De façon stricte elle coupe la droite en deux au point de rupture qui lui semble le mieux et défini la formule suivante :
```bash
Salaire > 132 000 = E(15%)
```
Cette classification dite "[_linéaire_](https://fr.wikipedia.org/wiki/Classifieur_lin%C3%A9aire)" est arbitraire dans la mesure ou avec seulement deux variables à comparer, la découpe est faite à l'endroit où ça semble le mieux.
### Augmenter le niveau de connaissance
En regroupant l'âge, le salaire et le niveau de diligence nous passons sur une visualisation différente de nos données ce qui nous permet de placer les points sur un plan en deux dimensions.

Une fois encore la machine retrouve un point de rupture, mais peut-être cette fois-ci plus justement grâce à la nouvelle donnée à analyser :
```bash
4 000 Age + Salaire > 340 000 = E(5%)
```
### Voir en hyperplan
Partant du constat que plus il y a de données à analyser, plus le niveau d'erreur baisse, nous pouvons facilement imaginer qu'une analyse avec en plus les données de scolarité nous donnera encore une fois un meilleur résultat. La machine passe donc en trois dimensions pour réaliser la découpe suivante appelée [hyperplan](https://fr.wikipedia.org/wiki/Hyperplan).

Le résultat est sans appel, tous les points rouges ce retrouve au-dessus du point de rupture défini par la machine avec un niveau d'erreur nul :
```bash
11 900 Salaire + 3 250 Age + Salaire > 499 000 E(0%)
```
### Des hyperplans pour aider la décision

Nous venons de démontrer avec des données fictives qu'une machine, si on lui donne assez de données à analyser, est capable de définir des calcules lui permettant de donner une appréciation sur la solvabilité d'un individu, mais induit qu'ils doivent correspondre à l'un de ces trois cas :
- Salaire > 132 000 = **E(15%)**
- 4 000 Age + Salaire > 340 000 = **E(5%)**
- 11 900 Salaire + 3 250 Age + Salaire > 499 000 = **E(0%)**
Cette fois encore, la machine bat de loin le cerveau humain dans sa capacité à visualiser des informations, car il serait impensable d'imaginer faire à la main les différents tableaux ci-dessus, quoique... Et ce n'est pas tout, si la démonstration que nous venons de faire sur deux critères est possible alors il l'est également pour plus.
### Créer des hyperplans
Les images du projet [**MNIST**](https://fr.wikipedia.org/wiki/Base_de_données_MNIST) peuvent également nous permettre de définir des hyperplans. Nous avons néanmoins un problème, car un hyperplan est réalisé grâce à des données au minimum en trois dimensions, mais les images sont en noir et blanc. Nous allons donc réaliser un schéma pour représenter la valeur du noir et le positionnement en x et y des pixels dans l'image afin de concevoir un plan en deux dimensions.

Sur le schéma ci-dessus, les points rouges représentent le noir 255 et les points verts le noir 0, nous l'affichons à plat sur le visuel ce qui représente **une projection en 2 dimensions** de notre schéma sur une feuille.
### Donner du volume aux informations
Pour mettre en volume nos données il faut imaginer les projeter sur une surface courbe à la manière d'un vidéo-projecteur cinématographique. La machine utilise un algorithme qui va lui permettre de **projeter notre schéma en deux dimensions sur un plan en trois dimensions**.

La formule mathématique utilisée pour la [projection](https://en.wikipedia.org/wiki/Projection_(mathematics)) permettant de passer d'un plan en deux dimensions à un plan en trois dimensions est la suivante :
```bash
(a1, a2) => (a1, a2, a2/1 + a2/2)
```
### Définir l'hyperplan dans un volume
En observant les données ainsi représentées, la machine utilise l'algorithme qui lui permet à présentent de définir un hyperplan à partir de la modélisation des données en trois dimensions.

Une fois projetées, les données prennent un autre sens, une autre forme dans laquelle la machine est capable d'identifier les caractéristiques de la lettre manuscrite qu'on lui demande d'enregistrer.
### Regrouper les données grâce à l'hyperplan
Ce que l'homme pouvait définir à l'oeil nu la machine en est à présent capable. Il est à noter que cette simple opération humaine nécessite déjà une somme de travail pharamineuse !

Une fois cet hyperplan enregistré la machine passe à l'image suivante et ainsi de suite pour les 60 000 autres images. A la fin du processus la machine a en-magasiné toutes les données en créant dix hyperplans qui lui permettront de reconnaître les chiffres manuscrits avec un taux d'erreur à seulement **1.9%**.
### Des hyperplans aux réseaux neurones

La capacité d'une machine à créer des hyperplans grâce aux données qu'on lui aura fourni pour son entrainement peut lui permettre de mettre en place lui-même des critères d'évaluation nécessaire pour trouver une solution.
- Analyse par **Regroupement** : **E(3.8%)**
- Analyse par **Hyperplan** : **E(1.9
---
## Modélisation d'un cerveau : historique et concepts de base

Les travaux de [Frank Rosenblatt](https://en.wikipedia.org/wiki/Frank_Rosenblatt) sur les réseaux de neurones en **1958** ont ouvert la voie de la recherche en intelligence artificielle, mais ces travaux n'étaient que très peu suivi compte tenu des faibles puissances de calcule de l'époque, ils ont néanmoins répondu à une **volonté scientifique de découvrir le fonctionnement du cerveaux**.
Nous avons aujourd'hui la puissance de calcule nécessaire, mais la volonté de découvrir le fonctionnement a été **su-plantée par celle de vouloir copier le cerveau**. Cela semble tentant mais c'est une erreur de jugement, si la machine peut à l'aide d'hyperplans trouver un résultat elle doit aujourd'hui les analyser un par un quand **un cerveau active tous les neurones de son réseau au même instant**.La puissance de calcule
En 1958 [Frank Rosenblatt](https://fr.wikipedia.org/wiki/Frank_Rosenblatt) ne pouvait qu'imaginer une machine capable d'effectuer autant d'opération qu'un cerveau humain, mais les machines d'aujourd'hui et les avancées techniques sur la mise en place de neurones informatique rendent son rêve envisageable.

A l'époque donc créer un ordinateur intelligent était inaccessible simplement pour une question de puissance matériel mais n'était pas pour le moins théorisable avec les données scientifiques sur le cerveau dont on disposait :
- **Poids** : 1.4kg
- **Puissance** : +/- 1OO hertz
- **Nombre de neurones** : 86 milliards
- **Nombre de connexions synaptiques par neurone** : 10 000/seconde
- **Nombre d'opérations possibles par neurone** : 12
Une fois ces données établies et validées, il est simple de définir la puissance du cerveau avec le calcule suivant :
- 86G x 10K x 100 Hertz = 86 peta-Connexion/seconde
- 86PC/s x 12 = 1 exa-flops/seconde
> 1 peta = 1 milion de millard
> 1 exa = 1 trillion (1 millard de millard)
### Comprendre le fonctionnement du cerveau
La création est avant tout nourrie par l'observation, pour créer un neurone artificiel il faut donc dans un premier temps observer le comportement d'un neurone humain. Les recherches scientifiques ont depuis longtemps défini que les neurones permettent d'analyser le monde qui nous entours via des connexions synaptiques.

L'image ci-dessus représente les [connexions synaptiques](https://fr.wikipedia.org/wiki/Synapse) entre les neurones d'un cerveau humain à un instant "T", ce même instant qui nous permet de reconnaitre le chiffre "2". Imaginer reproduire le même schéma avec un réseau de neurones est possible grâce à l'élaboration d'algorithmes complexes et l'utilisation de calculateurs puissants.
### Fonctionnement d'un neurone artificiel
Comme dans le cerveau humain, un neurone informatique a pour fonction de calculer un résultat, selon des données en entrée que nous allons lui enseigner avec une méthode spécifique. Nous reprenons les données du projet [MNIST](https://fr.wikipedia.org/wiki/Base_de_données_MNIST) et les hyperplans précédemment définis pour comprendre la mise en place d'un tel système.
Nous installons sur un neurone spécifique, le ou les hyperplans qui permettent de reconnaitre un chiffre en particulier, le "0" dans l'exemple ci-dessous et nous l'entrainons à reconnaitre des nouvelles images.
L'algorithme qui va permettre de définir l'hyperplan à nécessairement besoin d'analyser des paramètres et comme pour toutes fonctions il est possible d'ajuster ces paramètres afin de l'optimiser.

Dans notre cas lorsqu'un nous entrainons notre neurone avec des images de références, nous lui permettons d'identifier plus efficacement l'image en modifiant légèrement les formules de calculs utiliser dans notre algorithme.
Ce mode opératoire se rapproche du métier de mécanicien qui va par une suite de réglage va permettre d'optimiser la puissance du moteur. Où plus proche du sujet qui nous concerne, à celle de [Alan Turing](https://fr.wikipedia.org/wiki/Alan_Turing) lorsqu'il a utilisé [Bombe](https://fr.wikipedia.org/wiki/Bombe_(électromécanique)), l'ordinateur qui lui a permis de décrypter le [code Enigma](https://fr.wikipedia.org/wiki/Enigma_(machine)) ou faire des [recherches sur la biologie théorique](https://www.futura-sciences.com/sciences/actualites/chimie-structures-turing-biologie-synthetique-34072/).
### Tester des neurones artificiels
Notre neurone est connecté à **chacun des pixels de l'image** afin de calculer la valeur du noir de chaque pixel. Une fois l'image analysée le neurone à créer **un hyperplan de cette nouvelle image** qu'il est alors capable de **comparer** avec celui qu'il a en **référence**.

### Créer des couches de neurones
Avec des neurones informatiques **entraînés à travailler ensemble** pour calculer un résultat nous nous rapprochons du fonctionnement d'un cerveau humain mais **nous n'avons pour le moment que trois neurones** mais suffisamment de principe pour **passer à une échelle supérieure**.
En étant capable de **découper les calcules** nous permettant de reconnaitre un chiffre nous pouvons imaginer un système en réseau de neurones qui seraient capables d'**effectuer des calcules en parallèles sur une même image**.
Cette mise en parallèle des calcules nous permet de mettre en place un **réseau de neurones à 3 couches** ce qui est très loin du [cortex cérébral](https://fr.wikipedia.org/wiki/Cortex_c%C3%A9r%C3%A9bral) d'un cerveau humain dont le réseau de neurone ne correspond qu'à une des **3 à 6 couches** qui le compose.

Loin de vouloir battre le calculateur de [Frank Rosenblatt](https://fr.wikipedia.org/wiki/Frank_Rosenblatt), nous restons sur une infrastructure légère de 410 neurones qui demande déjà une grande somme de calcule :
- **784 données** en entrée
- **410 neurones**
- **3 couches** successives
- **266 200 connexions** entre les neurones
### Créer un réseau de 86 milliards de neurones artificielles

Nous pourrions décliner cette démonstration sur plusieurs couches de neurones ou sur des milliards de neurones pour prouver théoriquement la possibilité que nous avons de dépasser la puissance de calcul d'un cerveau humain que nous n'aurions pas pu pour autant démontrer qu'une machine soit capable d'apprendre.
Les concepts que nous avons déclinés s'oriente sur le principe de classification en prenant pour point de départ des données organisées, bien souvent par une action humaine. Ces méthodes d'apprentissage supervisé donnent de très bons résultats dans différentes industries, mais arrivent à un point de rupture face à des problèmes d'identification d'images complexes, car mettre en place et tester ces méthodes prendraient un temps trop long.

Nous avons néanmoins aujourd'hui des processeurs graphiques - ou [GPU](https://fr.wikipedia.org/wiki/Processeur_graphique) - à la force de calcul impressionnante et il serait dommage de laisser cette puissance à la simple utilisation de carte graphique quand on peut y installer un réseau de neurones artificiels. Que faire alors, pouvons-nous conserver cette méthode d'apprentissage ?
---
## Apprentissage non supervisé : laisser la machine se débrouiller

L'époque actuelle est pleine d'enthousiasmes autour des avancés en robotique et en intelligence artificielle, les médias, le cinéma ou l'éducation nationale, tout le monde semble prendre le sujet pour lui et y va de son analyse, de son appréciation sur la sur-puissance supposée des machines.
Dans la mesure où les recherches scientifiques sont théorisées depuis bien longtemps les possibilités de la machine, le monde des chercheurs y voit des nouvelles opportunités dans leur recherche mais n'ont toujours pas pour ambition de dépasser le cerveau humain. Pour [Yann Lecun](https://www.di.ens.fr/~ponce/) par exemple qui est l'un des inventeurs du principe d'apprentissage profond, l'intelligence ne peut-être artificielle.
### Ne plus s'occuper des hyperplans
Le **point de départ de l'apprentissage non supervisé** est de considérer que compte tenu de l'énorme quantité d'informations à traiter, **c'est la machine** qui doit être capable de **réaliser d'elle-même la classification et le regroupement** des données.

[Yann Lecun](https://www.di.ens.fr/~ponce/) qui a co-inventer les principes d'apprentissage profond - ou non supervisé - continu aujourd'hui sur l'amélioration de ces méthodes en tant que directeur de [Facebook Artificial Intelligence Research](https://fr.wikipedia.org/wiki/Facebook_Artificial_Intelligence_Research). Ses recherches sont aujourd'hui considérées comme les plus abouties dans ce domaine, avec trois réseaux de neurones qui analysent chaque image diffusées sur Facebook il est en même temps celui qui dispose de **la plus grande base de données classifier au monde**.
### Une infinité de données dans un monde fini
Une machine capable de générer des données à partir de données sources est assez facile à imaginer, mais pour que cette machine puisse déterminer les caractéristiques des données sources il faut **un travail de classification préalable**.

Pour [Yann Lecun](https://www.di.ens.fr/~ponce/) cette classification et tout simplement faite par **les utilisateurs de Facebook** qui diffuse jusqu'à **un milliard de photos par jour avec des tags**, des identifications de lieu et de personnes. De cette quantité astronomique d'images, les **algorithmes sont alors livrés à eux-mêmes** dans la recherche des caractéristiques des images. Il est à noter néanmoins que Facebook pré-mache le travail des algorithmes avec les tags que les utilisateurs associent ou non à leurs images.
### Inverser le réseau de neurones
Nous présentions dans l'introduction le principe des [modèles génératifs](https://en.wikipedia.org/wiki/Generative_model) qui permet à une machine de générer des données à partir de caractéristiques spécifiques.

Dans le visuel ci-dessus présente de photo de personnalités qui n'existent pas : l'algorithme qui les a créés c'est inspiré de milliards d'images qui lui ont permis de définir des critères de lui-même.
Pour atteindre ce résultat il a "simplement" fallut inverser le principe d'utilisation des neurones de notre réseau.

Partant de ce principe nous pouvons donc **imaginer inverser totalement notre réseaux de neurones** pour lui demander de générer des images qui rentrent dans les caractéristiques qui correspondent à ses hyperplans et ainsi générer des images.
> Pour plus d'informations [ouidou.fr](https://blog.ouidou.fr)