Sobes.tech
Middle — Senior

Cos'è uno strato FFN in un trasformatore e perché è necessaria la non linearità tra i blocchi di attenzione?

sobes.tech AI

Risposta dell'AI

Lo strato FFN (Rete Feed-Forward) in un trasformatore è una rete neurale completamente connessa a due strati, che viene applicata separatamente a ogni elemento della sequenza dopo lo strato di attenzione. Il suo compito è aggiungere un'elaborazione non lineare supplementare e aumentare la capacità espressiva del modello.

La non linearità tra i blocchi di attenzione è necessaria affinché il modello possa approssimare funzioni e dipendenze complesse. L'attenzione si occupa della somma ponderata delle informazioni in diverse posizioni, e la FFN con attivazione non lineare (ad esempio ReLU o GELU) aiuta il trasformatore a modellare schemi più complessi rispetto alle semplici combinazioni lineari.

Esempio di struttura di uno strato 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)))

Qui, d_model è la dimensione dei vettori di input e output, d_ff è la dimensione dello strato interno, di solito maggiore di d_model.

In questo modo, lo strato FFN con non linearità fornisce una trasformazione non lineare profonda delle caratteristiche, migliorando l'apprendimento e la qualità del modello.