Corrigé du devoir de Deep Learning

Exercice 1 – Convolution 2D, ReLU et MaxPooling

Données de l'énoncé

Paramètre Valeur Signification
B 500 Nombre d'images
C 2 Canaux d'entrée
H,W 194,194 Dimensions des images
K 5 Nombre de classes
F 8 Canaux de sortie
D 6 Taille du filtre pour la question 3

Question 1 – Dimensions du tenseur de sortie

La convolution possède les paramètres suivants :

La formule de calcul d'une dimension spatiale est :

Hout=⌊H+2P−KfS⌋+1

Application :

Hout=194+2(1)−31+1=194

Même calcul pour la largeur :

Wout=194

Réponse :

(500, 8, 194, 194)

La convolution conserve les dimensions spatiales et transforme les 2 canaux d'entrée en 8 canaux de sortie.


Question 2 – Nombre de paramètres du filtre

Pour une convolution 2D :

N=(Kh×Kw×C+1)×F

Le +1 correspond au biais de chaque canal de sortie.

Application :

N=(3×3×2+1)×8N=(18+1)×8N=152

Réponse :

152 paramètres

Soit 144 poids et 8 biais.

Sans biais, le nombre de paramètres est de 144.


Question 3 – Padding pour un filtre (D,D)

Pour conserver les dimensions spatiales avec un stride de 1 :

P=D−12

Avec D=6 :

P=6−12=2,5

Le padding doit donc être asymétrique, car on ne peut pas ajouter 2,5 pixels.

Réponse :

Utiliser un padding de 2 pixels d'un côté et 3 pixels de l'autre, pour chaque dimension.

On peut également utiliser padding="same" dans PyTorch avec un stride de 1.


Question 4 – Intérêt de ReLU par rapport à la sigmoïde

La fonction ReLU est définie par :

ReLU(x)=max(0,x)

La fonction sigmoïde est :

σ(x)=11+e−x

Réponse :

ReLU limite le problème de disparition du gradient (vanishing gradient) pour les valeurs positives, contrairement à la sigmoïde qui sature aux valeurs extrêmes.

ReLU est également plus rapide à calculer et favorise un apprentissage plus efficace des réseaux profonds.


Question 5 – Application du MaxPooling2D

Matrice d'entrée :

X=(−261−22−21−12395029−3717−37191321−10−43648−35−1−19−37303412−20212−316−39−6−49−1047)

Paramètres :

Étape 1 – Calculer la dimension de sortie

Hout=⌊6+2(1)−52⌋+1Hout=⌊1,5⌋+1=2

Même calcul pour la largeur :

Wout=2

On obtient donc une matrice de dimension :

2×2

Étape 2 – Trouver le maximum de chaque fenêtre

Pour chaque fenêtre de taille 5×5, on conserve la valeur maximale.

Position Maximum
Haut gauche 50
Haut droite 48
Bas gauche 50
Bas droite 48

Le MaxPooling conserve uniquement la plus grande valeur de chaque fenêtre.

Réponse :

(50485048)

Question 6 – MaxPooling (4,4) pour diviser les dimensions par 2

On cherche à obtenir :

Hout=H2

La formule générale est :

Hout=⌊H+2P−4S⌋+1

On choisit :

Application :

Hout=H+2−42+1Hout=H−22+1Hout=H2

Réponse :

S=2,P=1

Ces paramètres divisent la hauteur et la largeur par 2 lorsque les dimensions d'entrée sont paires.

Exemple en PyTorch :

nn.MaxPool2d(kernel_size=4, stride=2, padding=1)