Feed-Forward Networks: The Forgotten Half of Transformers
Published:

Intuition First: The FFN as a Pattern-Response Memory
Think of the FFN as a giant associative memory. The first matrix \(W_1\) acts as a bank of pattern detectors — each row is a template asking “does this token look like X?” The nonlinearity fires neurons that match. The second matrix \(W_2\) then says “when pattern X fires, add feature vector Y to the output.”
So for a token representing “Paris” in context “capital of France”, a neuron in the expanded layer might activate for the pattern “capital-of-Europe-city” and the corresponding \(W_2\) column adds a “France-related” feature vector to the output. This is factual retrieval — not via attention, but via the FFN’s stored patterns.
The FFN Is Half the Block
Every Transformer block follows this pattern:
x → MultiHeadAttention → residual + LN → FeedForward → residual + LN → output
The FeedForward (FFN) sub-layer is the second half of every block. In popular Transformer explanations, it is often described in one sentence and then forgotten in favour of attention. This is a mistake — the FFN is critical.
The Architecture of the FFN
The FFN is a simple two-layer MLP applied position-wise: each token is processed identically and independently.
- \(W_1 \in \mathbb{R}^{d_{\mathrm{model}} \times d_{\mathrm{ff}}}\): projects up from \(d_{\mathrm{model}}\) to \(d_{\mathrm{ff}}\)
- activation: nonlinearity (ReLU, GELU, or SwiGLU)
- \(W_2 \in \mathbb{R}^{d_{\mathrm{ff}} \times d_{\mathrm{model}}}\): projects back down
- \(d_{\mathrm{ff}} = 4 \times d_{\mathrm{model}}\) in most models (e.g., \(512 \to 2048\), or \(4096 \to 16384\))
The 4× expansion and contraction is standard but not derived from first principles — it was established empirically in the original paper and has remained the default.
Parameter Count: FFN Dominates
For a model with \(d_{\mathrm{model}} = 1024\) and \(d_{\mathrm{ff}} = 4096\), in each block:
| Sub-layer | Parameters |
|---|---|
| Multi-head attention (4 matrices) | \(4 \times 1024^2 = 4.2\mathrm{M}\) |
| FFN (2 matrices) | \(2 \times 1024 \times 4096 = 8.4\mathrm{M}\) |
The FFN holds twice as many parameters as the attention sub-layer. In a 96-layer model, FFNs collectively account for roughly 2/3 of all parameters.
What Does the FFN Actually Do?
Attention vs FFN: Division of Labour
Research into Transformer internals has revealed a rough division:
- Attention heads move information between positions — they determine which tokens influence each other and gather context
- FFN layers process information at a single position — they apply transformations and recall facts
This is why you can have a model that “knows” Paris is the capital of France even though that fact was not encoded in the positional attention pattern of the current context — the FFN retrieves it.
FFN as a Key-Value Memory
A 2020 paper (Geva et al., “Transformer Feed-Forward Layers Are Key-Value Memories”) showed that the FFN can be interpreted as:
- \(W_1\) rows (the “keys”): pattern detectors — each neuron in the expanded dimension activates for specific input patterns
- \(W_2\) columns (the “values”): for each activated key, the corresponding value vector is added to the output
When a token activates a key neuron (because it matches a learned pattern), the associated value is retrieved and added to the representation. This is analogous to a soft content-addressable memory — the FFN stores and retrieves (token, fact) associations.
The Nonlinearity: ReLU, GELU, SwiGLU
ReLU (original Transformer, 2017)
Simple and sparse — negative activations are exactly zero, which gives the FFN a sparse, efficient structure.
GELU (GPT-2, BERT, and successors)
Smooth approximation of ReLU with non-zero gradient for negative inputs. Empirically outperforms ReLU on most language tasks.
SwiGLU (LLaMA, PaLM, Mistral)
A gated variant: two parallel linear projections, one gating the other element-wise. SwiGLU-based FFNs use \(d_{\mathrm{ff}} = (8/3) \times d_{\mathrm{model}}\) (not 4×) to keep parameter count comparable. Consistently outperforms ReLU and GELU at large scale.
Position-Wise Independence: A Key Property
The FFN processes each token independently — it does not look at neighbouring tokens. There is no attention-like mechanism: the computation for position \(i\) uses only the vector at position \(i\).
This means:
- Parallelisable across positions (all tokens in a sequence processed simultaneously)
- No position-to-position information mixing — that is strictly the role of attention
- The FFN refines each token’s representation in place; it does not redistribute information
Worked Example: Parameter Count in GPT-3
GPT-3: \(d_{\mathrm{model}} = 12{,}288\) · \(d_{\mathrm{ff}} = 49{,}152\) (4×) · 96 layers
Per layer FFN parameters:
- \(W_1\): \(12{,}288 \times 49{,}152 = \mathbf{603.9M}\)
- \(W_2\): \(49{,}152 \times 12{,}288 = \mathbf{603.9M}\)
- Total FFN per layer: \(\approx \mathbf{1.21B}\)
Per layer MHA parameters (96 heads, \(d_k = d_v = 128\)):
- Q, K, V, O projections: \(4 \times 12{,}288^2 = \mathbf{603.9M}\)
Across 96 layers:
- All FFNs: \(96 \times 1.21\mathrm{B} \approx \mathbf{116B}\) parameters
- All MHA: \(96 \times 603.9\mathrm{M} \approx \mathbf{58B}\) parameters
- FFN share: \(\approx \mathbf{67\%}\) of the 175B total
This confirms the rule: in any standard Transformer, the FFN holds roughly two-thirds of all parameters. Scaling the model mostly means scaling the FFN.
Sparse FFNs: MoE
Mixture-of-Experts (MoE) Transformers replace the dense FFN with multiple expert FFNs, routing each token to only a subset (often 2 out of 64 or more experts):
token → router → expert_k → output
This allows vastly more total parameters (stored in expert FFNs) while keeping computation constant (only a fraction is used per token). Models like Mixtral 8×7B and GPT-4 (allegedly) use MoE in the FFN sub-layer.
Summary
| Property | Value |
|---|---|
| Architecture | Two-layer MLP with expansion |
| Expansion factor | 4× (ReLU/GELU) or 8/3× (SwiGLU) |
| Applied to | Each token independently |
| Parameter share | ~2/3 of total in standard models |
| Information role | Per-position processing and fact retrieval |
| Attention role comparison | Attention mixes positions; FFN refines each position |
The FFN is not attention’s sidekick. It is an equal partner — the knowledge storage and processing unit that sits beside attention’s information-routing mechanism.
References
- Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention Is All You Need. NeurIPS 2017 (Transformer FFN: two-layer MLP with ReLU, dimension 4d hidden, applied position-wise after each attention sublayer).
- Geva, M., Schuster, R., Berant, J., & Levy, O. (2021). Transformer Feed-Forward Layers Are Key-Value Memories. EMNLP 2021 (shows that FFN keys activate for human-interpretable input patterns and values store associated output information — FFN as learned key-value memory).
- Shazeer, N. (2020). GLU Variants Improve Transformer. arXiv 2020 (SwiGLU: gated linear units replacing ReLU in the FFN — now the dominant activation in LLaMA, Mistral, PaLM, and Gemini).
