Architecture & Measurement-Design Analysis
Attention Is All You Need (the Transformer)
Source: Vaswani, A.; Shazeer, N.; Parmar, N.;
Uszkoreit, J.; Jones, L.; Gomez, A. N.; Kaiser, L.; Polosukhin, I.
Advances in Neural Information Processing Systems 30 (NIPS
2017), Long Beach, CA, USA. arXiv: 1706.03762
Code: https://github.com/tensorflow/tensor2tensor
Authors: Google Brain + Google Research + University of
Toronto. Reader: Direct PDF read with Read
tool, pages 1-15 (paper is 11 pages incl. references; gemini-reader
unavailable). Analyst: Vishwakarma
Date: 2026-05-14
Table of Contents
- System Architecture (the encoder-decoder stack as the "instrument")
- System-Under-Test Architecture (the attention block as the "specimen")
- Design-Space Diagram (axes swept in the ablation table; axes held fixed)
- Algorithm / Control Flow Diagrams (Scaled Dot-Product, Multi-Head, three attention applications)
- Quantitative Results — Empirical Findings by Regime (BLEU, FLOPs, Table-3 ablations)
- Configuration-Regime Trade-off Tables (layer-type comparison, ablation knob crossovers)
- Bottlenecks & Insights Surfaced by the Measurements
- Limitations of the Methodology
- Note on NCCL Tuning
- Analogy (closing intuition pump)
1. System Architecture (the encoder-decoder stack as the "instrument")
The Transformer is a stacked encoder-decoder of identical,
parallel-friendly layers, where every layer is a composition of
two (encoder) or three (decoder) sub-layers: multi-head self-attention,
optional encoder-decoder attention, and a position-wise feed-forward
network. Unlike the recurrent predecessors it replaces (RNN, LSTM, GRU),
the model has no sequential state passed across
positions — all positions in a layer can be computed in
parallel. The encoder and decoder are each N = 6 layers
deep in the base model; d_model = 512 is the
residual-stream width that every sub-layer must read from and write back
into.
+-------------------------------------------------------------------+
| Transformer (base: N=6, d_model=512) |
| |
| Inputs (token ids) Outputs shifted right (token ids)|
| | | |
| v v |
| +---------+ +---------+ |
| | Input | | Output | |
| | Embed | | Embed | |
| +----+----+ +----+----+ |
| | + PositionalEncoding(sin/cos) | + PositionalEncoding |
| v v |
| +============= ENCODER STACK (N=6) =============+ |
| | | |
| | +-----------------------------------------+ | |
| | | Sub-layer 1: Multi-Head Self-Attention | --+---+ |
| | +-----------------------------------------+ |residual |
| | + LayerNorm(x + Sublayer(x)) | |
| | | | |
| | +-----------------------------------------+ | |
| | | Sub-layer 2: Position-wise FFN | --+--+ |
| | | (d_ff = 2048, ReLU, two linear) | |residual |
| | +-----------------------------------------+ | |
| | + LayerNorm(x + Sublayer(x)) | |
| +-------------------------------------------------+ |
| | encoder output K,V (shared across decoder layers) |
| v |
| +============= DECODER STACK (N=6) =============+ |
| | | |
| | +-----------------------------------------+ | |
| | | Sub-layer 1: Masked Multi-Head Self- | --+---+ |
| | | Attention (causal mask, no peek ahead) | |residual |
| | +-----------------------------------------+ | |
| | + LayerNorm | |
| | | | |
| | +-----------------------------------------+ | |
| | | Sub-layer 2: Encoder-Decoder Attention | <----+ (K,V from |
| | | (Q from decoder, K,V from encoder out) | encoder) |
| | +-----------------------------------------+ |
| | + LayerNorm |
| | | |
| | +-----------------------------------------+ |
| | | Sub-layer 3: Position-wise FFN | |
| | +-----------------------------------------+ |
| | + LayerNorm |
| +-------------------------------------------------+ |
| | |
| v |
| +---------+ |
| | Linear | (weight-tied with embedding matrix, * sqrt(d_model))|
| +----+----+ |
| v |
| +---------+ |
| | Softmax | |
| +----+----+ |
| v |
| Output token probabilities |
+-------------------------------------------------------------------+
^ Fig 1: Transformer base model. Six encoder layers and six decoder
layers, each with residual connections around every sub-layer and a
LayerNorm after the addition. The encoder produces a single K,V
bundle that all six decoder layers consume in their cross-attention
sub-layer.
Two things are load-bearing in this diagram. First, the
residual stream of width d_model = 512 is shared
across every sub-layer in both stacks. This is what makes the
model addable: every sub-layer outputs a 512-dimensional delta that is
summed back. Skip-connections plus LayerNorm make the gradient path
constant-depth regardless of how many sub-layers were stacked. Second,
the encoder output is fed to all N=6 decoder
layers — not just the top one — and only at the cross-attention
sub-layer. This means the encoder's representation is consumed many
times during a single decoder pass; in distributed-training terms,
encoder activations are a broadcast-heavy tensor relative to
decoder-private activations.
Residual stream (width d_model = 512)
in --+--> [Sublayer] --+--> LayerNorm --> out
| |
+-------- + -------+ (skip connection)
out = LayerNorm( in + Sublayer(in) )
^ Fig 2: The "Add & Norm" cell, applied around every sub-layer. Same
pattern as ResNet's residual block but with LayerNorm instead of
BatchNorm, so each token-position is normalized independently
(statistics computed across the 512-d feature axis, not across batch).
2. System-Under-Test Architecture (the attention block as the "specimen")
The paper's true specimen — the component being argued for — is the
Multi-Head Scaled Dot-Product Attention block.
Everything else in the model (embeddings, FFN, residual connections,
LayerNorm) is borrowed from prior work; attention is the contribution.
The block has two nested structures: a single attention head (Scaled
Dot-Product Attention) and h parallel heads whose outputs
are concatenated and re-projected.
+---------------- Scaled Dot-Product Attention ----------------+
| |
| Q (n_q x d_k) K (n_k x d_k) V (n_k x d_v) |
| | | | |
| +-------+--------+ | |
| v | |
| +-------------+ | |
| | MatMul | --> Q K^T (n_q x n_k) |
| +------+------+ |
| v |
| +-------------+ |
| | Scale by | --> / sqrt(d_k) |
| | 1/sqrt(dk) | |
| +------+------+ |
| v |
| +-------------+ |
| | Mask (opt) | --> set illegal positions to -inf |
| | (decoder) | (causal mask for self-attn) |
| +------+------+ |
| v |
| +-------------+ |
| | Softmax | --> attention weights A (n_q x n_k)|
| +------+------+ |
| v |
| +-------------+ V |
| | MatMul | <------+ |
| +------+------+ |
| v |
| Output (n_q x d_v) |
+--------------------------------------------------------------+
^ Fig 3: One head's attention computation. The Mask is present only in
the decoder's first sub-layer (masked self-attention) to enforce the
auto-regressive property; encoder and cross-attention paths skip it.
The single-head block is then replicated h = 8
times in parallel, each head operating on a learned linear
projection of (Q, K, V) into a smaller sub-space of dimension
d_k = d_v = d_model / h = 64. Outputs of the eight heads
are concatenated back to width d_model = 512 and passed
through one final linear projection W_O.
+-------------------- Multi-Head Attention (h = 8) --------------------+
| |
| Q (d_model) K (d_model) V (d_model) |
| | | | |
| +-------+-------+ +-------+-------+ +-------+-------+ |
| | W_Q_1 .. W_Q_8| | W_K_1 .. W_K_8| | W_V_1 .. W_V_8| |
| | (8 parallel | | (8 parallel | | (8 parallel | |
| | d_model->dk)| | d_model->dk)| | d_model->dv)| |
| +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ |
| | | | | | | | | | |
| v v v v v v v v v |
| +--------+ +--------+ +--------+ |
| | Q_1..8 | | K_1..8 | | V_1..8 | |
| +---+----+ +---+----+ +---+----+ |
| | | | |
| +------------------+------------------+ |
| | |
| v |
| +-----------------------------+ |
| | Scaled Dot-Product Attn | |
| | (8 heads in parallel) | |
| +--------------+--------------+ |
| | |
| v |
| +-----------------------------+ |
| | Concat heads (8 x d_v) | -> width d_model |
| +--------------+--------------+ |
| v |
| +-----------------------------+ |
| | Linear W_O (d_model x d_model)| |
| +--------------+--------------+ |
| v |
| Output (d_model) |
+----------------------------------------------------------------------+
^ Fig 4: Multi-head attention. The eight heads run independently and
in parallel; their per-head dimension is d_k = d_v = 64 specifically
so that total compute (8 * 64 = 512) matches single-head attention at
d_model = 512. The cost of multi-head is one extra linear projection
W_O at the output, in exchange for "jointly attending to information
from different representation subspaces."
The same Multi-Head block is reused in three different roles within the model — the paper is explicit that this is the same module instantiated three times with different (Q, K, V) wiring:
| Role | Q comes from | K, V come from | Mask? |
|---|---|---|---|
| Encoder self-attention | Previous encoder layer | Same layer (self) | No |
| Decoder masked self-attention | Previous decoder layer | Same layer (self) | Yes (causal) |
| Decoder cross-attention | Previous decoder layer | Encoder final output | No |
This is the cleanest realization of the uniform interface
design pattern in modern deep learning: one block, three callers, all
using the same forward function signature
Attention(Q, K, V, mask). The architectural elegance — one
mechanism doing both within-sequence and across-sequence information
flow — is the paper's strongest aesthetic argument.
3. Design-Space Diagram (axes swept; axes held fixed)
The Transformer paper is unusual: it is primarily an architecture paper, not a benchmark survey, so most variables are introduced as defaults and only the Section 6.2 ablation (Table 3 rows A-E) systematically sweeps a handful. The fixed defaults shape the headline result (Table 2 BLEU).
DESIGN SPACE (paper-defined sweep)
+---------------------------------------------------------------+
| |
| Axis 1: # ATTENTION HEADS h (Table 3 row A) |
| [h = 1, 4, 8 (base), 16, 32] |
| (with d_k, d_v re-scaled to keep total compute constant) |
| |
| Axis 2: KEY/VALUE DIM d_k (Table 3 row B) |
| [d_k = 16, 32, 64 (base)] |
| |
| Axis 3: MODEL DEPTH N and WIDTH d_model, d_ff (row C) |
| [N = 2, 4, 6 (base), 8] |
| [d_model = 256, 512 (base), 1024] |
| [d_ff = 1024, 2048 (base), 4096] |
| |
| Axis 4: DROPOUT P_drop and LABEL SMOOTHING eps_ls (row D) |
| [P_drop = 0.0, 0.1 (base), 0.2] |
| [eps_ls = 0.0, 0.1 (base), 0.2] |
| |
| Axis 5: POSITIONAL ENCODING (row E) |
| [sinusoidal (base) vs learned] |
| |
| Axis 6: MODEL SIZE (Table 2 base vs big) |
| [base: N=6, d_model=512, d_ff=2048, h=8, 65M params] |
| [big: N=6, d_model=1024, d_ff=4096, h=16, 213M params] |
| |
| Held FIXED (no sweep): |
| - Encoder/decoder symmetry: N_enc = N_dec (always equal) |
| - Activation: ReLU in FFN (no GELU, no SwiGLU exploration) |
| - Normalization: post-LayerNorm placement |
| - Embedding sharing: input+output+pre-softmax weight tied |
| - Optimizer: Adam (beta1=0.9, beta2=0.98, eps=1e-9) |
| - LR schedule: rsqrt(step) with 4000 warmup steps |
| - Hardware: 8x P100 GPU, single node |
| - Datasets: WMT 2014 EN-DE, EN-FR |
| - Tokenizer: byte-pair encoding (37K joint vocab EN-DE) |
| - Decoding: beam size 4, length penalty alpha = 0.6 |
| |
+---------------------------------------------------------------+
^ Fig 5: Six swept axes from Table 3, plus the base/big switch from
Table 2. The held-fixed list is long: every architectural choice in
the FFN, the residual stream layout, the normalization style, and the
optimizer are introduced as defaults with no ablation. Subsequent
research (Pre-LN, GELU, SwiGLU, ALiBi, RoPE, etc.) all visit cells
this paper did not sweep.
Two scope decisions define what the paper does and does not measure.
First, every ablation in Table 3 is single-axis (or a
tightly-coupled multi-axis like h-d_k
re-scaling). There is no full-factorial sweep; the table reports one row
per change against the base. This means interaction effects (e.g., does
increasing N reward larger h?) are invisible.
Second, the headline BLEU comparison (Table 2) trains the base model for
100K steps (12 hours) and the big model for 300K steps (3.5 days) — both
numbers chosen by the authors, not derived from a compute-vs-quality
Pareto curve. So "Transformer beats GNMT in 1/4 the FLOPs" is true at
these chosen budgets but not necessarily Pareto-optimal.
4. Algorithm / Control Flow Diagrams
4.1 Scaled Dot-Product Attention — control flow for one head
START (Q: n_q x d_k, K: n_k x d_k, V: n_k x d_v, optional mask M)
|
v
(1) Compute raw scores S = Q K^T [matmul: n_q x n_k]
|
v
(2) Scale S' = S / sqrt(d_k) [elementwise]
|
v
----+-- mask provided? ----+
| |
| yes | no
v |
(3) Set S'[i,j] = -inf |
where M[i,j] forbids |
(e.g., j > i in causal)|
| |
+-------- merge -------+
|
v
(4) A = softmax_row(S') [each row sums to 1]
|
v
(5) Output = A V [matmul: n_q x d_v]
|
v
END --> n_q output vectors of dim d_v
^ Fig 6: One scaled dot-product attention head. The /sqrt(d_k) scaling
(step 2) is the paper's named addition vs prior dot-product attention.
Rationale: for large d_k the variance of Q.K grows linearly, pushing
softmax into saturated regions with vanishing gradient.
4.2 Auto-regressive decode — control flow at inference
The training-time forward pass processes the whole target sequence in parallel (with causal mask). Inference is necessarily sequential because each output token feeds back as the next input. The masked self-attention sub-layer is what makes both modes use the same weights.
START (source sentence x_1..x_n)
|
v
(1) Run encoder once on (x_1..x_n)
-> encoder output E (n x d_model), shared K,V
|
v
(2) Initialize y_0 = <BOS>
|
v
+---loop t = 1..L_max---------------------------------------+
| (3) Embed y_0..y_{t-1} + positional encoding |
| | |
| v |
| (4) Run decoder stack with causal mask |
| - sub1: masked self-attn over y_0..y_{t-1} |
| - sub2: cross-attn against encoder E |
| - sub3: FFN |
| | |
| v |
| (5) Linear + softmax over final position t-1 |
| -> probability distribution over vocab |
| | |
| v |
| (6) Beam search step (beam_size = 4, alpha = 0.6) |
| Pick top-k candidate y_t |
| | |
| v |
| (7) If y_t == <EOS> or t == n + 50, break |
+-----------------------------------------------------------+
|
v
END -> output token sequence y_1..y_t
^ Fig 7: Auto-regressive inference. Encoder runs once; the decoder
re-runs the full causal stack for every new output token. Production
implementations cache the K,V from previous decoder steps to avoid
re-computing them (not described in the paper but implied by the
causal-mask invariant). This is the same cache that becomes the
"KV cache" in modern LLM serving.
4.3 The three attention call-sites — sequence diagram
Source x_1..x_n Encoder layer i Decoder layer j
| | |
(1) +---- token embed ------+ |
| | |
(2) | self-attn(Q=h^(i-1), |
| K=h^(i-1), V=h^(i-1)) |
| | |
(3) | FFN ----------------+ |
| | |
| ... N=6 layers ... | |
| | |
(4) |--- final encoder output E (K_E, V_E) -------->|
| | |
| |
(5) <BOS> y_1..y_{t-1} ------------ token embed --->|
| |
(6) | masked self-attn( |
| Q=g^(j-1), |
| K=g^(j-1), |
| V=g^(j-1), |
| mask=causal) |
| |
(7) | cross-attn( |
| Q=g^(j-1), |
| K=E, V=E) |
| |
(8) | FFN |
| |
| ... N=6 layers ... |
| |
(9) | Linear + Softmax |
| |
| -> p(y_t | y_<t, x) |
v v v
^ Fig 8: Sequence diagram of the three attention call-sites within one
forward pass. Steps (2), (6), (7) all instantiate the same Multi-Head
block but with different (Q, K, V) wiring. The encoder result E is
computed once (steps 1-4) and reused by every cross-attention call
(step 7) in every decoder layer.
5. Quantitative Results — Empirical Findings by Regime
5.1 Headline BLEU and training-cost comparison (Table 2 verbatim)
| Model | EN-DE BLEU | EN-FR BLEU | EN-DE FLOPs | EN-FR FLOPs |
|---|---|---|---|---|
| ByteNet | 23.75 | - | - | - |
| Deep-Att + PosUnk | - | 39.2 | - | 1.0 * 10^20 |
| GNMT + RL | 24.6 | 39.92 | 2.3 * 10^19 | 1.4 * 10^20 |
| ConvS2S | 25.16 | 40.46 | 9.6 * 10^18 | 1.5 * 10^20 |
| MoE | 26.03 | 40.56 | 2.0 * 10^19 | 1.2 * 10^20 |
| Deep-Att + PosUnk Ensemble | - | 40.4 | - | 8.0 * 10^20 |
| GNMT + RL Ensemble | 26.30 | 41.16 | 1.8 * 10^20 | 1.1 * 10^21 |
| ConvS2S Ensemble | 26.36 | 41.29 | 7.7 * 10^19 | 1.2 * 10^21 |
| Transformer (base) | 27.3 | 38.1 | 3.3 * 10^18 | 3.3 * 10^18 |
| Transformer (big) | 28.4 | 41.0 | 2.3 * 10^19 | 2.3 * 10^19 |
Three observations from this table. First, the base model already beats every prior single model on EN-DE while training in 1/10 the FLOPs of the cheapest competitive baseline (ConvS2S). Second, the big model sets a new EN-DE SOTA (28.4 BLEU) at 1/4 the FLOPs of the GNMT+RL ensemble. Third, Transformer-base on EN-FR (38.1) is below the prior single-model SOTA, but Transformer-big (41.0) is below only the ConvS2S ensemble (41.29) — and at 1/50th the compute. The takeaway is not "better BLEU per token" but "drastically better BLEU per FLOP," which is exactly what scaling depends on.
5.2 Ablation: number of attention heads (Table 3 row A)
| h (heads) | d_k | d_v | PPL (dev) | BLEU (dev) |
|---|---|---|---|---|
| 1 | 512 | 512 | 5.29 | 24.9 |
| 4 | 128 | 128 | 5.00 | 25.5 |
| 8 (base) | 64 | 64 | 4.92 | 25.8 |
| 16 | 32 | 32 | 4.91 | 25.8 |
| 32 | 16 | 16 | 5.01 | 25.4 |
There is a unimodal sweet spot at h=8-16.
Single-head attention is 0.9 BLEU worse than the optimum, and 32 heads
degrade. The paper's quoted explanation — "quality also drops off with
too many heads" — likely reflects that as d_k shrinks below
32, each head's representation sub-space becomes too narrow to be
informative. This is the first documented head-count crossover that
later architectures (grouped-query attention, multi-query attention)
revisit.
5.3 Ablation: key
dimension d_k (Table 3 row B)
| d_k | PPL (dev) | BLEU (dev) | Params (M) |
|---|---|---|---|
| 16 | 5.16 | 25.1 | 58 |
| 32 | 5.01 | 25.4 | 60 |
Holding everything else fixed, reducing d_k from 64
(base) to 32 costs 0.4 BLEU; to 16 costs 0.7 BLEU. The paper's verbatim
conclusion: "reducing the attention key size d_k hurts
model quality. This suggests that determining compatibility is not easy
and that a more sophisticated compatibility function than dot product
may be beneficial." — i.e., dot-product attention is not a hard
floor; alternative scoring functions (additive, learned biases) could
compensate for small d_k.
5.4 Ablation: depth/width and parameter count (Table 3 row C)
| Variation | PPL (dev) | BLEU (dev) | Params (M) |
|---|---|---|---|
| N=2 (shallow) | 6.11 | 23.7 | 36 |
| N=4 | 5.19 | 25.3 | 50 |
| N=8 (deeper than base) | 4.88 | 25.5 | 80 |
| d_model=256 (narrow) | 5.75 | 24.5 | 28 |
| d_model=1024 (wide) | 4.66 | 26.0 | 168 |
| d_ff=1024 (small FFN) | 5.12 | 25.4 | 53 |
| d_ff=4096 (large FFN) | 4.75 | 26.2 | 90 |
| Base (N=6, d=512, d_ff=2048) | 4.92 | 25.8 | 65 |
Bigger models are better. Period. Every parameter-count increase monotonically improves dev BLEU. This is the first table in transformer history that suggests the family scales gracefully — the foundation for the GPT-2/3/4 scaling laws that follow. Depth (N) and width (d_model) both help; the widest (d_model=1024, 168M params) is the strongest single ablation cell, foreshadowing the "Transformer big" headline model.
5.5 Ablation: regularization (Table 3 row D)
| P_drop | eps_ls | PPL (dev) | BLEU (dev) |
|---|---|---|---|
| 0.0 | 0.1 | 5.77 | 24.6 |
| 0.2 | 0.1 | 4.95 | 25.5 |
| 0.1 | 0.0 | 4.67 | 25.3 |
| 0.1 | 0.2 | 5.47 | 25.7 |
Dropout is essential: removing it (P_drop=0) costs
1.2 BLEU. Label smoothing has a smaller but consistent effect. Note that
P_drop=0 / eps_ls=0.1 has the worst PPL (5.77) but only
middling BLEU, while P_drop=0.1 / eps_ls=0.0 has best PPL
(4.67) but middling BLEU. PPL and BLEU disagree — a
recurring evaluation-metric tension in machine translation.
5.6 Ablation: positional encoding (Table 3 row E)
| Variant | PPL (dev) | BLEU (dev) |
|---|---|---|
| Sinusoidal (base) | 4.92 | 25.8 |
| Learned positional emb | 4.92 | 25.7 |
Statistically indistinguishable. The paper chose sinusoidal anyway, explicitly because it may extrapolate to longer sequences at inference than were seen at training. This is a forward-looking design call — not justified by Table 3 BLEU, but by an extrapolation property the table cannot measure on fixed-length dev data. (Subsequent work like ALiBi and RoPE pushed harder on this same axis.)
5.7 Wall-clock and hardware (Sec. 5.2)
| Model | GPUs | Step time | Steps | Wall time |
|---|---|---|---|---|
| Transformer base | 8 x P100 | 0.4 s | 100,000 | 12 hours |
| Transformer big | 8 x P100 | 1.0 s | 300,000 | 3.5 days |
Single-node, 8 P100 — modest by 2026 standards but representative for 2017. The model fits on a single node with no model parallelism or pipeline parallelism described. Distribution is data-parallel across the 8 GPUs, presumably via NCCL all-reduce of gradients each step (the paper does not specify the framework or collective library). The 0.4-second base-model step time on 8 P100 implies ~500 samples/sec at the stated ~25,000 source tokens per batch (~64 sequences of length 400 tokens average) — a tractable target for any modern data-parallel deep-learning stack.
6. Configuration-Regime Trade-off Tables
6.1 Layer-type comparison (Table 1 of the paper, verbatim)
| Layer type | Complexity per layer | Sequential ops | Max path length |
|---|---|---|---|
| Self-attention | O(n^2 * d) | O(1) | O(1) |
| Recurrent | O(n * d^2) | O(n) | O(n) |
| Convolutional | O(k * n * d^2) | O(1) | O(log_k n) |
| Self-attention (restricted, r) | O(r * n * d) | O(1) | O(n / r) |
This is the paper's central architectural argument distilled into one table. Three dimensions are compared and self-attention wins two of them outright:
| Dimension | RNN | CNN | Self-Attention | Restricted SA |
|---|---|---|---|---|
| Per-layer FLOPs | O(n*d^2) | O(knd^2) | O(n^2*d) | O(rnd) |
| Sequential bottleneck | O(n) | O(1) | O(1) | O(1) |
| Max signal path length | O(n) | O(log_k n) | O(1) | O(n/r) |
| GPU parallelism | Poor | Good | Excellent | Excellent |
Large-n cost dominance |
Linear | Linear | Quadratic | Linear (with r) |
Self-attention wins on parallelism and path length; CNN/RNN
win on per-layer compute when n > d. The
crossover happens at n ~ d: self-attention cost
n^2 * d vs RNN cost n * d^2 are equal when
n = d. For machine translation with
d_model = 512 and typical sentence length 30-50 tokens,
n << d and self-attention is cheaper per-layer
and fully parallel. For long-context regimes
(n > d), the comparison flips — which is exactly why
restricted/local/sparse attention variants became necessary for
long-document and long-context models.
6.2 Architecture choice (encoder, decoder, what stays the same)
| Dimension | Encoder layer | Decoder layer | Winner (for what) |
|---|---|---|---|
| # sub-layers | 2 | 3 | Decoder (more capability) |
| Has masked attention | No | Yes (sub-layer 1) | Decoder (auto-regressive) |
| Has cross-attention | No | Yes (sub-layer 2) | Decoder (consumes encoder) |
| Parallel over positions | Yes (training time) | Yes (training only) | Tie |
| Parallel over batch | Yes | Yes | Tie |
| Inference cost per token | Run once / sentence | Run once per token | Encoder (much cheaper inference) |
| Activation memory | n * d_model per layer | t * d_model per layer at step t | Encoder (steady) |
The asymmetry of encoder vs decoder is fundamental and survives in encoder-decoder models like T5, BART. Decoder-only models (GPT family) collapse this distinction by using only the decoder stack with self-attention as the only attention type — no encoder, no cross-attention. That simplification is what makes decoder-only models cheaper to train (one stack, one attention mode) but more expensive to condition on long contexts (no compressed encoder representation; the full prefix must be re-attended every step).
6.3 Multi-head vs single-head (Table 3 row A distilled)
| Dimension | h=1 (single head) | h=8 (base) | h=32 (many heads) |
|---|---|---|---|
| BLEU (dev) | 24.9 | 25.8 | 25.4 |
| d_k (per-head dim) | 512 | 64 | 16 |
| Per-head representation capacity | High | Medium | Low (too thin) |
| Diversity of attention patterns | Low (one pattern) | High | High but redundant |
| Total compute | Equal (by design) | Equal | Equal |
| Implementation | Simplest | Standard | Diminishing returns |
For the base model (d_model=512), h=8 is the sweet
spot. The 8-head choice is not magic; it is the point where (i)
d_k = d_model / h is large enough (64) for each head to
encode a useful sub-space and (ii) heads are diverse enough to capture
multiple attention patterns simultaneously. Larger d_model models (the
big variant at d_model=1024) use h=16, preserving the same
d_k = 64 per head — i.e., head count scales with
model width to hold per-head dim constant.
6.4 Sinusoidal vs learned positional encoding
| Dimension | Sinusoidal | Learned | Winner |
|---|---|---|---|
| Dev BLEU | 25.8 | 25.7 | Tie |
| Train-time params | 0 (deterministic) | max_len * d_model | Sinusoidal |
| Extrapolation to longer seqs | Designed-in (sin/cos) | Cannot extrapolate | Sinusoidal |
| Relative-offset linearity | Linear function of offset | No structural property | Sinusoidal |
| Implementation | Simple closed-form | Simple lookup | Tie |
Sinusoidal wins on extrapolation alone, which is the property that matters in deployment but is not measured in Table 3. This is a recurring pattern in deep-learning paper evaluation: the measured metric on dev data is a tie, so the choice between A and B falls to an unmeasured desideratum (here, length generalization). Whether sinusoidal actually extrapolates as designed is a question subsequent papers (notably the ALiBi paper) addressed — with mixed conclusions.
7. Bottlenecks & Insights Surfaced by the Measurements
7.1 Path length is the unstated optimization target
The paper sells the Transformer by complexity tables (Table 1) and BLEU (Table 2), but the real architectural target is maximum path length — the number of operations on the gradient-flow path between any two positions. Recurrent: O(n). Convolutional: O(log_k n). Self-attention: O(1). This is the property that makes long-range dependencies learnable. The empirical payoff shows up in BLEU on translation (where dependencies are sentence-scoped, n ~ 30-50 so RNN's O(n) isn't crushing) but the architectural design is positioned for the future regime where dependencies span much longer contexts — exactly where decoder-only LLMs later live.
7.2
Per-layer compute is quadratic in n — the sleeping
giant
Table 1's O(n^2 * d) complexity per self-attention layer
is benign for n=50 (translation) but catastrophic for
n=10,000 (long-document modeling) or n=1M (book-length context). The
paper acknowledges this exactly once ("To improve computational
performance for tasks involving very long sequences, self-attention
could be restricted to considering only a neighborhood of size r") and
then moves on. The entire subsequent decade of "efficient
transformer" research (Sparse Transformer, Longformer, Performer,
FlashAttention, Mamba) operates inside this acknowledged but unsolved
limitation. The paper handed downstream research a clean
optimization frontier.
7.3 The model is shockingly hyperparameter-stable
Looking across Table 3 rows A-E: every single ablation lands BLEU within [23.7, 26.2] — a range of 2.5 BLEU points. The base configuration is in the middle of that range. No single hyperparameter is fragile. This robustness is what made the Transformer the default architecture across NLP, vision (ViT), audio, RL, and protein folding within five years of publication. Architectures that lose 5+ BLEU when you change one knob do not generalize beyond their original task; this one did.
7.4 The training recipe is opinionated and load-bearing
Adam with beta2=0.98 (not the more common 0.999), a
custom rsqrt(step) LR schedule with 4000 warmup steps,
label smoothing eps_ls=0.1, dropout
P_drop=0.1, residual + LayerNorm placement
after the sub-layer (post-LN, not pre-LN). Every one of
these knobs was later questioned, modified, or replaced in subsequent
transformer variants. Pre-LN, in particular, became the standard for
very deep transformers because post-LN at high depth suffers gradient
instability — a property invisible at N=6 but critical at N=96+.
7.5 The 3.5-day, 8-GPU training budget is the model of compute frugality
that scaling laws would shatter
Training a SOTA-beating big Transformer in 3.5 days on 8 P100 GPUs (~9.5 TFLOP/s each = 76 TFLOPS aggregate, ~2.3 * 10^19 FLOPs total) is modest by 2017 standards and trivially small by 2026 standards. The authors did not realize that the architecture's stability would unlock two-to-three orders of magnitude more compute (GPT-3: 3.14 * 10^23 FLOPs; GPT-4: estimated 10^25 FLOPs). The Transformer's most consequential property is not its 28.4 BLEU on WMT'14 — it is that the same architecture trains stably at 10^4 x the original compute.
8. Limitations of the Methodology
| Limitation | Implication |
|---|---|
| Ablations are single-axis (Table 3) | No interaction effects (e.g., does N=8 reward h=16?) |
| Sequence-length sensitivity not swept | The O(n^2) cost regime is acknowledged but not measured |
| Two tasks only (EN-DE, EN-FR translation) | No language-modeling, summarization, classification data |
| BLEU as the only quality metric | PPL/BLEU disagree across some cells (row D) |
| Training-cost (FLOPs) is estimated | Not measured; "we estimate ... by multiplying training time, GPU count, and an estimate of sustained TFLOPS per GPU" |
| Single hardware platform (P100, 8 GPUs) | No multi-node, no mixed-precision, no V100/A100 baselines |
| No mention of NCCL / collective library | Distributed details are opaque |
| No variance / error bars on Table 2 or 3 | Hard to know which ablation gaps are significant |
| 100K / 300K training steps fixed a priori | Not chosen by compute-vs-quality Pareto analysis |
| Beam size 4, alpha=0.6 not ablated | Decoding-time knobs treated as defaults |
| Mask only described qualitatively | No code-level spec of causal masking; later replication papers had to reverse-engineer |
| Positional encoding extrapolation claim untested | Sinusoidal chosen "because it may extrapolate" — not verified in this paper |
| No analysis of attention head specialization | The appendix shows examples; no quantitative claim |
| No inference-time profiling | Wall-clock for inference, KV-cache behavior absent |
| Post-LN placement unjustified vs pre-LN | A choice that later became known-fragile at depth |
The most consequential limitation is the absence of any long-context measurement. Every cell in Table 2 and Table 3 trains on WMT 2014 sentence pairs with byte-pair-encoded inputs averaging well under 100 tokens. The architectural complexity claim — O(n^2 d) per layer — is benign in this regime and the paper never enters the regime where it bites. A reader who took Table 1 at face value in 2017 would not predict the long-context efficiency crisis that defined 2020-2025 LLM research.
9. Note on NCCL Tuning
The Transformer is the workload that NCCL exists to optimize the gradient all-reduce for. Three properties of this paper's model affect collective selection in ways that recur across every transformer-family workload. First, gradients arrive in many small-to-medium tensors per step (per-head QKV projections at `d_k * d_model = 64 * 512 = ~32K params each
- 8 heads * 6 layers * 2 stacks = ~3M params just in attention
projections, plus FFN and embedding) — exactly the regime where NCCL's
LL / LL128 protocols outperform Simple, and where
tensor fusion across small gradients pays off. Second, the
embedding matrix is large and shared between encoder input,
decoder input, and pre-softmax projection (~37K vocab * 512 =
~19M params), creating a single high-bandwidth allreduce per step that
benefits from large
chunkSizeand the Simple protocol. Third, the encoder outputK_E, V_Eis a broadcast-pattern activation consumed by every decoder layer — under sequence/tensor parallelism this would be a recurring broadcast that benefits from Ring vs Tree depending on the participant count. The practical implication: a single allreduce configuration cannot serve both the small-tensor projection gradients and the large embedding gradient well — exactly the regime-mixing problem that motivates runtime adaptive collective tuning.
10. Analogy
The Transformer is a circular conference table with eight
simultaneous translators. Picture a meeting where every
attendee (token) needs to hear what every other attendee is saying
before forming their next sentence. An RNN seats everyone at a long
lunch counter and passes a single notepad person-to-person; the last
person at the counter has to wait for the notepad to traverse
n seats and only ever heard the running summary, not the
original words. A CNN gives each person a small group of neighbors to
listen to, and only by stacking many CNN layers can distant attendees
indirectly influence each other through log_k n rounds of
telephone. The Transformer's self-attention puts everyone at a circular
table where each attendee, in one step, looks at every
other attendee simultaneously, weighs how relevant each is to their
current thought (the softmax over Q.K^T), and produces a
weighted summary of what those relevant attendees are saying (the matmul
with V). Multi-head attention adds a twist: rather than one translator
hearing everyone, eight translators each hear everyone through a
different lens — one tracking grammatical subject-verb
agreement, one tracking co-reference, one tracking semantic similarity —
and the table's secretary (the W_O projection) merges all eight
translations into the final minutes. The cost of this design is that the
table must scale quadratically (n^2) as attendees are added
— but with the secretary ensuring sub-spaces remain coherent and the
residual stream guaranteeing no one's prior input is lost, the table can
be scaled wider, deeper, or duplicated across thousands of parallel
rooms without any single participant becoming a sequential bottleneck.
Recurrent architectures were a relay race; the Transformer is a
roundtable. Once that substitution is made, the only remaining
engineering question is how big a roundtable the silicon can afford —
and the next decade of research is about exactly that.
Summary of Architectural Patterns
| Pattern (Vaswani et al., 2017) | Why it matters |
|---|---|
| Uniform attention interface used in 3 roles | Same Multi-Head block as encoder self-attn, decoder self-attn, cross-attn |
| Residual stream of constant width d_model | Sub-layer outputs are additive deltas; gradient path is depth-invariant |
| Multi-head as "parallel sub-spaces" | h=8 heads at d_k=64; total compute matches single-head; learns diverse patterns |
Scaled dot-product (/sqrt(d_k)) |
Prevents softmax saturation as d_k grows; cheap variance-correction |
| Causal mask = encoder-decoder unification | Same code path for training (parallel) and inference (sequential) |
| Sinusoidal positional encoding | Stateless; designed-in linear-offset property; extrapolates by construction |
| Bigger is monotonically better (Table 3 row C) | First evidence of the scaling-law trajectory that produced GPT-3/4 |
| O(1) max path length | The architectural target that makes long-range dependency learnable |
| 8 P100 GPUs, 3.5 days for SOTA | Modest 2017 budget; same architecture later scales to 10^4 x more compute |
| Weight tying input/output embeddings | Halves embedding params; couples vocabulary representation across roles |
| Adam beta2=0.98 + rsqrt warmup schedule | Opinionated training recipe; later inherited by GPT-family pretraining |
| Single-axis ablations only (Table 3) | Strong robustness signal — no fragile knob — but interactions not measured |
| Post-LN placement | Stable at N=6; fragile at N=96+; later replaced by pre-LN in deep models |
| Three-knob design space (h, d_model, N) | Enables independent scaling of width, depth, and head count |
| O(n^2 * d) per-layer cost | Sleeping giant; sets the agenda for the next decade of efficient-attention research |