Trọng tâm: Encoder, decoder, encoder-decoder và tóm tắt bằng lời của tôi.
Thời gian: 40 phút đọc, 15 phút viết lại.
Mục tiêu cần hiểu
Hiểu layer normalization, residual connection và positional embeddings giúp Transformer ổn định ra sao.
Phân biệt encoder-only, decoder-only và encoder-decoder models theo mục tiêu sử dụng.
Nắm các nhánh model tiêu biểu như BERT, GPT, T5 và M2M-100.
Tự chọn được loại kiến trúc phù hợp cho classification, generation, translation hoặc summarization.
Câu hỏi dẫn đường
Encoder-only, decoder-only và encoder-decoder khác nhau thế nào?
Mỗi kiến trúc phù hợp với loại task nào?
BERT, GPT và T5 nằm ở nhóm nào?
Ghi chú trong khi đọc
Phần Adding Layer Normalization nhấn mạnh rằng Transformer block không chỉ là attention và feed-forward layer. Để xếp nhiều layer sâu mà vẫn train ổn định, mỗi sublayer cần được bọc bởi residual connection và Layer Normalization.
Residual connection giữ lại input gốc của sublayer rồi cộng với output mới. Nhờ vậy sublayer học phần “chỉnh sửa thêm” thay vì phải tái tạo toàn bộ representation từ đầu.
Layer Normalization chuẩn hóa activation theo chiều feature trong từng token/example, giúp scale tín hiệu ổn định hơn khi đi qua nhiều layers.
Với encoder block kiểu post-layer normalization, luồng trực giác có thể viết gọn:
x -> MultiHeadAttention(x) -> x + attention_output -> LayerNorm -> FeedForward -> x + feedforward_output -> LayerNorm
Điểm quan trọng: attention và feed-forward tạo năng lực biểu diễn, còn residual connection và layer normalization làm cho năng lực đó train được ở độ sâu lớn.
Layer normalization khác batch normalization vì nó không cần thống kê trên batch. Điều này hợp với NLP/Transformer vì sequence length, batch size và cách padding có thể thay đổi.
Khi đọc sơ đồ Transformer, không nên xem LayerNorm như chi tiết phụ. Nó là một phần hạ tầng ổn định hóa: nếu bỏ normalization, activation dễ lệch scale qua từng block và gradient có thể khó học hơn.
Có hai biến thể placement hay gặp:
Post-LN: sublayer → residual add → layer norm. Đây là cách dễ đọc trong sơ đồ Transformer gốc.
Pre-LN: layer norm → sublayer → residual add. Biến thể này thường ổn định hơn khi train model rất sâu.
Mental model: mỗi block Transformer là một vòng lặp “đọc context, chỉnh representation, cân lại tín hiệu”. LayerNorm là bước cân lại để block tiếp theo không nhận tín hiệu quá lệch.
Positional Embeddings bổ sung một phần khác của hạ tầng Transformer: self-attention rất mạnh trong việc cho token nhìn nhau, nhưng nó không tự biết thứ tự token. Vì vậy model cần thêm tín hiệu vị trí vào token embeddings trước khi đi qua các Transformer blocks.
Nếu token embedding trả lời “token này là gì”, positional embedding trả lời “token này đang ở đâu trong sequence”. Hai thông tin này được kết hợp để attention vừa biết nội dung, vừa biết thứ tự.
Công thức trực giác:
hi=ei+pi
Trong đó ei là token embedding, pi là positional embedding, còn hi là input embedding đã có cả thông tin nội dung và vị trí.
Positional embeddings có thể là learnable: mỗi vị trí có một vector riêng được học bằng backpropagation giống token embeddings. Cách này linh hoạt trong context length đã train, nhưng kém tự nhiên khi cần xử lý vị trí dài hơn chưa từng học.
Điểm cần nhớ: Layer Normalization giúp tín hiệu ổn định khi stack nhiều layer; Positional Embeddings giúp attention không đánh mất thứ tự. Cả hai đều không phải “trang trí”, mà là phần giúp Transformer hoạt động đúng và train được.
Phần Adding a Classification Head nối kiến trúc Transformer với bài toán downstream classification. Encoder tạo hidden states giàu ngữ cảnh, còn Classification Head biến representation đó thành logits cho từng nhãn.
Với BERT/DistilBERT-style sequence classification, thường lấy hidden state của token [CLS] làm vector đại diện cho cả sequence rồi đưa qua classification head.
Công thức trực giác:
z=WhCLS+b
Trong đó hCLS là representation cấp câu, z là logits cho các class. Sau đó softmax biến logits thành xác suất dự đoán.
Khi dùng AutoModelForSequenceClassification, classification head có thể được thêm mới theo num_labels. Nếu head mới có weight random thì cần fine-tuning để học mapping từ representation sang nhãn.
Câu “the first token is used for prediction” nên hiểu là dùng hidden state của token đầu tiên sau khi đã đi qua Transformer, không phải chỉ nhìn token đầu tiên của câu. Trong BERT-style models, token đầu là [CLS]; nhờ self-attention, hidden state này đã nhận thông tin từ toàn sequence.
Classification head thường có dạng:
last_hidden_state[:, 0]-> dropout-> linear layer-> logits
Dropout giúp giảm overfitting khi fine-tuning; linear layer biến hidden size, ví dụ 768 chiều, thành số class, ví dụ 6 nhãn cảm xúc.
Phần The Decoder giải thích nhánh Transformer dùng để sinh chuỗi. Nếu encoder giống “đọc hiểu toàn bộ input”, thì Decoder giống “viết tiếp từng token”.
Điểm khác biệt cốt lõi: decoder dùng causal/masked self-attention, nên token hiện tại chỉ được nhìn các token trước nó, không được nhìn token tương lai.
Với decoder-only models như GPT, mục tiêu là next-token prediction:
p(xt∣x<t)
Nghĩa là model dự đoán token tiếp theo dựa trên prefix đã có. Đây là lý do decoder phù hợp với text generation, chat và completion.
Trong encoder-decoder models như T5/BART, decoder vừa dùng causal self-attention để nhìn output đã sinh, vừa dùng cross-attention để nhìn representation từ encoder.
Mask matrix là cách biểu diễn luật “token nào được nhìn token nào” trong attention. Với causal mask, ma trận thường có dạng tam giác dưới: token hiện tại được nhìn chính nó và quá khứ, nhưng không được nhìn tương lai.
Trong implementation, các ô bị che thường được cộng -inf vào attention scores trước softmax. Sau softmax, các vị trí đó có attention weight gần 0.
Phần Meet the Transformers gom các model Transformer thành ba family chính theo cách chúng dùng encoder và decoder.
Encoder-only models như BERT, RoBERTa, DistilBERT dùng bidirectional attention để đọc hiểu toàn bộ input. Chúng hợp với classification, NER, semantic search hoặc các task cần representation tốt.
Decoder-only models như GPT dùng causal attention để sinh token tiếp theo từ prefix. Chúng hợp với text generation, chat, completion và code generation.
Encoder-decoder models như T5, BART, M2M-100 dùng encoder để đọc input và decoder để sinh output. Chúng hợp với translation, summarization và các bài toán sequence-to-sequence.
Cách chọn nhanh: nếu task cần hiểu input thì nghĩ encoder-only; nếu cần viết tiếp thì nghĩ decoder-only; nếu cần đọc input rồi tạo output mới thì nghĩ encoder-decoder.
Viết lại bằng lời của tôi
Transformer không chỉ mạnh vì có self-attention. Nếu cứ xếp attention và feed-forward layer liên tục, tín hiệu bên trong mạng có thể thay đổi scale rất mạnh, làm training khó ổn định. Layer Normalization giải quyết phần này bằng cách chuẩn hóa activation trước hoặc sau mỗi sublayer.
Residual connection giúp model giữ lại representation cũ, còn layer normalization giúp representation mới có scale dễ kiểm soát. Hai kỹ thuật này đi chung giống như một cơ chế “sửa nhưng không phá”: sublayer thêm thông tin mới, residual giữ đường gốc, LayerNorm làm tín hiệu gọn lại.
Công thức trực giác cho một sublayer:
y=LayerNorm(x+Sublayer(x))
Nếu sublayer là multi-head attention, model đang thêm thông tin context giữa các token. Nếu sublayer là feed-forward, model đang biến đổi từng token representation. Trong cả hai trường hợp, LayerNorm giúp output không bị lệch scale quá mạnh trước khi đi tiếp.
Cách nhớ ngắn: attention/FFN học nội dung, residual giữ đường truyền, LayerNorm giữ tín hiệu ổn định.
Với Positional Embeddings, mình hiểu Transformer như sau: attention cho mỗi token quyền hỏi các token khác, nhưng positional embedding cho model biết các token đó đang nằm ở đâu. Nếu thiếu vị trí, dog bites man và man bites dog có cùng bộ token nhưng ý nghĩa bị đảo; model cần tín hiệu thứ tự để không nhầm vai trò ngữ pháp.
Nếu positional embedding là learnable, model đang tự học ý nghĩa của từng vị trí từ dữ liệu. Đây là cách đơn giản và linh hoạt, nhưng đổi lại model phụ thuộc vào các vị trí đã được train trong context window.
Cách nhớ ngắn: token embedding = nội dung, positional embedding = thứ tự, attention = trộn thông tin theo ngữ cảnh.
Classification Head là phần chuyển từ “model hiểu câu” sang “model ra quyết định”. Transformer encoder trả về representation; classification head đọc representation đó để tạo điểm số cho từng nhãn.
Khi sách nói gắn dropout và linear layer, mình hiểu là: lấy vector [CLS] đã chứa context toàn câu, làm hơi nhiễu nó bằng dropout trong training để tránh học vẹt, rồi dùng linear layer để chuyển vector đó thành điểm số cho từng class.
Cách nhớ ngắn: encoder tạo representation, classification head tạo logits, loss/softmax biến logits thành tín hiệu học và dự đoán.
Với Decoder, mình hiểu điểm chính là giới hạn tầm nhìn. Encoder đọc toàn bộ câu một lần, còn decoder sinh từ trái sang phải nên phải che tương lai. Causal mask biến self-attention thành cơ chế chỉ nhìn prefix.
Mask matrix là phần cụ thể hóa việc “che tương lai”: nó không thay đổi token, chỉ sửa attention scores để những vị trí không hợp lệ không nhận trọng số sau softmax.
Cách nhớ ngắn: encoder = đọc toàn cảnh, decoder = viết tiếp theo prefix, encoder-decoder = đọc input rồi viết output mới.
Với Encoder-Decoder Architecture, mình hiểu đây là kiến trúc “đọc rồi viết”: encoder đọc input thành hidden states, decoder sinh output từng token và dùng cross-attention để nhìn lại encoder output.
Cross-Attention là cầu nối trong phần “đọc rồi viết”: decoder dùng query của nó để hỏi, còn encoder hidden states đóng vai trò key/value chứa thông tin input. Nói ngắn: decoder đang viết output nhưng vẫn được nhìn lại input qua cross-attention.
Nhóm
Cách nhìn context
Cách dùng
Ví dụ
Encoder-only
Nhìn toàn bộ input hai chiều
Hiểu/biểu diễn input
BERT, RoBERTa
Decoder-only
Chỉ nhìn prefix/quá khứ
Sinh tiếp văn bản
GPT
Encoder-decoder
Encoder đọc input, decoder sinh output
Biến đổi sequence
T5, BART
Với phần Meet the Transformers, mình không nên nhớ từng model rời rạc. Nên nhớ theo “cấu trúc → cơ chế attention → task”:
BERT family: encoder-only → bidirectional attention → hiểu văn bản.
GPT family: decoder-only → causal attention → sinh văn bản.