Le Deep Learning pour les Bambis — Part.1



La base de la base

Posons le contexte

Tout d’abord si ce n’est pas déjà fait, je vous invite à lire cet article. Il donne un brève aperçu sur l’IA et le Deep Learning.

Ce tutoriel est le premier d’une série, vos retours, vos remarques et vos mots doux :) sont les bienvenus.

A qui s’adresse t’il ? A tous ceux qui souhaitent comprendre et se former sur le sujet.

Dois je maitriser un langage ? Python de préférence, il est le langage de prédilection du Deep Learning. Cependant ce n’est pas un pré-requis discriminant. Vous pourrez découvrir python au fur et à mesure ou consulter des tutoriels ici.

Et les Math dans tout ça 😨 ? Pas de panique !!! Oui les mathématiques sont essentiels dans le Deep Learning mais on peut faire du DL sans un doctorat en Math. Il y’a quelques concepts à maitriser, je les expliquerai au fur et à mesure. Ici pas de grandes théories on reste pratique donc ne fuyez pas.

Les premières briques

L’apprentissage supervisé

Comme son nom l’indique de manière plus ou moins explicite, il s’agit ici de donner à son algorithme des données labellisées manuellement par un humain et de suivre la courbe d’apprentissage.

L’algorithme va s’entrainer sur des exemples et tenter de généraliser une fonction complexe pour produire un résultat satisfaisant sur des cas ne faisant pas partie de la base d’apprentissage.

Prenons un exemple souvent utilisé dans le monde du DL, celui de la prédiction des prix dans l’immobilier (exemple qui n’est pas réaliste mais qui nous aidera à mieux comprendre). Disons que vous avez en votre possession une base de données avec les prix de biens immobiliers dans une ville quelconque de France. Celle ci contient pour chaque bien les informations suivantes : Surface en m2, nombre de pièces, et prix.

Extrait de la base de données

Une fois l’algorithme entrainé, on peut lui fournir alors des informations pour un nouveau bien et obtenir une estimation du prix acceptable. L’algorithme agira presque comme un agent immobilier, qui ayant plusieurs années de métier, va développer ce qu’on appelle un “flair”.

L’apprentissage non supervisé

Contrairement à l’apprentissage supervisé, l’algorithme de Machine Learning reçoit des données non labellisés et à charge à l’algorithme d’identifier des groupes et des caractéristiques communes. Ce type d’apprentissage dépasse le cadre du tutoriel et ne sera pas abordé. Nous allons mettre le focus sur l’apprentissage supervisé.

Le Deep Learning alors Kezako ?

Le DL ou apprentissage profond, pour les francophones, est un réseau de neurones artificiels connecté et entrainé sur la base d’un apprentissage supervisé.

Qu’est-ce qu’un neurone artificiel ?

Petite digression : je vais vous épargner le schéma du neurone biologique que l’on trouve dans presque tous les tutoriels sur le DL. Pour ma part, même si le neurone artificiel est un concept qui s’inspire du neurone biologique, faire un lien étroit et se lancer dans sa description est une perte de temps et ajoute de la confusion.

C’est la qu’il faut s’accrocher et rester concentré. N’ayez pas peur de revenir régulièrement à ce chapitre pour vous rafraichir la mémoire.

Schématisons le concept et restons sur l’exemple précèdent avec une petite modification (vous comprendrez pourquoi). Nous souhaitons entrainer un neurone pour répondre pour un bien donnée si le prix est au dessus du marché ou en dessous (pas très réaliste avec le peu de d’entrées que l’on a mais cela n’a pas d’importance).

Schéma du Sigmoid neurone

Qu’est-ce que c’est que cette horreur !! 😱😱😱

Ne partez pas de suite, nous allons détailler tout cela calmement.

Notre neurone va prendre des valeurs en entrée, dans notre exemple X1, X1 et X3 respectivement la surface, le nombre de pièces et le prix.

Un poids w est attribué pour chaque une d’entre elles.

La tâche principale du neurone, effectuer une somme de tous les produits entre la valeur d’entrée et le poids correspondant.

soit dans notre cas précis : X1 * w0 + X1 * w1 +X2 * w2

et le b alors ? c’est ce que l’on appelle un bias. Retenez le nom mais ne vous tracassez pas avec pour le moment, j’expliquerai le moment venu son utilité.

On ajoute donc à cette somme ce nombre b

ce qui donne donc en définitif : X1 * w0 + X1 * w1 +X2 * w2 +b

De manière générale on définit cette opération comme suit

Le résultat de la somme est passé à la fonction Sigmoid (on verra part la suite qu’il y’en a d’autres, je sais on verra beaucoup de choses plus tard mais un peu de patience 😅).

la fonction Sigmoid retourne un nombre entre 0 et 1. Cette fonction porte le nom de fonction d’activation.

Représentation de la fonction Sigmoid

Ce processus de calcul, vers l’avant ou de gauche à droite, est appelé dans le monde du DL Forward Propagation (propagation vers l’avant).

Let’s go deeper

Allons un peu plus loin dans la compréhension ou je dirais ici dans l’intuition pour juste appréhender le concept, A quoi servent les poids ? ils vont servir a prioriser l’importance d’une données sur une autre. Reprenons notre exemple. Nous avons trois éléments d’entrée : La surface du bien, le nombre de pièces et le prix.

Supposons que pour déterminer le prix du bien, la surface à plus d’importance que le nombre de pièces. On fixe donc le poids w1 (pour la surface) égal 4 et w2 (pour le nombre de pièces ) égal à 2. Et quand est il du prix ? Est il plus important ou moins que les deux autres ? Supposons qu’il l’est moins et fixons donc w3 = 1.5.

Et le bias alors ? il permet d’apporter une correction si l’information des poids et encore insuffisante pour déterminer si le bien est au dessus ou en dessous de la valeur du marché. Si il n’est pas utile alors on le fixe à zéro.

Le tout passe à la moulinette de la fonction Sigmoid pour réduire la valeur de sortie. Si la valeur de la sortie est entre 0 et .5, on peut se dire que le prix du bien est trop élevé et si elle est entre .5 et 1 c’est le contraire. Vous pouvez aussi faire l’inverse c’est à vous de choisir.

Vous commencez à saisir ? 😥

C’est normal qu’à ce stade certaines choses soient flous mais ne laissez pas tomber.

Et l’apprentissage dans tout ça ?

L’apprentissage c’est le mécanisme qui va permettre de trouver les bons poids et la bonne valeur du bias pour répondre à la problématique (on traitera de ça dans un autre tutoriel). C’est comme si on avait une console avec des boutons de réglages que l’on tourne jusqu’à obtention d‘un résultat satisfaisant.

Quelques éléments de compréhension

Loin de tout absolutisme

Quand on vient du monde de la programmation “conventionnelle”, on est habitué au déterminisme. Une fonction donnée renvoi un résultat clair et déterminé à l’avance lors de la spécification. Ce n’est pas le cas du DL. Il s’agit le plus souvent d’un système probabiliste. Il va vous donner une approximation que vous souhaitez maximiser et ça, au départ, c’est hyper déroutant mais c’est ce qui fait ça force et sa flexibilité.

Les nombres sont roi

Comme vous avez pu le constater, le neurone ne va manipuler que des nombres décimaux ou entiers inutile de penser à lui transmettre en entrée des chaines de caractères ou d’obtenir en sortie autre chose qu’un nombre. Il va donc falloir apprendre à transformer vos données pour les rendre éligibles. Ça fera aussi partie des thèmes que nous aborderons par la suite.

Les fonctions d’activations

Nous avons utilisé la fonction d’activation Sigmoid mais il y’en a bien d’autres que nous verrons au fur et a mesure. Chacune a une utilité et répond à un besoin spécifique. Sigmoid est utile dans le cas d’une classification binaire. Quand il faut répondre par oui ou non, 0 ou 1.

J’ai une image, est ce un chat ou pas ? Problème de classification. Je parle à mon IPhone (on vit une drôle d’époque) ai je dis le mot clé “Dis Siri”. Problème de classification etc..

Voici sa définition pour votre culture.

Je ne vais pas me lancer dans une étude de fonction. Si vous souhaitez en savoir plus je vous invite à faire une recherche sur le web. On aura aussi l’occasion de fournir plus de détail dans le chapitre consacré à l’apprentissage ou Back Propagation.

Les mains dans le cambouis

Passons maintenant à un peu de pratique et à l’implémentation d’un neurone avec fonction d’activation sigmoid et Forward Propagation.

Je vous conseille d’installer Jupyter notebook. Il s’agit d’un environnement d’exécution python dans un navigateur sinon tout autre IDE fera l’affaire.

Et voici une implémentation simple que nous tacherons de faire évoluer tout au long des tutoriels.

#Import de la librairie Math pour faire appel a la fonction exponentiel
import math

#Définition de la fonction Sigmoid
def sigmoid(x):

# Calcul de la fonction sigmoid de x.

# Arguments:
# x -- un scalaire

#Retourne:
#s -- sigmoid(x)

s = 1 / (1 + math.exp(-x))
return s

#Définition de la fonction neurone avec Forward Propagation
def neural(X, W, b):

# Arguments:
# X -- un tableau contenant les entrées
# Y -- un tableau contenant les poids (même taille que X)
# b -- le bias

assert(len(X) == len(W))

# init du variable qui va contenir la somme
z = 0

#boucle sur le tableau des entrées
for i in range(len(X)):
#multiplication du poids par la valeur de l'entrée
z = z + X[i] * W[i]

#ajout du Bias
z = z + b

#appel Sigmoid et retourne la valeur
return sigmoid(z)

D’autres articles et tutoriels sont à venir, restez connecté et suivez moi sur twitter @jonydeeplearner ou linkedin

Source: Deep Learning on Medium