Skip to main content

Transformers

Watch First​

Learning Objectives​

By the end of this lesson, you will be able to:

  • Explain how transformers replace recurrence with attention over tokens.
  • Derive the intuition behind scaled dot-product attention.
  • Compare encoder-only, decoder-only, and encoder-decoder transformer patterns.
  • Implement a small attention calculation and know when a transformer is the right tool.

Architecture Map​

Transformers are sequence models built around attention. Instead of processing tokens one step at a time like an RNN, a transformer lets each token compare itself with other tokens in the sequence.

That single idea unlocked models that can handle long context, train in parallel, and transfer across tasks.

Launch Rule

Use transformers when sequence context is central to the task. For small tabular problems, start with simpler models first.

Why Transformers Replaced Many RNN Workflows​

RNNs, LSTMs, and GRUs process sequences step by step:

That design has two practical limits:

  • training is harder to parallelize,
  • long-range dependencies can fade as information moves through many steps.

Transformers use attention so every token can directly inspect the rest of the context.

Self-Attention​

Self-attention turns each token embedding into three vectors:

  • Query Q: what this token is looking for,
  • Key K: what this token offers for matching,
  • Value V: the information this token contributes.

The attention formula is:

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)V

Read it as:

  1. Compare queries with keys.
  2. Scale scores by the key dimension.
  3. Convert scores into weights with softmax.
  4. Use those weights to mix the value vectors.

Attention From Scratch​

This small NumPy example computes scaled dot-product attention for three token embeddings.

import numpy as np

def softmax(x, axis=-1):
x = x - np.max(x, axis=axis, keepdims=True)
exp_x = np.exp(x)
return exp_x / exp_x.sum(axis=axis, keepdims=True)

tokens = np.array([
[1.0, 0.0, 1.0, 0.0],
[0.0, 2.0, 0.0, 2.0],
[1.0, 1.0, 1.0, 1.0],
])

rng = np.random.default_rng(42)
W_q = rng.normal(size=(4, 4))
W_k = rng.normal(size=(4, 4))
W_v = rng.normal(size=(4, 4))

Q = tokens @ W_q
K = tokens @ W_k
V = tokens @ W_v

scores = Q @ K.T / np.sqrt(K.shape[-1])
weights = softmax(scores)
contextual_tokens = weights @ V

print("attention weights")
print(np.round(weights, 3))
print("contextual embeddings")
print(np.round(contextual_tokens, 3))

The output embeddings are contextual: each token representation now includes weighted information from the other tokens.

Multi-Head Attention​

One attention head learns one kind of relationship. Multiple heads let the model learn several relationship patterns in parallel.

MultiHead(Q,K,V)=Concat(head1,…,headh)WOMultiHead(Q, K, V) = Concat(head_1, \dots, head_h)W^O

where each head is:

headi=Attention(QWiQ,KWiK,VWiV)head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)

In language, one head might focus on subject-verb agreement, another on coreference, and another on local syntax. The model learns these patterns from data.

Positional Information​

Attention alone does not know token order. Transformers add positional information to token embeddings.

Without positional information, "mentor helps learner" and "learner helps mentor" would look too similar.

Transformer Block​

A standard transformer block includes:

  • multi-head attention,
  • residual connections,
  • layer normalization,
  • feed-forward network.

The feed-forward network is applied to each token position independently after attention has mixed contextual information.

Encoder, Decoder, and Decoder-Only Patterns​

PatternAttention behaviorCommon use
Encoder-onlyBidirectional attention over inputclassification, retrieval, embeddings
Decoder-onlyCausal attention over previous tokenstext/code generation
Encoder-decoderEncoder reads input, decoder generates outputtranslation, summarization

Encoder-Only​

Encoder-only models are strong when you need a representation of a full input.

Examples:

  • classify a governance proposal,
  • embed a lesson for semantic search,
  • detect whether a support message needs escalation.

Decoder-Only​

Decoder-only models predict the next token.

P(x1,…,xT)=∏t=1TP(xt∣x<t)P(x_1, \dots, x_T) = \prod_{t=1}^{T}P(x_t \mid x_{<t})

This is the pattern behind many generative LLMs.

Encoder-Decoder​

Encoder-decoder models are useful when the output is a new sequence conditioned on an input sequence.

Examples:

  • translate text,
  • summarize long notes,
  • convert a rough project brief into structured documentation.

Minimal Transformers Library Example​

Install dependencies:

pip install transformers torch

Run a small embedding extraction:

import torch
from transformers import AutoModel, AutoTokenizer

model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

text = "Flow Research builders learn machine learning in public."
inputs = tokenizer(text, return_tensors="pt")

with torch.no_grad():
outputs = model(**inputs)

last_hidden_state = outputs.last_hidden_state
cls_embedding = last_hidden_state[:, 0, :]

print(last_hidden_state.shape)
print(cls_embedding.shape)

The last_hidden_state contains contextual embeddings for each token.

When Transformers Are Worth It​

Use a transformer when:

  • order and context matter,
  • long-range relationships matter,
  • text, code, logs, or sequences are central,
  • transfer learning from a pretrained model saves data and time.

Be cautious when:

  • the dataset is small and tabular,
  • latency or cost is tight,
  • interpretability is more important than raw capability,
  • a simpler model already meets the product need.

Practical Exercises​

Exercise 1: Inspect Attention​

Run the NumPy attention example and change the token vectors. Observe how the attention weights change.

Exercise 2: Compare Model Families​

For three tasks, choose encoder-only, decoder-only, encoder-decoder, or no transformer:

  • proposal classification,
  • learner-support chatbot,
  • weekly metric forecast.

Exercise 3: Extract Embeddings​

Use the Transformers library example and compare embeddings for two similar sentences.

Self-Assessment​

Rate yourself from 1 to 5:

  • I can explain self-attention without mysticism.
  • I can read the scaled dot-product attention formula.
  • I can distinguish encoder-only, decoder-only, and encoder-decoder designs.
  • I can decide when a transformer is worth the complexity.

Further Reading​

Next Steps​

Next, study graph neural networks. Transformers model dense relationships inside sequences; GNNs model explicit relationships between entities.