Self-attention hoạt động thế nào?
Self-attention là trái tim của Transformer. Hiểu cách Query, Key, Value tương tác để nắm bắt ngữ cảnh trong mọi khoảng cách, từ đó tối ưu kiến trúc LLM.
Định nghĩa
Self-attention là cơ chế cho phép mỗi token trong chuỗi đầu vào tạo ra representation mới bằng cách tính toán mức độ liên quan (attention weights) với tất cả các token khác trong cùng chuỗi — bao gồm cả chính nó. Thay vì xử lý tuần tự như RNN, Self-attention xử lý song song và bắt được mối quan hệ xa bất kể khoảng cách.
Giải thích chi tiết
Bộ ba Query, Key, Value (Q, K, V)
Không phải "hiểu ngữ nghĩa" theo kiểu con người, Self-attention chỉ là phép nhân ma trận tinh vi. Với mỗi token, ta tạo ra ba vector học được từ ma trận trọng số riêng:
- Query (Q): Đại diện cho câu hỏi "Tôi đang tìm kiếm thông tin gì?"
- Key (K): Đóng vai trò nhãn định danh "Tôi chứa thông tin gì?"
- Value (V): Mang nội dung thực sự "Thông tin tôi mang là gì?"
Ba vector này sinh ra bằng cách nhân embedding đầu vào với , , — các ma trận được học trong suốt quá trình training toàn bộ mạng.
Công thức Scaled Dot-Product Attention
Attention score giữa token và được tính bằng tích vô hướng của vector Query và Key , chia cho căn bậc hai của chiều , rồi đưa qua hàm softmax:
Phép chia (scaling) là chi tiết then chốt: khi chiều không gian embedding lớn, dot-product có xu hướng sinh ra các giá trị cực lớn, đẩy softmax vào vùng gradient bằng phẳng (saturated), khiến model ngừng học. Việc scale giữ độ lệch chuẩn của điểm số ổn định, giúp gradient flow tốt hơn.
Ma trận Attention Weights
Kết quả của phép nhân là một ma trận vuông kích thước (với là số lượng token trong chuỗi). Mỗi phần tử trong ma trận này biểu thị mức độ token nên "chú ý" đến token . Sau khi áp dụng softmax theo hàng, tổng mỗi hàng bằng 1, thể hiện phân bố tỷ lệ attention của token đó dành cho toàn bộ chuỗi.
Nhân ma trận attention weights này với ma trận Value cho ra output cuối cùng: mỗi token giờ trở thành tổng có trọng số của tất cả các Value vectors trong chuỗi, trong đó trọng số chính là độ tương đồng giữa Query của token hiện tại và Key của các token xung quanh.
Tính song song và độ phức tạp tính toán
Khác biệt căn bản với LSTM buộc phải chờ đợi hidden state từ bước trước, Self-attention tính toán tất cả các cặp đồng thời trên GPU. Độ phức tạp là với là độ dài chuỗi và là chiều embedding.
Đây chính là lý do tại sao khi tăng context length từ 4K lên 128K tokens, lượng VRAM cần thiết cho attention layer tăng gấp 1024 lần (tỷ lệ với ). Ma trận phình to ra rất nhanh, buộc các kỹ sư phải dùng kỹ thuật như FlashAttention hoặc sparse attention để cắt giảm bộ nhớ.
Ví dụ thực tế
Dịch máy: Phân biệt nghĩa của "bank"
Trong câu tiếng Anh "I sat by the river bank and checked my bank account", khi xử lý token thứ năm ("bank" đầu tiên), Self-attention tính attention weight giữa Query của "bank" này với Key của tất cả token khác. Ma trận attention sẽ cho thấy trọng số cao ở vị trí "river", thấp ở "account". Nhờ đó, representation của "bank" trong output layer được điều chỉnh để mang nghĩa "bờ sông" thay vì "ngân hàng" — dù hai từ cách nhau ba token, thông tin vẫn truyền trực tiếp qua đường chéo của ma trận mà không bị phai mờ qua nhiều bước trung gian.
GPT generate text: Dự đoán từ tiếp theo dựa trên context xa
Khi GPT viết tiếp câu "Trời Hà Nội hôm nay...", Self-attention layer tính toán mối quan hệ giữa token hiện tại (thường là token cuối cùng) với toàn bộ token phía trước. Nếu trong đoạn văn đã xuất hiện từ "mưa" cách đó 50 tokens, attention weight giữa token hiện tại và token "mưa" vẫn được tính trực tiếp qua một lần nhân ma trận duy nhất. Điều này giúp mô hình đề xuất từ "ẩm" hoặc "ướt" thay vì "nắng" — khả năng mà kiến trúc RNN truyền thống khó đạt được do vanishing gradient qua 50 bước xử lý.
Phân tích tài chính: BERT hiểu "cổ đông" trong báo cáo dài
Trong đoạn văn 2000 từ về một doanh nghiệp niêm yết, có thể câu đầu nhắc đến "cổ đông lớn", câu cuối nhắc đến "quyền biểu quyết". Self-attention trong BERT cho phép token "quyền biểu quyết" tạo liên kết trực tiếp với "cổ đông" thông qua ma trận attention, bất chấp 1998 từ nằm giữa. Điều này tạo nên khả năng understanding dài hạn (long-range dependency) cho các tác vụ như trích xuất thông tin từ hợp đồng pháp lý hoặc phân tích báo cáo tài chính dài.
Ứng dụng
Sinh viên nghiên cứu Explainable AI
Khi viết luận văn về giải thích mô hình, sinh viên có thể trích xuất và visualize ma trận attention weights để chứng minh model thực sự "nhìn" vào đâu khi đưa ra quyết định. Các heatmap attention giúp phát hiện xem model có đang học đúng pattern ngôn ngữ (ví dụ: liên kết giữa đại từ và danh từ mà nó thay thế) hay chỉ overfit vào các từ khóa nhiễu xuất hiện ngẫu nhiên trong training data.
Kỹ sư Machine Learning triển khai production
Hiểu độ phức tạp giúp engineer tính toán chính xác lượng VRAM cần thiết cho các context length khác nhau. Ví dụ, khi triển khai chatbot hỗ trợ khách hàng, việc hiểu rằng tăng context từ 4K lên 32K tokens làm tăng 64 lần bộ nhớ attention sẽ giúp quyết định có nên đầu tư vào A100 80GB hay tối ưu lại chiến lược chunking tài liệu để giữ nguyên context ngắn hơn.
Doanh nghiệp lựa chọn kiến trúc LLM
Hiểu Self-attention giúp CTO ra quyết định về trade-off giữa context length và chi phí vận hành. Nếu use case yêu cầu đọc tài liệu pháp lý dài 100 trang liên tục, buộc phải chọn model hỗ trợ long-context (như Claude 3, Gemini 1.5 Pro) vì kiến trúc attention được tối ưu cho lớn, thay vì model cũ chỉ chịu được 4K tokens. Ngược lại, nếu chỉ cần trả lời câu hỏi ngắn, có thể chọn model nhỏ hơn để tiết kiệm chi phí inference.
So sánh
| Đặc điểm | Self-attention | Cross-attention (trong Decoder) | LSTM |
|---|---|---|---|
| Nguồn Query, Key, Value | Cùng một chuỗi đầu vào | Query từ decoder, Key/Value từ encoder output | Không phân biệt, chỉ có hidden state |
| Khoảng cách truy cập | Truy cập trực tiếp mọi khoảng cách | Truy cập trực tiếp toàn bộ encoder sequence | Phụ thuộc bước truyền , dễ mất thông tin xa |
| Tính song song | Hoàn toàn song song trên token | Song song trên head, tuần tự theo layer decoder | Tuần tự hoàn toàn, không song song được |
| Độ phức tạp bộ nhớ | tăng nhanh theo độ dài | với là độ dài encoder | nhưng chỉ lưu hidden state |
| Thích hợp cho | Encoding ngữ cảnh hai chiều (BERT), GPT generative | Machine Translation (seq2seq), T5 | Chuỗi ngắn, thiết bị edge có bộ nhớ hạn chế |
Self-attention không phải giải pháp vạn năng thay thế hoàn toàn các kiến trúc cũ, mà là công cụ giải quyết điểm yếu cố hữu của RNN: khả năng bắt dependency xa. Tuy nhiên, chi phí bộ nhớ tăng theo bình phương chiều dài chuỗi là trade-off nghiêm trọng mà các kỹ sư phải đánh đổi khi thiết kế hệ thống AI quy mô lớn.
Bài viết liên quan
Cùng cụm
- Transformer là gì? — Tổng quan kiến trúc encoder-decoder mà Self-attention là thành phần cốt lõi bên trong
- Attention mechanism là gì? — Khái niệm rộng hơn, so sánh giữa additive attention và dot-product attention
- Encoder vs Decoder — Sự khác biệt trong cách sử dụng Self-attention (bidirectional vs masked causal)
- GPT hoạt động ra sao? — Ứng dụng cụ thể của masked Self-attention trong kiến trúc generative chỉ có decoder
Đọc tiếp
- LLM Fundamentals — Quay lại Level 2 để củng cố hiểu biết về bản chất Large Language Model trước khi đi sâu vào toán học của Transformer
- NLP Deep Dive — Nền tảng về Tokenization và các kỹ thuật xử lý ngôn ngữ tự nhiên, giúp hiểu rõ hơn input đầu vào của Self-attention layer
Attention mechanism là gì?
Attention mechanism giúp AI tập trung vào thông tin quan trọng thay vì xử lý toàn bộ dữ liệu như nhau. Giải thích chi tiết cơ chế Query-Key-Value và mã nguồn PyTorch minh họa.
Encoder vs Decoder
Phân biệt Encoder và Decoder trong Transformer: từ cơ chế Attention hai chiều và tự hồi quy đến ứng dụng với BERT, GPT và T5. Hiểu sâu để chọn đúng kiến trúc cho bài toán NLP.