[AI Blog #30] Kiến Trúc Transformer & Cơ Chế Self-Attention Chuyên Sâu: Giải Mã Toán Học Scaled Dot-Product Attention, Grouped-Query Attention (GQA), RoPE & Bí Quyết Tối Ưu Hóa FlashAttention
![[AI Blog #30] Kiến Trúc Transformer & Cơ Chế Self-Attention Chuyên Sâu: Giải Mã Toán Học Scaled Dot-Product Attention, Grouped-Query Attention (GQA), RoPE & Bí Quyết Tối Ưu Hóa FlashAttention](/uploads/ai-images/cover-kien-truc-transformer-self-attention.png)
1. Bối cảnh thực tế (Context & Problem Statement)
Trước năm 2017, các kiến trúc xử lý ngôn ngữ tự nhiên (NLP) thống trị là RNN (Recurrent Neural Networks) và LSTM (Long Short-Term Memory). Tuy nhiên, RNN/LSTM gặp phải hai "nút thắt cổ chai" chí mạng:
- Xử lý tuần tự (Sequential Bottleneck): Để tính toán từ thứ , mô hình bắt buộc phải chờ tính xong từ thứ . Điều này khiến RNN hoàn toàn không thể tận dụng khả năng tính toán song song khổng lồ của GPU.
- Quên ngữ cảnh dài (Long-term Dependency Loss): Thông tin bị nén qua một vector ẩn duy nhất qua nhiều bước, khiến mô hình bị mất dần ngữ cảnh khi độ dài văn bản vượt quá vài trăm từ.
Năm 2017, nhóm nghiên cứu tại Google công bố bài báo lịch sử "Attention Is All You Need", khai sinh ra kiến trúc Transformer. Bằng cách loại bỏ hoàn toàn cấu trúc hồi quy và thay thế bằng cơ chế Self-Attention (Tự chú ý), Transformer cho phép:
- Tính toán song song toàn bộ văn bản trong 1 chu kỳ trên GPU.
- Mọi từ trong câu có thể tương tác trực tiếp với nhau bất kể khoảng cách địa lý ( path length).
2. Các Khái Niệm & Cơ Chế Cốt Lõi
2.1. Bản Chất Toán Học Của Scaled Dot-Product Attention
Mỗi từ (Token) sau khi đi qua lớp Embedding sẽ được nhân với 3 ma trận trọng số học được () để tạo thành 3 vector:
- Query ( - Câu hỏi): "Tôi đang tìm kiếm thông tin gì?"
- Key ( - Từ khóa): "Tôi chứa đựng thông tin gì để người khác tìm?"
- Value ( - Giá trị thực): "Nội dung thông tin thực sự của tôi là gì?"
Query (Q) Key (K)
\ /
\ /
[ Q * K^T ] (Tính độ tương đồng Dot-Product giữa mọi cặp từ)
|
v
[ / sqrt(d_k) ] (Chia cho căn bậc hai chiều không gian để ổn định phương sai)
|
v
[ Softmax ] (Chuyển đổi thành phân phối xác suất trọng số chú ý 0 - 1)
|
v
[ * Value (V) ] (Tính tổng có trọng số của các vector Value)
|
v
[ Attention Output ]
- Tại sao bắt buộc phải chia cho ?
- Giả sử các phần tử của và là các biến ngẫu nhiên độc lập có kỳ vọng bằng và phương sai bằng .
- Tích vô hướng sẽ có kỳ vọng bằng nhưng phương sai tăng vọt lên bằng !
- Khi số chiều lớn (ví dụ ), giá trị tích vô hướng sẽ rất lớn Đẩy hàm Softmax vào vùng bão hòa cực đoan (Saturation Zone), nơi đạo hàm tiến sát về Gây tê liệt hoàn toàn quá trình Backpropagation (Vanishing Gradient)!
- Phép chia cho đưa phương sai trở lại đúng bằng , giúp dòng chảy gradient luôn khỏe mạnh.
2.2. Tiến Hóa Của Các Cấu Trúc Attention (MHA MQA GQA)
Trong quá trình tạo văn bản (Autoregressive Generation), mô hình phải lưu lại toàn bộ các vector Key và Value của các từ trước đó vào bộ nhớ VRAM (KV Cache) để không phải tính lại.
- Multi-Head Attention (MHA - Chuẩn ban đầu): Mỗi Head có bộ riêng biệt (ví dụ 32 Query Heads đi kèm 32 Key Heads và 32 Value Heads).
Dung lượng KV Cache khổng lồ, làm tràn VRAM GPU khi tăng Context Length ( tokens). - Multi-Query Attention (MQA): Tất cả các Query Heads dùng chung duy nhất 1 Key Head và 1 Value Head.
Tiết kiệm dung lượng KV Cache nhưng làm suy giảm chất lượng mô hình. - Grouped-Query Attention (GQA - Tiêu chuẩn vàng của LLaMA 3, Mistral): Chia 32 Query Heads thành các nhóm (ví dụ 8 nhóm), mỗi nhóm gồm 4 Query Heads dùng chung 1 cặp Key-Value Head.
Đạt tốc độ suy luận siêu nhanh và tiết kiệm bộ nhớ như MQA nhưng giữ nguyên độ chính xác cao tương đương MHA!
MHA (32 Q, 32 K, 32 V) GQA (32 Q, 8 K, 8 V) MQA (32 Q, 1 K, 1 V)
[Q Q Q Q] ... [Q Q Q Q] [Q Q Q Q] ... [Q Q Q Q] [Q Q Q Q ... Q Q Q Q]
| | | | | | | | \ | / / \ | / / \ \ \ \ / / / /
[K K K K] ... [K K K K] [K] [K] [K]
[V V V V] ... [V V V V] [V] [V] [V]
(Tốn VRAM nhất) (Cân bằng hoàn hảo) (Chất lượng giảm nhẹ)
2.3. Mã Hóa Vị Trí Hiện Đại: Rotary Position Embedding (RoPE)
Khác với mạng CNN hay RNN, phép tính Self-Attention hoàn toàn bất biến theo vị trí (Permutation Invariant - hoán đổi vị trí các từ thì kết quả vẫn như nhau). Do đó, ta bắt buộc phải đưa thông tin thứ tự vào mô hình.
- Absolute Sinusoidal (Transformer gốc): Cộng trực tiếp vector vị trí vào vector từ: .
- Rotary Position Embedding (RoPE - Chuẩn mực hiện đại):
- Thay vì phép cộng, RoPE xoay vector và trong không gian 2D bằng một ma trận trực giao (Rotation Matrix) theo góc tỷ lệ thuận với vị trí của từ ():
- Tích vô hướng sau khi xoay tự động thỏa mãn tính chất tương đối:
- Mô hình chỉ quan tâm đến khoảng cách tương đối giữa 2 từ, cho phép mở rộng cửa sổ ngữ cảnh (Context Window Extension) lên tokens cực kỳ dễ dàng thông qua RoPE Scaling (YaRN, NTK-aware).
2.4. Bí Quyết Tăng Tốc Tầng Phần Cứng: FlashAttention (Triệt Tiêu HBM Bottleneck)
- Vấn đề của Attention chuẩn: Việc tính toán () và đòi hỏi liên tục ghi và đọc các ma trận khổng lồ ra bộ nhớ chính của GPU (High Bandwidth Memory - HBM). Băng thông truyền dữ liệu giữa HBM và chip tính toán (SRAM) trở thành điểm nghẽn chính (Memory-Bound).
- FlashAttention (Dao et al.):
- Áp dụng kỹ thuật Tiling (Chia nhỏ ma trận) để nạp vừa vặn các khối dữ liệu vào bộ nhớ đệm siêu tốc SRAM bên trong GPU.
- Tận dụng thuật toán Online Softmax để tính toán kết quả Attention từng phần mà không bao giờ phải lưu trữ ma trận khổng lồ ra HBM đắt đỏ.
- Tăng tốc độ huấn luyện và giảm độ phức tạp bộ nhớ từ xuống !
3. Các Bảng Markdown So Sánh Chi Tiết
📊 Bảng 1: So Sánh 3 Nhánh Kiến Trúc Transformer: Encoder-Only vs. Decoder-Only vs. Encoder-Decoder
| Tiêu chí | Encoder-Only (BERT, RoBERTa) | Decoder-Only (GPT-4, LLaMA 3, Mistral) | Encoder-Decoder (T5, BART) |
|---|---|---|---|
| Cơ chế Attention | Bidirectional Self-Attention (Nhìn thấy cả từ trước và sau) | Causal Masked Self-Attention (Chỉ nhìn thấy các từ quá khứ) | Encoder: 2 chiều; Decoder: 1 chiều + Cross-Attention |
| Mục tiêu huấn luyện | Masked Language Modeling (Điền từ vào chỗ trống [MASK]) | Next-Token Prediction (Dự đoán từ tiếp theo) | Sequence-to-Sequence Reconstruction (Phục hồi câu bị xáo trộn) |
| Thế mạnh vượt trội | Phân loại văn bản, Trích xuất thực thể (NER), Semantic Search | Tự do sinh văn bản, Chatbot, Lập luận logic, Code Generation | Dịch thuật (Translation), Tóm tắt văn bản (Summarization) |
| Vị thế hiện nay | Làm Embedding Models, RAG Bi-encoders | Thống trị các mô hình Generative AI & Foundation LLMs | Dùng trong các bài toán Seq2Seq chuyên biệt |
📊 Bảng 2: So Sánh Các Biến Thể Attention: MHA vs. MQA vs. GQA
| Tiêu chí | Multi-Head Attention (MHA) | Multi-Query Attention (MQA) | Grouped-Query Attention (GQA) |
|---|---|---|---|
| Số lượng Key/Value Heads | Bằng số Query Heads () | Duy nhất 1 Head () | Nhóm nhỏ () |
| Dung lượng KV Cache | (Chuẩn gốc) | Giảm tới (Siêu nhẹ) | Giảm |
| Tốc độ sinh Token (Inference) | Chậm khi Context dài | Cực nhanh | Rất nhanh (Tương đương MQA) |
| Khả năng duy trì độ chính xác | Tối đa | Có thể bị sụt giảm trên bài toán khó | Gần như tương đương so với MHA |
| Mô hình tiêu biểu | GPT-3, Transformer 2017, BERT | Falcon-7B, StarCoder | LLaMA 2/3 (70B), Mistral-7B, Mixtral 8x7B, Gemma |
📊 Bảng 3: So Sánh Các Phương Pháp Mã Hóa Vị Trí (Positional Encodings)
| Phương pháp | Cơ chế thực hiện | Khả năng mở rộng Context (Extrapolation) | Chi phí tính toán | Mô hình áp dụng |
|---|---|---|---|---|
| Absolute Sinusoidal | Cộng hàm cố định vào Input Embedding | Rất kém (Không hiểu được vị trí vượt quá lúc Train) | Transformer gốc (2017) | |
| Learned Positional | Học vector vị trí như tham số mô hình | Kém (Cố định độ dài tối đa) | BERT, GPT-2 | |
| ALiBi (Linear Biases) | Trừ trực tiếp một giá trị phạt tuyến tính vào ma trận Attention | Xuất sắc (Huấn luyện , suy luận ) | MPT-7B, BLOOM | |
| RoPE (Rotary) | Xoay vector trong không gian 2D theo góc | Tối ưu nhất khi kết hợp Scaling | Rất nhẹ (Chỉ tốn phép nhân vector) | LLaMA 1/2/3, Mistral, Qwen, DeepSeek |
4. Best Practices & Kỹ Thuật Tối Ưu Hóa LLM Serving (Pro-Tips)
💡 Khắc phục phân mảnh bộ nhớ VRAM với PagedAttention (vLLM Engine)
- Vấn đề: Trong quá trình sinh từ, độ dài câu trả lời của mỗi user là không biết trước. Cơ chế cấp phát bộ nhớ truyền thống buộc phải dành sẵn các khối VRAM liền kề liên tục cho độ dài tối đa (ví dụ tokens) Gây lãng phí và phân mảnh tới VRAM GPU!
- Giải pháp PagedAttention (Ý tưởng từ Virtual Memory của OS):
- Chia nhỏ KV Cache thành các Trang bộ nhớ (Memory Pages) có kích thước cố định (ví dụ 16 tokens/page).
- Các trang này được lưu rải rác không cần liền kề trong VRAM và được quản lý qua một Bảng ánh xạ trang (Page Table).
- Tăng số lượng request xử lý đồng thời (Throughput) lên gấp trên cùng một GPU!
💡 Chiến lược Kích hoạt Mạng nơ-ron: Thay thế ReLU bằng SwiGLU
Các mô hình LLM hiện đại đều thay thế Feed-Forward Network (FFN) truyền thống bằng SwiGLU (Swish Gated Linear Unit):
- Phép nhân có cổng (Gated mechanism) cho phép mô hình kiểm soát lượng thông tin được truyền qua một cách mềm dẻo, giúp tăng đáng kể năng lực suy luận logic mà không làm tăng quá nhiều tham số.
5. Góc Ôn Luyện Phỏng Vấn (Interview Corner)
❓ Câu hỏi 1: Tại sao trong công thức Scaled Dot-Product Attention, chúng ta bắt buộc phải chia cho ? Nếu bỏ qua hệ số này, điều gì sẽ xảy ra với quá trình huấn luyện mô hình khi kích thước hidden dimension () tăng lớn?
- Gợi ý trả lời:
- Bản chất xác suất:
- Giả sử các thành phần của vector Query và Key là các biến ngẫu nhiên độc lập có trung bình bằng và phương sai bằng .
- Tích vô hướng là tổng của biến ngẫu nhiên độc lập. Theo tính chất phương sai: .
- Khi số chiều lớn (ví dụ hoặc ), độ lớn của tích vô hướng sẽ tăng rất mạnh, khiến độ lệch chuẩn của nó là .
- Hậu quả nếu không chia cho :
- Các giá trị đầu vào của hàm Softmax sẽ có sự chênh lệch cực lớn (ví dụ một giá trị đạt trong khi các giá trị khác chỉ quanh ).
- Hàm Softmax khi nhận các giá trị quá lớn sẽ rơi vào vùng bão hòa cực đoan (Saturation): Giá trị xác suất lớn nhất tiến sát về , trong khi tất cả các giá trị khác tiến về .
- Tại vùng bão hòa, đạo hàm của Softmax xấp xỉ bằng () Gây ra hiện tượng Biến mất đạo hàm (Vanishing Gradient), khiến các tầng nơ-ron phía trước ngừng học hoàn toàn.
- Kết luận: Chia cho giúp kéo phương sai của tích vô hướng trở về , giữ cho hàm Softmax luôn nằm ở vùng có độ dốc gradient tốt nhất.
- Bản chất xác suất:
❓ Câu hỏi 2: So sánh Multi-Head Attention (MHA) và Grouped-Query Attention (GQA). Tại sao các kiến trúc LLM mã nguồn mở hàng đầu hiện nay (như LLaMA 3, Mistral) đều chuyển sang sử dụng GQA thay vì MHA truyền thống?
- Gợi ý trả lời:
- Sự khác biệt cấu trúc:
- Trong MHA, nếu mô hình có Query Heads thì cũng bắt buộc phải có Key Heads và Value Heads độc lập.
- Trong GQA, Query Heads được chia thành nhóm, mỗi nhóm gồm Query Heads chia sẻ dùng chung duy nhất Key Head và Value Head Tổng cộng chỉ cần Key Heads và Value Heads.
- Lý do chuyển đổi sang GQA:
- Tiết kiệm dung lượng KV Cache: Trong giai đoạn tạo văn bản (Inference), toàn bộ các vector của các từ trước đó phải được giữ lại trong VRAM GPU. Giảm từ 32 xuống 8 Heads giúp giải phóng phần lớn VRAM.
- Mở rộng Context Window khổng lồ: Nhờ dung lượng KV Cache nhỏ hơn nhiều, mô hình có thể mở rộng độ dài ngữ cảnh từ lên tokens mà không bị tràn bộ nhớ GPU.
- Tăng thông lượng (Throughput) suy luận: Giảm lượng dữ liệu cần nạp từ HBM vào chip tính toán, giúp GPU xử lý được nhiều luồng người dùng đồng thời hơn gấp trong khi chất lượng mô hình gần như không suy giảm so với MHA.
- Sự khác biệt cấu trúc:
❓ Câu hỏi 3: Rotary Position Embedding (RoPE) hoạt động như thế nào? Tại sao RoPE lại vượt trội hơn hẳn Absolute Positional Embedding truyền thống trong việc mở rộng độ dài ngữ cảnh (Context Window Extension)?
- Gợi ý trả lời:
- Cơ chế hoạt động:
- RoPE mã hóa vị trí bằng cách xoay từng cặp phần tử của vector Query và Key trong mặt phẳng tọa độ 2D một góc (trong đó là chỉ số vị trí của từ, ).
- Khi tính tích vô hướng , nhờ tính chất lượng giác, kết quả trả về chỉ phụ thuộc vào khoảng cách tương đối giữa hai vị trí: .
- Lý do vượt trội khi mở rộng Context:
- Absolute Embedding: Chỉ học các vector vị trí tĩnh từ đến . Khi gặp văn bản dài hơn , mô hình hoàn toàn không có vector vị trí cho các token mới Thất bại hoàn toàn.
- RoPE: Biểu diễn vị trí dưới dạng góc quay liên tục. Để mở rộng cửa sổ ngữ cảnh (ví dụ từ lên tokens), ta chỉ cần áp dụng kỹ thuật RoPE Interpolation / YaRN (chia nhỏ góc quay theo hệ số để nén dải vị trí vừa vặn vào dải góc quay mà mô hình đã học). Mô hình chỉ cần Fine-tune nhẹ vài trăm bước là có thể hiểu được ngữ cảnh dài mượt mà.
- Cơ chế hoạt động:
6. Tóm Tắt Ghi Nhớ Nhanh (Key Takeaways)
- Self-Attention cho phép xử lý song song toàn bộ chuỗi trên GPU với công thức cốt lõi .
- Phép chia là bắt buộc để ngăn hàm Softmax rơi vào vùng bão hòa gradient.
- Grouped-Query Attention (GQA) là chuẩn mực của LLMs hiện đại (LLaMA 3, Mistral) giúp tiết kiệm bộ nhớ KV Cache.
- Rotary Position Embedding (RoPE) mã hóa vị trí tương đối thông qua phép xoay vector 2D, cho phép mở rộng Context Window lên đến hàng trăm nghìn tokens.
- FlashAttention là bước đột phá phần cứng GPU, tối ưu hóa bộ nhớ SRAM để tăng tốc độ huấn luyện và suy luận Attention lên nhiều lần.