Sobes.tech
Middle — Senior

Czym jest warstwa FFN w transformatorze i dlaczego potrzebna jest nieliniowość między blokami uwagi?

sobes.tech AI

Odpowiedź od AI

Warstwa FFN (Sieć Feed-Forward) w transformatorze to dwuwarstwowa, w pełni połączona sieć neuronowa, która jest stosowana oddzielnie do każdego elementu sekwencji po warstwie uwagi (attention). Jej zadaniem jest dodanie dodatkowego przetwarzania nieliniowego i zwiększenie zdolności wyrażania modelu.

Nieliniowość między blokami uwagi jest konieczna, aby model mógł aproksymować złożone funkcje i zależności. Attention odpowiada za ważone sumowanie informacji z różnych pozycji, a FFN z nieliniową aktywacją (np. ReLU lub GELU) pomaga transformatorowi modelować bardziej złożone wzorce niż tylko liniowe kombinacje.

Przykład struktury warstwy 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)))

Tutaj, d_model to wymiar wektorów wejściowych i wyjściowych, d_ff to wymiar warstwy wewnętrznej, zwykle większy niż d_model.

W ten sposób, warstwa FFN z nieliniowością zapewnia głęboką nieliniową transformację cech, co poprawia uczenie i jakość modelu.