Encoder
- Giải thích quá trình chuyển đổi văn bản thành vector và quá trình thêm thông tin vị trí vào embedding thu được từ đó.
- Mục tiêu là tạo ra embedding nắm bắt được thông tin ngữ nghĩa của văn bản đầu vào.
1. Embedding văn bản
- Chuyển "Hello World" thành vector để tạo embedding.
- Gán các giá trị tùy ý cho từng token để tạo vector.
2. Mã hóa vị trí
- Cộng mã hóa vị trí vào embedding để bổ sung thông tin về vị trí của từ.
- Sử dụng các vector cố định để gán cho mỗi vị trí một mẫu số vừa riêng biệt vừa nhất quán.
3. Kết hợp mã hóa vị trí và embedding
- Cộng mã hóa vị trí với embedding để tạo ra một ma trận mới dùng làm đầu vào cho encoder.
Self-attention
- Giải thích attention, cơ chế cho phép mô hình tập trung vào các phần cụ thể của đầu vào.
- Có thể sử dụng multi-head attention để đồng thời tập trung vào thông tin trong nhiều không gian biểu diễn khác nhau.
4.1 Định nghĩa ma trận
- Định nghĩa các ma trận K, V, Q cho từng attention head.
4.2 Tính key, query, value
- Tính các ma trận key, query, value bằng cách nhân embedding đầu vào với các ma trận trọng số.
4.3 Tính attention
- Tính tích vô hướng giữa query và từng vector key, rồi chia kết quả cho căn bậc hai của số chiều của vector key.
- Áp dụng hàm softmax để thu được trọng số attention.
- Nhân mỗi vector value với trọng số attention.
Feed-forward layer
- Trong encoder có một mạng nơ-ron feed-forward nằm sau lớp self-attention.
- Mạng này sử dụng hai phép biến đổi tuyến tính và hàm kích hoạt ReLU.
5.1 Lớp feed-forward cơ bản
- Lớp tuyến tính thứ nhất mở rộng số chiều của đầu vào, áp dụng hàm kích hoạt ReLU, sau đó lớp tuyến tính thứ hai thu số chiều trở lại như ban đầu.
5.2 Kết hợp toàn bộ quá trình của encoder
- Viết mã cho khối encoder bao gồm multi-head attention và lớp feed-forward.
5.3 Kết nối tắt và chuẩn hóa lớp
- Kết nối tắt là việc cộng đầu vào của một lớp vào đầu ra, còn chuẩn hóa lớp là kỹ thuật chuẩn hóa đầu vào của lớp.
Ý kiến của GN⁺
- Bài viết này đơn giản hóa phần toán học phức tạp để giúp người đọc hiểu về mặt toán học của mô hình Transformer.
- Đặc biệt hữu ích để hiểu nguyên lý hoạt động của cơ chế self-attention và mạng nơ-ron feed-forward.
- Bằng cách cho thấy các kỹ thuật như kết nối tắt và chuẩn hóa lớp đóng góp như thế nào vào tính ổn định và hiệu năng của mạng nơ-ron, bài viết mang lại góc nhìn về cách giải quyết các vấn đề huấn luyện trong mạng nơ-ron sâu.
1 bình luận
Ý kiến Hacker News
"Điều bí ẩn" của transformer là ở mỗi lớp, thay vì dùng trọng số tĩnh và một chuỗi tuyến tính các giá trị, nó dùng 3 ma trận khác nhau thu được bằng cách nhân các trọng số đã học từ cùng một đầu vào, rồi nhân các ma trận này với nhau. Cách này cho phép xử lý song song nhiều hơn, nhưng công thức attention lại rất tĩnh nên bị giới hạn khá nhiều.
Nếu muốn một cách tiếp cận khô khan hơn, chính quy hơn và ngắn gọn hơn, có thể tham khảo "The Transformer Model in Equations" của John Thickstun. Toàn bộ nội dung gói gọn trong đúng một trang, dùng ký hiệu toán học tiêu chuẩn.
Khi đọc bài, có một số câu hỏi nảy ra.
Muốn tìm bài báo hoặc bài viết giải thích vì sao transformer, dù chỉ hoạt động như một "bộ dự đoán token tiếp theo", vẫn có thể xử lý các từ hoặc subword/token không có trong tập dữ liệu huấn luyện.
Các bài hướng dẫn về transformer có thể là phiên bản mới của các bài hướng dẫn về monad. Đây là một khái niệm khó hiểu, nhưng giống như nhiều phần khác của khoa học máy tính, cần vật lộn để hiểu và luyện tập với ví dụ.
Tôi biết một vài từ trong số đó.
Là người từng viết ANN từ đầu mà không dùng TensorFlow, tôi vẫn thấy phần giải thích này khó hiểu.
Tôi thích trang web Quarto. Tôi thấy ngày càng nhiều người dùng Python dùng Quarto để xuất bản.
Không rõ ở bước 7 của decoder có nên là
Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z_self_attention)thay vìZ_encoder_decoder = layer_norm(Z_encoder_decoder + Z), và liệu ở bước 8 của decoder có bị thiếulayer_normhay không.Tò mò không biết LLM có dùng mạng nơ-ron hay không, và thứ gì cấu thành một "nơ-ron". Tức là có một cấu trúc mã nào đằng sau nơ-ron hay không, hay nó "chỉ đơn giản" là toán học phức tạp.