1 điểm bởi GN⁺ 2024-05-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • LLM tách biệt việc tạo tokenizer và quá trình huấn luyện mô hình, nên một số token cụ thể như _SolidGoldMagikarp có thể gây ra hành vi ngoài dự kiến
  • Cốt lõi của vấn đề là các under-trained tokens: token có trong từ vựng của tokenizer nhưng hiếm khi hoặc hoàn toàn không xuất hiện trong quá trình huấn luyện; chúng thường được gọi là “glitch tokens”
  • Nghiên cứu đề xuất một phương pháp tự động tìm các token này bằng cách kết hợp phân tích tokenizer, các chỉ số dựa trên trọng số embedding của mô hình, và kỹ thuật prompting
  • Những token này lãng phí dung lượng từ vựng của tokenizer có kích thước cố định, đồng thời có thể ảnh hưởng đến độ dài đầu vào/đầu ra, chi phí suy luận, hiện tượng ảo giác hoặc đầu ra bị lỗi
  • Trong môi trường dùng công cụ và agent để tìm kiếm, xử lý dữ liệu bên ngoài, việc phát hiện và tinh lọc under-trained token liên quan trực tiếp đến độ an toàn và độ vững chắc của mô hình khi triển khai

Sự không khớp giữa tokenizer và quá trình huấn luyện mô hình

  • Phần lớn thành phần của LLM được huấn luyện theo cách không giám sát trên dữ liệu quy mô lớn, nhưng tokenizer thường được huấn luyện riêng bằng một thuật toán khác và trên tập dữ liệu nhỏ hơn
  • GPT-2 đã đặt nhiều nền tảng cho mô hình hóa ngôn ngữ dựa trên Transformer hiện nay, và framework token hóa dựa trên byte-pair encoding(BPE) cũng được áp dụng rộng rãi
  • Token hóa BPE biến văn bản đầu vào thành chuỗi token dạng tiểu từ, lặp đi lặp lại việc gộp hai token liền kề theo các quy tắc gộp cố định
  • Các quy tắc gộp được học bằng thuật toán học tham lam trên một tập dữ liệu nhỏ hơn, vốn cần có tính đại diện phù hợp với dữ liệu huấn luyện LLM

Cấu trúc tạo ra glitch token

  • Khi tokenizer và quá trình huấn luyện mô hình bị tách rời, có thể xuất hiện tình trạng một số token hầu như hoặc hoàn toàn không xuất hiện trong quá trình huấn luyện mô hình
  • Nếu các token này được đưa vào đầu vào, chúng có thể gây ra hành vi ngoài dự kiến như ảo giác hoặc đầu ra bị lỗi
  • Nghiên cứu phân loại các token này là under-trained tokens hoặc untrained tokens
    • untrained chỉ được dùng khi có dấu hiệu rõ ràng rằng một token cụ thể không xuất hiện trong dữ liệu huấn luyện mô hình
    • Nói chung, chúng cũng thường được gọi là “glitch tokens”
  • Một ví dụ tiêu biểu được nhắc đến là token _SolidGoldMagikarp

Hạn chế của các phương pháp token hóa hiện có và lựa chọn thay thế

  • Một số nghiên cứu gần đây cũng xem xét cách loại bỏ token hóa và chuyển sang đầu vào byte thô, nhưng lựa chọn này thường có chi phí tốc độ suy luận lớn
  • Chi phí tốc độ có thể được bù đắp bằng kiến trúc đặc biệt ở các layer đầu/cuối hoặc bằng tính toán biến thiên ở các layer trung gian
  • Các cách tiếp cận này vẫn chưa được áp dụng rộng rãi, và phần lớn mô hình hiện đại vẫn dựa vào token hóa tiểu từ
  • Lựa chọn thay thế chính cho BPE là phương pháp Unigram, nhưng dù có nghiên cứu cho thấy nó tốt hơn BPE, phương pháp này nhìn chung vẫn chưa được dùng phổ biến

Vấn đề thực tế của under-trained token

  • Under-trained token chiếm dung lượng từ vựng trong tokenizer có kích thước cố định, vốn có thể dành cho các token xuất hiện thường xuyên hơn
    • Điều này có thể làm bỏ lỡ cơ hội giảm độ dài đầu vào/đầu ra trung bình và chi phí suy luận
  • Nếu các token này được đưa vào dữ liệu đầu vào một cách có chủ ý hoặc tình cờ, chúng có thể tạo ra đầu ra mô hình không mong muốn và làm hỏng các ứng dụng downstream
  • Khi việc dùng công cụ của LLM và các agent tìm kiếm, xử lý dữ liệu bên ngoài ngày càng phổ biến, độ vững chắc trước đầu vào bất ngờ hoặc độc hại trở nên quan trọng hơn
  • Nếu mô hình bị đẩy ra ngoài phân phối huấn luyện, những token như vậy cũng có khả năng bị lợi dụng để vượt qua guardrail

Cách tiếp cận phát hiện tự động và công cụ công khai

  • Trước đây đã có các nỗ lực tìm những token này bằng cách phân tích mô hình và tokenizer, nhưng vẫn thiếu một phương pháp tự động đáng tin cậy hoạt động nhất quán trên nhiều mô hình khác nhau
  • Nghiên cứu kết hợp ba phương pháp để nhận diện token có vấn đề
    • Phân tích tokenizer
    • Chỉ số dựa trên trọng số embedding của mô hình
    • Kỹ thuật prompting
  • Các phương pháp này đã được áp dụng cho nhiều mô hình trọng số mở phổ biến và được công bố gần đây; nghiên cứu cũng khảo sát sơ bộ cách mở rộng sang mô hình không công khai
  • Công cụ phân tích tổng quát tương thích với các mô hình Hugging Face và kết quả chi tiết theo từng mô hình cũng được công bố

1 bình luận

 
GN⁺ 2024-05-13
Ý kiến trên Hacker News
  • Một năm trước, video của Computerphile về glitch token khá hay: https://www.youtube.com/watch?v=WO2X3oZEJOA

    • Không hiểu sao video này trông còn thú vị hơn bản preprint của bài báo
  • Không chỉ nên tìm các token chưa được huấn luyện đủ; vì token về cơ bản là lớp đầu tiên của mạng nơ-ron, nên cũng cần tìm sự mất cân bằng dữ liệu huấn luyện trong mọi trọng số của tất cả các lớp khác
    Nếu tìm được những trọng số như vậy, có thể nên xóa các trọng số mà dữ liệu hầu như không đi qua; như thế mô hình có thể nhỏ hơn hoặc giúp tổng quát hóa tốt hơn

    • Tôi nghĩ model distillation làm việc này. SparseGPT là một ví dụ lớn, và nếu tôi nhớ đúng thì nó đã loại bỏ 50% tham số mà không làm mất nhiều độ chính xác
      Tôi cũng thấy một bài gần đây trích dẫn SparseGPT và đạt độ thưa khoảng 70–80%, khá ấn tượng
    • “Xóa các trọng số mà dữ liệu hầu như không đi qua” chẳng phải là ý tưởng của mạng nơ-ron thưa sao?
    • Các mô hình chính quy vốn đã có thể được nén hoặc gộp lại
  • Thật hơi khó tin là mô hình của một công ty Canada lại có các token chưa được huấn luyện đủ liên quan đến khúc côn cầu, ngay cả khi chúng là tiếng Đức
    Đùa vậy thôi, nội dung này khá hay và tôi mong sẽ hiểu rõ hơn tác động của tokenization lên mô hình. Đặc biệt đáng chú ý là phát hiện rằng nhiều mô hình nguồn mở đời đầu gặp vấn đề với carriage return; tùy nguồn dữ liệu, carriage return có thể xuất hiện không hiếm đến vậy

  • Có một phương pháp chẩn đoán huấn luyện dựa trên lý thuyết ma trận ngẫu nhiên, sử dụng mật độ phổ của ma trận tương quan trọng số
    Người ta khớp mật độ phổ của từng lớp với một luật lũy thừa bị cắt, và nếu số mũ alpha của luật lũy thừa lớn hơn 2 một chút thì coi là đã được huấn luyện đúng
    https://jmlr.org/beta/papers/v22/20-410.html

  • Cách giải chẳng phải chỉ là huấn luyện tokenizer trên cùng corpus với LLM sao? Tôi không rõ vì sao tái sử dụng tokenizer lại phổ biến đến vậy. Có ai biết không?

    • Ngoài những điều người khác đã nói, ngay cả khi có thể huấn luyện tokenizer đúng trên cùng dataset huấn luyện, vấn đề này cũng không biến mất hoàn toàn
      Với cách BPE, một token có thể bị gộp với token khác và tạo ra một token rất hiếm. Nếu có token X và Y, và gần như mọi X đều theo sau bởi Y, quá trình BPE sẽ tạo token mới XY nhưng không loại bỏ token X cũ, khiến X bị huấn luyện thiếu
      Có lẽ để giải quyết việc này cần một thuật toán gộp tinh vi hơn kiểu gộp tham lam
    • Tôi nghĩ có hai lý do để tái sử dụng tokenizer
      Thứ nhất là khi muốn tiếp tục pre-training mô hình thay vì bắt đầu từ đầu. Tuy nhiên có thể có người không biết rằng ngay cả khi huấn luyện với tokenizer mới, ta vẫn có thể tái sử dụng trọng số mô hình khá dễ dàng. Tôi đã viết một bài về cách đó: https://umarbutler.com/how-to-reuse-model-weights-when-train...
      Thứ hai là sự tiện lợi cho người dùng cuối. Tokenize một corpus rất lớn rồi chia thành chunk có thể mất nhiều thời gian; nếu đã xử lý một lần bằng tokenizer GPT2 rồi có thể huấn luyện nhiều mô hình trên cùng dữ liệu đó, thì không phải tokenize lại toàn bộ là điều rất tiện
    • Nhìn phần tóm tắt, kỹ thuật này có vẻ hữu ích khi không thể truy cập corpus. Ví dụ, có thể tải trọng số nguồn mở nhưng corpus là không công khai
      Nếu không thì tôi nghĩ chỉ cần tính histogram token trên một mẫu thống kê của corpus là được
    • Thường thì ban đầu người ta định dùng cùng corpus cho tokenizer và LLM, nhưng sau khi huấn luyện tokenizer rồi kiểm thử LLM, họ phát hiện một phần corpus là rác vô dụng
      Không có ý xấu với SolidGoldMagikarp, người đã nỗ lực trong subreddit counting, nhưng những phần như vậy sẽ bị loại khỏi các lần huấn luyện sau. Tuy nhiên đến thời điểm đó tokenizer đã trở thành một phần của API, nên nếu đổi sang phiên bản mới thì những thứ khác sẽ hỏng, và cuối cùng các token không cần thiết vẫn còn trong vocabulary
    • Có thể làm được, nhưng nếu corpus rất lớn thì thực tế rất khó
  • Tiêu đề bài báo thật sự rất xuất sắc

    • Tiêu đề đầy đủ là “Fishing for Magikarp: Automatically Detecting Under-trained Tokens in Large Language Models