👆 Selecione um bloco
Clique em qualquer bloco do diagrama à esquerda para ver os detalhes,
ou use o botão Executar passo para avançar sequencialmente.
💡
Uma camada completa do encoder contém:
Multi-Head Attention → Add&Norm → Feed-Forward → Add&Norm.
Os blocos residuais permitem que o gradiente flua diretamente, facilitando o treinamento profundo.
Visão geral
X → MHA → A
A, X → Add&Norm₁ → A'
A' → FFN → F
F, A' → Add&Norm₂ → H
🔷 Multi-Head Attention
Mistura informação entre tokens: cada posição pode "olhar" para todas as outras.
O resultado A tem as mesmas dimensões de X (d_model = 2 neste exemplo),
mas integra contexto de todas as posições via atenção multi-cabeça.
A = MultiHead(Q, K, V) [n_tokens × d_model]
| token | d₁ | d₂ |
| A — saída da atenção (aprox.) |
| Ela | 3.75 | 3.40 |
| saiu | 0.97 | 3.92 |
| só | 3.72 | 3.38 |
📌
Blocos 7–12 cobriram MHA em detalhes. Aqui partimos de A como entrada das etapas seguintes.
➕ Add & Norm — 1ª conexão residual
Residual (Add): soma A com a entrada original X.
Isso preserva o sinal original e garante que o gradiente possa fluir diretamente pela camada.
LayerNorm: normaliza cada vetor de token individualmente.
Para o token i, calcula a média μi e o desvio padrão σi ao longo das
dmodel dimensões daquele único vetor — não ao longo do batch.
Resultado: z̃[i] = (z[i] − μᵢ) / σᵢ.
Cada linha da matriz é normalizada de forma independente das demais.
A' = LayerNorm( A + X )
| token | d₁ | d₂ |
| X — embedding + posição |
| Ela | 1.00 | 3.00 |
| saiu | 3.84 | −0.46 |
| só | −0.09 | 1.58 |
| A — saída da atenção |
| Ela | 3.75 | 3.40 |
| saiu | 0.97 | 3.92 |
| só | 3.72 | 3.38 |
| A + X (antes do LayerNorm) |
| Ela | 4.75 | 6.40 |
| saiu | 4.81 | 3.46 |
| só | 3.63 | 4.96 |
🔀
O sinal de skip garante que, mesmo que a atenção não contribua, a informação original X ainda chega à próxima camada.
🔶 Feed-Forward Network (FFN)
Processa cada token de forma independente — sem misturar informação entre posições.
É uma MLP de 2 camadas: expansão com ReLU, depois projeção de volta para d_model.
Dimensões: W₁ ∈ ℝd × d_ff, W₂ ∈ ℝd_ff × d, H ∈ ℝn × d.
Na prática d_ff = 4 × d (ex.: d=512 → d_ff=2048).
FFN(z) = ReLU(W₁·z + b₁)·W₂ + b₂
Token "Ela" — passo a passo
→
×W₁
h (d_ff=4)
0.00
2.00
0.00
2.00
→
×W₂
Valores 0.00 = ReLU zerando ativações negativas
⚡
A atenção mistura tokens. O FFN refina cada token individualmente.
Pesquisadores como Geva et al. (2021) mostram que as linhas de W₂ funcionam como
"memórias associativas": cada neurônio oculto ativa para certos padrões de entrada
e projeta de volta um vetor de saída — como uma tabela de consulta aprendida.
➕ Add & Norm — 2ª conexão residual
Mesma estrutura da primeira: soma a saída do FFN com a entrada A',
depois aplica LayerNorm. Garante que o gradiente flua diretamente pelo caminho de skip,
mesmo se o FFN não contribuir com informação nova.
H = LayerNorm( FFN(A') + A' )
🔗
Residual
F + A' preserva A' mesmo que F seja ruim.
📐
LayerNorm
Normaliza cada vetor de token independentemente.
| token | d₁ | d₂ |
| FFN(A') — saída feed-forward |
| Ela | 0.00 | 4.00 |
| saiu | 4.00 | 0.00 |
| só | 0.00 | 4.00 |
| H = FFN(A') + A' (aprox., antes LayerNorm) |
| Ela | −1.00 | 5.00 |
| saiu | 5.00 | −1.00 |
| só | −1.00 | 5.00 |
📤 Saída da Camada do Encoder — matriz H
A matriz H é a saída de uma camada completa do encoder.
Cada linha é a representação refinada de um token após atenção + FFN + normalização.
Em um Transformer com N camadas, H alimenta a próxima camada como novo X.
H = LayerNorm( F + A' ) ∈ ℝn × d
| token | d₁ | d₂ | como interpretar |
| H — LayerNorm(F + A') — saída final da camada |
| Ela | −1.00 | 1.00 |
baixo/alto |
| saiu | 1.00 | −1.00 |
alto/baixo |
| só | −1.00 | 1.00 |
baixo/alto |
| μ (mean pool) |
−0.33 |
0.33 |
vetor da frase |
μᵢ para cada token = média das d dimensões; σᵢ = desvio padrão; resultado ∈ [−1, 1] aprox.
🎭 Usando H num classificador de sentimentos
① H
matriz [3 × 2] — uma linha por token
↓ mean pooling (média das linhas)
② h̄
[−0.33, 0.33] — vetor único da frase
↓ camada linear: Wcls ∈ ℝ2×2, bcls
③ logits
[−0.82, 1.54] — negativo, positivo
↓ softmax
④ P
negativo: 18%
positivo: 82%
→ POSITIVO
🔁
N camadas
H alimenta a próxima camada como novo X.
🌊
Residuais
Permitem treinar redes muito profundas.
Encoder Layer completa
A = MultiHead(Q,K,V)
A' = LayerNorm(A + X)
F = FFN(A')
H = LayerNorm(F + A') → classificador