- Tom Yeh (byhand.ai) đặt self-attention và cross-attention cạnh nhau trong cùng một workbook.
- Khác biệt duy nhất: nguồn của K và V.
- Score matrix của self là vuông 128×128, của cross là chữ nhật 64×128.
- Hai cơ chế, một thuật toán.
TL;DR
Prof. Tom Yeh (byhand.ai) vừa tung workbook so sánh self-attention và cross-attention cạnh nhau, cho phép bạn tự kéo từng matrix. Phát hiện cốt lõi: hai cơ chế này dùng cùng một công thức — chỉ khác duy nhất nguồn của K và V. Self-attention rút Q, K, V hết từ X. Cross-attention lấy Q từ X nhưng K và V từ một sequence E khác. Score matrix của self là vuông 128 × 128, của cross là chữ nhật 64 × 128. Hết chuyện.
Điểm mới: side-by-side workbook
Trước giờ self-attention và cross-attention thường được dạy như hai sơ đồ tách biệt — một sơ đồ trong encoder block, một sơ đồ trong decoder cross block. Workbook mới của Tom Yeh đặt cả hai trong cùng một grid Excel: cùng input X (36 × 128), cùng dimension chia sẻ (16) cho Q và K, cùng V dim (12). Bạn thấy tận mắt: code path giống hệt — projections → Kᵀ × Q → scale → softmax → V × A. Chỉ ô "K and V come from..." là khác.
Tom còn dùng vài thủ thuật toán tay để workbook chạy được không cần máy tính: thay /√3 bằng floor(/2), thay e^x bằng 3^x. Vẫn giữ đúng cơ chế — variance bóp lại, exp đơn điệu — nên softmax vẫn cộng = 1 mỗi cột.
Vì sao đáng quan tâm
"Self vs cross" là một trong những điểm dễ nhầm nhất khi đọc code transformer. Nhiều dev nhìn attn = softmax(Q @ K.T / sqrt(d)) @ V rồi đoán mò xem K thực sự đến từ đâu. Bằng cách thấy cả hai cơ chế song song, bạn đụng vào trực giác cốt lõi: cross-attention chỉ là self-attention với input source khác cho K và V. Đó cũng là lý do Stable Diffusion có thể condition image generation trên text dài bao nhiêu cũng được — cross-attention không yêu cầu số token query bằng số token key.
Những con số trong workbook
| Property | Self-Attention | Cross-Attention |
|---|---|---|
| Q source | X (36 × 128) | X (36 × 128) |
| K, V source | X | E (sequence khác) |
| Q & K shared dim (dk) | 16 | 16 |
| Score matrix S = Kᵀ × Q | vuông 128 × 128 | chữ nhật 64 × 128 |
| V dim (dv) | 12 | 12 |
| Output formula | F = V × A | F = V × A |
Ba điều quan trọng: (1) dk phải bằng nhau giữa Q và K thì dot product Kᵀ × Q mới valid — đây là constraint duy nhất giữa hai mechanism. (2) dv hoàn toàn tự do, không phụ thuộc dk, không phụ thuộc self hay cross — chọn theo dimension mà layer kế tiếp cần. (3) số token của E không cần bằng X; chỉ embedding dim phải khớp ở 16 sau khi project.
Công thức tổng quát: Attention(Q, K, V) = softmax(QKᵀ / √dk) · V với Q ∈ ℝ^(m×dk), K ∈ ℝ^(n×dk), V ∈ ℝ^(n×dv). Self-attention buộc m = n. Cross-attention cho phép m ≠ n. Toàn bộ khác biệt nằm ở một dấu "=" bị gỡ bỏ.
Đặt cạnh nhau: 7 bước, khác đúng bước 1
Pipeline cả hai mechanism:
- Project input thành Q, K, V qua W_Q, W_K, W_V
- Tính S = Kᵀ × Q (matching scores)
- Scale S bằng cách chia √dk
- Lấy e^x cho từng cell (Tom xấp xỉ bằng 3^x)
- Sum theo cột
- Chia mỗi cell cho column sum → A (probability distribution)
- F = V × A
Self và cross khác nhau duy nhất ở bước 1: nguồn của K và V. Mọi bước còn lại bit-by-bit giống nhau. Đó là lý do Sebastian Raschka tóm gọn: "set x1 = x2 và cross-attention biến thành self-attention."
Cross-attention sống ở đâu trong các model thực tế
- Translation seq2seq: decoder Q × encoder K, V — pattern gốc trong "Attention Is All You Need".
- Stable Diffusion / Latent Diffusion: image latents trong U-Net làm Q, text embeddings làm K, V. Vì cross cho phép m ≠ n nên prompt 5 từ hay 50 từ đều cắm thẳng vào được — không cần pad text về fixed length của image.
- Vision-language models: cross-attention là cây cầu giữa image patches và text tokens.
- AlphaFold, Whisper, Perceiver IO: cross-attention dùng làm modality bridge khi hai dòng dữ liệu cần fuse mà chiều dài khác nhau.
Self-attention trong khi đó là backbone của GPT, BERT, T5, ViT — bất cứ chỗ nào cần intra-sequence dependency. Encoder dùng all-to-all self-attention; decoder dùng causally-masked self-attention (set w_ij = 0 khi i < j) để không nhìn lén tương lai trong autoregressive generation.
Hạn chế & chi phí
Workbook interactive ở byhand.ai/aMisxP là gated content — Tom có 62,000+ subscriber trên Substack, một phần workbook nâng cao thuộc tier trả phí. Bài blog free Self Attention by Hand và Full-Stack Transformer đã đủ để nắm cơ chế.
Pedagogical caveats cần lưu ý:
- Xấp xỉ
floor(/2)thay/√3và3^xthaye^xsai số khá lớn — tốt cho intuition, không dùng để verify output của model thật. - Workbook là single-head, 4-token, dk nhỏ — production (BERT 12 head × 64 dim/head × 12 layer) lớn hơn vài bậc magnitude.
- Không cover multi-head, KV cache, FlashAttention, RoPE — từng cơ chế cần exercise riêng.
Tiếp theo nên học gì
Khi đã ngấm self vs cross, ba topic kế tiếp đáng chui vào:
- Multi-head attention: chạy nhiều bản (Q, K, V) song song với projection nhỏ hơn rồi concat output. Cùng một workbook, lặp 8 lần với weight matrix khác.
- Causal masking: trick zero-out tam giác trên của score matrix — biến self-attention thành autoregressive-friendly trong decoder.
- Cross-attention trong Stable Diffusion: đọc U-Net code và thấy chính xác chỗ
q = image_proj(x),k = text_proj(prompt_emb),v = text_proj(prompt_emb). Một dòng code, cả ngành text-to-image dựa vào.
Một mechanism, hai mặt đồng xu. Nắm được khác biệt duy nhất giữa self và cross, transformer architecture đột nhiên dễ đọc hơn rất nhiều.
Nguồn: Prof. Tom Yeh trên X, Self Attention by Hand, Sebastian Raschka — Self-Attention from Scratch, Wikipedia — Attention.