Decoder-Only — Bỏ encoder, đơn giản hơn, scale tốt hơn
Tại sao GPT, LLaMA, Claude đều dùng kiến trúc Decoder-Only? Bỏ encoder giúp giảm bottleneck, tăng tốc inference và scale lên hàng trăm tỷ tham số.
Mọi LLM hiện đại bạn đang dùng—từ GPT-4, Claude 3.5 đến LLaMA 3 và Mistral—đều chia sẻ cùng một "bộ gene" kiến trúc: Decoder-Only. Đây là lý do tại sao chúng có thể scale lên 175B tham số mà không cần phức tạp như kiến trúc BERT-to-T5 ngày xưa, và tại sao chatbot phản hồi nhanh hơn hẳn các mô hình dịch máy cũ. Bỏ đi nửa kiến trúc encoder nghe có vẻ như là một sự "cắt giảm", nhưng thực ra nó là bước đột phá giúp information flow tự do và training hiệu quả hơn gấp bội.
Vấn đề
Transformer gốc (Vaswani et al., 2017) được thiết kế cho dịch máy với hai stack riêng biệt: Encoder đọc input câu tiếng Pháp, Decoder sinh output câu tiếng Anh. Điều này tạo ra ba vấn đề căn bản:
-
Bottleneck thông tin: Encoder phải nén toàn bộ input thành một "tờ giấy nhớ" cố định (fixed-size context vector) để truyền sang decoder. Nếu input dài 4K tokens, decoder chỉ nhìn thấy tóm tắt, không phải toàn văn.
-
Data curation đắt đỏ: Cần cặp dữ liệu song song (parallel corpus) để train—câu tiếng Pháp phải có câu tiếng Anh tương ứng. Không thể train trên văn bản thô như web crawl.
-
Cross-attention overhead: Decoder phải chạy một lớp attention riêng để "hỏi" encoder về input, tạo ra dependency bất đối xứng và tăng latency inference.
Đến năm 2018, người ta nhận ra: nếu mục tiêu là generation (sinh văn bản), tại sao không cho phép mô hình "đọc" và "viết" bằng cùng một cơ chế?
Ý tưởng cốt lõi
Insight cốt lõi: Đọc và viết là cùng một thao tác, chỉ khác nhau ở thời điểm.
Trong autoregressive generation, việc xử lý prompt (đọc) và viết tiếp nội dung (generate) là toán học giống hệt nhau—chỉ khác là prompt đã có sẵn còn generate thì chưa. Decoder-Only loại bỏ encoder hoàn toàn, dùng một stack Transformer duy nhất với causal masking (mask tam giác) để xử lý cả hai.
Hãy tưởng tượng sự khác biệt như sau:
- Encoder-Decoder: Như thuê một người đọc sách, viết tóm tắt lên giấy note, rồi đưa cho người viết khác—người này chưa bao giờ thấy sách gốc. Nếu tóm tắt thiếu chi tiết, người viết không thể cứu vãn.
- Decoder-Only: Cùng một người đọc sách và viết tiếp ngay lập tức. Họ không cần note giấy vì họ đang cầm nguyên cuốn sách trên tay (KV cache), và có thể lật lại bất kỳ trang nào đã đọc.
That's it. Bạn không cần hai bộ não. Bạn chỉ cần một bộ não có khả năng "tiếp tục câu chuyện"—dù đang đọc prompt hay đang viết câu trả lời.
Misconception phổ biến: Nhiều người nghĩ Decoder-Only là "thiếu sót" vì không có encoder. Thực ra, causal self-attention đã bao gồm khả năng encoding. Khi model xử lý prompt token thứ 100, nó nhìn thấy cả 99 token trước đó (bidirectional trong phạm vi đã sinh). Sự khác biệt duy nhất là nó không được nhìn trước vào tương lai—điều này hoàn toàn phù hợp với generation.
Tại sao nó hoạt động
Toán học đằng sau là sự đơn giản hóa triệt để:
Thay vì hai loại attention:
- Self-attention trong encoder (bidirectional)
- Cross-attention giữa encoder-decoder (query từ decoder, key/value từ encoder)
Decoder-Only chỉ cần một loại duy nhất: causal self-attention. Tất cả token (cả prompt và generated) nằm trong cùng không gian embedding. Attention score được tính bằng:
Attention(Q, K, V) = softmax(QK^T / √d_k) · VVới causal mask: mask[i][j] = -∞ nếu j > i (không nhìn tương lai).
Điều này cho phép KV cache hoạt động tối ưu: vì token đã sinh ra không bao giờ thay đổi relationship với quá khứ (causal immutability), ta có thể lưu K,V của chúng vào cache và tái sử dụng cho mọi bước generate tiếp theo. Nếu có encoder riêng, bạn phải cache cả encoder K,V lẫn decoder K,V, gấp đôi memory pressure.
Training signal dày đặc: Trong encoder-decoder, chỉ output của decoder tạo ra loss. Trong Decoder-Only, mọi token trong sequence đều là target cho next-token prediction. Với cùng lượng FLOP, Decoder-Only thu được ~2× gradient signal so với encoder-decoder, giúp học hiệu quả hơn từ cùng lượng data.
Ý nghĩa thực tế
Hiệu quả scale:
- GPT-3 (175B, 2020): Chứng minh Decoder-Only scale lên hàng trăm tỷ mà không cần đổi kiến trúc. Unified parameters ≈2× hiệu quả hơn split encoder-decoder cùng tổng size.
- Inference latency: Loại bỏ encoder forward pass riêng biệt giúp giảm 1.5–2× thời gian đến token đầu tiên (Time-To-First-Token) so với T5-style.
- Chinchilla scaling laws: Các quy luật tối ưu compute (20 tokens/parameter) được chứng minh cụ thể trên kiến trúc Decoder-Only.
Ai đang dùng: OpenAI (GPT-2/3/4), Meta (LLaMA 1/2/3), Google (Gemma), Mistral, Anthropic (Claude)—tất cả đều là Decoder-Only. Encoder-decoder chỉ còn sót lại trong dịch máy (T5, BART) và một số multimodal controllers.
Limitations:
- Bidirectional NLU: Pure encoder-only (BERT, RoBERTa) vẫn vượt trội trên classification tasks cần hiểu sâu context hai chiều, trừ khi Decoder-Only được fine-tune với prompting tricks đặc biệt.
- Attention degeneration: Khi generate dài, attention weights bị "loãng" qua prompt dài—model dần "quên" instruction gốc (Fu et al., 2023).
- Modality fusion: Không có encoder riêng để xử lý ảnh/audio, nhưng các biến thể hiện đại (GPT-4o) giải quyết bằng unified tokenization.
Đào sâu hơn
Paper gốc:
- Attention Is All You Need (Vaswani et al., 2017) — Transformer gốc, dùng encoder-decoder.
- Decoder-Only or Encoder-Decoder? (Fu et al., 2023) — Giải thích Decoder-Only như regularized encoder-decoder với information flow tự do.
Cùng cụm architecture-moe:
- MoE — 64 experts nhưng chỉ chạy 2, capacity lớn cost nhỏ.
- MoE Routing — Top-k gating và bài toán load balancing.
- Temperature & Sampling — Điều chỉnh creativity vs safety sau khi có kiến trúc.
Đọc tiếp:
- Transformer Architecture — Nền tảng attention và positional encoding (Level 0).
- New Architectures — Mamba, RetNet, và các kiến trúc thay thế attention (Level 2).
- Training Efficiency — Gradient accumulation, pipeline parallelism để train Decoder-Only khổng lồ.
External resources:
- Cameron R. Wolfe's blog — Implement Decoder-Only from scratch in PyTorch.
- Reddit discussion — Clarification rằng Decoder-Only vẫn xử lý prompt qua causal self-attention, không phải encoder riêng biệt.
MoE Routing — Top-k gating, và bài toán load balancing
Tại sao Mixtral 8x7B chỉ 'chạy' 12B parameters nhưng lại cần VRAM cho 47B? Bí mật nằm ở cơ chế Top-k gating và cuộc chiến cân bằng tải giữa các experts.
Temperature & Sampling — Nút điều chỉnh creativity vs safety
Temperature không chỉ là 'thêm random' — nó là công tắc điều khiển entropy, quyết định AI sáng tạo hay an toàn. Hiểu đúng để không rơi vào bẫy lặp vô tận hoặc hallucination.