Sliding Window Attention Là Gì? Giải Thích Dễ Hiểu Cho Người Mới

Câu trả lời nhanh
Sliding Window Attention là kỹ thuật giới hạn mỗi token chỉ attend đến một cửa sổ cố định các token gần đó, thay vì toàn bộ chuỗi. Điều này giảm độ phức tạp bộ nhớ từ O(n²) xuống O(n×w), giúp model xử lý văn bản dài hơn mà vẫn giữ chất lượng.

Sliding Window Attention minh họa

Sliding Window Attention là một kỹ thuật tối ưu attention trong transformer, giúp giảm bộ nhớ và tăng tốc xử lý cho các văn bản dài mà vẫn giữ được chất lượng đầu ra. Nếu bạn từng thắc mắc tại sao các model như Mistral hay Qwen có thể xử lý hàng chục nghìn token mà không “nổ” VRAM, thì đây chính là câu trả lời.

Sliding Window Attention Là Gì?

Sliding Window Attention (SWA) là phương pháp giới hạn mỗi token chỉ chú ý (attend) đến một số token trong “cửa sổ” có kích thước cố định, thay vì nhìn toàn bộ chuỗi như attention truyền thống. Cửa sổ này trượt dọc theo chuỗi, giống như cách bạn đọc sách — từng đoạn một, không cần nhìn lại toàn bộ cuốn sách.

Ví dụ: với cửa sổ 4.096 token, token thứ 10.000 chỉ quan tâm đến token từ 5.905 đến 10.000, thay vì từ 0 đến 10.000. Điều này giảm độ phức tạp từ O(n²) xuống O(n×w), trong đó w là kích thước cửa sổ.

Tại Sao Cần Sliding Window Attention?

Attention truyền thống (full attention) có một vấn đề nghiêm trọng: khi chuỗi dài gấp đôi, bộ nhớ cần thiết tăng gấp bốn. Một văn bản 32.000 token với full attention đòi hỏi hơn 8 GB VRAM chỉ cho attention scores. Tăng lên 128.000 token? Con số đó nhảy lên 128 GB — vượt quá mọi GPU thương mại.

SWA giải quyết bài toán này bằng cách “cắt” phạm vi chú ý. Bạn chọn một kích thước cửa sổ w, và mỗi token chỉ tính attention với w token gần nhất. Bộ nhớ tăng tuyến tính theo w, không phải theo độ dài chuỗi.

Cách Hoạt Động Cụ Thể

Trong full attention, ma trận attention có kích thước n×n (n là độ dài chuỗi). Mỗi ô trong ma trận biểu thị mức độ liên quan giữa hai token. SWA tạo ra một ma trận “thưa” (sparse) — chỉ các ô trong dải chéo (diagonal band) có giá trị, phần còn lại bằng 0.

Điều này tương đương với việc áp dụng một mặt nạ (mask) lên ma trận attention. Token tại vị trí i chỉ được attend đến các token từ vị trí i-w+1 đến i. Các vị trí ngoài phạm vi này bị mask thành âm vô cực trước khi qua softmax, nên đóng góp bằng 0.

Điểm thông minh: nhờ cơ chế stacking nhiều layer, thông tin từ xa vẫn lan truyền qua chuỗi. Token ở layer 1 thấy cửa sổ w, nhưng token ở layer 2 thấy cửa sổ 2w (thông qua layer 1), và cứ thế. Với L layer, vùng ảnh hưởng lý thuyết là L×w token.

Sliding Window Attention Khác Gì So Với Full Attention?

Điểm khác biệt lớn nhất nằm ở tradeoff giữa hiệu suất và chất lượng:

Bộ nhớ: Full attention cần O(n²) VRAM. SWA chỉ cần O(n×w). Với chuỗi 32K token và cửa sổ 4K, SWA tiết kiệm khoảng 8 lần bộ nhớ.

Tốc độ: SWA nhanh hơn đáng kể, đặc biệt khi推理 (inference) trên GPU. Ma trận nhỏ hơn nghĩa là ít computation hơn, ít memory bandwidth hơn.

Chất lượng: SWA chấp nhận mất một phần thông tin dài hạn. Trong hầu hết tác vụ, sự mất mát này không đáng kể vì thông tin quan trọng thường nằm gần nhau.

Những Model Nào Đang Dùng?

Mistral 7B là model nổi tiếng đầu tiên áp dụng SWA với cửa sổ 4.096 token. Kết quả: chạy được trên GPU 8GB VRAM mà vẫn đạt chất lượng ngang ngửa các model full attention lớn hơn nhiều.

Qwen2Qwen2.5 của Alibaba cũng sử dụng SWA kết hợp với full attention theo tầng, cho phép xử lý context lên đến 128K token.

LLaMA 2 dùng full attention nhưng tích hợp SWA trong một số biến thể. Phi-2 của Microsoft cũng thử nghiệm kỹ thuật tương tự.

Khi Nào Nên Dùng Sliding Window Attention?

Theo mình, SWA phù hợp nhất trong các trường hợp sau:

Chatbot và assistant: Hầu hết cuộc hội thoại chỉ cần ngữ cảnh gần — 10-20 tin nhắn gần nhất. SWA xử lý rất tốt mà không tốn tài nguyên.

Code completion: Khi viết code, bạn cần ngữ cảnh file hiện tại, không cần toàn bộ repository. Cửa sổ 4-8K token là đủ.

Tóm tắt văn bản: Nếu văn bản chia thành các đoạn độc lập, SWA tóm tắt từng phần rồi tổng hợp lại hiệu quả hơn full attention.

Không nên dùng khi: Bạn cần phân tích phụ thuộc xuyên suốt văn bản (như so sánh đoạn đầu với đoạn cuối trong tài liệu pháp lý). Lúc đó, full attention hoặc cơ chế attention thay thế tốt hơn.

Hạn Chế Của Sliding Window Attention

SWA không phải bánh mì kẹp thịt hoàn hảo. Vấn đề chính là mất thông tin dài hạn. Nếu token ở vị trí 1 chứa thông tin quan trọng cho token ở vị trí 50.000, SWA không thể truyền trực tiếp. Thông tin phải đi qua nhiều layer trung gian, và mỗi lần truyền qua đều bị nhiễu.

Ngoài ra, việc chọn kích thước cửa sổ w là một siêu tham số quan trọng. W quá nhỏ mất thông tin. W quá lớn thì… trở lại bài toán full attention. Mistral chọn 4.096, Qwen chọn 32.768 — không có con số “đúng” duy nhất.

Tương Lai Của Sliding Window Attention

Nhiều model mới chuyển sang kết hợp SWA với các kỹ thuật khác. Grouped Query Attention (GQA) giảm bộ nhớ cho key/value cache. Flash Attention tối ưu trên phần cứng. SWA cộng hưởng tốt với cả hai — mỗi kỹ thuật giải một khía cạnh khác nhau của bài toán attention.

Xu hướng hiện tại là “hybrid attention” — dùng full attention cho một số layer đầu và SWA cho phần còn lại. Cách này giữ được khả năng nắm bắt ngữ cảnh toàn cục ở mức độ nào đó, vẫn tiết kiệm tài nguyên.

Lời Kết

Sliding Window Attention là một trong những tối ưu đơn giản mà hiệu quả nhất trong kiến trúc transformer hiện đại. Không cần thay đổi căn bản cấu trúc model, chỉ cần giới hạn phạm vi attention, và bạn có được một model chạy nhanh hơn, nhẹ hơn, mở rộng context dài hơn.

Nếu bạn đang tìm hiểu hoặc deploy LLM, hiểu SWA sẽ giúp bạn chọn model phù hợp với phần cứng và bài toán cụ thể. Đừng chỉ nhìn vào số parameter — cách model xử lý attention quan trọng không kém.

ThienLv

Mình là Thien, người tạo ra blog này. Ban ngày làm marketing, ban đêm cày tiền online và chơi với AI. Blog này là nơi mình ghi lại những gì mình thử qua — tool nào xịn, chiến thuật nào chạy được, cái gì thất bại. Mình không giỏi nhất, nhưng mình thích chia sẻ thật. Chill với một ly cafe đá là lý tưởng nhất.

Xem tất cả bài viết →

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *