- Giải thích trực quan cấu trúc và nguyên lý hoạt động của mô hình Transformer, đồng thời cho thấy cơ chế attention cải thiện việc huấn luyện song song và hiệu năng dịch như thế nào
- Mô hình gồm ngăn xếp encoder và decoder, trong đó mỗi encoder có hai lớp: self-attention và mạng nơ-ron feedforward
- Trình bày từng bước quy trình tính toán self-attention ở mức vector và ma trận, đồng thời mở rộng sang multi-head attention để học trong nhiều không gian biểu diễn
- Minh họa cụ thể các thành phần cốt lõi như positional encoding, kết nối residual, layer normalization, và masked attention của decoder
- Đây là một tài liệu tiêu biểu giúp hiểu dễ hơn các khái niệm nền tảng của Transformer, và còn được dùng trong bài giảng và giáo trình của các trường lớn như MIT, Stanford
Tổng quan về Transformer
- Transformer là mô hình dịch máy nơ-ron dựa trên attention, cho hiệu năng cao hơn Google Neural Machine Translation trước đây ở một số tác vụ
- Ưu điểm lớn nhất là dễ song song hóa, và được khuyến nghị làm mô hình tham chiếu cho Google Cloud TPU
- Mô hình được cấu thành từ ngăn xếp encoder và decoder; mỗi encoder có cùng kiến trúc nhưng không chia sẻ trọng số
- Đầu vào của encoder đi qua lớp self-attention để tích hợp thông tin ngữ cảnh, rồi sau đó đi qua mạng nơ-ron feedforward
- Decoder ngoài cấu trúc tương tự encoder còn có thêm lớp attention encoder-decoder để tập trung vào các phần liên quan của câu đầu vào
Dòng chảy tensor và embedding
- Câu đầu vào được chuyển thành vector 512 chiều cho mỗi từ thông qua thuật toán word embedding
- Mỗi lớp của encoder nhận và xử lý một danh sách vector có cùng kích thước, còn độ dài câu được đặt như một siêu tham số
- Lớp feedforward xử lý độc lập vector ở từng vị trí nên có thể tính toán song song
Khái niệm self-attention
- Self-attention cho phép mỗi từ tham chiếu tới các từ khác trong câu để học được biểu diễn tốt hơn
- Ví dụ: trong câu “The animal didn’t cross the street because it was too tired”, “it” liên hệ với “animal”
- Khác với việc duy trì hidden state của RNN, Transformer dùng self-attention để tích hợp thông tin ngữ cảnh
Các bước tính toán self-attention
- Từ embedding của mỗi từ, tạo ra các vector Query, Key, Value (kích thước 64)
- Tính điểm liên quan giữa các từ bằng tích vô hướng (dot product) của Query và Key
- Chia điểm cho √64 rồi áp dụng softmax để chuẩn hóa thành phân phối xác suất
- Nhân mỗi vector Value với điểm softmax rồi cộng lại để tạo đầu ra attention cuối cùng
- Trong triển khai thực tế, toàn bộ quá trình này được thực hiện bằng phép toán ma trận để tăng hiệu quả
Multi-head attention
- Sử dụng nhiều attention head (mặc định 8) để học trong nhiều không gian biểu diễn khác nhau
- Mỗi head có ma trận trọng số Q/K/V độc lập
- Đầu ra của nhiều head được nối lại (concat) rồi kết hợp bằng ma trận trọng số bổ sung WO
- Nhờ đó, mô hình có thể nắm bắt đồng thời nhiều khía cạnh khác nhau của ngữ cảnh
Positional encoding
- Vì Transformer không xử lý trực tiếp thứ tự, nó cộng thêm vector vị trí vào embedding của từng từ
- Vector vị trí được tạo bằng các hàm sin và cos, cung cấp thông tin về khoảng cách tương đối giữa các từ
- Cách làm này còn có thể mở rộng sang những câu dài hơn dữ liệu huấn luyện
- Bản cập nhật năm 2020 cũng giới thiệu cách đan xen (interleave) hai tín hiệu này
Kết nối residual và chuẩn hóa
- Mỗi lớp con (self-attention, feedforward) đều áp dụng kết nối residual và layer normalization
- Cấu trúc này giúp tránh tiêu biến gradient và cải thiện độ ổn định khi huấn luyện
Cấu trúc decoder
- Decoder nhận vector Key/Value từ đầu ra encoder để thực hiện attention encoder-decoder
- Dùng masking để ngăn mô hình tham chiếu đến các từ trong tương lai
- Ở cuối, lớp Linear và lớp Softmax tạo ra phân phối xác suất của từ
- Ví dụ: nếu kích thước từ vựng là 10.000, mỗi vector đầu ra sẽ được chuyển thành phân phối xác suất 10.000 chiều
Huấn luyện và hàm mất mát
- Khi huấn luyện, phân phối xác suất đầu ra của mô hình được so sánh với phân phối đáp án đúng (one-hot encoding)
- Dùng cross-entropy hoặc phân kỳ KL để tính sai số, rồi điều chỉnh trọng số bằng backpropagation
- Beam search giữ lại nhiều bản dịch ứng viên để nâng cao độ chính xác
Nghiên cứu tiếp nối và tài liệu tham khảo
- Các bài báo liên quan: Attention Is All You Need, Training Tips for the Transformer Model, Self-Attention with Relative Position Representations v.v.
- Tài liệu triển khai: gói Tensor2Tensor, hướng dẫn Harvard NLP PyTorch, Colab Notebook
- Về sau, Transformer còn được mở rộng thành phiên bản tại LLM-book.com (Chapter 3), đề cập tới các mô hình mới như Multi-Query Attention và RoPE positional embedding
Kết luận
- Transformer là kiến trúc dựa trên attention có thể song song hóa, và đã trở thành mô hình cốt lõi của deep learning hiện đại
- Bài viết này là một tài liệu tiêu biểu minh họa trực quan cấu trúc, toán học và trực giác của Transformer, và được dùng làm tài liệu tham khảo trong các khóa học của Stanford, MIT, Harvard và nhiều trường lớn khác
1 bình luận
Ý kiến trên Hacker News
Tôi đã đọc bài này khi học những kiến thức nền tảng về transformer. Phần trực quan hóa thực sự rất hữu ích
Nhưng trong công việc thực tế ứng dụng LLM, việc biết kiến trúc transformer hầu như không có nhiều tác dụng. Dù vậy, việc mơ hồ hiểu được cách nó vận hành bên trong vẫn mang lại cảm giác yên tâm về mặt tâm lý
Việc cố giải thích hành vi của LLM chỉ bằng kiến trúc là một cái bẫy, vì các mô hình mới nhất thể hiện những emergent phenomena khó dự đoán do reinforcement learning và các yếu tố khác
Trước đây tôi từng chắc chắn rằng LLM sẽ không thể giỏi toán hay lập trình, nhưng tôi đã hoàn toàn sai. Cuối cùng, suy luận năng lực của mô hình chỉ từ kiến trúc vẫn có giới hạn
Dạo này trong kỳ nghỉ tôi đang ôn lại bằng cách tự triển khai transformer với PyTorch. Rất thú vị và vui
Nếu muốn nhập môn, tôi khuyên dùng tài liệu LLMs from Scratch của Sebastian Raschka.
Nếu ai đã đọc cuốn sách của Jay Alammar xuất bản năm 2024 thì tôi muốn biết liệu nó có đáng được giới thiệu theo góc nhìn cập nhật hiện nay không
Vì nó tạo ra trực giác để nắm bắt được các giới hạn của mô hình. Đây là lời khuyên tôi từng nghe trực tiếp từ Clem Delangue của Hugging Face, và sau đó tôi đã học sâu về kiến trúc LLM, điều này giúp ích rất nhiều
Tôi cũng đưa ra lời khuyên tương tự cho những người tốt nghiệp coding bootcamp — chỉ với Python và React bạn vẫn có thể làm việc được, nhưng nếu hiểu kiến trúc máy tính và ngôn ngữ cấp thấp thì về lâu dài bạn sẽ trở thành một lập trình viên mạnh hơn rất nhiều
Token không phải là mảnh của từ, và trong xử lý ngôn ngữ hay hình ảnh, chúng chỉ có ý nghĩa ở giai đoạn đầu vào. Tôi cho rằng sự hiểu lầm này là một trong các nguyên nhân khiến người ta đánh giá thấp tiềm năng của transformer
Nhưng thực ra đây lại là hiện tượng giúp nâng cao chất lượng mã. Nhờ positional encoding của causal transformer, mô hình có thể để lại các token tạm thời phục vụ suy luận cục bộ rồi dễ dàng quên chúng đi
Nói cách khác, nó hoạt động như một loại scratchpad dùng một lần. Giải pháp là hậu xử lý đầu ra của LLM, chứ không phải làm cho mô hình kìm hãm việc tạo chú thích
Từ sau khi ChatGPT ra mắt, tỷ lệ của ba nhóm này gần như không thay đổi, và cũng hiếm khi có thể thuyết phục họ bằng bằng chứng
Phần trực quan hóa của nhóm Transformer Explainer thực sự xuất sắc.
Xem Transformer Explainer cùng với video của 3blue1brown giúp tôi hiểu chắc hơn hẳn
Trong phần bình luận do chính tác giả Jay Alammar để lại, ông có giới thiệu thêm các tài liệu học transformer hay khác
Liên kết liên quan
Tài liệu giải thích transformer giờ nhiều đến mức tạo cảm giác như tutorial về monad.
Có người tưởng rằng mình đã giác ngộ, nhưng thực tế vẫn đang rối và lại muốn chia sẻ điều đó thật rộng rãi
Khi học các khái niệm toán học hay điện tử cũng vậy, phần giải thích đầu tiên thường khó, nhưng nếu tiếp xúc với nhiều phiên bản thì cuối cùng sự hiểu biết sẽ sâu hơn
Có thể là tôi đã lỗi thời, nhưng tôi muốn biết liệu transformer đã hoàn toàn thay thế các kiến trúc deep learning cũ như U-net hay chưa
Ví dụ, CNN vẫn rất mạnh, đặc biệt phù hợp hơn trong các tác vụ thị giác chuyên biệt như ảnh y tế
Với mô hình bất biến quay, graph neural network, mô hình point cloud... thì transformer thậm chí có thể còn không phù hợp
Nói cách khác, vẫn còn nhiều kiến trúc thay thế khác
Bài báo liên quan: CNNs can still do just as well
Tôi có cuốn sách này, và khi nhóm quyết định đưa LLM vào hệ thống thì nó thực sự là tài liệu cứu mạng
Xét cho cùng, LLM là một hệ thống tổng hợp mô phỏng suy luận của con người, nên ngay cả khi biết kiến trúc bên trong, vẫn rất khó dự đoán các kiểu lỗi
Việc xây dựng cảm giác thông qua trải nghiệm và thử nghiệm còn quan trọng hơn
Tôi nghĩ rồi nội bộ của transformer cuối cùng sẽ trở nên bớt quan trọng hơn, giống như nội bộ của compiler.
Phần lớn lập trình viên sẽ chỉ quan tâm đến “dùng nó như thế nào”, thay vì cách nó được triển khai bên trong
Cũng như hệ điều hành, compiler, hay phần cứng như GPU/TPU vẫn phải liên tục được cải tiến, transformer cũng vậy, nên vai trò của những người có kiến thức này sẽ còn quan trọng hơn
Đây là một bài viết tuyệt vời, và có vẻ đã truyền cảm hứng cho dự án Illustrated Evo 2 gần đây
Liên kết blog NVIDIA Research
Mọi người hay nghĩ Key/Query/Value là những khái niệm đặc biệt, nhưng thật ra transformer chỉ là một cấu trúc mở rộng của phép nhân ma trận
Nếu một tầng của mạng nơ-ron thông thường là
matrix * input, thì transformer tínhinput * MatrixA,input * MatrixB,input * MatrixCrồi kết hợp chúng lạiCuối cùng thì mọi thứ đều là sự lặp lại của các phép toán ma trận. Xem thêm trong blog PyTorch
Attention cũng được học theo cách không phụ thuộc vị trí, biến đổi các đoạn lớn của đầu vào thành giá trị mới, và nhiều head học song song các khía cạnh khác nhau. Nó là một khái niệm tương tự với kernel của convolution
Hướng dẫn này thực sự rất đồ sộ. Dùng cùng các công cụ như Claude Code để tạo mã giả PyTorch sẽ cực kỳ hữu ích cho việc hiểu khái niệm một cách trực quan
Đây là tài liệu rất thích hợp để ngồi học tập trung vài tiếng đồng hồ