constitution image rgb Cours pratiques - Deep learning

Composition et conversion d’une image

Lorsque l’on souhaite analyser des images, ce sont les réseaux de neurones à convolution qui s’en sortent le mieux. Ils sont basés grâce à des expériences effectué sur le cortex et le système de vision des animaux, ces réseaux sont beaucoup plus légers que leurs confrères composé de couche de neurones entièrement connectés les uns aux autres. Attention cependant à ne pas faire trop le rapprochement entre CNN (Convolutional Neural Networks) et images, car ceux-ci peuvent tout aussi bien être utilisé sur du texte, pour réaliser des analyseur de sentiments pour ne citer qu’un exemple. Mais ce n’est pas l’objectif de cet article-ci, j’en reparlerais dans des articles dédiés à ce sujet. 😉

Comme je disais, ces réseaux qui analysent des images, vont pouvoir extraire des caractéristiques propre à celle-ci et à l’ensemble des objets, personnes etc. la constituant. Cependant, comme je l’ai expliqué dans ce post-ci, les réseaux de neurones effectuent des calculs matricielles sur des tenseurs. Ce serait donc outrageux d’envoyer directement nos images tel quel, dans leurs formats natif comme jpg ou encore png (et de toute façon, ce n’est pas possible).

Je vais donc vous montrer comment est constitué une image, afin que vous compreniez les processus que j’effectue sur mes tutoriels pratiques, lorsque je convertis les images de mon jeu de données en tableaux de valeurs (fichier Numpy).

 

Comment est constitué une image ?

Premièrement, notre image est composée de pixel. Je ne vais vous faire la description globale de ce qu’est un Pixel (wikipedia le fera bien mieux que moi), mais c’est l’unité de base, qui définit une image. Une image ayant une taille de 50 par 50 veut dire qu’elle sera composée de 50 pixel par 50 pixel.

cannaux image rgb
Les 3 canaux RGB constituant une image

 

Ensuite, il faut savoir qu’une image en couleurs est composé de 3 canaux, le célèbre RGB (pour Rouge Vert Bleu). Vous aurez donc deviné, que pour une image en noir et blanc, celle-ci est composé exclusivement d’un seul canal.

Ainsi, on peut représenter chaque canaux par une matrice de dimension correspondant à la largeur et la hauteur de l’image. Chaque pixel de l’image va donc représenter une variable de la matrice, qui correspond à l’intensité de la couleurs à ce pixel précis. Petit rappel concernant ce sujet, un pixel peut être définit via une variable comprise entre 0 et 255, correspondant à l’intensité de sa couleur. Cependant, pour homogénéiser nos matrices, nous allons diviser par 255 chacune de nos valeurs, pour avoir à l’entrée de notre réseau de neurones, des matrices ayant l’ensemble de ses valeurs entre 0 et 1.

 

image tenseur cannaux rgb matrice
Empilement de chaque matrice de nos canaux qui forment un tenseur d’ordre 3

Nous nous retrouvons au final avec 3 matrices correspondant à nos 3 canaux de couleurs, qui seront empilés pour former ce qu’on appelle un Tenseur d’ordre 3. Et c’est sur ces structures algébriques que la magie de notre réseau va opérer. 😉

fonction d activation Cours théoriques - Deep learning

Fonction d’activation

Description

Une fonction d’activation est une fonction mathématique utilisé sur un signal. Elle va reproduire le potentiel d’activation que l’on retrouve dans le domaine de la biologie du cerveau humain. Elle va permettre le passage d’information ou non de l’information si le seuil de stimulation est atteint. Concrètement, elle va avoir pour rôle de décider si on active ou non une réponse du neurone. Un neurone ne va faire qu’appliquer la fonction suivante :

X = ∑ ( entrée * poids ) + biais

C’est sur cette sortie que la fonction d’activation va s’appliquer.

 

Exemple de fonctions

Voici les principales fonctions d’activations que l’on peut trouver dans le domaine des réseaux de neurones :

 

  • Linear : Utilisé en couche de sortie pour une utilisation pour une régression. On peut la caractériser de nulle, puisque les unités de sortie seront identiques à leur niveau d’entré. Intervalle de sortie (-∞;+∞).

 

  • Step : Elle renvoi tout le temps 1 pour un signal positif, et 0 pour un signal négatif.

step heavyside

 

  • Sigmoid (logistic) : Fonction la plus populaire depuis des décennies. Mais aujourd’hui, elle devient beaucoup moins efficace par rapport à d’autre pour une utilisation pour les couches cachées. Elle perd de l’information due à une saturation que cela soit pour la phase de feed forward ou de backpropagation, en donnant des effets non linéaires au réseau due à un paramètre unique. Elle a aussi des soucis de gradient 0 avec des entrées étant très large, même si le soucis est minimalisé avec les système utilisant des batch par lots (mini batch). Utilisé en couche de sortie pour de la classification binaire. Intervalle de sortie : {0,1}logistic sigmoid

 

  • TanH : Utilisé pour des LSTM pour des données en continue. Intervalle de sortie : (-1,1)
    tanh

 

  • Softmax : Utilisé pour de la multi classification en couche de sortie. Intervalle de sortie (-∞;+∞).softmax

 

  • ReLU ( Rectified Linear Unit ) : Ce sont les fonctions les plus populaires de nos jours. Elles permettent un entrainement plus rapide comparé aux fonctions sigmoid et tanh, étant plus légères. Attention au phénomène de ‘Dying ReLU’, auquel on préférera les variations de ReLU. Plus d’informations en fin d’article. Très utilisé pour les CNN, RBM, et les réseaux de multi perceptron. Intervalle de sortie (0;+∞).rectified linear unit

 

  • Leaky ReLU : La Leakey Relu permet d’ajouter une variante pour les nombres négatifs, ainsi les neurones ne meurent jamais. Ils entrent dans un long coma mais on toujours la chance de se réveiller à un moment donné. Intervalle de sortie (-∞;+∞).leaky ReLU

 

  • PReLU (Parametric ReLU) : La paramétrique Leaky Relu permet quant à elle de définir alpha comme paramètre du modelé et non plus comme hyper paramètre. Il sera alors apprentis sable. Il sera ainsi modifié durant la rétro propagation du gradient. Le top pour de large datasheet, moins bon sur de petit, causant d’éventuelle sur ajustement. Intervalle de sortie (-∞;+∞).Parametric ReLU

 

  • TReLU (Thresholded ReLU) : Elle est identique à la simple ReLU. Mais la localisation de son seuil d’activation va être décalé, il n’est plus à 0, mais selon un paramètre theta.

 

  • RRELU (Randomized Leaky ReLU) : La Randomise Leakey Relu permet de choisir le hyper paramètre ALPHA. Durant l’entrainement alpha est choisi aléatoirement. Puis durant les tests, il est calculé via une moyenne. Intervalle de sortie (-∞;+∞).randomized leaky ReLU

 

  • ELU ( Exponential Linear Unit ) : Autre dérivé de la ReLU. Celle-ci va approcher les valeurs moyenne proche de 0, ce qui va avoir comme impact d’améliorer les performances d’entrainements. Elle utilise exponentiel pour la partie négative et non plus une fonction linéaire. Elle parait plus performante en expérimentation que les autres Relu. Pas de soucis de neurone mort (dying ReLU). Intervalle de sortie (-∞;+∞).exponential ReLU

 

  • SeLU (Scaled ELU) : C’est comme ELU en redimensionné mais avec en plus un paramètre ALPHA pré définit. Bon résultat, bonne vitesse, et évite les problèmes d’explosion et disparition de gradients en s’auto normalisant et gardant les mêmes variances pour les sorties de chaque couche, et ce tout au long de l’entrainement.

 

 

Problèmes récurrents

Les fonctions standards amènent au réseau la disparition ou l’explosion de gradient, et donc une saturation et entraîne un ralentissement de la back propagation dans les couches basses du réseau. Voici une liste d’éventuels problèmes que vous pouvez rencontrer concernant ce chapitre :

  • Problème de disparition de gradient : L’algorithme progresse vers les couches inférieures du réseau, rendant les gradients de plus en plus petits. La mise à jour donc par descente de gradient ne modifie que très peu les poids des connexions de la couche inférieur, empêchant une bonne convergence de l’entrainement vers la solution.

 

  • Problème d’explosion du gradient : Dans ce cas-ci, les gradients deviennent de plus en plus grands. Les couches reçoivent alors de trop gros poids, faisant diverger l’algorithme.

 

  • Dying ReLU : La Relu souffre d’un souci : saturation pour les nombres négatifs, ce qui entraîne la mort de certains neurones, ils arrêtent de produire autre chose que des 0. Dans certains cas, la moitié des neurones peuvent mourir durant un entrainement. Il est peu probable qu’il reprenne vie en cours d’entrainement, rendant le réseau passif. C’est là que les variantes sont utiles puisque leur principal idée est d’empêcher pour la partie négative d’avoir des gradient égale à zéro.

 

 

Recommandation personnel

Sur le papier, les ReLU fonctionnent bien mieux en pratiques que les fonctions standard. Mais ce n’est pas pour autant la peine d’en mettre à toute les sauces. Il faudra choisir la bonne fonction selon votre type de problème à résoudre. Mais si vous débuter et que votre choix n’est pas sûr, commencer par expérimenter alors avec la ReLU pour avoir un premier retour. Celle-ci fonctionnera très bien dans la plupart des cas.

Me concernant, les résultats de ELU sont meilleurs que les autres Relu pour avoir comparé personnellement l’ensemble des fonctions lors de mon stage sur un cas précis de NLP/CNN. Mais les calculs seront plus lents car on utilise exponentiel pour la partie négative, en ajoutant de la non-linéarité. Donc si vous avez le temps et la puissance de calcul nécessaire, je vous conseille l’ordre suivant d’utilisation :

 

  1. ELU
  2. SeLU
  3. PReLU
  4. Variante de ReLU ( Leaky ReLU, Randomized ReLU, Thresholded ReLU )
  5. ReLU
  6. TanH
  7. Sigmoid

Source image : wikipedia, stackexchange

data augmentation Cours théoriques - Intelligence artificielle

Data augmentation

Pour pouvoir entrainer nos modèles, il nous faut d’énormes quantités de données. En effet, la quantité et surtout la qualité de notre dataset va avoir un rôle majeur pour l’élaboration d’un modèle de bonne facture. En effet, il est logique d’avoir avoir des données qui soient comparable entre elle. Quand je dis comparable, c’est qu’elles aient le même format, la même taille et longueur, etc. Et c’est à partir de ces contraintes que commence les problèmes. En effet, avoir des data spécifique selon notre problème avec les points précèdent cité peut souvent relever de l’impossible. C’est là que la data augmentation va pouvoir nous être grandement utile.

Le principe de data augmentation repose sur le principe d’augmenter de façon artificielle nos donnée, en y appliquant des transformations. On va pouvoir augmenter la diversité et donc le champ d’apprentissage de notre modèle, qui va pouvoir mieux s’adapter pour prédire de nouvelles données. Le principe de cette méthode est relativement simple, celle-ci est montré par l’image suivante concernant de l’augmentation sur des images :

data augmentation sur image

En partant d’une simple image, nous pouvons la dupliquer autant de fois que nous avons des types de transformation différentes à lui appliquer. Et nous pouvons en augmenter davantage en croisant ces effets sur une même image, et en y appliquant différents valeurs de l’effet dans une fourchette donnée, pour avoir un résultat plus ou moins poussé.

 

Voici un exemple de mel-spectrogramme, dont on à appliquer des transformations à un extrait audio sain, sur le mot ‘Bonjour’. (Figure 1)

data augmentation sur audio

On peut aussi imaginer un grand nombre de transformation sur des données audios.
– Tempo : change la vitesse de parole de l’enregistrement sans en changer la longueur. (Figure 3)
– Pitch : change l’intonation de la voix (plus aigüe ou plus grave). (Figure 2)
Et la liste peut être plus longue : bandpass, equalizer, highpass, lowpass, chorus, delay, stretch, contrast, etc.

regularisation du réseau Cours théoriques - Deep learning

Régularisation du réseau

La régularisation du réseau a pour principal objectif de prévenir le sur apprentissage (overfitting). Celle ci, va pouvoir via différentes techniques, permettre de gérer les éventuels débordements des paramètres du réseau au cours de l’entrainement.

  • Dropout : On va souhaiter favoriser l’extraction de caractéristique de façon indépendante, afin d’apprendre des caractéristique plus général et plus diverse. Cela va consister à ‘éteindre’, à désactiver certains neurones du modèle, et ce de façon aléatoire d’une même couche, qui ne contribuera donc ni à la phase de feedforward, ni à la phase de backpropagation. D’un point de vue du réseau, cela revient à instancier la valeur en sortie d’une fonction d’activation à 0.
    Schéma du DropOut
    Schéma du DropOut. Source : StackExchange, @Matt Krause

     

  • DropConnect : On va reprendre le même principe que précédemment. Mais au lieu de désactiver des neurones, on va simplement désactiver les connexions entrantes (toujours de façon aléatoire) sur une couche depuis la précédente. D’un point de vue du réseau , cela revient à instancier les valeurs des poids des connexions à 0.
    Schéma du DropConnect
    Schéma du DropConnect. Source : StackExchange, @Matt Krause

     

  • L1 regularization (lasso regression) :  Cette méthode ci va plutôt avoir une action de prévention , pour contenir les variables du réseau dans des intervalles spécifique, afin que celle-ci ne deviennent au cours de l’entrainement trop extrêmes. Pour ce cas là, cette régularisation va ajouter un terme de régularisation à notre fonction de perte, correspond à la somme des valeurs absolues de nos poids. Approche les poids vers 0. Fonctionne bien lorsque on est dans un cas avec énormément de caractéristiques. Utile pour des réseaux dont les données sont espacés.

 

  • L2 regularization (ridge regression) : Celle ci va aussi ajouter une pénalité à notre fonction de perte, de sorte que l’ensemble des erreurs soient minimal, ou maximal, mais pas entre les deux. En effet, il correspond à la somme des valeurs au carré de nos poids. Utile pour des réseaux dont les données sont rapprochés.

 

  • Max-Norm regularization : Empêche les poids d’exploser lorsque on utilise de haut taux d’apprentissage. Très utile lorsque l’on utilise des optimizer avec decay ( optimizer avec un learning rate haut au départ, et qui diminue au fil des entraînements, ex : Adagrad, etc.), sans même l’utilisation de drop-out.

 

On peut combiner l’utilisation simultané de la régulation L1 et L2. Cependant en pratique, on note un avantage pour la L2 qui donne de meilleurs résultats.

overfitting underfitting Cours théoriques - Deep learning

Comprendre overfitting et underfitting

Schéma représentant l'underfitting, le cas idéal et l'overfitting
Schéma représentant l’underfitting, le cas idéal et l’overfitting

On souhaite avoir un réseau qui puisse effectuer des prédictions sur de nouvelles données. Selon la façon dont est entrainé le model, on peut se heurter à 2 problèmes :

  • Sur apprentissage :

Cela représente un modèle qui a appris par cœur ses données d’entrainement, qui fonctionne donc bien sur le jeu d’entrainement mais pas de validation. Il effectue alors de mauvaise prédiction sur de nouvelles, car elles ne sont pas exactement les mêmes que celle du jeu d’entrainement. Pour y remédier, il faut améliorer la flexibilité du modèle, et donc jouer sur des concept de régularisation par exemple, ou encore d’early stopping.

  • Sous apprentissage :

Ce cas-ci représente un modèle qui n’arrive pas à déduire des informations du jeu de données. Il n’apprend donc pas assez et réalise de mauvaise prédiction sur le jeu d’entrainement. Il faut donc complexifier le réseau, car il ne taille pas bien par rapport aux types de données d’entrées. En effet, il n’arrive pas à capter la relation entre les données d’entrées et leur label.

 

Dans le cas où la précision du réseau n’est ni bonne sur le jeu d’entrainement, ni sur celui de validation, c’est que le réseau n’a pas eu assez de temps pour apprendre des données. Il faut donc augmenter le nombre d’itération, ou augmenter la taille du jeu de donnée.

backpropagation Cours théoriques - Deep learning

Backpropagation

On souhaite donc trouver un minimum global pour notre fonction de coût, tout en évitant les éventuelles vallées et minimum locaux qui nous empêcherait de converger vers la solution la plus optimisé pour notre réseau de neurones. La backpropagation se résume en une approche pour partager la contribution des erreurs propulsé pour chaque neurone de chaque couche.

Cette retropropagation du gradient va se faire via l’alternation successives entre deux phases :

  • Phase avant :

C’est la phase de prédiction. On envoi à notre réseau une donnée et il va essayer d’en prédire la classe de sortie. Il va avoir un échange d’informations, de valeurs et de sommes, entre chaque neurones et chaque couche. Les données transitent de la couche d’entrée vers la couche de sortie.

Schéma simplifié de la rétro propagation de gradient (backpropagation)
Schéma du flux d’informations, allant de la couche basse vers la couche haute (valeurs non réelles)
  • Phase arrière :

C’est la phase d’apprentissage. À la suite du passage d’une donnée au sein de notre réseau, nous allons avoir un résultat concernant la prédiction. C’est pour cela que les premiers entraînements sont souvent erronés, car les poids et biais du réseau sont initialisé de façon aléatoire, et vont être mis à jour au fil des entraînements via ce procédé.

Schéma simplifié de la rétro propagation de gradient (backpropagation)
Schéma du flux d’informations, allant de la couche haute vers la couche basse (valeurs non réelles)
descente de gradient Cours théoriques - Deep learning

Descente de gradient

Le réseau va pouvoir via ces différents types de couches superposés, faire des prédictions, à partir d’une entrée. C’est durant l’entrainement qu’il va apprendre, se tromper, et notamment s’auto ajuster via l’étape de la rétro-propagation du gradient (backpropagation). Cet algorithme de descente du gradient va permettre de minimiser la fonction de coût, appelé aussi fonction d’objectif ou encore de perte. Celle-ci conserve donc cette notion de biologie en s’inspirant de la rétropropagation neuronale. Le but de cet algorithme est de chercher à résoudre la fonction suivante :
Ax = B, ou :

    • A est est une matrice d’entrée
    • x est un ensemble de variable contenu dans un tenseur qui représente l’ensemble des poids du réseau de neurone
    • B est un vecteur de sortie des labels

Mais que-ce qu’un tenseur ?

matrice tenseur
Définition des degrés d’un tenseur

Un tenseur est une unité mathématique qui peut avoir un certain degrés :

  • Ordre 0 : c’est un produit scalaire
  • Ordre 1 : c’est un vecteur
  • Ordre 2 : c’est une matrice
  • Ordre 3 : c’est un empilement de matrice, une sorte de matrice 3D. C’est cela que l’on envoie dans notre réseau de neurone

Cette fonction de perte est une fonction mathématique. Il en existe plusieurs types pour des utilisations bien précises. En effet, selon le type de problème que l’on cherche à résoudre, on aura une sortie différente, et donc une fonction de coût bien précise concernant notre problème. Dans certains cas, on souhaite avoir un résultat en sortie compris entre (0, 1), ou (-1,1), ou encore comme dans notre cas, un vecteur [ (0,1), (0,1)…] correspondant à plusieurs probabilités. Elle représente la somme de l’ensemble des erreurs de l’ensemble du réseau, soit l’écart entre la prédiction effectuée par notre réseau, par rapport à l’étiquette réelle de la donnée d’entrée. On doit chercher à la minimiser, et c’est via l’algorithme de la descente du gradient que l’on va pouvoir le faire. On va pouvoir calculer la contribution de l’erreur de chacun des poids synaptique du réseau, couche après couche. Cela va nous permettre d’actualiser les poids et biais du réseau, et donc d’effectuer de meilleures prédictions au fur et à mesure des itérations, lors de l’entrainement du modèle. Ce biais est une valeur scalaire ajouté en entrée, pour assurer que quelques neurones soit actif, quelque soit la force du signal d’entrée. Ces biais seront modifiés comme les poids au cours de l’entrainement

Le gradient quant à lui, est la dérivé en un point de la courbe mathématique qui régit les données de notre modèle. Celui-ci est donc le coefficient directeur de cette tangente. Il va nous permettre de connaître la tendance de la fonction en un point donné. Cette descente peut s’effectuer soit de manière globale (batch gradient), soit par des lots (mini batch gradient), soit de façon unitaire (stochastic gradient). La première consiste à envoyer au réseau la totalité des données d’un seul trait, et de faire ensuite le calcul du gradient ainsi que la correction des coefficients. Alors que la seconde consiste à envoyer au réseau, les données par petit groupe d’une taille définit par l’utilisateur. La dernière quant à elle, envoi une donnée à la fois dans le réseau. Nos réseaux utilisent la méthode par mini batch. En effet, celle-ci permet une meilleure convergence par rapport à la stochastic, et nous permet de meilleures performances que la batch, car on ne charge pas entièrement nos données.

 

On peut associer l’exemple suivant pour schématiser ce gradient. On imagine être un randonneur perdu en montagne, sous un épais brouillard. Une éventuelle possibilité pour descendre de la montagne, est de sentir la pente via ses pieds, et de la suivre dans le sens descendant, pas à pas. On va alors pouvoir rejoindre le bas de la vallée en répétant l’opération. On peut alors appliquer ce même exemple d’un point de vu mathématique :

schéma de la descente du gradient pour atteindre le minimum global
Définition des termes courants

Si on prend cette fonction comme exemple, 𝑓(𝑥) = 𝑥² – 𝑥 + 1 que l’on souhaite minimiser par rapport à x, la solution est de résoudre l’équation 𝑓′(𝑥) = 0. Ce qui nous donne 𝑓′(𝑥) = 2𝑥 − 1 = 0 ⇒ 𝑥 = 1/2

calcul des dérivés pour une descente de gradient
Calcul de la descente de gradient de notre précédente fonction

La première valeur sera prise de façon aléatoire. Le gradient nous permettra de guider les prochaines valeurs en fonction de son coefficient en nous indiquant à la fois la direction et l’importance de la pente. Nous aurons un paramètre (‘eta’ sur le schéma), appelé taux d’apprentissage, qui nous permet de faire varier la vitesse de correction. Celle-ci doit être bien calibrer, car si celle-ci se trouve trop faible la convergence prendra un temps infini, soit au contraire celle-ci se trouve trop grande, et la convergence oscillera sans trouver le minimum. Nous utilisons un taux adaptatif en fonction de l’apprentissage. En effet, nous prenons un taux élevé au début pour améliorer la convergence, puis on la réduit progressivement au fil des itérations pour améliorer la précision. La convergence s’arrêtera soit via un nombre d’itération fixé en avance par l’utilisateur, soit dans notre cas avec l’utilisation ‘d’earlyStopping’, de stopper l’entrainement lorsque nos valeurs n’évoluent plus ou peu durant plusieurs itérations successives.

Le cas précèdent ne comporte qu’un seul paramètre. Nos réseaux de neurones comportant des milliers, voire des millions de paramètres, le schéma suivant représente d’une façon plus fidèle notre problème :

Schéma d'une fonction complexe pour imager une descente de gradient vers le point minimum global
Descente de gradient avec un nombre important de paramètres. Source : medium,@markkhoffmann
supervise, non supervise, renforcement Cours théoriques - Deep learning

Les différents types d’apprentissage

Schéma des différents cas d’utilisation pour un type d'entrainement donné supervisé non supervisé renforcement
Schéma des différents cas d’utilisation pour un type d’entrainement donné

 

Selon notre type de problème à résoudre, on va devoir utiliser un entrainement spécifique. Voici les 3 principaux types entrainement auquel on peut se confronter :

  • Apprentissage supervisé : dans ce cas-ci, on va avoir un utilisateur qui va guider la machine, en fournissant une grande quantité d’exemple qui aura été labélisé au préalable. Cette étape de labélisation, indispensable, permet d’associer une entrée à une sortie souhaité. Par exemple, si on souhaite un algorithme capable de reconnaitre un chat, les image d’entrée de chat seront étiqueté ‘chat’, et les autres photos qui ne représente pas de chat seront étiqueté ‘autre’. Ainsi pour une donnée d’entrée, nous auront en sortie soit un ‘chat’, soit un ‘autre’, identifié par notre réseau(classification). Le modèle peut aussi apprendre à généraliser et prédire de futures données (régression), par exemple pour prédire le prix d’une maison que l’on souhaiterait vendre, en renseignant juste sa superficie et ses installations. C’est ce type d’apprentissage que j’utilise pour le POC 2. Nous pouvons donner un exemple très populaire de ce type d’entrainements, tel que la détection d’objet pour les voitures autonomes.

 

  • Apprentissage non supervisé : cela concerne des problèmes de clusterisation, procédé auquel on souhaite partitionner et classer des éléments hétérogènes sous forme de sous-groupe qui seraient liés par des caractéristiques communes. C’est la machine elle-même qui va déterminer les traits en communs entres les données, sans intervention externe. Utilisé pour comprendre et explorer des données, dont le nombre de classe est inconnues, ou dont le jeu de données est non étiqueté. Un exemple peut être, que la NASA puisse classer l’ensemble des nouveaux corps célestes qu’elle découvre, en objets astronomiques telle que des étoiles, planètes, astéroïdes, trous noirs, en comparant certaines de leurs données, tel que leur distance, poids, force gravitationnel, etc.

 

  • Apprentissage par renforcement : On va utiliser des notions d’agent, d’environnement et de récompense. Un agent va réagir en fonction d’un état de l’environnement, et renvoyer une action en fonction de celui-ci. Un système de récompense permettra quant à lui d’impacter positivement ou négativement l’agent, en fonction d’action prise. Le but du système étant d’amasser le maximum de point possible, il pourra comprendre la différence entre une bonne et une mauvaise action, et donc au fur et à mesure de favoriser les bonnes actions. On essaye de reproduire le mécanisme naturel d’acquisition des connaissances. C’est comme un enfant qui découvre pour la première fois une flamme. Il se brûlera une première fois en la touchant, et ne le refera plus. Extrêmement puissant car ne nécessite pas de large jeu de donnée comme les 2 apprentissages précédents. Ce type d’apprentissage peut se voir dans les intelligences artificielles des nouveaux jeux vidéo par exemple. En effet, devenant de plus en plus complexe, il devient difficile d’en concevoir avec les anciennes méthodes.
explosion du deep learning Cours théoriques - Intelligence artificielle

L’explosion du deep learning

Comparatif des performances entre machine et deep learning
Comparatif des performances entre machine et deep learning

Contrairement à ce que l’on pourrait penser, que le deep learning émerge seulement depuis les années 2010, il est en réalité bien plus ancien que cela. En effet, dès le début des années 40 par les chercheurs McCulloch et Pitts, précurseur du neurones formel. Il s’en est suivit les premiers algorithmes d’apprentissage de classifieurs binaires, composé d’un assemblage de plusieurs simples neurones, inventé par Franck Rosenblatt, fin des années 50. C’est ensuite dans les années 80 que le premier réseau de neurones à convolution (CNN) voit le jour par le chercheur français Yann LeCun. Mais c’est seulement depuis quelques années seulement que ce secteur explose, alors qu’il avait été laissé à l’abandon. Cet effet est dû à la convergence de plusieurs paramètres :

 

  • Explosion de la quantité de données.

On assiste à une diminution constante du coût de stockage, contrasté par une émergence des techniques de big data qui nous permettent d’amasser d’importante quantités de données, couplé à une grande diversité de données.

 

  • Explosion de la puissance de calcul.

En effet, le processeur (CPU) va être optimisé pour des tâches en série de grande diversité, alors que la carte graphique (GPU) va être optimisé pour une grande quantités de tâches qui seront-elles, en parallèle et spécifique à tel ou tel calcul.

 

Puissance de calcul délivré entre GPU et CPU
Puissance de calcul délivré entre GPU et CPU

 

Sachant que les CPU du grand public sont composé de 4 à 8 cœurs, et jusqu’à 72 cœurs pour les plus puissant tel que les Intel Xeon Phi Knights Mill, ils se font alors facilement distancé par les GPU qui sont composé de nos jours de l’ordre de 2000 à 5000 cœurs. Le deep learning se résumant à des millions de calculs matricielles, le CPU se fait alors dépasser par la puissance cumulé délivré par les GPU. La rétropropagation du gradient étant un algorithme très lent à résoudre initialement, c’est donc l’avancement des GPU qui ont redonné de l’intérêt pour le deep learning.

 

Comparaison architecture des cœurs entre CPU et GPU
Comparaison architecture des cœurs

 

  • Développement des outils et du niveau d’abstraction.

Les algorithmes s’améliorent chaque année en se complexifiant, et sont capable de réaliser de nouvelles choses. Mais le plus fascinant est le développement d’outils, d’API de haut niveau, capable de simplifier la conception d’un réseau en quelque ligne de code seulement, tel que AutoKeras. On abordera d’ailleurs un outils que l’on a nous meme utilisé, nommé Keras. Récemment est apparu des outils tel que Google auto ML. Celui-ci va bien plus loin que nos 2 exemples précédents, en permettant de créer des réseaux en entiers sans écrire une seule ligne de code. En effet, toute la partie technique et complexe du développement d’un modèle est ici automatisée, et déléguée à Google. Cela fonctionne à l’aide une interface de type glisser-coller très intuitive.

 

 

Le deep learning va-t-il rendre les autres algorithmes obsolètes ?

On voit que le deep à la cote, on en parle partout, quitte à le mettre un peu partout pour faire joli et vendeur, que l’on est révolutionnaire que l’on joue la carte de l’innovation. Mais faire du deep learning juste pour l’effet de mode est stupide. Pour répondre à la question j’aurais donc tendance à dire que non, le deep learning ne sera pas l’unique façon d’apporter une plus-value à tel ou tel projet et ne va pas plus remplacer le machine learning. C’est un peu comme utiliser un char d’assaut pour venir à bout d’un moustique. Impressionnant, efficace quand ça fonctionne, mais un poil inadapté comme moyen non ? Pourquoi faire compliqué si on peut faire simple ?

Il faut savoir que pour beaucoup d’application, nous n’avons pas besoin de sortir l’artillerie lourde. Des algorithmes plus standard fonctionneront très bien sur ce genre de modèle, et en seront d’autant plus facile à mettre en œuvre. Il faudra avant tout juger et évaluer au préalable le niveau d’effort et de la précision attendu en fonction de notre domaine d’application. Des problèmes différents auront des meilleures méthodes différentes, il faudra donc faire attention d’appliquer la bonne approche sur une situation approprié.

ia, deep et machine learning Cours théoriques - Intelligence artificielle

Différence entre intelligence artificielle, machine et deep learning

La machine est-elle réellement intelligente ? 

Hum, pas vraiment. Si on doit résumer sur ce qu’est vraiment l’apprentissage de la machine, c’est seulement la résolution de formules mathématiques. Cette fonction va s’équilibrer en fonctions de données d’entrées. Et c’est cette fonction mathématique qui va permettre de nous donner une sortie souhaitée. Cependant, il suffit de modifier partiellement la donnée d’entrée, sur un intervalle auquel la machine n’aura jamais vu auparavant, pour que la machine nous renvoi une sortie absolument fausse. On pourrait appeler l’ensemble de ces techniques par du calcul cognitif, mais pour des raisons marketing, certains pionniers de chez IBM dans les années 60 ont préférés utiliser les termes d’apprentissage de la machine.

 

Timeline des différents type d'IA. intelligence artificielle deep learning machine learning
Timeline des différents type d’IA. Source : ledigitalab

 

  • L’intelligence artificielle

Cela représente l’ensemble des théories et de techniques mises en œuvre, en vue de réaliser des machines capables de simuler l’intelligence. Et celle-ci ne date effectivement pas d’hier, comme on pourrait y croire. Si on souhaite créer une intelligence artificielle, nous sommes alors dans l’obligation de coder l’ensemble des éventualités et actions qu’elle doit réaliser. Ce qui peut potentiellement être extrêmement long mais surtout se révéler peu efficace dans certaines situations. Cette approche que l’on peut alors considérer comme ‘manuelle’, a bien plus de limites.

  • Le machine learning

C’est un sous ensemble d’intelligence artificielle. Auparavant, pour apprendre à un ordinateur à effectuer une tâche, on le programmait manuellement. Aujourd’hui, ce même ordinateur peut apprendre par lui-même : il suffit de lui apprendre à reconnaître et à reproduire. En effet, plutôt que de coder l’ensemble des routines avec des jeux d’instructions précises pour réaliser une tache particulière, on va ‘entraîner’ la machine. On va donner de grandes quantités de données à notre algorithme, qui va avoir la capacité d’apprendre à réaliser cette tâche.

 

  • Le deep learning

Appelé apprentissage profond, est un sous ensemble du machine learning. Celui-ci reprend les mêmes concepts du machine learning, en les poussant encore plus loin. Le but est de créer une architecture imitant celle du cerveau humain, basés sur des réseaux de neurones artificiels à multiples couches. Le cerveau étant lui-même ‘profond’, dans le sens ou chaque action est le résultat d’une longue chaîne de communications synaptiques avec de nombreuses couches qui communiquent entre elles. Contrairement au machine learning, ces réseaux deviennent de plus en plus performants au fur et à mesure qu’ils reçoivent des données. En effet, ceux-ci pouvant être plus profonds, et donc plus complexes, ils nous permettent d’exploiter bien plus de data et donc d’augmenter significativement les performances.