Vous êtes sur la page 1sur 4

PROJET COUVRANT LES MODULES :

- Deep Learning : Théorie & Pratique


- Optimisation pour le Machine Learning
Master 1 Data Science, Université Internationale d’Excellence, Bamako

2 juillet 2022

Consignes
• Date de début: Samedi 2 juillet 2022
• Date de fin : Samedi 16 juillet 2022
• Format de rendu : un rapport sous forme de notebook Python (notamment pour la
partie pratique) et des copies manuscrites pour la partie théorique (sachez qu’il vous est
tout à fait possible, voire recommander, de traiter la partie théorique dans le notebook
Python qui accepte les formules mathématiques sous forme de Markdown/Latex)
• Consignes particulières :
• Projet à faire individuellement
• Soyez clairs et concis dans vos réponses
• Nombre maximum de pages : autour de 15 (notebook Python + copies manuscrites)
• Attention au plagiat sur internet et entre vous (vous pouvez, vous devez, faire des
recherches sur internet, il faut juste citer vos sources et/ou indiquer les propriétaires
des codes / bouts de codes que vous utiliserez éventuellement)
• Enseignant : Dr DIABATE Modibo (modibo.diabate.pro@gmail.com)

Partie I
Soit un réseau de neurones multi-couches dense (un Perceptron multi-couches ou MLP) à une
seule couche cachée ayant h neurones (ou unités) et une couche de sortie de taille q.
— On considère un mini-batch X ∈ Rn×d (n exemples ayant chacun d caractéristiques) pour
constituer sa couche d’entrée.
— Pour établir les connexions entre la couche d’entrée et la couche cachée, nous définissons
la matrice de poids W(1) ∈ Rd×h et le vecteur de biais b(1) ∈ R1×h .
— Pour établir les connexions entre la couche cachée et la couche de sortie, nous définissons
la matrice de poids W(2) ∈ Rh×q et le vecteur de biais b(2) ∈ R1×q .
Les calculs ci-dessous entre la couche d’entrée et la couche cachée, puis entre la couche cachée et
la couche de sortie ont été faits :
— Pre-activation et activation au niveau de la couche cachée :
Z(cachée) = XW(1) + b(1) et H = a(1) (Z(cachée) ), ici a(1) (z) = 1+e1−z
— Pre-activation et activation au niveau de la couche de sortie :
Z(sortie) = HW(2) + b(2) et Y = a(2) (Z(sortie) ), ici a(2) (z) = 1+e1−z

1
— Fonction de perte :
n
1 X 1 (i) 2
E(W, b) = ŷ − y (i) ,
n i=1 2

où {W, b} = {{W(1) , W(2) }, {b(1) , b(2) }}.


En vous aidant, d’une part, des résultats de calculs théoriques de dérivées partielles et des formules
de mise à jour des paramètres du neurone mono-couche avec l’activation Sigmoïde et d’autre
part, du code Python fourni par le professeur sur ce neurone mono-couche (en plus des recherches
documentaires que vous êtes invités à mener, notamment sur internet et en discutant entre vous,
en évitant le plagiat) :
1. Calculez les dérivées partielles de la fonction de perte E(W, b) par rapport aux poids et
biais de la couche cachée et de la couche de sortie d’un MLP ayant une seule couche cachée.

2. Déduisez de ces résultats, les formules de mise à jour d’un algorithme de descente de
gradient stochastique.
(a) Expliquez la différence entre la descente de gradient classique et la descente de gradient
stochastique.
(b) Expliquez l’effet de la taille du mini-batch sur la précision des résultats et la vitesse de
convergence d’un algorithme de descente de gradient stochastique mini-batch.
3. Complétez, grâce à vos précédents calculs, le code Python fourni par le professeur sur
le neurone mono-couche avec l’activation Sigmoïde pour en faire un réseaux de neurones
ayant une couche cachée utilisant également l’activation Sigmoïde.
4. Générez aléatoirement des données binaires non séparables linéairement (configuration
XOR) et expliquez votre procédure.
(a) Représentez graphiquement vos données de sorte qu’on puisse distinguer facilement les
deux classes.
(b) Écrire un code Python (en utilisant, au plus, la librairie Numpy) permettant de séparer
correctement vos données en données d’entrainement et données de test. A quoi sert
cette séparation ?
5. Entrainez, puis testez (évaluez) sur vos données générées votre algorithme de réseau de
neurones ayant une seule couche cachée avec 3 neurones (unités) utilisant l’activation
Sigmoïde et une couche de sortie utilisant également l’activation Sigmoïde.
(a) Combien d’unités comporte votre couche d’entrée ? Pourquoi ?
(b) Combien d’unités comporte votre couche de sortie ? Pourquoi ?
(c) Décrire le rôle d’une fonction d’activation. Décrire la Sigmoïde.
6. Utilisez la librairie Scikit-learn (sklearn) pour séparer vos données.
7. A quoi sert la graine (seed) ? Expérimentez/illustrez son rôle avec sklearn dans votre code
de séparation de vos données générées.
8. Utilisez sklearn pour entrainer et tester un modèle de régression logistique (en spécifiant
l’architecture) sur vos données générées.
9. Comparez (de façon sensée statistiquement) les résultats de cet algorithme de sklearn à
ceux de votre algorithme codé from scratch ?

Partie II
1. Utilisez Tensorflow/Keras pour entrainer et tester, toujours sur vos données générées, un
réseau de neurones ayant une seule couche cachée (avec 3 neurones) utilisant l’activation
Sigmoïde et une couche de sortie utilisant également l’activation Sigmoïde.

2
(a) Remplacez l’activation Sigmoïde sur la couche cachée par la ReLU.
(b) Quelle(s) fonction(s) d’activation vous semble(nt)-ils pertinente(s) (par exemple, Sig-
moïde vs ReLU) pour la couche cachée ? Pourquoi ?
(c) Ajoutez une couche cachée supplémentaire à votre réseau en choisissant le nombre
de neurones pour cette nouvelle couche et testez ce nouveau réseau sur vos données
générées. Commentez.
(d) En règle générale, comment choisit-on la bonne architecture (le nombre de couches
cachées et de neurones par couche) ?
(e) Idem pour les learning rates η de vos algorithmes, comment peut-on choisir/calculer
«intelligemment» leur valeur ?
(f) Evaluez l’effet de la taille du mini-batch sur la précision des résultats et la vitesse de
convergence d’un algorithme de descente de gradient stochastique mini-batch. Com-
ment faut-il procéder pour que ces résultats d’évaluation aient un sens statistiquement
parlant ?
2. Chargez les données CIFAR10 (60 000 images en couleur réparties en 10 classes, avec 6000
images par classe) avec les commandes :
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt # Pour des affichages graphiques
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

(a) Vérifiez que les données sont divisées en 50 000 images d’entrainement et 10 000 images
de test. Quelle est la résolution des images ?
(b) Normalisez les données (pour que les valeurs des pixels soient entre 0 et 1) : train_images,
test_images = train_images / 255.0, test_images/255.0
(c) Affichez quelques images pour vous faire une idée des 10 catégories d’images composant
la base de données (vous pouvez utiliser plt.imshow(train_images[i])).
3. Expliquez le principe de la classification multi-classe avec l’activation Softmax sur la couche
de sortie.
4. Utilisez Tensorflow/Keras pour créer un modèle de Deep learning dense avec 3 couches
cachées (ayant chacune un nombre de neurones que vous jugerez pertinent en première ap-
proche, tout comme leur fonction d’activation) et une couche de sortie utilisant l’activation
Softmax en vue d’apprendre à classifier les images du jeu de données en prenant en compte
la couleur des images.
(Remarque : vous devez au préalable aplatir vos données d’entrée (vous pouvez utiliser la commande
train_images.reshape(-1, nb_pixels_par_image)) et précisez ensuite les dimensions de vos données
d’entrée lors de la construction de votre modèle (model.build(input_shape = (None,nb_pixels_par_image))))

(a) A l’aide de la commande summary(), évaluez et commentez la complexité de votre


modèle (nombre paramètres à estimer vs nombre d’exemples, etc.).
(b) Que pensez-vous de l’efficacité de la stratégie consistant à utiliser un réseau de neurones
dense pour analyser et prédire la classe d’images en couleur et d’une résolution plus ou
moins importante ?

Partie III
1. Les réseaux de neurones convolutifs (Convolutional Neural Network (CNN)) sont l’alternative
principale aux réseaux de neurones denses dans l’analyse de données complexes comme les
images.

3
(a) Décrivez la philosophie des CNN et expliquez brièvement comment ils fonctionnent (en
mettant l’accès sur leurs principales différences avec les réseaux denses).
(b) Toujours en utilisant Tensorflow/Keras, créez un modèle CNN ayant : deux couches
cachées de convolution alternées avec deux couches cachées de pooling, une couche
cachée dense (aplatissement des sorties des couches précédentes, on peut utiliser
layers.Flatten()) avec l’activation ReLU et une couche dense de sortie utilisant
l’activation Softmax en vue d’apprendre à classifier les images du jeu de données en
prenant en compte la couleur des images.
(c) Evaluez et commentez la complexité de votre modèle.
(d) Entrainez votre modèle sur le jeu d’entrainement et évaluez-le sur le jeu de test.
(e) Commentez.

Partie IV
1. Bonus : questions à venir éventuellement sur les RNN
2. Bonus : Participation / DM

Vous aimerez peut-être aussi