FFN padrão: FFN(x) = W2 · GELU(W1 · x). Duas matrizes de pesos, uma ativação. FFN SwiGLU: SwiGLU(x) = W2 · (SiLU(W1 · x) ⊗ W3 · x). Três matrizes de pesos, um mecanismo de portão. O portão (W3 · x) controla o que passa, permitindo que a rede suprima ou amplifique seletivamente diferentes features. Para manter a contagem de parâmetros constante, a dimensão intermediária é tipicamente reduzida de 4×model_dim para (8/3)×model_dim.
Portões dão à rede uma interação multiplicativa que ativações padrão não possuem. Ativações padrão aplicam uma não-linearidade fixa. Portões aplicam uma não-linearidade aprendida e dependente da entrada. Essa expressividade adicional ajuda a rede a aprender funções mais complexas por camada, o que significa que você precisa de menos camadas (ou camadas menores) para desempenho equivalente. Shazeer (2020) mostrou que variantes GLU superam consistentemente FFN padrão em todos os tamanhos de modelo.
SwiGLU é uma de várias variantes GLU: GeGLU (usa GELU em vez de SiLU), ReGLU (usa ReLU) e o GLU original (usa sigmoid). SwiGLU e GeGLU têm desempenho similar e ambos superam ReGLU. A escolha entre eles é principalmente empírica — SwiGLU se tornou o padrão por convenção (LLaMA adotou, outros seguiram) em vez de superioridade teórica clara sobre GeGLU.