Deep Learning Approfondi
Le deep learning a révolutionné l’IA avec des architectures toujours plus sophistiquées. Découvrez les concepts avancés et leur mise en pratique.
Points Clés
- Architectures neuronales modernes
- Techniques d’optimisation avancées
- Applications pratiques
Architectures Neuronales Modernes
Les architectures modernes permettent de résoudre des problèmes complexes avec une efficacité remarquable.
Transformers et Attention
1. **Composants Clés** :
– Self-attention
– Multi-head attention
– Positional encoding
– Layer normalization
2. **Applications** :
– Traitement du langage
– Vision par ordinateur
– Séries temporelles
import torch
import torch.nn as nn
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.num_heads = num_heads
self.d_model = d_model
assert d_model % num_heads == 0
self.d_k = d_model // num_heads
self.w_q = nn.Linear(d_model, d_model)
self.w_k = nn.Linear(d_model, d_model)
self.w_v = nn.Linear(d_model, d_model)
def forward(self, q, k, v, mask=None):
batch_size = q.size(0)
# Linear projections and reshape
q = self.w_q(q).view(batch_size, -1, self.num_heads, self.d_k)
k = self.w_k(k).view(batch_size, -1, self.num_heads, self.d_k)
v = self.w_v(v).view(batch_size, -1, self.num_heads, self.d_k)
# Transpose for attention calculation
q = q.transpose(1, 2)
k = k.transpose(1, 2)
v = v.transpose(1, 2)
# Calculate attention scores
scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.d_k)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
attention = torch.softmax(scores, dim=-1)
# Apply attention to values
return torch.matmul(attention, v)
Architectures Génératives
1. **Types de Modèles** :
– GANs (Generative Adversarial Networks)
– VAEs (Variational Autoencoders)
– Diffusion Models
2. **Applications Pratiques** :
– Génération d’images
– Synthèse audio
– Augmentation de données
class Generator(nn.Module):
def __init__(self, latent_dim):
super().__init__()
self.model = nn.Sequential(
nn.Linear(latent_dim, 256),
nn.LeakyReLU(0.2),
nn.BatchNorm1d(256),
nn.Linear(256, 512),
nn.LeakyReLU(0.2),
nn.BatchNorm1d(512),
nn.Linear(512, 784),
nn.Tanh()
)
def forward(self, z):
return self.model(z)
class Discriminator(nn.Module):
def __init__(self):
super().__init__()
self.model = nn.Sequential(
nn.Linear(784, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 256),
nn.LeakyReLU(0.2),
nn.Linear(256, 1),
nn.Sigmoid()
)
def forward(self, img):
return self.model(img.view(img.size(0), -1))
Techniques d’Optimisation
L’optimisation est cruciale pour obtenir les meilleures performances des modèles profonds.
Optimisation Adaptative
1. **Méthodes Modernes** :
– Adam et ses variantes
– Learning rate scheduling
– Gradient clipping
2. **Stratégies** :
– Warmup et cooldown
– Cyclical learning rates
– Early stopping
from torch.optim import Adam
from torch.optim.lr_scheduler import OneCycleLR
def train_model(model, train_loader, epochs):
optimizer = Adam(model.parameters(), lr=1e-3)
scheduler = OneCycleLR(optimizer,
max_lr=1e-3,
epochs=epochs,
steps_per_epoch=len(train_loader))
for epoch in range(epochs):
for batch in train_loader:
optimizer.zero_grad()
loss = compute_loss(model, batch)
loss.backward()
# Gradient clipping
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
optimizer.step()
scheduler.step()
Applications Pratiques
Le deep learning trouve des applications dans de nombreux domaines.
Vision par Ordinateur
1. **Tâches Complexes** :
– Segmentation d’instances
– Detection d’objets
– Pose estimation
2. **Architectures Spécialisées** :
– YOLO et ses variantes
– Mask R-CNN
– ViT (Vision Transformer)
class VisionTransformer(nn.Module):
def __init__(self, image_size, patch_size, num_classes):
super().__init__()
self.patch_embed = PatchEmbedding(image_size, patch_size)
self.transformer = TransformerEncoder()
self.classifier = nn.Linear(768, num_classes)
def forward(self, x):
# Divise l'image en patches
x = self.patch_embed(x)
# Applique l'attention
x = self.transformer(x)
# Classification
return self.classifier(x[:, 0])
Conclusion
Points à Retenir
- Importance des architectures modernes
- Rôle crucial de l’optimisation
- Diversité des applications pratiques
- Évolution constante du domaine
Prêt à approfondir vos connaissances ?