TROISINH
Chuyên sâuKiến trúc Transformer

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 WQW_Q, WKW_K, WVW_V — 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 iijj được tính bằng tích vô hướng của vector Query ii và Key jj, chia cho căn bậc hai của chiều dkd_k, rồi đưa qua hàm softmax:

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

Phép chia dk\sqrt{d_k} (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 QKTQK^T là một ma trận vuông kích thước n×nn \times n (với nn là số lượng token trong chuỗi). Mỗi phần tử (i,j)(i,j) trong ma trận này biểu thị mức độ token ii nên "chú ý" đến token jj. 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 Q,K,VQ, K, V đồng thời trên GPU. Độ phức tạp là O(n2d)O(n^2 \cdot d) với nn là độ dài chuỗi và dd 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 1282/42128^2 / 4^2). Ma trận n×nn \times 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 O(n2)O(n^2) 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 nn 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ểmSelf-attentionCross-attention (trong Decoder)LSTM
Nguồn Query, Key, ValueCùng một chuỗi đầu vàoQuery từ decoder, Key/Value từ encoder outputKhông phân biệt, chỉ có hidden state
Khoảng cách truy cậpTruy cập trực tiếp mọi khoảng cách O(1)O(1)Truy cập trực tiếp toàn bộ encoder sequencePhụ thuộc bước truyền O(n)O(n), dễ mất thông tin xa
Tính song songHoàn toàn song song trên tokenSong song trên head, tuần tự theo layer decoderTuần tự hoàn toàn, không song song được
Độ phức tạp bộ nhớO(n2d)O(n^2 \cdot d) tăng nhanh theo độ dàiO(nmd)O(n \cdot m \cdot d) với mm là độ dài encoderO(nd2)O(n \cdot d^2) nhưng chỉ lưu hidden state
Thích hợp choEncoding ngữ cảnh hai chiều (BERT), GPT generativeMachine Translation (seq2seq), T5Chuỗ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

On this page