Upload
others
View
14
Download
1
Embed Size (px)
Citation preview
Intelligence artificielle
RAPPORT THEORIQUE ET PRATIQUE
PAGE 1
Jeremy Donadio | IA | 1er janvier 2018
Introduction Ce livre est une initiation au machine Learning. A travers plusieurs exemples et diverses
présentations scientifiques théoriques, le lecteur est plongé dans un sujet passionnant et actuel :
l’intelligence artificielle.
Je dédie ce livre à charlotte A.
Bonne lecture à vous.
PAGE 2
SOMMAIRE
DE LA THEORIE
1. Pourquoi apprendre le machine Learning ?
2. De la biologie aux mathématiques
− Le neurone
− Le potentiel d’action
3. Représentation mathématique du neurone
− Le neurone formel (perceptron)
− La classification des données (classifier)
4. Représentations mathématiques de systèmes complexes
− Multi layer perceptron (MLP)
− Les convolutions (CNN)
− Réseaux de neurones récurrents (RNN) :
− 1) LSTM (Long Short-Term Memory networks)
− 2) GRU (Gated Recurrent Unit)
5. L’art et l’intelligence artificielle
− Le style transfer
− Le GAN
6. Reinforcement learning
− Deep Q network (DQN)
PAGE 3
7. Mes sources
Pourquoi apprendre le machine Learning ?
Le machine Learning et l’intelligence artificielle deviendront bientôt des enjeux majeurs de notre
société.
-Comment prédire un évènement ? (Réseau MLP)
-Comment faire une reconnaissance d’objet ou d’image ? (CNN et VGG)
-Comment un programme peut écrire des phrases avec des mots dans le bon ordre avec un vrai sens
? (RNN/LSTM/GRU)
-Comment styliser des images ? (Style Transfer)
-Comment une intelligence artificielle fait elle pour créer des images qui n’existent pas, ou pour
dépixéliser une image, combler des vides ? (GAN)
-Comment une intelligence artificielle peut vous battre à n’importe quel jeu vidéo ?
Voici les questions auquel je vous garantis une réponse dans ce livre.
Vous comprendrez les mécanismes de ces algorithmes et le nombre d’application qu’il peut exister
grâce à cette nouvelle technologie.
Si après cette lecture vous avez encore des questions et/ou des incompréhensions vous pouvez me
contacter à l’adresse mail suivante :
PAGE 4
1. De la biologie aux mathématiques
Le neurone
Le neurone est une cellule assez spéciale du corps humain. En effet cette cellule (ou ces cellules
étant donné que nous en possédons entre 86 et 100 milliards) consomme presque 10 fois plus qu’une
cellule normale.
Ce trouvant principalement dans le cerveau (mais aussi dans d’autres membres ou organes), le
neurone a pour but de communiquer et de traiter plusieurs informations.
Il est composé d’un corps cellulaire ayant à son centre un noyau et à ses extrémités des dendrites,
ayant pour but de faire passer l’information.
L’axone est en fait un prolongement du neurone présent pour permettre à l’information d’avancer.
La synapse permet le passage du signal entre deux neurones.
PAGE 5
Il existe les synapses électriques et les synapses chimiques.
La première fait passer l’information à l’aide d’une dépolarisation permettant une modification du
Potentiel d’action, l’autre fait intervenir des neurotransmetteurs pour exciter ou inhiber le neurone.
Le potentiel d’action
Le potentiel d’action est un signal électrique parcourant l’axone et provoquant la libération de
neurotransmetteurs au niveau des synapses. On appelle potentiel d’action l’inversion de la
polarisation d’un neurone (car comme vu précédemment un neurone est chargé électriquement).
Ce potentiel d’action possède deux lois assez intéressantes. La première est qu’il se propage le long
du corps sans s’atténuer, le second est qu’il agit de manière binaire : ou le seuil de dépolarisation est
atteint et il apparait, ou il n’est pas atteint et il n’apparait pas.
Nous pouvons donc reconnaitre quelques phases principales :
Une fois la stimulation arrivée la membrane subit une dépolarisation et atteint (en haut du pic) une
valeur seuil qui est la valeur maximale du potentiel d’action. Le seuil de dépolarisation minimum est
de 60mV.
Cela ce suivant par la phase de repolarisation pour retrouver son état initial.
Avant d’atteindre son potentiel initial la membrane atteint une valeur plus négative (c’est ce que l’on
appelle une hyperpolarisation).
PAGE 6
Il faudra maintenant attendre encore quelques millisecondes avant de retrouver notre potentiel
initial.
Représentation mathématique du neurone
Le neurone formel
L’équivalent mathématique d’un neurone biologique est ce que l’on appelle un neurone formel (ou
perceptron).
Il est composé de quatre élément différents :
− Les entrées (x1 ; x2 ; x3 ; xn)
− Les poids (w1 ; w2 w3 ; wn)
− Le seuil (que nous appellerons U)
− Et la fonction d’activation
Voici le mécanisme plutôt simple d’un neurone formel :
PAGE 7
Le neurone reçoit des valeurs d’entrées xn. Le premier travail du neurone est de faire une somme
pondérée avec les poids c’est-à-dire x1*w1 +x2*w2 + xn*wn.
Une fois que cela est fait le neurone soustrait à ce résultat ce que l’on appelle la valeur de seuil.
(On pourra pour simplifier dire que le seuil est un poids et prendre les valeurs x0=-1 et w0=U (valeur
du seuil)).
C’est à ce moment précis qu’intervient la fonction d’activation. Une fonction d’activation est une
formule mathématique (tel que y=f(x)).
Les deux principales fonctions d’activations sont la sigmoïde :
Et la fonction « pas unitaire » (aussi nommée fonction de Heaviside) :
Cette fonction renvoi 0 si le seuil demandé n’est pas atteint et 1 si le seuil est atteint ou dépassé.
Il existe bien sur des dizaines d’autres fonctions tel qu’on peut le voir ici (cf.
https://fr.wikipedia.org/wiki/Fonction_d%27activation )
(Les fonctions les plus utilisées dans les réseaux complexes sont la ReLU , la tanh et la sigmoide)
PAGE 8
Pour résumer un neurone formel peut être exprimé sous cette forme :
Avec wi le poids, xi la valeur d’entrée et U la valeur de seuil. La fonction d’activation correspond à la
fonction f(X)=y (avec donc X égale à la somme pondérée moins le seuil).
PAGE 9
Prenons un exemple. Essayons de coder avec un neurone formel la table de vérité du « ou »
:
Nous prendrons ici comme poids w1=w2=1 et nous prendrons comme seuil U=0.5
La fonction d’activation que nous utiliserons sera la fonction de Heaviside qui pour x>0 sortira la
valeur 1 et qui pour x<=0 associera la valeur 0.
Les valeurs possibles de xi avec i allant de 1 à 2 seront l’ensemble « 0 ; 1 »
Nous avons donc :
− Soit x1=0 et x2=0 x1*w1+x2*w2-U=-0.5 et f(-0.5)=0 .
− Soit x1=0 et x2=1 w1*x1+w2*x2-U=0.5 et f(0.5)=1.
− Soit x1=1 et x2=0 w1*x1+w2*x2-U=0.5 et f(0.5)=1 −
Soit x1=x2=1 w1*x1+w2*x2-U= 1.5 et f(1.5)=1.
Les résultats sont conformes avec la table de vérité.
PAGE 10
PAGE 11
La classification des données (Classifier)
Un Classifier est un algorithme qui classifie ses données à l’aide de droites, de plans ou d’hyperplans
selon le nombres de données.
Par exemple pour une porte logique OU le classifier représenterait ça ainsi :
Les valeurs renvoyant un 1 sont séparées de celles renvoyant un 0 par une droite, on dit que les
données sont classifiées. On dit dans cet exemple que nous avons deux classes [{(0,0)} et
{(1,0),(0,1),(1,1)}].
(Nous avons ici pris un exemple simple avec des données pouvant être représentées dans un espace
en deux dimensions, ce qui explique que les données soient séparées par une droite/ fonction).
Remarque : dans un espace à trois dimensions cette séparation sera un plan, et dans un espace à n
dimensions avec n>3 la séparation sera un hyperplan.
12
PAGE
Représentations mathématiques de systèmes complexes
Multilayer perceptron (MLP)
Etant donné que l’on ne peut tout représenter avec un seul perceptron, on a inventé les multiplayers
perceptrons. Il s’agit ici d’un ensemble de perceptrons réparties sur plusieurs couches.
Nous avons la première couche représentée par l’input layer. C’est ici que les données sont rentrées.
Ces données vont ensuite être modifiées par plusieurs autres couches de perceptrons, ils sont
représentés dans la couche hidden layer. L’output layer correspond à la sortie des données après
analyse et modifications de celles-ci par les neurones formels.
Voyons les caractéristiques de ce réseau d’apprentissage.
Imaginons que nous avons collecté et classifié des données tel qu’on peut le voir sur le dessin
cidessous :
Maintenant ce que nous voulons est de reproduire un circuit pouvant prédire les données ci-dessus.
PAGE 13
Le système est simple. Comme vu précédemment des valeurs xn vont être rentrées dans les n entrées
(les input layers). Le but ici est d’ajuster les poids de tel manière à ce que si nous rentrons une
certaine valeur il nous prédise une valeur réelle que l’on peut retrouver dans le tableau ci-dessus.
Le but de l’algorithme est donc de modifier les poids de tel manière à ce que le résultat soit le plus
proche possible de la réalité.
Pour faire simple si on avait un seul perceptron avec une fonction d’activation f(X)=X et avec un
poids W1 à 5 et que l’on voulait pour X=2 que le perceptron nous renvoi la valeur 6, Le but du réseau
serait de faire passer son poids de 5 à 3 pour qu’on retombe sur le bon résultat (f(2*3)=6).
Mais comment fonctionne cet apprentissage ?
L’algorithme commence avec des poids aléatoires.
Une valeur x va être rentrée et donner une valeur y (imaginons que nous rentrons 0.5 dans l’input
layer, la valeur à la sortie de l’hidden layer sera par exemple 0.7).
Mais il se trouve que la valeur réelle que l’on voit dans le graphe est Z=0.9.
Nous allons donc utiliser une loss function pour rééquilibrer les poids :
L (Z ;y) = -Zi*log(yi)-(1-Zi)*log(1-yi)
Avec Zi la valeur réel Z affectée pour x=i et yi la valeur y définie par notre circuit pour x=i.
Cette fonction « cross entropy » a pour but de voir si nos prédictions sont bonnes ou pas, elle
s’appelle aussi loss fuction ou fonction de perte, et calcule donc la perte de précision de notre réseau.
Par exemple si on prend Z=1 et y=0.9 L (Z ; y) =0.105 donc les prédictions sont bonnes, mais si on
avait y=0.1 on aurait L(Z ;y)=2.3
(Il s‘agit ici de faire un calcul de l’erreur, c’est-à-dire de quantifier de combien notre valeur prédite
est loin de la réalité).
Le but ici est que le résultat de la loss fonction tende vers 0.
J’ai utilisé plus haut une fonction appelée « cross entropy » mais il existe pleins d’autres loss
fonctions.
Une fois que nous avons comparé l’écart entre notre valeur et la valeur réel nous devons réajuster les
poids.
Nous allons donc utiliser l’algorithme du gradient stochastique (Stochastic Gradient Descent (SGD))
:
Avec
PAGE
14
Et
En injectant nous tombons sur
La dérivée partielle de la fonction loss par le poids est donc égale à (Zi-yi) *xi1.
Nous avons donc le lien entre notre fonction loss et notre poids.
La valeur du poids sera donc :
(Avec pi la valeur prédite par le système, yi la valeur réelle du data set (tableau de donné) et xi1 la
valeur d’entrée. W est bien sur le poids. N est le taux d’apprentissage (learning rate) et correspond à
la valeur d’un réel, c’est une constante.)
Une fois le poids modifié le circuit refait rentrer un x pour vérifier si cette fois ci le poids est bon. Le
système tourne en boucle jusqu’à obtenir une fonction loss égale à 0.
Remarque : les défauts de ce système est qu’au bout d’un moment il risque de « sur-apprendre »
c’est-à-dire donner un bon résultat pour des valeurs ressemblant à son data set mais de donner de
fausses valeurs dès qu’on s’éloigne trop des valeurs de son data set.
Pour résumer :
− Le perceptron (neurone formel) reçoit une valeur d’entrée qu’il va modifier grâce à son
poids et sa fonction d’activation.
− Un réseau avec plusieurs couches de perceptron est appelé MLP (multilayer perceptron) et
est composé d’un input layer (la ou les valeurs d’entrées sont mises), d’un hidden layer (là
ou sont mises plusieurs couches de perceptrons qui vont altérer et modifier le résultat) et un
output layer qui nous renvoie la valeur une fois qu’elle est modifiée.
− Le but de ce type de système est de modéliser un comportement type à partie de données
que l’on appelle data set.
− Pour modéliser ce type de comportement le système va modifier et ajuster ses poids grâce
aux fonctions loss et à la méthode du SGD (par exemple).
− L’algorithme modifie donc ses valeurs de poids au fur et à mesure jusqu’à arriver à L(Z ;y)=0
et donc w(t)=w(t+1) (donc une fonction loss nulle).
PAGE 15
Convolutional Neural Network (CNN)
1) Le principe
Le but ici est de créer un algorithme qui peut reconnaitre un objet (cela marche aussi avec le son par
exemple).
L’objet (qui est en fait une image) est rempli de pixels.
Ces pixels ne sont en fait que des points d’une certaine couleur et sont définis par des valeurs (par
exemple une valeur rouge, vert, bleu et une pour la transparence). Cet ensemble de petits points de
couleurs forment donc une image.
Cet ensemble de pixels peut donc être défini avec des matrices. Nous pouvons donc
exprimer mathématiquement une image.
Le fonctionnement est simple. Nous mettons dans notre data set un grand nombre d’images d’un
objet précis (par exemple une voiture). Le but de notre système sera de détecter quels doivent être
les valeurs des matrices de pixel pour envoyer un signal positif disant « c’est bien une voiture ».
Etant donné que les matrices sont bien trop grandes (à cause du grand nombre de pixel) le système va
devoir perdre le plus d’information et de ne garder que les données utiles.
Il fera avec ces données des classes, et c’est la reconnaissance de plusieurs de ces classes qui fera qu’il
détecte ou pas l’objet.
Prenons un exemple. Nous voulons créer un système qui reconnaisse si le chiffre qu’on lui donne est
un 8 ou pas.
Nous avons notre 8 :
Notre système décomposera donc cet image en plusieurs classes comme par exemple :
; etc..
;
PAGE 16
Chacun de ces classes sont définis par des matrices on pourrait représenter ça ainsi :
La reconnaissance de l’ensemble des classes sert donc au système de reconnaitre un objet.
(Un exemple pour le chiffre 0)
Donnent un zéro.
(Ici l’ensemble des quatre classes permets la reconnaissance du zéro).
On appelle ces classes des caractéristiques. L’action effectué pour avoir ces caractéristiques est
appelé convolution.
Voilà donc comment un ordinateur peut reconnaitre une image assez facilement.
Seulement notre exemple ici est simple car n’est constitué que de matrices 3*3 (donc avec seulement
9 pixels et aucunes couleurs ou transparence !!!!)
Comment ferait-il s’il devait faire cette reconnaissance sur du 1080 p (donc 2 073 600 pixels multiplié
par les 4 valeurs nécessaires pour définir un pixel en RGB (avec transparence) ce qui nous donnerais
une matrice avec 8 294 400 valeurs !!!!)
C’est à ce moment que vient le principe de pooling.
2)En détail
Un CNN (réseau neuronal de convolution) est très similaire aux réseaux neuronaux basiques. Il est lui
aussi composé de neurones avec des poids et des biais.
PAGE 17
Tout comme le multiplayer perpetron le CNN est composé de plusieurs couches :
− La couche du layers input (là où on rentre l’image originale)
− La feature extraction (qui correspondrait aux hidden layers). C’est cette couche qui est sensé
diminuer la taille de l’image (comme sur le schéma ci-dessous où l’image passe de 32*32 à
5*5 pixels) et crée les caractéristiques (points verts sur le schéma ci-dessous).
− C’est dans la couche des outputs que sont stockés et classifiés les caractéristiques.
La convolution :
Une fois que la grande matrice (correspondant à l’image) est rentrée dans le système nous
appliquons une convolution pour en retirer les valeurs(caractéristiques) importantes.
Voici son fonctionnement :
Nous multiplions notre grande matrice de taille m*m par une matrice appelée filtre de taille n*n avec
n<m.
Dans l’exemple ci-dessus nous multiplions le bout de matrice encadré par une matrice diagonale 3*3.
Pour une matrice entière on pourrait avoir :
PAGE 18
Dans cet exemple là nous multiplions la matrice 5*5 par une matrice 3*3. La matrice va se déplacer de
case par case puis une fois arrivée au bout descendra d’une colonne et ainsi de suite. (Donc faire
0*22+0*15+1*1 etc. puis pour la deuxième case 15*0+1*0+3*1 etc. puis pour la troisième case
1*0+3*0+60*1 etc. et pour la dernière case 4*0+66*0+79*1+45*0+12*0+17*0+72*0+51*0+3*0).
Je vous laisse faire les calculs tranquillement pour voir si vous réussissez à tomber sur le bon résultat.
La matrice obtenue est appelée « feature map ».
Pour rendre ça plus claire voici un exemple concret :
L’input (image de gauche) est l’image originale, le filtre est le carré rouge et le résultat de la
convolution (appelé feature map) est l’image de droite. (Ici le filtre est passé sur toute la matrice, il
se retrouve donc en bas à droite de la matrice).
La ReLU :
La ReLU est une fonction d’activation qui (dans ce type de réseau) remplace toutes les valeurs de
pixel négatifs par 0. Voici le graphe de cette fonction :
PAGE 19
Voici le résultat de la feature map avant et après être passé par la fonction d’activation « ReLU » :
La ReLU est avant tout utilisée pour simplifier les calculs de gradient (identique à ceux des MLP) et
donc à accélérer la formation de notre modèle. Son autre grand avantage est de transformer des
données linéaires en données non linéaire.
Si on avait pris une fonction linéaire alors notre système serait uniquement un grand classificateur
linéaire, et pourrait être simplifié en multipliant simplement les matrices de pondération ensemble
(en tenant compte du biais).
Il ne serait pas capable de faire quelque chose d'intéressant, comme (justement) la classification
d'image ou la prédiction de texte.
On aurait aussi pu utiliser d’autres fonctions non linéaires comme la sigmoïde ou la tanh mais la
ReLU est celle qui offre les meilleurs résultats dans la pratique.
PAGE 20
Le pooling :
Le pooling est là pour réduire la taille de l’image.
Voici son fonctionnement.
Comme on peut le voir sur l’image le pooling réduit la taille de la matrice en ne prenant que les
valeurs caractéristiques (les plus grandes valeurs de chaque n*n cases). (On pourra trouver d’autres
méthodes pour réduire la taille d’une matrice comme par exemple calculer uniquement les
déterminants de la matrices 4*4 (par exemples) pour les mettre dans une matrice 2*2). On peut aussi
faire du pooling en faisant un calcul de moyenne etc.
Un pooling divise toujours la taille de la matrice en deux.
Remarque : on utilise aussi souvent du padding dans ce type de réseaux.
Le padding est une opération qui consiste à rajouter des 0 autours d’une matrice pour que toutes les
valeurs de la matrice soient traitées. En effet si la taille du filtre du pooling n’est pas un multiple de
la taille de la grande matrice certaines données risquent de ne pas être prisent.
Pour résumer :
Nous venons de voir :
− La convolution (qui tire d’une image ses caractéristiques principales)
PAGE 21
− La fonction ReLU (qui créer des modèles non linéaires et augmente la vitesse de formations
du modèle)
− Le pooling (qui permet de réduire la taille de l’image et donc le nombre d’informations pour
ne garder que le plus important).
C’est avec ces trois méthodes que notre système arrive à reconnaitre des objets sur une image.
Voici (image ci-dessous) l’ordre dans lequel nous implémentons ces méthodes pour faire un
programme qui doit reconnaitre un objet :
Remarque : Fully connected est un type de réseau où tous les neurones sont liés entre eux comme
ceci :
Ici le Fully connected est en fait un simple circuit MLP avec une fonction d’activation softmax().
Son but est donc de classifier les données.
A noter que cette disposition (fully connected) permet de classer des données non linéaires et
permet de les lier très facilement.
Pour conclure :
Le fonctionnement étape par étape pourra donc être résumer ainsi :
PAGE 22
Le système prend une image en entrée et lui fait faire les convolutions/ReLU/pooling et en sort des
probabilités que l’objet se trouve dans l’image. Les poids sont ajustés au fur et à mesure grâce au
calcul d’erreur et à la méthode de descente de gradient. Une fois que les poids sont bons on passe à
l’image suivante et on fait ça pour toutes nos images de tel manière à ce qu’a la fin il arrive à retirer
les caractéristiques importantes pour trouver un certain objet dans une certaine image.
Pour finir avec les CNN deux images d’exemples de cas concrets :
Réseaux de neurones récurrents (RNN)
PAGE 23
« exemple vous je j’aimais par Si disais l’informatique que » .Normalement vous ne devriez pas
comprendre cette phrase, mais « si par exemple je vous disais que j’aimais l’informatique » (phrase
dans le bon sens) la vous comprendrez ce que j’essaye de dire. Un réseau neuronal traditionnel (tel
que le MLP) pourra créer une phrase mais ne pourra pas mettre les mots dans le bon ordre, car il n’a
aucun souvenir du mot qu’il a dit juste avant, et c’est pour ça que nous avons inventé les RNN.
La particularité des réseaux neuronaux récurrents est que ses neurones sont connectés à tous les
autres neurones, eux compris. (Comme nous pouvons le voir plus bas le neurone reçoit sa valeur de
sortie mais l’envoi aussi (avec Ht) aux autres neurones). Cela lui permet d’avoir à un instant t
l’information (t-1) qu’il venait de traiter.
Un RNN basique est uniquement composé d’un neurone avec une fonction d’activation tanh.
Voici le fonctionnement simplifié d’un RNN
PAGE 24
Voici le fonctionnement pour prédire un mot avec ce type de réseau de neurone :
L’utilisateur va rentrer des lettres et le réseau mettra une probabilité qu’une lettre apparaisse en
fonction des lettres précédentes, les poids sont réglés grâce à la descente par gradient (vu
précédemment).
Exemple :
(Les valeurs sous les lettres correspondent à la probabilité /1 que la lettre suivante apparaisse et les
lettres sont les lettres pouvant suivre la lettre précédente).
LSTM
PAGE 25
Voici la structure du LSTM :
Analysons cela de plus près.
Le secret de l’efficacité du LSTM est la ‘cell state’, la barre du haut (voir graphique ci-dessous). C’est
cette barre qui transportera les données importantes.
Les données qui rentrent sont filtrés par les quatre réseaux de neurones et seul les données
importantes passent dans la cell state.
Vous pouvez imaginer la cell state comme un cours d’eau qui transporterait des bouts de bois plus
ou moins grands, et selon la taille des bouts de bois, le bout de bois pourrait rester plus longtemps
dans le cours d’eau et serait donc accessible plus longtemps. (Les bouts de bois sont en fait les
données stockées, et leur taille dépendra des opérations qu’elles subiront (addition, multiplication
(les pointwise opertations) et selon les fonctions d’activations qui les traitera (sigmoide, tanh)).
PAGE 26
Analysons maintenant les trois composantes principales du LSTM : la porte d’oubli (forget gate), la
porte d’entrée (input gate) et la porte de sortie(outpout gate) :
La forget gate
Cette porte contient une sigmoïde (qui prend généralement des valeurs comprises entre
0 et 1) et une multiplication avec un filtre.
Si le neurone décide qu’une information n’est pas importante, la valeur de cette information sera
minimisée grâce à la sigmoïde (qui lui donnera une valeur proche de 0) et l’écrasera par la
multiplication avec le filtre. Une donnée importante sera proche de 1 et une donnée pas importante
se rapprochera de 0.
Le but de cette porte est (évidemment) d’effacer les informations qui ne sont pas ou plus
importantes.
Il est cependant important de comprendre qu’ici l’information n’est pas un simple chiffre mais une
matrice ou un vecteur (comme pour les autres réseaux).
La forget gate est donc un premier outil qui efface les premières valeurs inutiles (efface les valeurs de
mémoire).
L’input gate
PAGE 27
Maintenant imaginons que notre LSTM reçoit en entrée une phrase « je suis allé faire les courses
dans un magasin »
Notre réseau préfèrera garder l’information « aller aux courses » et si possible diminuer (oublier) la
partie « dans un magasin » qui n’est pas d’une grande utilité.
Les données inutiles seront supprimées par une deuxièmes forget gate (sigmoïde + multiplication)
qui filtrera les informations et les données devant être ajouté à la cell state passeront par la tanh.
Ces données seront ensuite additionnées à un filtre.
L’input gate est donc l’outil qui sélectionne les données dont il a besoin (ajoute des valeurs à la
mémoire).
L’output gate
L’ouput gate est la porte qui choisit quels valeurs (vecteurs) envoyer au neurone suivant.
Il reçoit en entrée tous les vecteurs de la cell state ainsi que toutes les autres valeurs (venant de la
ligne H(t-1) du bas) et grâce à un filtre X et une fonction d’activation tanh il choisit quels sont les
valeurs de sortie.
GRU
Le GRU (Gated Recurrent Unit) est d’une certaine manière un LSTM sans porte de sortie. IL est
avant tout utile pour tout travail demandant une mémoire à moyen terme (le LSTM étant à long
terme).
PAGE 28
Pour le reste, le type d’apprentissage reste le même que les autres réseaux neuronaux (type MLP ou
CNN avec une loss function ,une descente par gradient, et des ajustements des poids etc.)
L’art et l’intelligence artificielle
Style transfer
Le style transfer permet grâce à un réseau de neurone de récupérer le style d’une photo et de
l’appliquer à une image au choix.
PAGE 29
Voici l’architecture de ce réseau :
Il s’agit comme vous pouvez le voir d’un réseau de convolution (nos fameux CNN, même si pour être
exacte il s’agit d’un VGG, un autre type de réseau de convolution).
Tout l’intérêt de ce système repose sur deux choses, la loss content et la loss style.
La loss Content
Voici la formule de la loss content
Voici son fonctionnement :
PAGE 30
On va entrainer un CNN avec notre image histoire d’ajuster les poids. Une fois que notre réseau peut
reconnaitre notre propre image nous faisons une copie de nos poids dans une matrice (la matrice
bleue sur le schéma) et nous la comparons avec une image bruitée.
(Ceci est une image bruitée).
Nous comparons donc notre feature map avec une image bruitée, le but est d’ajuster les valeurs de
l’image bruitée pour qu’elle soit identique à la feature map.
Cette comparaison se fait grâce à notre loss content (on a donc F qui correspond à la matrice de
l’image bruitée et P à la feature map) le but est (à aide d’une descente par gradient) de faire
apparaitre le contenu de la feature map sur l’image bruité) Voici un exemple pour éclaircir
votre compréhension :
PAGE 31
On compare la matrice de la feature map avec une image bruitée. Le but est que l’image bruitée (en
haut à gauche) ressemble à l’image de droite en haut. (L’image d’origine est l’image en bas à gauche).
On essaye donc de faire apparaitre sur une image bruitée les traits principaux de notre image (ce que
l’on appel contenu).
D’un point de vue mathématique, on modifie les valeurs de la matrice bruitée pour qu’elles soient
identique à celle de la feature map. Quand elles sont identiques L_content=0.
La loss style
La loss Style est assez similaire à la loss content.
Il est important de comprendre que les premières feature map d’un réseau CNN représentent le
contenu (car elles contiennent peu de détail, on ne voit que les contours) et que les dernières
features map correspondent en fait au style de la photo (car beaucoup plus de détail et de
dépendance entre chaque pixels).
On s’intéresse donc ici non pas aux premières features map comme pour le contenu mais aux
dernières.
Voici la formule de la L_Style :
(Avec G notre image de style et A notre image
bruitée).
Ici nous allons extraire les poids correspondant au poids des dernières convolutions cette fois ci
(pour avoir une matrice du style de la photo et non du contenu !!!) et en faire une matrice de gram
(voir formule ci-dessous)
PAGE 32
Une fois que nous avons notre formule de gram nous allons tout simplement (grâce à la fonction loss
style) la comparer avec notre image bruitée et grâce à une descente par gradient nous allons faire
apparaitre le style sur cette image bruitée. (Encore une fois on veut que notre matrice bruitée ait des
valeurs similaires à celle de la matrice de gram (correspondant au style).
POUR RESUMER :
Nous prenons notre image A de loup (par exemple).
Nous prenons notre image B de Van Gogh (par exemple).
Nous faisons passer l’image A dans un CNN (VGG pour être exact) et nous récupérons une des
premières features map pour avoir notre contenu (le contenu sont les lignes principales qui fait que
cette photo est une photo de loup).
On applique la loss Content (comparaison) entre la matrice de la feature map et notre image C qui
est bruitée. Grace à la descente par gradient nous faisons petit à petit apparaitre le contenu sur
l’image bruitée.
Nous faisons ensuite passer notre image B dans le VGG et nous récupérons les poids des dernières
convolutions (correspondant donc au style de notre image B et non au contenu) puis nous en faisons
une matrice de gram. Une fois cela fait nous comparons cette matrice avec la matrice C bruitée et
grâce à la descente par gradient nous modifions notre image C pour y faire apparaitre le style de
notre image B.
Notre image C possède donc le contenu de l’image A (le loup) et le style de l’image B (Van Gogh) !!!!
GAN
Les Generative adversarial networks (GANs) sont des architectures de réseaux neuronaux capable de
créer une image unique à partir d’une librairie d’image. Il permet aussi la reconstitution d’image (s’il
en manque des bouts).
Un GAN a donc la capacité d’imiter des données.
Un GAN est composé de deux réseaux de neurones qui s’opposeront.
Le premier est là pour générer une image et le second pour reconnaitre une vraie image d’une fausse.
Le premier est appelé « generator » (générateur) et le second « discriminator » (discriminateur).
PAGE 33
Le principe est assez simple, le discriminateur va recevoir de vrai images et de fausses images (crées
par le generateur ) son but sera d’etablir une probabilité entre 0 et 1 de la veracité de la photo.
En general le discriminateur est un CNN et le générateur aussi un type de CNN assez particulier ( voir
plus bas). Sinon on peut aussi tomber sur un MLP en tant que discriminateur et generateur.
Le générateur et le discriminateur s’exercent en même temps.
Au fur et à mesure de l’apprentissage, le générateur génèrera des images de plus en plus convaincantes et le discriminateur sera de mieux en mieux repérer les vrai et les fausses images.
Le générateur
Le générateur fait en fait exactement l’inverse d’un réseau de convolution. En effet il part de bruits
pour faire des déconvolutions et du unpooling pour créer une image.
PAGE 34
Figure 2.a
Soit F(n) la nième feature map, K(n) le nième filtre nous avons
Le but ici est de multiplier notre image petite et bruitée avec des filtres puis de faire un brassage
périodique des features map obtenus pour l’agrandir et rajouter du contenu et des détails.
Ici le bruit est l’image bleu, à l’aide de cette image nous alors grâce a des filtres construire plusieurs
features map (voir photo 2.a) puis les assembler en faisant un brassage entre elles en utilisant des
combinaisons periodiques (voir figure ci-dessus), nous voyons que nous avons un pixel rouge puis
vers puis rouge etc. c’est un brassage car on mélange des matrices et il est periodique car il s’agit
d’une combinaison qui se répète de manière régulière.
Le gradient (dérivé de notre fonction loss pour ajuster ses poids) est défini ainsi :
Avec G notre fonction différentiel correspondant au
PAGE 35
résultat des déconvolutions et D notre discriminateur qui délivre une probabilité entre 0 et 1 pour la
véracité de l’image. (Basiquement à 1 l’image est réelle et a 0 l’image est fausse).
Etant donné que est une probabilité comprise entre 0 et 1 on voit bien
mathématiquement que plus la fonction tend vers 1 plus l’écart est petit et plus elle tend vers 0 plus
elle est grande.
Le discriminateur
Le discriminateur est soit (au choix) un CNN ou un MLP (dans les cas généraux).
Je ne reviendrais donc pas sur les explications de son fonctionnement, mais regardons quand même
le gradient (dérivé de notre fonction loss) :
Nous avons x(i) correspondant à une vraie image, donc D(x(i)) la probabilité qu’une vraie image soit
une vraie image.
Z(i) une image bruitée donc G(z(i)) une image fausse généré par le générateur et donc pour finir
D(G(z(i))) la probabilité que la fausse image soit une vraie image.
Ici il est important que le discriminateur sache reconnaitre une vraie photo (d’où l’importance du
) mais aussi repérer une fausse image d’où l’apparition du
dans la formule.
Si la vrai image est reconnue comme fausse on aura log D(x(i)) qui tendra vers -n avec n є {1 ;+∞}(on
aura donc une grosse erreur).La même analyse pourra être faite pour l’autre terme.
Vous l’avez surement compris, au fur et à mesure de la DSG les poids du discriminateur vont
s’ajuster, la loss fonction finira par tendre vers 0 et sera de plus en plus capable de reconnaitre une
vrai image d’une fausse.
Pour résumer
Notre générateur va créer des images à partir de bruit. Ce phénomène est appelé déconvolution.
Notre discriminateur va recevoir des images venant du générateur et venant d’un data set avec de
vrai images et il devra déduire quelle image est réel ou ne l’est pas.
PAGE 36
Les deux réseaux apprendront donc à mieux faire de la « contrefaçon » et a mieux détecter une
contrefaçon » au fils du temps.
Nous pouvons résumer ça avec l’image ci-dessous.
Les poids de nos deux réseaux seront ajustés grâce aux fonctions loss vu précédemment et grâce à la
descente par gradient.
Voici le résultat impressionnant de ces réseaux neuronaux :
(Ici le data set était des photos d’Arnold Schwarzenegger et le générateur avait en entrée la photo
avec le visage d’Arnold Schwarzenegger masqué par le carré noir !!!)
Reinforcement learning
Reinforcement learning et deep Q learning (DQN)
Pour votre dernière leçon nous allons aborder la notion de DQN (Deep Q-Network).
PAGE 37
Il s’agit d’un type de réseau rentrant dans la branche du reinforcement Learning (RL).
Le reinforcement Learning est une classe de problème d’apprentissage où le réseau apprend à partir
de ses expériences, il a ce qu’on peut appeler un comportement décisionnel.
Pour faire simple c’est ce type de réseau qui est utilisé pour jouer à des jeu vidéo (par exemple).
Nous voyons sur l’image ci-dessous une intelligence artificielle utilisant du reinforcement Learning
pour jouer à Mario (il ne s’agit pas exactement de RL mais plutôt de neuro-évolution (ici du NEAT),
mais leur utilité est similaire, je me permets donc de faire cette comparaison erronée pour permettre
une meilleure compréhension de l’utilité d’un tel réseau).
La force de ce type de réseau est qu’ils sont capables de prendre des décision (sauter plutôt que
courir par exemple).
Voici leurs architectures :
PAGE 38
Découpons cette architecture.
L’environnement
L’environnement correspond à notre jeu (ou plutôt à l’image du jeu).
Pour décomposer l’image nous pouvons utiliser les coordonnées et les données connu et les traiter à
l’aide d’un réseau MLP mais ici le but du DQN est de proposer un algorithme capable de jouer à
n’importe quel jeu, nous allons donc utiliser un CNN pour décomposer l’image.
Le but ici est que le réseau utilise sa « vue » tout comme un être humain (ce qui lui permettra une
meilleure adaptation entre plusieurs jeux).
Nous avons donc en entrée du CNN l’image du jeu et autant de sorti qu’il y a d’action possible
(sauter avancer se baisser etc.)
Le Q network et target Q network
C’est dans cette partie de l’architecture que les décisions seront prises.
Nous utilisons pour ça la formule de BELLMAN qui est écrit ci-dessous :
PAGE 39
Soit :
Le but ici pour ce network est d’acquérir le plus grand gain grâce à cette formule. Le gain est l’action
qui lui donnera les meilleurs résultats (ramasser tel item, rester en vie le plus longtemps possible, le
plus vite etc.).
Nous avons ici R(t) qui correspond à la récompense, Y qui correspond à un simple coefficient
linéaire, S qui correspond à une observation et A(t) à une action et Q est tout simplement la valeur
d’action (c’est-à-dire la valeur de l’exécution comme sauter, avancer, reculer etc. c’est-à-dire le gain
R que la machine peut récupérer si elle exécute une action a).
Mais que nous dis cette formule exactement ?
Tout d’abord le network va chercher les récompenses qu’il peut avoir en faisant tel ou tel action (par
exemple s’il court il a un gain de 200, s’il saute un gain de 180 etc.) Puis il va faire la même simulation
pour l’action d’après etc. (voir schéma ci-dessous) :
Ici il regarde le gain qu’il peut avoir pour R(1) puis R2) …. R(t)…. Par rapport à l’exécution d’une
action précise. Voici comment comprendre cette équation
Ici l’action qu’il va privilégier (le Q qui dépend donc de ses observations (s) et ses actions (a)) est
celle qui lui donne le plus grand gain r(t) jusqu’à t=t+n.
Littéralement, la formule de Bellman dit « l’action que vais faire (le Q) est l’action qui me permet
d’avoir le plus de gain (R) pour cette action (A) et les n actions d’après par rapport à mes
observations S .
Cette équation se généralise ainsi :
PAGE 40
Voici comment l’interpréter :
L’action qui va être exécuter est l’action donnant le plus grand gain immédiat (R) et le meilleur gain
après n action (qui correspond au Max(Q(s’,a’)).
C’est donc cette partie du réseau qui après avoir fait toutes sortes de simulations de ses actions
réalisables, va choisir d’en faire une Plutôt qu’une autre.
La partie Q network fais une prédiction sur l’action qu’il va faire (notre Q(s,a)) et la partie Q network
fait en fait une simulation de sa potentiel trajectoire (le maxQ(s’,a’,ф)).
DQN LOSS
Que serait un réseau neuronal sans fonction loss ?
Vous l’aurez compris, le réseau doit à terme apprendre à faire les meilleures décisions possibles.
Ses premiers mouvements seront aléatoires et/ou mal calculé, mais il apprendra à terme grâce à
cette fonction loss à faire les meilleurs choix possibles.
Voici sa formule :
Soit en généralisant
Ici la seule chose à retenir est qu’il calcule l’erreur quadratique entre son estimation «
r+y*maxQ(s’,a’;ф) » et le gain qu’il aurait voulu/du obtenir ( -Q(s,a ; ф) ).
Gradient de la fonction loss
En effectuant une descente par gradient (algorithme de gradient stochastique) nous tombons avec
une dérivée partielle de la fonction loss égale à
Je vous rappelle que la dérivée partielle de la fonction loss (notre V) correspond à la formule
d’ajustement des poids.
PAGE 41
Replay memory
Le replay memory a un rôle vraiment important dans ce réseau.
Au fur et à mesure que la machine joue elle va enregistrer ses « states » (actions, conséquences etc.)
et c’est sur ces states que se base notre partie « Q network » et « Q target network ».
C’est pour cette raison qu’au bout de la sauvegarde de N states (nombres de states que vous voulez
garder) la mémoire va décider de toutes les effacer pour les remplacer sur de nouvelles. Les « Q
network » et « Q target network » se baseront du coup sur des states de plus en plus évoluées et
pourront à leurs tours s’améliorer de mieux en mieux.
Pour résumer
Le réseau reçoit de son environnement les images du jeu, grâce à la partie « Q network » et « Q
target network » et à l’utilisation de la formule de Bellman la machine choisit quelle action est la
plus optimal, La fonction DQN Loss calcul les erreurs de « simulation » de nos « Q network » et « Q
target network » et corrige leurs poids grâce à une descente par gradient.
Pendant ce temps la machine enregistre les states du jeu (sur lesquelles elle se base pour établir sa
stratégie) et les renouvelles toutes les N states.
Voici pour finir le résumé de l’algorithme tel qu’il est présenté sur le papier original (que vous
pouvez retrouver en source).
PAGE 42
Mes sources
https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf
https://beamandrew.github.io/deeplearning/2017/02/23/deep_learning_101_part2.html
http://cs231n.github.io/convolutional-networks/
https://becominghuman.ai/how-should-i-start-with-cnn-c62a3a89493b
https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
https://translate.google.fr/translate?hl=fr&sl=en&u=https://www.analyticsvidhya.com/blog/2017/12/f
undamentals-of-deep-learning-introduction-to-lstm/&prev=search http://colah.github.io/posts/2015-08-
Understanding-LSTMs/
http://pages.cs.wisc.edu/~shavlik/cs638/lectureNotes/Long%20ShortTerm%20Memory%20Networks.pdf
https://isaacchanghau.github.io/2017/07/22/LSTM-and-GRU-Formula-Summary/
https://translate.googleusercontent.com/translate_c?depth=1&hl=fr&prev=search&rurl=translate.go
ogle.fr&sl=en&sp=nmt4&u=http://colah.github.io/posts/2015-08-Understanding-
LSTMs/&xid=17259,15700022,15700105,15700124,15700149,15700168,15700173,15700201&usg=ALkJrhhLo
kDdqHEK2fuomlIT7LDexWYywg https://www.cv-
PAGE 43
foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_pa
per.pdf
https://translate.googleusercontent.com/translate_c?depth=1&hl=fr&prev=search&rurl=translate.go
ogle.fr&sl=en&sp=nmt4&u=http://ml4a.github.io/guides/&xid=17259,15700022,15700105,15700124,157
00149,15700168,15700173,15700201&usg=ALkJrhgGMMyzdwcyqnhvNvHf1SPslDa3Yw
https://translate.googleusercontent.com/translate_c?depth=1&hl=fr&prev=search&rurl=translate.go
ogle.fr&sl=en&sp=nmt4&u=http://www.robots.ox.ac.uk/~vgg/research/very_deep/&xid=17259,15700
022,15700105,15700124,15700149,15700168,15700173,15700201&usg=ALkJrhheU3zhsFTW02Zft7GKqYA6
5QnbEQ
https://fr.coursera.org/learn/convolutional-neural-networks/lecture/jOnEU/cost-function
https://medium.com/artists-and-machine-intelligence/neural-artistic-style-transfer-acomprehensive-
look-f54d8649c199
Ainsi que tous les papiers officiels sortis sur ces sujets, mes cours sur l’intelligence artificielle réalisés
par « Medhi Sam, Ylies Hati et grégor jouet » Et d’autres sites web/forums.