https://www.deeplearningbook.org/

Chaque neurone est connecté à tous les neurones de la couche suivante.
Cas d'utilisation: Classification, régression, reconnaissance de patterns simples.
Spécificités:
Réseaux avec connexions cycliques permettant de traiter des séquences temporelles.

Cas d'utilisation: Traitement du langage naturel, prédiction de séries temporelles, génération de texte simple, traduction.
Spécificités:
=> excelelnt post de Karpathy sur RNN
Cas d'utilisation: NLP (BERT, GPT), vision (Vision Transformers), génération, traduction, modèles de langage de grande taille.
Spécificités:

Cas d'utilisation: Vision par ordinateur, reconnaissance d'images, détection d'objets, segmentation sémantique.
Spécificités:
| Aspect | Feed Forward | RNN | CNN | Transformer |
|---|---|---|---|---|
| Données | Tabulaires | Séquences | Images | Séquences/Texte |
| Parallélisation | Complète | Limitée | Bonne | Excellente |
| Mémoire | Aucune | Implicite | Locale | Globale (attention) |
| Complexité | Basse | Haute | Moyenne | Très haute |
| Données requises | Peu | Moyennes | Moyennes | Beaucoup |


avec la relation suivante entre paramètres et FLOPs (Floating Point Operations):
FLOPs ~= 6 *Parameters * tokens
| Model | Parameters | Training FLOPs (approx) |
|---|---|---|
| GPT-2 (small) | 1.5B | 3 × 10^19 |
| GPT-3 | 175B | 3.14 × 10^23 |
| LLaMA-7B | 7B | ~1.4 × 10^21 |
| LLaMA-70B | 70B | ~1.4 × 10^22 |
Il y a 5 étapes:
puis comme en ML classique:
MLP pas fantastique pour les images
pourtant si on bouge la chaise … ça reste une chaise !
capture l'information spatiale, les spécificités locales

parfait pour :
mais aussi les séries temporelles :
Décomposition de l'image de pixel en pixel, par petit carrés (3x3, 5x5)
Filtrage des regions par un filtre (tenseur rang 2 de dimension 3x3 ou 5x5, …).

le calcul de "convolution"
Cependant le mot "convolution" est utilisé en raison du contexte historique, de la similarité conceptuelle, des considérations pratiques et de la cohérence terminologique.
L'idée principale reste la suivante : un noyau (filtre) est appliqué à une entrée (image) pour produire une carte de caractéristiques, qui capture les caractéristiques spatiales importantes de l'entrée.
Reduction de dimension (downsampling) : max ou moyenne des valeurs sur une region (2x2, 3x3, 4x4, etc.)

Voir le cours de Stanford sur les CNN
Apres la convolution vient le pooling aussi appelée sous-échantillonnage But :
2 techniques

Le partie convolution et pooling réalise l'extraction des caractéristiques (features) de l'image d'entrée.
Les coefficients du filtre sont des paramètres d'apprentissage au même titre que les poids des noeuds dans une couche dense
Combiner plusieurs couches de convolution + pooling permet d'extraire des caractéristiques de plus en plus complexes
On peut enchaîner les couches de convolution sans avoir à chaque fois une couche de pooling

Input Image
↓
[Conv + ReLU + Pooling] ← Feature Extraction (Layers 1-N)
[Conv + ReLU + Pooling] ← Hierarchical features
[Conv + ReLU + Pooling]
↓
Flatten (reshape to 1D vector)
↓
[Dense + ReLU] ← Classic Feed Forward
[Dense + ReLU] ← Classification/Regression
[Dense (output)]
↓
Prediction (class probabilities)
Convolutional Layers (Feature Extraction):
Result: The image is progressively compressed into a high-level feature vector
Fully Connected Layers (Decision Making):
Input: 224×224×3 image
↓
Conv blocks (13 layers): Extract features → 7×7×512
↓
Flatten: 7×7×512 = 25,088 neurons
↓
Dense layers (3 layers):
- Dense(4096) + ReLU
- Dense(4096) + ReLU
- Dense(1000) + Softmax → class prediction
The genius of CNNs is the separation of concerns:
Backpropagation updates ALL layers, including the convolutional filters.
Loss (final output error)
↓
Backprop through Dense layers
↓
Backprop through Flatten layer
↓
Backprop through Conv + ReLU + Pooling layers
↓
Update Conv Filter Weights ← gradient descent
During backpropagation:
Dense layers:
- Weights updated ✓
- Biases updated ✓
Convolutional layers:
- Conv filter weights updated ✓
- Conv biases updated ✓
- Pooling: NO weights (just selection operation)
- ReLU: NO weights (just gate)
Initial Conv Filter (3×3):
[0.1 -0.2 0.3]
[0.5 0.0 -0.1]
[-0.2 0.4 0.1]
After 1 training step (backprop computes gradients):
[0.12 -0.19 0.31] ← Each weight adjusted
[0.51 0.01 -0.08]
[-0.18 0.42 0.12]
The gradient tells how much each weight contributed to the loss
All layers are trainable by default:
On a toujours plusieurs filtres en parallèle.
Input: Image 32×32×3 (RGB)
Input: 32×32×3
Filtre: 3×3×3 (hauteur × largeur × canaux)
Paramètres du filtre:
3 × 3 × 3 = 27 paramètres (+ 1 bias) = 28 total
Output: 30×30×1 (une seule feature map)
Dans ce cas on n'extrait qu'une seule feature (par exemple "les bords verticaux"). Ce qui ne suffit pas
Input: 32×32×3
32 filtres différents, chacun 3×3×3:
- Filtre 1: 3×3×3 = 27 params
- Filtre 2: 3×3×3 = 27 params
- ...
- Filtre 32: 3×3×3 = 27 params
Total: 32 × 27 = 864 paramètres (+ 32 bias) ≈ 896 total
Output: 30×30×32 (32 feature maps différentes!)
Chaque filtre apprend une feature différente:
Input: 32×32×3
┌─────────────────┐
│ RGB Image │
└─────────────────┘
↓
[32 filtres en parallèle]
↓
┌──┬──┬──┬──┬─...─┐
│FM│FM│FM│FM│ │ ← 32 Feature Maps
└──┴──┴──┴──┴─...─┘
Chacun 30×30
↓
Output: 30×30×32
VGG-16 Example:
Layer 1:
Input: 224×224×3
Filtres: 64 × (3×3×3) = 64 × 27 = 1,728 params
Output: 222×222×64
↓
Layer 2 (reçoit les 64 feature maps):
Input: 222×222×64
Filtres: 128 × (3×3×64) = 128 × 576 = 73,728 params ← BEAUCOUP plus!
Output: 220×220×128
↓
Layer 3:
Input: 220×220×128
Filtres: 256 × (3×3×128) = 256 × 1,152 = 294,912 params
Output: 218×218×256
Observation:
Couche 1: 1,728 params
Couche 2: 73,728 params (42× plus)
Couche 3: 294,912 params (170× plus!)
Pourquoi?
- Plus de filtres (64 → 128 → 256)
- Plus de canaux d'entrée (3 → 64 → 128)
Formule: params = (kernel_size² × input_channels × output_filters)
Pour une couche Conv:
Paramètres = (Kernel_Height × Kernel_Width × Input_Channels × Output_Filters) + Output_Filters
Exemple:
- Kernel: 3×3
- Input channels: 64
- Output filters: 128
Params = (3 × 3 × 64 × 128) + 128 = 73,728 + 128 = 73,856
| Aspect | Détail |
|---|---|
| Un filtre | 1 feature map en sortie |
| 32 filtres | 32 feature maps en sortie (32 features différentes détectées) |
| Paramètres croissent | Avec le nombre de filtres ET le nombre de canaux d'entrée |
| Plus profond | Chaque couche reçoit plus de canaux → explosion de paramètres |
Les multiples filtres en parallèle c'est la clé: c'est comme avoir plein de détecteurs différents qui travaillent en même temps! 🎯
Chaque set va extraire des caractéristiques de plus en plus complexes et générales
Premier ensemble de convolution + pooling :
Deuxième ensemble de convolution + pooling :
Sur le dataset Cats and Dogs
https://www.tensorflow.org/tensorboard
Le tableau de bord Scalar montre comment le loss et les paramètres changent à chaque epoch. Vous pouvez également l'utiliser pour suivre la vitesse d'entraînement, le taux d'apprentissage et d'autres valeurs scalaires.
Le tableau de bord Graphs vous permet de visualiser votre modèle. Dans ce cas, le graphique Keras des couches s'affiche, ce qui peut vous aider à vous assurer qu'il est correctement construit.
Les tableaux de bord et Histogrammes montrent la distribution d'un Tensor au fil du temps. Cela peut être utile pour visualiser les poids et les biais et vérifier qu'ils changent de manière attendue.
techniques de reduction de l'overfit en deep learning
A chaque etape, le ImageDataGenerator prend un certain nombre (batch_size) d'images et les transforme aléatoirement (ou non)
De cette façon, le modèle voit des variations des images ce qui réduit l'overfitting
2 modes :
Les transformations possibles sont
Pour aller plus loin : construire un pipeline input https://www.tensorflow.org/guide/data
Le gradient qui sert à mettre à jour les poids du noeud lors de la rétropropagation est estimé à chaque fois sur une partie du dataset
le nombre d'échantillon estimé à chaque étape est appelé le batch size.
Valeurs courantes : N = 16, 32, 64, …
Le batch size est défini dans le train_generator, et le test_generator
train_generator = train_datagen.flow_from_directory(train_dir,
batch_size=20,
class_mode='binary',
target_size=(150, 150))
Augmenter le batch size
Réduire le batch size
Faut il réduire ou augmenter le batch size pour compenser l'overfit ?
D'un côté réduire le batch size réduit aussi l'overfit car :
Mais de l'autre côté augmenter le batch size réduit aussi l'overfit car:
INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC
Lire la partie architecture du cours de Stanford Convolutional Neural Networks https://cs231n.github.io/convolutional-networks/#architectures
L'excellent cours de stanford, notamment la section sur l'architecture https://cs231n.github.io/convolutional-networks/#architectures et ce cours récapitulatif https://stanford.edu/~shervine/teaching/cs-230/cheatsheet-convolutional-neural-networks Le chapitre sur la convolution du Deep Learning book https://www.deeplearningbook.org/contents/convnets.html
En prenant pour départ un grand modèle déjà entraîné, l'idée est de réutiliser le modèle pour l'extraction des données
Nécessite souvent beaucoup de données et des ressources informatiques puissantes
En prenant pour départ un grand modèle déjà entraîné, l'idée est de réutiliser le modèle pour l'extraction des données
Peu de données, faibles ressources informatiques
Dans ce cas vous ne faites passer le modèle de base sur vos données qu'une seule fois, plutôt qu'une fois par époque d'entraînement. Donc c'est beaucoup plus rapide et moins coûteux.
inner_model = Sequential([
layers.Input(shape=(10,)),
layers.Dense(32, activation='relu'),
layers.Dense(16, activation='relu')
])
outer_model = Sequential([
inner_model, # Include the inner model as a layer
layers.Dense(64, activation='relu'),
layers.Dense(1, activation='sigmoid')
])
# Compile the outer model
outer_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
On va utiliser le modèle InceptionV3 : Total params: 21802784 (83.17 MB) + 311 layers!!!
