5 điểm bởi GN⁺ 2024-01-04 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-01-04
Ý 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.

    • Sẽ khó thấy thêm tiến triển nào cho đến khi xuất hiện cách tổng quát hóa đồ thị tính toán thành các tham số có thể học được.
    • Với các phương pháp gradient hiện có, chưa rõ điều đó có khả thi theo nghĩa truyền thống hay không, vì hiệu ứng hỗn loạn khiến thay đổi nhỏ có thể gây biến động lớn về hiệu năng.
    • Có lẽ sẽ cần một dạng nào đó như thuật toán di truyền hoặc PSO diễn ra ở bên trong.
  • 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.

    • Các vector tương ứng với "Hello" và "World" trông có vẻ ngẫu nhiên nhưng lại như có quy luật.
    • Tò mò không biết việc số 2 bị lặp trong vector có mang ý nghĩa gì không, hay là toàn bộ tập đó mới là thứ mang tính duy nhất.
  • 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.

    • Ví dụ như khi tạo một bảng trong pandas với các cột "sdsfs_ff", "fsdf_value", hoặc tạo những ví dụ không có trong tập huấn luyện rồi yêu cầu LLM tạo đầu ra tương tự.
    • Nếu có thêm liên kết thảo luận về positional embedding thì càng tốt. Vẫn chưa tìm được câu trả lời thỏa đáng về việc dùng sin/cos và về (nhân so với so sánh).
  • 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.

    • Khi nhờ ChatGPT giải thích cách sửa một ANN cơ bản để triển khai self-attention mà không dùng các thuật ngữ ma trận hay vector, nó đã đưa ra một lời giải thích thật sự rất đơn giản.
    • Tôi thích nghĩ mọi thứ theo node, trọng số và layer. Ma trận và vector khiến việc liên hệ với những gì đang diễn ra trong ANN trở nên khó hơn.
    • Cách tôi quen để viết ANN là mỗi node đầu vào là một scalar, nhưng thuật toán feed-forward lại trông giống phép nhân vector-ma trận, vì nó nhân mọi node đầu vào với trọng số rồi cộng lại.
  • 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ếu layer_norm hay 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.