Deep Learning 6 — Transformer & cơ chế attention

13 thg 7, 2026 6 lượt xem
#ai
#deep-learning
#attention
#transformer
#llm
#self-attention

Deep Learning 6 — Transformer & cơ chế attention

Nếu chỉ được chọn một kiến trúc để hiểu về AI hiện đại, thì đó là Transformer. Mọi mô hình ngôn ngữ lớn (LLM) bạn từng nghe — GPT, Claude, Gemini, Llama — đều là Transformer. Các mô hình sinh ảnh, mô hình xử lý âm thanh, thậm chí mô hình dự báo chuỗi thời gian và protein đều mượn ý tưởng cốt lõi của nó. Bài này giải thích Transformer từ trực giác đến chi tiết đủ để bạn không còn thấy nó là "hộp đen".

Đây là bài nối tiếp RNN & mô hình chuỗi. RNN đã chỉ ra một vấn đề nan giải: xử lý chuỗi tuần tự nên chậm và khó bắt phụ thuộc xa. Transformer ra đời chính là để giải quyết điều đó — và giải quyết quá tốt.

Đây là danh mục AI. Các đoạn code Python trong bài là minh hoạ để bạn hiểu hình dạng phép tính, không phải sandbox chạy được. Nếu muốn chạy thật, xem bài PyTorch.


1. Bối cảnh: "Attention is All You Need"

Năm 2017, nhóm tác giả ở Google Brain công bố bài báo "Attention is All You Need". Tiêu đề nghe như khẩu hiệu, nhưng nó mô tả chính xác đóng góp: bỏ hoàn toàn recurrence (hồi quy) và convolution, chỉ dùng cơ chế attention để xây một mô hình xử lý chuỗi.

Trước đó, để dịch máy hay xử lý ngôn ngữ, người ta dùng RNN/LSTM: đọc câu token này qua token kia, giữ một "trạng thái ẩn" mang theo ký ức. Cách này có hai nhược điểm chí mạng:

  1. Không song song hoá được. Muốn tính trạng thái ở bước t phải tính xong bước t-1. Với câu 1000 token, đó là 1000 bước nối tiếp — GPU với hàng nghìn nhân xử lý gần như ngồi chơi.
  2. Phụ thuộc xa bị mờ. Thông tin từ token đầu câu phải "đi bộ" qua hàng trăm bước trạng thái ẩn mới tới cuối câu, dễ bị pha loãng (vấn đề vanishing gradient — xem bài RNN).

Transformer lật ngược cả hai. Nó xử lý toàn bộ chuỗi cùng lúc (song song hoá triệt để trên GPU) và cho phép mỗi token nhìn thẳng tới mọi token khác trong một bước duy nhất — phụ thuộc xa không còn "đi bộ" mà "nhảy trực tiếp". Đó là lý do Transformer trở thành nền của mọi LLM ngày nay (xem series LLM).


2. Self-attention — trái tim của Transformer

Ý tưởng của self-attention (tự chú ý) có thể phát biểu bằng một câu:

Khi biểu diễn một token, hãy để nó "chú ý" tới mọi token khác trong chuỗi và thu về một tổ hợp có trọng số của thông tin từ chúng — token nào liên quan hơn thì trọng số lớn hơn.

Lấy câu "Con mèo đuổi con chuột vì nó đói". Đại từ "nó" trỏ về "con mèo" hay "con chuột"? Con người biết ngay là con mèo (vì đói mới đuổi). Self-attention cho phép biểu diễn của token "nó" tự động lấy nhiều thông tin từ token "mèo" hơn là từ "chuột", thông qua các trọng số attention học được.

Query, Key, Value

Cơ chế này dựa trên ba vai trò, mượn ẩn dụ từ hệ thống truy xuất thông tin:

  • Query (Q) — truy vấn: "Tôi (token này) đang tìm loại thông tin gì?"
  • Key (K) — khoá: "Tôi (token kia) đang chứa loại thông tin gì?"
  • Value (V) — giá trị: "Nội dung thực sự tôi sẽ đóng góp nếu được chú ý."

Mỗi token đầu vào (dạng vector embedding) được nhân với ba ma trận trọng số học được W_Q, W_K, W_V để sinh ra vector Q, K, V của riêng nó. Đây là các tham số mô hình học trong lúc huấn luyện.

Điểm attention: dot-product, scale, softmax

Với một token đang xét, ta tính độ tương thích giữa Query của nó và Key của mọi token bằng tích vô hướng (dot-product). Dot-product lớn nghĩa là hai vector "hợp nhau" — token này quan tâm token kia.

Công thức đầy đủ của scaled dot-product attention (theo đúng bài báo gốc):

Attention(Q, K, V) = softmax( Q·Kᵀ / √d_k ) · V

Đọc từng bước:

  1. Q·Kᵀ — nhân ma trận Query với chuyển vị của Key, ra một ma trận điểm số kích thước n × n (n = số token). Ô [i][j] là mức token i quan tâm token j.
  2. / √d_k — chia cho căn bậc hai của số chiều Key. Đây là bước scale. Vì sao cần? Khi d_k lớn, tích vô hướng có xu hướng ra giá trị rất lớn, đẩy softmax vào vùng bão hoà (gradient gần 0, khó học). Chia cho √d_k giữ phương sai ổn định.
  3. softmax(...) — chuẩn hoá mỗi hàng thành phân phối xác suất: các trọng số dương, cộng lại bằng 1. Đây chính là trọng số attention — "token i phân bổ sự chú ý ra sao trên các token".
  4. ... · V — dùng các trọng số đó để lấy tổ hợp có trọng số của các vector Value. Kết quả là biểu diễn mới của token, đã "hấp thụ" ngữ cảnh liên quan.

Trực giác cuối cùng: output của mỗi token là trung bình có trọng số của Value toàn chuỗi, trong đó trọng số nói lên "từ nào liên quan từ nào".

Ví dụ minh hoạ: scaled dot-product attention rút gọn

Dưới đây là bản rút gọn để thấy phép tính — chỉ vài dòng NumPy (minh hoạ):

# (minh hoạ) scaled dot-product attention, không dùng framework
import numpy as np

def softmax(x):
    e = np.exp(x - x.max(axis=-1, keepdims=True))  # trừ max cho ổn định số
    return e / e.sum(axis=-1, keepdims=True)

def attention(Q, K, V):
    d_k = K.shape[-1]
    scores = Q @ K.T / np.sqrt(d_k)   # (n, n) điểm số
    weights = softmax(scores)         # (n, n) trọng số, mỗi hàng cộng = 1
    return weights @ V, weights       # tổ hợp có trọng số của V

# 3 token, mỗi vector 4 chiều (số giả để minh hoạ)
Q = np.random.randn(3, 4)
K = np.random.randn(3, 4)
V = np.random.randn(3, 4)

out, w = attention(Q, K, V)
print("Trọng số attention (mỗi hàng cộng = 1):\n", w.round(2))
print("Output shape:", out.shape)   # (3, 4)

Toàn bộ chỉ là phép nhân ma trận và softmax — những thứ GPU làm cực nhanh và song song. Đó là bí mật hiệu năng của Transformer.


3. Multi-head attention — nhiều "đầu" nhìn nhiều quan hệ

Một cơ chế attention duy nhất chỉ học được một kiểu quan hệ giữa các token. Nhưng ngôn ngữ có nhiều tầng quan hệ song song: quan hệ ngữ pháp (chủ ngữ–động từ), quan hệ đại từ–danh từ, quan hệ ngữ nghĩa…

Multi-head attention giải quyết bằng cách chạy nhiều cơ chế attention song song, gọi là các "đầu" (head). Mỗi head có bộ W_Q, W_K, W_V riêng, nên học được một không gian con khác nhau của quan hệ:

  1. Chiếu Q, K, V xuống nhiều không gian con nhỏ hơn (ví dụ 8 head, mỗi head 64 chiều thay vì 512 chiều).
  2. Mỗi head chạy scaled dot-product attention độc lập — một head có thể chuyên "đại từ trỏ về đâu", head khác chuyên "cụm động từ".
  3. Ghép (concatenate) kết quả các head lại rồi chiếu qua một ma trận W_O để về kích thước ban đầu.

Lợi ích kép: mô hình học được nhiều loại quan hệ cùng lúc, và vì mỗi head làm việc trên không gian nhỏ hơn nên tổng chi phí tính toán không tăng đáng kể so với một head "to". Đây là một trong những chi tiết thiết kế thông minh nhất của Transformer.


4. Positional encoding — trả lại thứ tự cho attention

Có một hệ quả tinh tế: self-attention không có khái niệm thứ tự vốn dĩ. Vì nó tính tổ hợp có trọng số trên toàn tập token cùng lúc, nếu bạn xáo trộn thứ tự các token đầu vào, các trọng số vẫn tính ra tương tự — mô hình không "biết" token nào đứng trước token nào. Nhưng "Con mèo đuổi con chuột" và "Con chuột đuổi con mèo" mang nghĩa hoàn toàn khác!

Giải pháp: positional encoding — cộng vào mỗi embedding một vector mã hoá vị trí của token trong chuỗi. Bài báo gốc dùng positional encoding hình sin (sinusoidal), với các hàm sin/cos ở nhiều tần số:

PE(pos, 2i)   = sin( pos / 10000^(2i/d_model) )
PE(pos, 2i+1) = cos( pos / 10000^(2i/d_model) )

trong đó pos là vị trí token, i là chỉ số chiều. Vector vị trí này có cùng số chiều với embedding và được cộng vào embedding trước khi đưa vào lớp attention đầu tiên. Nhờ dạng sin/cos ở nhiều tần số, mô hình có thể suy ra được cả vị trí tuyệt đối lẫn khoảng cách tương đối giữa các token.

Ngày nay nhiều mô hình dùng biến thể học được hoặc positional encoding tương đối / RoPE, nhưng ý tưởng cốt lõi không đổi: phải tiêm thông tin vị trí vào, vì attention thuần tuý mù thứ tự.


5. Kiến trúc Transformer đầy đủ

Một khối (block) Transformer không chỉ có attention. Nó gồm nhiều thành phần được xếp thành một mẫu lặp lại, và xếp chồng (stack) nhiều khối để tăng chiều sâu (mô hình lớn có hàng chục tới hàng trăm khối).

Các thành phần trong một khối:

  • Multi-head attention: như mục 3, cho token trộn ngữ cảnh với nhau.
  • Feed-Forward Network (FFN): một mạng nơ-ron nhỏ (thường 2 lớp tuyến tính + hàm kích hoạt) áp riêng cho từng vị trí token. Nếu attention là bước "trộn thông tin giữa các token", thì FFN là bước "xử lý sâu thông tin của từng token".
  • Residual connection (kết nối tắt) + Layer Norm: quanh mỗi khối con, đầu vào được cộng thẳng vào đầu ra (residual) rồi chuẩn hoá (layer normalization). Chi tiết này cực kỳ quan trọng để huấn luyện mạng sâu ổn định — nó giúp gradient chảy ngược mà không tan biến. (Xem bài regularization & training về vì sao residual + normalization chống vanishing gradient.)

Ba biến thể kiến trúc

Tuỳ bài toán, người ta dùng phần nào của Transformer:

Biến thểAi dùngDùng cho việc gì
Encoder-onlyBERTHiểu văn bản: phân loại, trích xuất, embedding. Nhìn được cả hai chiều (trái + phải).
Decoder-onlyGPT, Claude, LlamaSinh văn bản: chỉ nhìn về quá khứ (masked attention), dự đoán token kế tiếp. Đây là kiến trúc của hầu hết LLM hiện đại.
Encoder-decoderT5, mô hình dịch gốcBiến chuỗi thành chuỗi: encoder đọc câu nguồn, decoder sinh câu đích. Kinh điển cho dịch máy.

Điểm mấu chốt của decoder: nó dùng masked self-attention — mỗi token chỉ được nhìn các token trước nó, không được "nhìn trộm" tương lai. Điều này khớp với nhiệm vụ dự đoán token kế tiếp và là nền của mọi mô hình sinh.


6. Vì sao Transformer thắng RNN

Gom lại những gì đã nói, ba lý do khiến Transformer thay thế RNN gần như hoàn toàn:

  1. Song song hoá. Toàn chuỗi được xử lý cùng lúc (chỉ là các phép nhân ma trận lớn), khai thác triệt để hàng nghìn nhân của GPU. RNN buộc phải tuần tự. Kết quả: huấn luyện nhanh hơn nhiều bậc, cho phép train trên tập dữ liệu khổng lồ.
  2. Bắt phụ thuộc xa tốt. Mỗi token nhìn thẳng tới mọi token khác trong một bước, không phải đi qua hàng trăm bước trạng thái ẩn. Đường đi ngắn → thông tin không bị pha loãng.
  3. Scale đẹp với dữ liệu và tham số. Đây là tính chất quyết định. Cứ tăng số tham số, tăng dữ liệu, tăng tính toán thì chất lượng tiếp tục cải thiện đều đặn (các "scaling law"). Chính khả năng scale này mở đường cho LLM.

RNN vẫn còn chỗ đứng ở các bài toán chuỗi rất dài, tài nguyên hạn chế, hoặc streaming từng bước — nhưng cho phần lớn NLP quy mô lớn, Transformer đã thắng.


7. Từ Transformer tới LLM

LLM về bản chất là một Transformer decoder rất lớn, được huấn luyện theo công thức đơn giản đến bất ngờ:

  • Pretraining: cho mô hình đọc lượng văn bản khổng lồ (sách, web, code) và học một việc duy nhất — dự đoán token kế tiếp. Không cần nhãn thủ công; văn bản tự nó là "đáp án".
  • Scale: tăng tham số, dữ liệu, tính toán lên quy mô rất lớn.

Điều kỳ diệu là ở quy mô đủ lớn, khả năng nổi bật (emergent abilities) xuất hiện: mô hình học được ngữ pháp, sự kiện, lập luận, viết code, dịch thuật — dù ta chỉ dạy nó đoán token. Sau pretraining còn có bước post-training / alignment để mô hình biết làm theo hướng dẫn và an toàn.

Toàn bộ hành trình từ kiến trúc này tới ứng dụng thực tế được trình bày kỹ trong series LLM (llm-01) và bài AI zero về LLM & prompt.


8. Ứng dụng ngoài NLP

Transformer không giới hạn ở văn bản. Ý tưởng "chia đầu vào thành các mảnh (token) rồi cho chúng chú ý lẫn nhau" áp dụng được cho mọi loại dữ liệu:

  • Vision Transformer (ViT): cắt ảnh thành các patch, coi mỗi patch như một token, rồi chạy attention. Cạnh tranh trực tiếp với CNN ở nhiều bài toán thị giác (xem bài về CNN để so sánh cách CNN dùng bộ lọc cục bộ còn ViT dùng attention toàn cục).
  • Đa phương thức (multimodal): kết hợp văn bản + ảnh + âm thanh trong cùng một mô hình, vì attention không quan tâm "token" đến từ đâu.
  • Chuỗi thời gian & khoa học: dự báo, mô hình protein (AlphaFold dùng attention), sinh học phân tử.

9. Chi phí: attention là O(n²)

Không có bữa trưa miễn phí. Bước Q·Kᵀ tạo ma trận điểm số kích thước n × n, nên chi phí tính toán và bộ nhớ tăng theo bình phương độ dài chuỗi — độ phức tạp O(n²). Gấp đôi độ dài context → gấp bốn chi phí.

Đây chính là lý do context window (số token tối đa mô hình xử lý một lượt) là một giới hạn quan trọng và tốn kém của LLM (xem chi tiết trong series LLM). Rất nhiều nghiên cứu tập trung vào việc nới giới hạn này, với các hướng cải tiến (chỉ nhắc tên): attention thưa (sparse), FlashAttention (tối ưu bộ nhớ khi tính), attention tuyến tính, và các kiến trúc state-space như Mamba. Ý tưởng chung: xấp xỉ hoặc tổ chức lại phép tính để tránh chi phí bình phương đầy đủ.


Use case thực tế

Vì sao Transformer là nền tảng của LLM. Toàn bộ làn sóng AI sinh (generative AI) hiện nay đứng trên một chân duy nhất: Transformer decoder scale lớn. Khi bạn gọi Claude để tóm tắt tài liệu, viết code, hay trả lời câu hỏi, bên dưới là hàng chục lớp multi-head attention + FFN, mỗi token chú ý tới toàn bộ ngữ cảnh bạn gửi lên. Hiểu attention giúp bạn hiểu vì sao "mọi thứ mô hình biết trong một lượt phải nằm trong context", và vì sao context dài lại đắt.

Hiểu văn bản (encoder-style). Các mô hình BERT/embedding dùng encoder Transformer để biến câu thành vector ngữ nghĩa — nền của tìm kiếm ngữ nghĩa, phân loại, và bước "embedding" trong RAG. Khi bạn xây một hệ thống tìm kiếm tài liệu nội bộ, chính attention hai chiều giúp mô hình hiểu ngữ cảnh đầy đủ của mỗi câu.

Sinh văn bản (decoder-style). Chatbot, trợ lý code, tóm tắt, dịch thuật — tất cả là masked decoder sinh token kế tiếp. Cùng một kiến trúc, chỉ khác dữ liệu và quy mô, phục vụ vô số ứng dụng.


Ghi nhớ

  • Transformer = attention thay cho recurrence. Bỏ xử lý tuần tự, cho phép song song hoá và bắt phụ thuộc xa trong một bước.
  • Self-attention dùng Query/Key/Value: điểm số = Q·Kᵀ, chia √d_k (scale), qua softmax thành trọng số, rồi tổ hợp V. Trực giác: "từ nào liên quan từ nào".
  • Multi-head: nhiều đầu attention song song, mỗi đầu học một kiểu quan hệ.
  • Positional encoding là bắt buộc, vì attention thuần tuý mù thứ tự.
  • Một khối = multi-head attention + FFN, bọc bởi residual + layer norm; xếp chồng nhiều khối.
  • Ba biến thể: encoder (hiểu, BERT), decoder (sinh, GPT/Claude), encoder-decoder (dịch, T5).
  • Thắng RNN nhờ song song hoá, phụ thuộc xa, và khả năng scale — mở đường cho LLM.
  • LLM = decoder lớn + pretraining dự đoán token + scale → khả năng nổi bật.
  • Chi phí O(n²) theo độ dài chuỗi → giới hạn context window; nhiều cải tiến đang nới nó.

Bài trước: RNN & mô hình chuỗi. Nền tảng: Deep Learning cơ bản. Bài sau: PyTorch trong thực chiến. Xem tiếp series LLM (llm-01)AI zero về LLM & prompt.

Bài viết liên quan

Phân biệt AI/ML/DL, các kiểu học máy, quy trình ML end-to-end và thuật ngữ nền tảng.

13 thg 7, 2026 14

Chất lượng dữ liệu, xử lý thiếu/ngoại lai, mã hoá, chuẩn hoá, tạo đặc trưng và tránh data leakage.

13 thg 7, 2026 13

Mô hình ngôn ngữ lớn hoạt động ra sao, token, context window, tham số sinh, và kỹ thuật viết prompt.

13 thg 7, 2026 13

Retrieval-Augmented Generation, vector database, tool calling, agent và MCP để xây ứng dụng LLM thực tế.

13 thg 7, 2026 11