Strided Attention: Lý thuyết và Cơ cấu Hoạt động

0 0 0

Người đăng: Trần Minh

Theo Viblo Asia

Tổng quan về Strided Attention

Strided Attention là một cơ chế chú ý thưa (sparse attention) được đề xuất trong bài báo "Generating Long Sequences with Sparse Transformers" (Child et al., 2019). Nó được thiết kế để giảm độ phức tạp tính toán của cơ chế chú ý đầy đủ (full attention) trong Transformer, đặc biệt khi xử lý các chuỗi dài.

Ý tưởng chính:

Thay vì mỗi token chú ý đến tất cả các token khác (độ phức tạp 𝑂(𝑛2𝑛^2)), Strided Attention giới hạn tập hợp chú ý (AiA_i) của mỗi token 𝑖 chỉ bao gồm một số token được chọn theo hai thành phần:

Chú ý cục bộ (Local Attention): Chú ý đến các token gần 𝑖𝑖 (trong một cửa sổ cục bộ).

Chú ý bước nhảy (Strided Attention): Chú ý đến các token cách xa 𝑖 với khoảng cách là bội của một stride 𝑙𝑙.

Độ phức tạp giảm xuống còn 𝑂𝑂(nnn√n) (với 𝑙n𝑙 ≈ √n)

Cơ chế hoạt động của Strided Attention

Tự chú ý đầy đủ (Full Self-Attention)

Để hiểu Strided Attention, trước tiên cần nắm cơ chế tự chú ý đầy đủ trong Transformer:

Trong tự chú ý, mỗi vị trí đầu ra (output position) chú ý đến tất cả các vị trí đầu vào (input positions) trong chuỗi.

Ma trận chú ý (attention matrix) có kích thước n×nn×n, trong đó mỗi phần tử (𝑖,j)(𝑖,j) biểu thị mức độ chú ý của vị trí đầu ra ii đến vị trí đầu vào jj.

Chú ý thưa (Sparse Attention)

Chú ý thưa giảm độ phức tạp bằng cách chỉ cho phép mỗi vị trí đầu ra chú ý đến một tập hợp con các vị trí đầu vào, thay vì toàn bộ chuỗi. Strided Attention là một dạng chú ý thưa có cấu trúc (structured), nghĩa là các vị trí được chọn theo một mẫu cố định, không phụ thuộc vào nội dung của chuỗi (content-agnostic).

Các thành phần chính của Strided Attention

Strided Attention chia các kết nối chú ý thành hai tập hợp chính cho mỗi vị trí đầu ra ii:

Tập hợp cục bộ (local attention):

Chú ý đến các vị trí ngay trước ii trong một cửa sổ có độ dài cố định ll.

Ý nghĩa:

Chú ý cục bộ giúp token ii học các mối quan hệ ngắn hạn với các token gần nó, ví dụ: các đặc trưng không gian cục bộ trong hình ảnh (như cạnh, màu sắc) hoặc ngữ cảnh gần trong văn bản.

Tập hợp bước nhảy (strided attention):

Chú ý đến các vị trí cách ii một khoảng là bội số của ll (stride).

Ý nghĩa:

Chú ý bước nhảy cho phép token ii học các mối quan hệ dài hạn, kết nối với các token cách xa nhưng có vị trí tương ứng với stride ll.

Trong dữ liệu không gian (2D, 3D), điều này giúp học các mối quan hệ dọc theo các trục (hàng, cột, chiều sâu).

Tổng hợp tập hợp chú ý (𝐴𝑖𝐴_𝑖)

Ý nghĩa:

Kết hợp cả ngữ cảnh cục bộ và dài hạn, Strided Attention cho phép token ii học các mối quan hệ không gian hiệu quả, phù hợp với dữ liệu có cấu trúc (1D, 2D, 3D).

Ví dụ:

Văn bản có độ dài nn=16, ll=4 tại ii=7

Bước 1: Local attention

t=max(0,74)=3=>Ait = max(0, 7 - 4) = 3 => A_i = {3,4,5,6,7}

Bước 1: Local attention

(7j)(7-j) modmod 4=04= 0 =>Ai=> A_i = {3, 7, 11, 15}

Bước 3: Tổng hợp

AiA_i = {3, 4, 5, 6, 7, 11, 15}

Ví dụ:

Hình ảnh có nn=36, ll=4 tại ii=8 ( pixel(1,2)pixel(1,2)index=yW+x=16+2=8)index = y*W + x = 1*6 + 2 = 8)ii = 17 ( pixel(2,5)pixel(2,5)index=yW+x=26+5=17)index = y*W + x = 2*6 + 5 = 17)

Tại i=8i = 8

Bước 1: Local attention

t=max(0,84)=3=>Ait = max(0, 8 - 4) = 3 => A_i = {4,5,6,7, 8}

Ánh xạ ngược:

Công thức : 𝑦𝑦 = 𝑗𝑗 divdiv 66, 𝑥=𝑗𝑥 = 𝑗 modmod 66

=>=> toạ độ: (0,4),(0,5),(1,0),(1,1),(1,2)(0,4),(0,5),(1,0),(1,1),(1,2)

Bước 2: Local attention

j=ikl=8k4j = i- k * l = 8 - k * 4

tìm kk sao cho 08k4<360 ≤ 8 - k*4 < 36

=> Các giá trị của kk: {2,1,0,1,2,3,4,5,6,7-2, -1, 0, 1, 2, 3, 4, 5, 6, 7}

=> Các giá trị của jj: {0,4,8,12,16,20,24,28,320, 4, 8, 12, 16, 20, 24, 28, 32}

=> Toạ độ tương ứng: (0,0),(0,4),(1,2),(2,0),(2,4),(3,2),(4,0),(4,4),(5,2)(0,0),(0,4),(1,2),(2,0),(2,4),(3,2),(4,0),(4,4),(5,2)

Bước 3: Tổng hợp

AiA_i = {0,4,5,6,7,8,12,16,20,24,28,320,4,5,6,7,8,12,16,20,24,28,32}

Toạ độ tổng hợp: (0,0),(0,4),(0,5),(1,0),(1,1),(1,2),(2,0),(2,4),(3,2),(4,0),(4,4),(5,2)(0,0),(0,4),(0,5),(1,0),(1,1),(1,2),(2,0),(2,4),(3,2),(4,0),(4,4),(5,2)

Tương tự với i=17i = 17

=> ta thu được kết quả tổng hợp AiA_i = {1,5,9,13,14,15,16,17,21,25,29,331,5,9,13,14,15,16,17,21,25,29,33}

Toạ độ tổng hợp: (0,1),(0,5),(1,3),(2,1),(2,2),(2,3),(2,4),(2,5),(3,3),(4,1),(4,5),(5,3)(0,1),(0,5),(1,3),(2,1),(2,2),(2,3),(2,4),(2,5),(3,3),(4,1),(4,5),(5,3)

Ý nghĩa:

Strided Attention tận dụng cấu trúc không gian của lưới 2D, cho phép học các đặc trưng cục bộ (như cạnh, màu sắc) và các mẫu dài hạn (như đường thẳng dọc).

Việc chọn hai điểm 𝑖=8𝑖=8𝑖=17𝑖=17 thể hiện sự đa dạng trong không gian 2D:

𝑖=8𝑖=8 gần mép trên, học các mối quan hệ ở khu vực phía trên và trung tâm.

𝑖=17𝑖=17 ở giữa lưới, học các mối quan hệ ngang và dọc ở khu vực mép phải.

Ưu điểm của Strided Attention

Hiệu quả tính toán cao Trong cơ chế chú ý đầy đủ (Full Attention), độ phức tạp là O(n2)O(n^2), không khả thi với chuỗi rất dài.

Strided Attention chỉ chú ý đến một số vị trí được chọn theo bước nhảy (stride), giảm độ phức tạp xuống khoảng O(nn)O(n√n), tiết kiệm đáng kể tài nguyên tính toán.

Phù hợp cho các bài toán với chuỗi dài hoặc dữ liệu lớn như văn bản, hình ảnh kích thước lớn hoặc dữ liệu 3D.

Kết hợp hiệu quả ngữ cảnh cục bộ và dài hạn Kết hợp hai loại ngữ cảnh:

Ngữ cảnh cục bộ: học các đặc trưng ngắn hạn như biên, họa tiết,...

Ngữ cảnh dài hạn: học các mối liên hệ xa, phát hiện mẫu lặp lại hoặc cấu trúc toàn cục.

Giúp mô hình cân bằng giữa việc hiểu chi tiết nhỏ và thông tin tổng thể.

Tận dụng cấu trúc không gian

Khi áp dụng cho dữ liệu 2D/3D (hình ảnh, voxel), Strided Attention vẫn giữ được khả năng học các mối quan hệ không gian (theo hàng, cột, trục), ngay cả sau khi dữ liệu được tuyến tính hóa.

Hữu ích trong việc phát hiện các mẫu không gian có cấu trúc, như đường thẳng, cạnh, hoặc khối.

Khả năng mở rộng cho dữ liệu đa chiều

Có thể áp dụng linh hoạt cho:

Chuỗi 1D (văn bản)

Dữ liệu 2D (hình ảnh)

Dữ liệu 3D (thể tích)

Chỉ cần tuyến tính hóa dữ liệu đầu vào, không yêu cầu thay đổi lớn về kiến trúc.

Nhược điểm của Strided Attention

Mất mát thông tin từ các token không được chú ý

Chỉ một phần nhỏ các token được chọn vào tập chú ý AiA_i, các token còn lại bị bỏ qua.

Dễ dẫn đến việc bỏ lỡ các mối quan hệ quan trọng, đặc biệt khi yêu cầu nắm bắt ngữ cảnh toàn cục.

Kém hiệu quả hơn so với chú ý đầy đủ trong các bài toán đòi hỏi tổng hợp thông tin từ toàn bộ chuỗi đầu vào.

Phụ thuộc vào tham số stride ll

Việc chọn giá trị ll không hợp lý có thể ảnh hưởng tiêu cực đến hiệu quả của mô hình:

ll quá nhỏ → tập chú ý cục bộ nhỏ, giảm khả năng nắm bắt ngữ cảnh gần.

ll quá lớn → giảm khả năng nắm bắt ngữ cảnh dài hạn, hoặc tăng chi phí tính toán.

Cần thử nghiệm và điều chỉnh tham số ll

ll phù hợp với từng loại dữ liệu và bài toán → tốn thời gian và tài nguyên.

Hạn chế trong việc học các mối quan hệ phức tạp

Cơ chế stride cố định khiến mô hình chỉ học được các quan hệ tuyến tính theo hướng cụ thể (hàng, cột, trục).

Không linh hoạt với các mẫu không gian phức tạp, chẳng hạn như cấu trúc chéo, cong, hoặc không thẳng hàng.

Giảm hiệu quả trong các bài toán yêu cầu phát hiện quan hệ phi tuyến tính trong không gian dữ liệu.

Khó áp dụng cho dữ liệu không tuần hoàn

Giả định các token cách đều có mối quan hệ ý nghĩa, phù hợp với dữ liệu có cấu trúc đều đặn (như ảnh).

Không phù hợp với dữ liệu không tuần hoàn như văn bản, nơi mối quan hệ giữa các token không phụ thuộc vào khoảng cách đều đặn.

Dễ dẫn đến suy giảm hiệu quả trong các bài toán NLP hoặc dữ liệu phi cấu trúc.

Tham khảo

Strided Attention

Strided Attention Explained

Bình luận

Bài viết tương tự

- vừa được xem lúc

Các thuật toán cơ bản trong AI - Phân biệt Best First Search và Uniform Cost Search (UCS)

Nếu bạn từng đọc các thuật toán trong AI (Artificial Intelligence - Trí tuệ nhân tạo), rất có thể bạn từng nghe qua về các thuật toán tìm kiếm cơ bản: UCS (thuộc chiến lược tìm kiếm mù) và Best First Search (thuộc chiến lược tìm kiếm kinh nghiệm). Khác nhau rõ từ khâu phân loại rồi, thế nhưng hai th

0 0 171

- vừa được xem lúc

Con đường AI của tôi

Gần đây, khá nhiều bạn nhắn tin hỏi mình những câu hỏi đại loại như: có nên học AI, bắt đầu học AI như nào, làm sao tự học cho đúng, cho nhanh, học không bị nản, lộ trình học AI như nào... Sau nhiều lần trả lời, mình nghĩ rằng nên viết hẳn một bài để trả lời chi tiết hơn, cũng như để các bạn sau này

0 0 160

- vừa được xem lúc

[ChatterBot] Thư viện chatbot hay ho dành cho Python| phần 3

Trong bài trước mình đã trình bày về Training data cho chatbot và tiền xử lý dữ liệu. Trong phần này sẽ trình bày với các bạn về logic adapter.

0 0 63

- vừa được xem lúc

[Deep Learning] Kỹ thuật Dropout (Bỏ học) trong Deep Learning

. Trong bài viết này, mình xin phép giới thiệu về Dropout (Bỏ học) trong mạng Neural, sau đó là mình sẽ có 1 số đoạn code để xem Dropout ảnh hưởng thế nào đến hiệu suất của mạng Neural. 1.1. Dropout trong mạng Neural là gì.

0 0 72

- vừa được xem lúc

Kỹ thuật Dropout (Bỏ học) trong Deep Learning

Trong bài viết này, mình xin phép giới thiệu về Dropout (Bỏ học) trong mạng Neural, sau đó là mình sẽ có 1 số đoạn code để xem Dropout ảnh hưởng thế nào đến hiệu suất của mạng Neural. 1.

0 1 85

- vừa được xem lúc

Blockchain dưới con mắt làng Vũ Đại 4.0

Mở bài. Hey nhô các bạn, lại là mình đây .

0 0 53