## Introduction aux CNN (Convolutional Neural Networks)
### Qu'est-ce qu'un CNN ?
Un réseau de neurones convolutionnel, ou **CNN** (pour *Convolutional Neural Network*), est
un type de réseau de neurones artificiel principalement utilisé pour le traitement d'images et la
vision par ordinateur. Les CNN sont conçus pour reconnaître des motifs complexes dans les
données d'entrée, comme les images, en extrayant automatiquement des caractéristiques pertinentes
à travers des couches de convolution.
### Pourquoi utiliser un CNN ?
Les CNN sont extrêmement efficaces pour les tâches de vision par ordinateur, comme la
reconnaissance d'objets, la détection de visages, le diagnostic médical (par exemple, l'analyse des
radiographies), parce qu'ils sont capables de capturer les relations spatiales dans les données
d'image. Contrairement aux réseaux de neurones classiques (réseaux de neurones fully-connected
ou DNN), les CNN utilisent des connexions locales, permettant ainsi de réduire significativement le
nombre de paramètres et de favoriser la généralisation.
---
## 1. Architecture de base d'un CNN
L'architecture d'un CNN est composée de plusieurs types de couches qui travaillent ensemble pour
extraire et classifier les caractéristiques d'une image. Voici les principales couches qui composent
un CNN :
### a) Couche de Convolution
La **couche de convolution** est la brique de base d'un CNN. Elle effectue une opération
mathématique appelée **convolution** qui permet d'extraire des caractéristiques locales de l'image
d'entrée.
- **Filtre (ou noyau de convolution)** : Une petite matrice de poids qui est appliquée sur l'image
d'entrée en glissant (ou convoluant) sur elle. Chaque filtre est responsable de l'extraction d'un type
de caractéristique (bords, textures, motifs).
- **Stride** : La quantité de pixels par lesquels le filtre se déplace sur l'image d'entrée.
- **Padding** : L'ajout de pixels (souvent de valeur nulle) autour de l'image d'entrée pour contrôler
la taille de la sortie.
Chaque filtre produit une **carte de caractéristiques** qui représente les motifs détectés dans
différentes régions de l'image.
### b) Couche de Pooling
La **couche de pooling** réduit la dimension spatiale des cartes de caractéristiques tout en
préservant les informations importantes. Cela permet de diminuer le nombre de paramètres et de
rendre le modèle plus robuste aux variations mineures dans l'image d'entrée.
- **Max Pooling** : Sélectionne le maximum de chaque région du filtre. C'est le type de pooling le
plus couramment utilisé.
- **Average Pooling** : Calcule la moyenne des valeurs dans chaque région.
### c) Couche d'Activation
La **couche d'activation** applique une fonction non linéaire à chaque neurone de sortie. Cela
permet au réseau d'apprendre des relations complexes dans les données. Les fonctions d'activation
courantes sont :
- **ReLU (Rectified Linear Unit)** : \( \text{ReLU}(x) = \max(0, x) \). C'est la fonction
d'activation la plus utilisée car elle aide à résoudre le problème du gradient qui disparaît.
- **Sigmoïde** : Une fonction sigmoïde est utilisée pour la classification binaire, mais elle est
moins populaire dans les couches cachées des CNN.
- **Tanh** : Fonction hyperbolique tangente, qui est une autre fonction d'activation non linéaire.
### d) Couche Fully Connected (FC)
La **couche fully connected** est une couche où chaque neurone est connecté à tous les neurones
de la couche précédente. Cette couche est généralement placée vers la fin du CNN pour effectuer la
classification finale en fonction des caractéristiques extraites par les couches de convolution et de
pooling.
### e) Couche de Normalisation et Dropout
- **Batch Normalization** : Normalise les entrées de chaque couche pour améliorer la vitesse
d'entraînement et la stabilité.
- **Dropout** : Technique de régularisation où un certain pourcentage de neurones est désactivé
aléatoirement pendant l'entraînement pour éviter le surapprentissage (overfitting).
---
## 2. Fonctionnement d'un CNN : Exemple d'architecture
Pour illustrer le fonctionnement d'un CNN, prenons un exemple simple d'architecture :
1. **Input Layer** : Image d'entrée (par exemple, une image de 28x28 pixels en niveaux de gris).
2. **Convolutional Layer 1** : Convolution avec 32 filtres de taille 3x3, suivie d'une fonction
d'activation ReLU.
3. **Pooling Layer 1** : Max Pooling de taille 2x2.
4. **Convolutional Layer 2** : Convolution avec 64 filtres de taille 3x3, suivie d'une fonction
d'activation ReLU.
5. **Pooling Layer 2** : Max Pooling de taille 2x2.
6. **Fully Connected Layer** : Couche entièrement connectée avec 128 neurones et activation
ReLU.
7. **Output Layer** : Couche de sortie avec softmax pour la classification (par exemple, 10
neurones pour classer 10 catégories d'objets).
Chaque couche a son rôle :
- Les **couches convolutionnelles** détectent les motifs dans l'image.
- Les **couches de pooling** réduisent la taille des cartes de caractéristiques.
- Les **couches fully connected** interprètent les caractéristiques extraites pour effectuer la
classification.
## 3. Entraînement d'un CNN
Pour entraîner un CNN, on utilise une technique d'apprentissage supervisé qui nécessite :
- **Un ensemble d'entraînement** : Images d'entrée avec leurs étiquettes (labels) correspondantes.
- **Une fonction de perte** : Mesure l'erreur entre les prédictions du réseau et les labels réels. Pour
la classification, on utilise souvent la **cross-entropy**.
- **Un optimiseur** : Algorithme utilisé pour ajuster les poids du réseau en fonction de la fonction
de perte. Les optimisateurs populaires incluent **SGD (Stochastic Gradient Descent)**,
**Adam**, etc.
L'entraînement du CNN consiste à effectuer une série de passes avant et arrière :
- **Forward pass** : Les données d'entrée traversent le réseau, et une prédiction est faite.
- **Backward pass** (Rétropropagation) : Le réseau ajuste les poids en fonction de l'erreur de
prédiction.
Le processus est répété pour plusieurs époques jusqu'à ce que la perte soit minimisée et que la
précision soit maximisée.
## 4. Applications des CNN
Les CNN sont utilisés dans de nombreux domaines, notamment :
- **Reconnaissance d'images et classification d'objets** : Par exemple, dans la détection d'animaux
dans des images.
- **Analyse médicale** : Diagnostic automatique de maladies à partir de radiographies ou d'IRM.
- **Traitement du langage naturel (NLP)** : Pour la classification de textes et l'analyse de
sentiments.
- **Conduite autonome** : Pour détecter et classifier des objets dans l'environnement d'un
véhicule.
---
## 5. Conclusion
Les CNN sont un outil puissant pour l'apprentissage automatique, surtout dans le domaine de la
vision par ordinateur. Leur capacité à extraire automatiquement des caractéristiques des données
d'entrée et à les utiliser pour effectuer des prédictions a conduit à des avancées significatives dans
de nombreux domaines.
Pour maîtriser les CNN, il est essentiel de comprendre comment chaque type de couche fonctionne,
comment elles interagissent et comment entraîner efficacement un modèle pour qu'il puisse
apprendre des données complexes.
Avez-vous des questions sur une partie spécifique de ce cours ?