Sobes.tech
Middle — Senior

Qu'est-ce qu'une couche FFN dans un transformeur et pourquoi y a-t-il besoin de non-linéarité entre les blocs d'attention?

sobes.tech IA

Réponse de l'IA

La couche FFN (Feed-Forward Network) dans un transformeur est un réseau neuronal entièrement connecté à deux couches, qui est appliqué séparément à chaque élément de la séquence après la couche d’attention. Sa tâche est d’ajouter un traitement non linéaire supplémentaire et d’accroître la capacité expressive du modèle.

La non-linéarité entre les blocs d’attention est nécessaire pour que le modèle puisse approximer des fonctions et dépendances complexes. L’attention est responsable de la somme pondérée des informations à différentes positions, et la FFN avec une activation non linéaire (par exemple ReLU ou GELU) aide le transformeur à modéliser des motifs plus complexes que de simples combinaisons linéaires.

Exemple de structure d’une couche FFN :

import torch
import torch.nn as nn

class FFN(nn.Module):
    def __init__(self, d_model, d_ff):
        super().__init__()
        self.linear1 = nn.Linear(d_model, d_ff)
        self.activation = nn.GELU()
        self.linear2 = nn.Linear(d_ff, d_model)

    def forward(self, x):
        return self.linear2(self.activation(self.linear1(x)))

Ici, d_model est la dimension des vecteurs d’entrée et de sortie, d_ff est la dimension de la couche interne, généralement plus grande que d_model.

Ainsi, la couche FFN avec non-linéarité assure une transformation non linéaire profonde des caractéristiques, ce qui améliore l’apprentissage et la qualité du modèle.