1 điểm bởi GN⁺ 2023-07-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • Attention softmax bên trong Transformer khiến head không thể chọn “không làm gì”, từ đó có thể làm cho việc lượng tử hóa và triển khai trong môi trường ít bộ nhớ trở nên khó khăn
  • Dấu hiệu của vấn đề là các weight/activation ngoại lệ xuất hiện trong LLM, và bài báo của Qualcomm AI Research phân tích rằng hơn 97% activation ngoại lệ đến từ vị trí khoảng trắng và dấu câu
  • Softmax hiện tại sẽ gán trọng số 1/k cho mỗi hạng ngay cả khi mọi đầu vào đều rất âm, nhưng softmax_1 thêm 1 vào mẫu số để đầu ra attention có thể tiến gần về 0
  • softmax_1 giữ nguyên tỷ lệ tương đối trong khi giới hạn tổng trong khoảng từ 0 đến 1, và nhờ đạo hàm dương nên vẫn giữ được gradient khác 0
  • Thay đổi này không phải bản vá có thể gắn ngay vào mô hình hiện có mà cần huấn luyện lại, dù với các mô hình như LLaMA có thể thử nghiệm nhanh bằng cách dùng zero prefix token

Các giá trị ngoại lệ làm việc lượng tử hóa trở nên khó khăn

  • Trong mô hình Transformer xuất hiện các weight và activation lớn hơn nhiều bậc độ lớn so với các giá trị khác, và các giá trị này có vẻ rất quan trọng đối với hoạt động của mô hình
  • Những ngoại lệ này gây suy giảm hiệu năng trong lượng tử hóa số nguyên kiểu scale-and-bias thông thường, khiến việc chạy các mô hình lớn trên môi trường RAM hạn chế như Mac Mini hay Raspberry Pi trở nên khó khăn
  • Nếu giảm được mức dùng RAM, cả môi trường đám mây lẫn edge đều có thêm dư địa để xử lý mô hình lớn hơn hoặc nhiều tính năng hơn
  • Quantizable Transformers: Removing Outliers by Helping Attention Heads Do Nothing của Qualcomm AI Research liên hệ các giá trị ngoại lệ với softmax trong attention mechanism
    • Phân tích cho thấy hơn 97% activation ngoại lệ trong LLM xuất hiện tại vị trí whitespace và punctuation
    • Clipped softmax có vấn đề zero gradient, còn gated attention thêm hàng triệu tham số mới

Vai trò của softmax trong Transformer

  • Embedding đầu vào của Transformer là các vector dấu phẩy động biểu diễn từ
    • LLaMA 2 của Meta dùng embedding vector có độ dài 3,204, và theo chuẩn half-precision cần hơn 6KB để biểu diễn một từ
    • Vocabulary thường có 30.000~50.000 mục
  • Transformer biến vector đầu vào thành vector đầu ra cùng kích thước, và vector đầu ra cuối cùng được dùng để dự đoán token tiếp theo sau token hiện tại
  • Residual connection hoạt động theo cách attention bổ sung thông tin ngữ cảnh vào thông tin từ gốc
    • Ví dụ, nó thêm ngữ cảnh để phân biệt pupil là học sinh hay đồng tử của mắt
  • Ở bước cuối, vector đầu ra được chuyển thành vector có độ dài bằng vocabulary rồi áp dụng softmax để xử lý như xác suất token kế tiếp
    • Trong triển khai thực tế, người ta thường không tin hoàn toàn vào xác suất đầu ra của softmax mà dùng sampling mechanism
    • Softmax ở bước đầu ra được xem là lựa chọn hợp lý vì nó đóng vai trò cung cấp gradient cho toàn bộ vocabulary

Giới hạn của attention softmax bên trong

  • Công thức cốt lõi của attention bên trong là như sau

[ \textrm{Attention}(Q, K, V) = \textrm{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V ]

  • Trong decoder-only model, (Q), (K), (V) đều bắt đầu từ cùng một chuỗi đầu vào nhưng được projection theo các cách khác nhau
  • (QK^T) tìm tương quan giữa các token embedding vector, rồi áp dụng softmax cho từng hàng để dùng làm trọng số trộn các value vector trong ma trận (V)
  • Multi-head attention thực hiện quá trình này song song ở nhiều head trong mỗi layer
    • Embedding vector được chia thành nhiều segment, và mỗi head bổ sung thông tin vào một segment của vector đầu ra
  • Vấn đề là softmax buộc mỗi attention head phải tạo ra một annotation
    • Dù head không có thông tin gì để thêm thì softmax vẫn ép phải đưa ra một lựa chọn
    • Head càng chuyên biệt thì càng có khả năng cần “pass”, nhưng softmax hiện tại không có cơ chế abstention

Đề xuất: softmax_1 và QuietAttention

  • Thay đổi được đề xuất là thêm 1 vào mẫu số của softmax

[ (\textrm{softmax}_1(x))_i = \frac{\exp(x_i)}{1+\sum_j \exp(x_j)} ]

  • Softmax hiện tại khiến mỗi hạng tiến về (1/k) ngay cả khi mọi giá trị (x) đều trở nên rất âm

[ \lim_{x_1 \to -\infty} \ldots \lim_{x_k \to -\infty} (\textrm{softmax}(x))_i = \frac{1}{k} \gt 0 ]

  • softmax_1 thì khiến mỗi hạng tiến về 0 trong cùng điều kiện

[ \lim_{x_1 \to -\infty} \ldots \lim_{x_k \to -\infty} (\textrm{softmax}_1(x))_i = 0 ]

  • Nhờ khác biệt này, attention head có thể chọn không bổ sung thông tin
  • Công thức attention được đề xuất là như sau

[ \textrm{QuietAttention}(Q, K, V) := \textrm{softmax}_1 \left(\frac{QK^T}{\sqrt{d}}\right)V ]

Tính chất của softmax_1 và điều kiện thí nghiệm

  • softmax_1 làm giảm nhẹ toàn bộ giá trị, nhưng vì sau attention có normalization nên mức thu nhỏ đó có thể được bù lại
  • Tỷ lệ tương đối giữa các phần tử của vector đầu ra vẫn giống softmax hiện tại

[ \frac{(\textrm{softmax}_1(x))_i}{(\textrm{softmax}_1(x))_j} = \frac{(\textrm{softmax}(x))_i}{(\textrm{softmax}(x))_j} = \frac{\exp(x_i)}{\exp(x_j)} \quad \forall \ i, j ]

  • Đạo hàm là số dương nên giữ được gradient khác 0, và tổng nằm trong khoảng từ 0 đến 1 nên đầu ra không vượt ra ngoài phạm vi kiểm soát
  • Vấn đề này được xem là vấn đề toán học chứ không phải numerical precision, nên chỉ tăng độ chính xác số học thì không giải quyết được
  • Ý tưởng thí nghiệm là gắn một zero vector vào trước mọi ngữ cảnh đầu vào, đồng thời bảo đảm không có bias nào được thêm vào, kể cả từ positional encoding
    • Nếu giá trị zero đi xuyên suốt không đổi, nó sẽ tạo hiệu ứng cộng thêm 1 vào mỗi mẫu số của softmax về sau
    • Cách này có thể thực hiện được với mô hình LLaMA dùng fixed embedding và special prefix token
  • Đây không phải thí nghiệm có thể áp dụng trực tiếp lên mô hình hiện có mà cần huấn luyện lại mô hình
  • Các giá trị cần kiểm tra là sự thay đổi của weight kurtosis và activation infinity norm

1 bình luận

 
GN⁺ 2023-07-25
Ý kiến trên Hacker News
  • Điều tác giả đề xuất không phải là softmax của đầu ra cuối cùng, mà là thêm 1 vào mẫu số của softmax bên trong attention
    Softmax của attention khiến việc khớp key/query trông như xác suất, cho phép tra cứu key-value bằng trọng số giá trị liên tục thay vì tra cứu 0/1
    Nếu thêm 1 vào mẫu số, tổng trọng số sẽ nhỏ hơn 1 nên không còn là một vector xác suất đúng nghĩa, nhưng nếu mô hình học được trọng số cao thì nó gần như hoạt động như một vector xác suất; và nó cũng có thể chọn “không chắc chắn về bất cứ thứ gì” bằng cách cho tất cả trọng số đều thấp
    Thực tế có tốt hay không thì chỉ có cách huấn luyện LLM theo cách này mới biết. Tuy vậy tôi nghĩ khác biệt sẽ không lớn. Các nút attention có độ chắc chắn thấp vốn đã có thể tạo ra các điểm số trước softmax gần giống nhau để tạo phân phối gần như đều, và khi đó nó trở thành trung bình của nhiều vector, về mặt thống kê có khả năng tiến gần 0
    Ngoài ra trong Transformer đã có rất nhiều trọng số học được có thể triển khai opt-out, như ma trận V và lớp feed-forward sau attention. Dù vậy tôi thích giọng điệu phi học thuật của bài viết và thái độ muốn động chạm đến ý tưởng nền tảng; tôi chưa hoàn toàn bị thuyết phục, nhưng muốn đọc thêm những bài như thế này

    • Theo tôi hiểu, tác giả dường như nói rằng thay đổi này làm các giá trị lớn biến mất, nhờ đó có thể mã hóa đầu ra Transformer bằng ít bit hơn và giảm yêu cầu bộ nhớ của mạng
      Vì bộ nhớ là nút thắt khi chạy các mô hình lớn, nếu đúng thì điều này có ý nghĩa khá lớn
    • Tôi thích mô hình khái niệm mà tác giả đề xuất hơn
      Như đoạn nói ban đầu muốn gọi hàm này là ghostmax, có thể xem như x có thêm một mục giá trị 0 và vì exp(0)=1, nên trong ma trận V cũng có một vector 0 làm suy yếu kết quả
      Thay vì nói “tổng trọng số nhỏ hơn 1 nên đôi khi không chọn gì cả”, nên xem là mỗi khi cân nhắc tập lựa chọn, hệ thống cũng bị buộc phải cân nhắc cả lựa chọn không làm gì cả
      Đó là khác biệt giữa “nếu chỉ có búa thì mọi thứ trông như đinh” và “dù chỉ có búa, vẫn đóng đinh và bỏ qua những thứ không phải đinh”
      Ví dụ, một hệ thống speech-to-text trước hết yêu cầu con người chỉ định ngôn ngữ, rồi nếu đưa âm thanh của ngôn ngữ đó vào thì nó tạo bản chép lời khá ổn; nhưng nếu bước chọn ngôn ngữ đầu tiên sai thì nó nói nhảm, điều này rất bất tiện. Với một bộ chép lời tiếng Anh, khi nhận âm thanh tiếng Pháp, trước tiên nó nên nói “đây không phải tiếng Anh” thì mới gần với cách con người làm
    • Muốn kiểm chứng có tốt hay không thì chỉ cần huấn luyện hai mô hình giống hệt nhau trên một tập dữ liệu lớn
      Một mô hình thêm +1 vào mẫu số softmax của module attention, một mô hình thì không. Cần cho thấy hiệu năng tương đương, và cho thấy ở mô hình +1 hiện tượng bùng nổ giảm đi nên lượng tử hóa hiệu quả hơn
    • Tôi khó đồng ý với ý rằng “nếu độ chắc chắn thấp thì chỉ cần làm cho điểm số trước softmax giống nhau”
      Giống như mạng nơ-ron không mô hình hóa tốt hàm đồng nhất nên cần kết nối residual, tôi nghĩ chúng cũng khá yếu trong việc học ngầm các biến đổi entropy thấp
      Dù không làm tăng khả năng biểu diễn, nó có thể có tác dụng “nhúng sẵn” vào mô hình một kiểu biến đổi tìm kim đáy bể mà gradient descent khó tiếp cận. Thực tế hữu ích đến mức nào thì tôi không rõ
    • Kỹ thuật này đã được biết đến từ nhiều năm trước và cũng có trong PyTorch
      Nó không được dùng rộng rãi vì mọi người đã thử và trên thực tế nó không hoạt động tốt lắm. Việc bài gốc gọi đây là “lỗi bị bỏ qua hơn 8 năm” khá giống clickbait
  • Có thể tôi đã bỏ sót điều gì đó, nhưng tôi không hiểu vì sao các bình luận lại xem đây là chuyện lớn đến vậy. Thực tế tôi đã thấy thủ thuật này nhiều lần
    Ví dụ trong một kho lưu trữ cũ của Google cũng có mã như thế này: https://github.com/google/flaxformer/blob/ee62754ebe5a5eeb11...

    • Đúng vậy. Vài năm trước chúng tôi cũng dùng cái này trong mô hình cũ. Tôi không nhớ chính xác chi tiết, nhưng có vẻ nó không có nhiều tác dụng
      Tôi nghĩ nó hoàn toàn không giúp gì cho độ ổn định. Khi mở rộng quy mô, với độ ổn định của softmax thì các thủ thuật như Q/K layernorm tốt hơn: https://arxiv.org/pdf/2302.05442.pdf
    • Nếu các mô hình phổ biến vẫn đang mắc lỗi này thì vẫn đáng chú ý
      Viết blog post hoặc bài báo để nâng cao nhận thức cũng hoàn toàn có giá trị. Việc một ý tưởng hay được phát hiện độc lập nhiều lần cũng rất thường gặp
    • Điểm mấu chốt là liệu mọi người đã thử điều này trong lượng tử hóa, tức các phương pháp int8 / GGML / GPTQ hay chưa
      Việc phân phối phẳng hơn do mẫu số lớn hơn có dẫn đến hành vi lượng tử hóa tốt hơn hay không chỉ có thể biết bằng cách so sánh trực tiếp trường hợp có +1 và không có +1. Bài gốc cho rằng lợi ích này có thể lớn
    • Lập luận hơi đáng ngờ
      Về mặt kỹ thuật, softmax không được triển khai đúng như công thức được đưa ra mà là exp(x_i-max(x)), rồi cộng các giá trị đó ở mẫu số. Có thể tôi đã bỏ sót gì đó
      Ngoài ra, kết nối residual được dùng vì mạng không học được hàm đồng nhất, nhưng 0 thì có thể học được. Vì vậy trong f(x): x+g(x), chỉ cần g:x ~> 0, tức gần như bằng 0
      f(x): x+g(x) cũng giúp gradient chảy dễ hơn
  • Thủ thuật được “phát hiện” này là một phần trong triển khai chuẩn của attention đa đầu PyTorch, có tên là add_zero_attention
    Vì thêm 0 vào logit nên e^0=1, tạo ra 1 ở mẫu số: https://pytorch.org/docs/stable/generated/torch.nn.Multihead...

    • Tài liệu khá tệ. Nó chỉ nói đại ý “nếu chỉ định, thêm một batch mới toàn 0 vào chuỗi key và value tại dim=1”
      Nó không giải thích ý nghĩa dù chỉ rất ngắn. Chỉ cần thêm câu thứ hai như tôi vừa viết cũng sẽ hữu ích hơn nhiều
    • Đây là tùy chọn mặc định false. Vậy có nghĩa là mọi người đã thử rồi và thường nó không giúp ích chăng?
    • Bắt đúng điểm đấy. Hy vọng tác giả bài gốc thấy được
    • https://en.wikipedia.org/wiki/Multiple_discovery
  • Dù không phải nói về AI hay thuật toán này, vẫn có những trường hợp dù nói mãi rằng một lỗi nhỏ là lỗi thì cũng không thuyết phục được ai
    Năm 2011, khi tôi xem mã nguồn để sao chép thuật toán xếp hạng của reddit cho dự án của mình, nó có hành vi hoàn toàn vô lý với các bài đăng có tổng phiếu âm
    Tôi thấy trong một công thức đơn giản, một hạng tử đã bị đổi chỗ và dấu dương/âm bị áp dụng sai. Vì vậy tôi viết lên blog và đăng lên reddit, nhưng rất nhiều người, kể cả nhân viên reddit, nói rằng tôi hoàn toàn sai và thuật toán đang hoạt động đúng như dự định
    Họ còn nói trước đó cũng đã có người nhận ra và chỉ ra điểm tương tự, nhưng tất cả đều bị bảo là sai
    Cuối cùng tôi sửa bài blog thành “những người thông minh hơn tôi nói rằng thuật toán reddit không có lỗi, chỉ là biến thể của tôi thì có lý hơn với tôi”
    Thế nhưng 3 năm sau, vào năm 2014, chính bản sửa mà tôi và những người trước tôi vẫn luôn đề xuất đã được commit vào mã nguồn reddit: https://github.com/reddit-archive/reddit/commit/50d35de04b92...
    Mã nguồn mở cho phép nhiều con mắt tìm ra lỗi, nhưng đôi khi bạn không thuyết phục được ai rằng mình đã tìm thấy lỗi. Tất nhiên, reddit đã đóng mã vào năm 2017
    Rốt cuộc trong ứng dụng của mình tôi cũng không đưa vào tính năng xếp hạng mà ban đầu định sao chép, lẫn tính năng bỏ phiếu

    • Khoảng năm 2008, khi làm thực tập sinh ở Yahoo và tạo một công cụ nội bộ để sinh URL OAuth 1.0, tôi cũng gặp chuyện tương tự
      Phải mã hóa nhiều giá trị trong tham số truy vấn, và một số tham số cụ thể thực ra phải được mã hóa hai lần, nên công cụ của tôi cũng làm như vậy. Nhưng kỹ sư triển khai cứ khăng khăng rằng công cụ của tôi sai, lôi cả chuyện tôi là thực tập sinh ra nói, thậm chí viện dẫn đặc tả OAuth rồi diễn giải gượng ép rằng cách triển khai của anh ta đúng còn tôi đọc sai
      Cuối cùng phải gọi Eran Hammer-Lahav vào xác nhận thì mới kết luận rằng tôi đúng, và lúc đó kỹ sư kia mới thừa nhận rằng hiển nhiên như thế mới đúng. Hoàn toàn không có lời ghi nhận hay xin lỗi nào cho mấy ngày công kích cá nhân
      Tôi rút ra một bài học quan trọng rằng người cấp cao hơn không phải lúc nào cũng đúng, và giờ thường tôi là người ở vị trí cấp cao hơn, nhưng mỗi ngày tôi đều cố nhớ điều đó
    • Tôi làm ở FAANG, và thật sự ngạc nhiên khi biết chuyện như thế này xảy ra thường xuyên đến mức nào
      Chỉ cần là “người rải log khắp codebase rồi suy luận từng bước” thôi cũng có thể xây dựng một sự nghiệp dài và có ảnh hưởng. Ngay cả ở mức rất đơn giản, nhiều khi bạn sẽ thấy những bản sửa đáng kinh ngạc cho các vấn đề tồn đọng lâu năm
      Tuy nhiên, cũng kéo theo khá nhiều trò chính trị. Phản ứng đầu tiên của mọi người là phủ nhận, rồi sau đó còn tệ hơn. Chỉ có 1–2 người nhìn nhận kiểu “à, vậy sửa là được”, còn sẽ có ai đó gửi email CC đến tận sếp của sếp của sếp, diễn đạt thật hoa mỹ rằng “thiếu cân nhắc về đồng thời/bộ nhớ/vân vân”
      Những lúc đó tốt nhất là im lặng chờ đợi, đừng đối đầu hay phàn nàn. Nếu chẳng có chuyện gì xảy ra, lãnh đạo cũng không hỏi, nhưng đồng nghiệp bắt đầu hỏi, thì tốt hơn là lên kế hoạch chuyển sang đội khác
    • Tôi vừa xem mã, và nó sai quá rõ ràng. Chắc hẳn đã rất bực bội
    • Nghĩ lại vài tháng qua thì cũng không ngạc nhiên khi các tương tác với nhân viên reddit lại diễn ra theo kiểu đó
  • Có một thảo luận thú vị về đặc trưng ngoại lệ và lượng tử hóa: https://timdettmers.com/2022/08/17/llm-int8-and-emergent-fea...
    Các giá trị ngoại lệ được dùng để tỉa bớt giá trị, và Transformer dường như trải qua một “chuyển pha” trong cách xử lý các đặc trưng ngoại lệ quanh mức khoảng 6,7 tỷ tham số. Điều này có thể khiến các nghiên cứu loại bỏ trở nên phức tạp
    Có lẽ có nhiều điều đáng trao đổi với Tim Dettmers

  • Tác giả đã chỉ ra một vấn đề thực tế và đề xuất một cách giải quyết đơn giản. Theo tiêu chí nhận diện “dân lập dị” của tôi thì đều đạt
    Về câu hỏi “vì sao không ai nghĩ ra điều này?”, lời giải thích rằng tác giả rất quen thuộc với hàm softmax trong các công việc ngoài machine learning, còn những người điều tra vấn đề này dù đã thu hẹp đến mức “một thứ gì đó liên quan đến softmax” nhưng có thể chưa hiểu đủ sâu về chính softmax, nghe khá hợp lý
    Tuy vậy, nếu tác giả bài gốc đọc được bình luận này thì tôi mong họ giải thích thêm về tuyên bố “sẽ giải quyết vòng lặp phản hồi outlier với xác suất 99,44%”. Hiện tại, câu đó là phần giải thích duy nhất về việc outlier có thể liên quan đến softmax như thế nào

    • Hóa ra đã có người nghĩ đến rồi. Cụ thể là Google, và ý tưởng này đã có trong flaxformer ít nhất từ tháng 11/2021
      https://github.com/google/flaxformer/blame/ee62754ebe5a5eeb1...
      Chú thích ghi: “Hàm softmax với một logit ảo bổ sung bằng 0. Dùng để tương thích với một số mô hình đã được huấn luyện trước đó. Điều này tương đương với việc cộng thêm 1 vào mẫu số. Trong ngữ cảnh attention, nó cho phép không nhìn vào gì cả”
      Nó tạo ra đúng biến thể softmax đã sửa giống như bài viết này. Thời gian sẽ trả lời vì sao nó bị bỏ qua công khai. Có thể hiệu quả không đáng kể, có thể chỉ bị chôn vùi, hoặc có thể Google đã không thúc đẩy nó
    • Thiếu phần kiểm chứng quan trọng nhất: kết quả
      Họ không thực sự thử nghiệm, chỉ nghĩ rằng nó sẽ hoạt động. Với một thay đổi đơn giản như vậy đối với softmax, việc kiểm chứng hẳn không mất nhiều thời gian; không làm trước khi xuất bản thì khá ngượng
    • Lời giải thích “vì sao không ai nghĩ ra? Vì tác giả hiểu sâu về softmax từ bên ngoài machine learning” nghe đáng nghi
      Softmax được cộng đồng machine learning hiểu rất rõ. Đây là một thủ thuật rất phổ biến và các tính chất kiểu này cũng đã được biết đến nhiều. Khả năng không ai từng nghĩ đến có vẻ thấp
      Dù vậy, vẫn có khả năng quy ước softmax hiện tại được chọn một cách ngẫu nhiên, và tác giả đã chỉ đúng nhược điểm của nó
    • Có thể là vì hiệu ứng của vấn đề này khá tinh tế
      Ngay cả nếu chẩn đoán là đúng, các LLM dùng độ chính xác đầy đủ vẫn có thể tránh vấn đề bằng cách gán trọng số attention lớn cho các token vô nghĩa để tạo ra đầu ra attention vô hại
      Vấn đề này chỉ trở nên quan trọng khi lượng tử hóa trọng số, mà mục tiêu của phát triển LLM tiên tiến gần đây không nhất thiết là hiệu năng lượng tử hóa
    • Tôi đọc “chắc chắn 99,44%” như một câu đùa về xác suất bị hiệu chỉnh sai của softmax
      Kiểu như softmax rất giỏi đưa ra mức chắc chắn 99,9% hoặc 0,1%, nhưng không có nhiều mức ở giữa
  • Tôi biết trên HN đang thịnh hành việc phàn nàn về giới học thuật, nhưng bài blog này không lập luận tốt
    Lẽ ra có thể truyền đạt ý chính trong 1/4 độ dài, thậm chí có lẽ ít hơn 1/8, nhưng nó lại được bọc trong văn phong suồng sã và những lời phàn nàn được che đậy mỏng về xuất bản học thuật
    Kết quả là cuộc thảo luận ở đây không xoay quanh kết quả hay ý tưởng của bài viết, mà thành 200 bình luận về xuất bản học thuật vs blog, văn phong trang trọng vs không trang trọng
    Nếu muốn đưa một bài blog lên trang nhất HN thì đó có thể là phong cách tốt. Nhưng nếu muốn mọi người xem xét và thảo luận ưu nhược điểm của ý tưởng thì không hay

    • Cuối cùng, đó chính là lý do căn bản khiến chúng ta đi đến nền kinh tế chú ý
      Con người có lượng chú ý hữu hạn để dành cho mọi thứ, nhưng năng lực và nhu cầu muốn được chú ý thì vô hạn. Đó là điều Michael Goldhaber đã nói
      Đây trở thành mầm mống của bùng nổ thông tin. Những thứ như 6 tỷ video hướng dẫn luộc trứng, hay 200 bình luận kiểu “nhà để xe đạp”
      Để ngăn chuyện này, các nơi như Google, Facebook, HN xếp hạng bình luận, liên kết và newsfeed, nhưng vì phần lớn tập hợp được đem xếp hạng là nhảm nhí, nó chỉ trở thành một tầng nhảm nhí khác
      Chúng ta vẫn chưa thiết kế được hệ thống thông tin phản ánh những gì Goldhaber đã nói về sự chú ý từ 30–40 năm trước
    • Bạn chế giễu rằng “lên trang nhất HN”, nhưng nếu diễn đạt lại thành “thảo luận một điều gì đó được quan sát không chính thức” thì sự hạ thấp đó mất tác dụng
      Mục đích có thể vừa là cung cấp thông tin vừa là đem lại sự thú vị. Nhiều người thích những thảo luận lỏng lẻo quanh ý chính, và tác giả cũng có thể thích điều đó hơn giọng điệu lâm sàng, hình thức của bài báo học thuật
    • Nhân tiện, có người đã chỉ ra rằng API Multihead Attention của PyTorch có một cách обход tùy chọn cho vấn đề này
      Dù vậy, hơi khó chịu là để thấy được điều đó, phải lướt qua 200 bình luận phàn nàn lạc đề
  • Tôi đã thử một thí nghiệm tương tự, và trong thiết lập của tôi nó không giúp ích
    Tôi không dám chắc là không có bug hay gì đó, nhưng có vẻ việc attention vào vị trí hiện tại phần nào giải quyết vấn đề này. Khi không nên nói gì thì nó chỉ xuất giá trị của vị trí hiện tại
    Chính xác thì tôi không cộng 1 vào mẫu số softmax, mà gắn một attention sink là tham số học được vào trước QK, rồi loại bỏ nó sau softmax để khi nhân với V thì tổng không còn bằng 1
    Tôi cũng đã thử biến thể nhìn vào vị trí hiện tại và biến thể không nhìn, cũng như biến thể tạo sink bằng mạng feed-forward ở từng vị trí thay vì dùng tham số học được. Trong thiết lập của tôi, không biến thể nào tạo khác biệt lớn, nhưng vì cũng có nhiều yếu tố kỳ lạ khác xen vào nên có thể vẫn đáng thử lại

    • Khi nói là không giúp ích, tôi tò mò bạn đã đo cái gì
      Trong ngữ cảnh bài này, cả hiệu năng tác vụ lẫn số lượng và độ lớn của các trọng số outlier có vẻ đều quan trọng
    • Anh ấy đang quảng bá rằng cách này sửa các outlier nổi bật. Các biến thể của bạn ban đầu có những outlier như vậy không?
  • Không thấy kết quả đâu cả. Nếu có các con số bổ trợ cho lý thuyết thì đã mạnh và thuyết phục hơn nhiều
    Việc tinh chỉnh một mô hình ngôn ngữ hiện có trên dữ liệu nhỏ để kiểm tra xem nó có hoạt động hay không không quá khó
    Dù vậy, tôi cũng có suy nghĩ tương tự rằng có thể tồn tại công thức attention tốt hơn. Bài báo năm 2020 https://arxiv.org/abs/2005.09561 đã giúp ích rất nhiều trong một mô hình Transformer mà tôi huấn luyện. Đó không phải là mô hình ngôn ngữ thông thường, mà là một bài toán đồ thị đa phương thức chuyên biệt
    Bài báo này đề xuất attention được chuẩn hóa, và nếu tôi không nhầm thì nó cũng có thể giúp cho vấn đề lượng tử hóa

  • Cách này từng được dùng thường xuyên trước khi dummy token trở nên phổ biến. Tôi lần đầu thấy ý tưởng này qua bài báo XLNet
    Theo tôi biết thì nó đã có trong PyTorch từ năm 2019/2020, và chắc ai đó cũng có thể tìm được tài liệu tham khảo còn sớm hơn
    Tôi khá ngạc nhiên trước thái độ phóng đại của bài gốc. Nhất là khi đó là nội dung mà hầu hết các nhà nghiên cứu Transformer đều hiểu. Tôi cũng ngạc nhiên khi trong các phản hồi có nhiều quan điểm kiểu “nghiên cứu phải làm như thế này”. Đây gần như là một ví dụ cho thấy vì sao nghiên cứu không vận hành theo cách đó, và bình duyệt đồng cấp tốt ở nhiều mặt; một trong số đó là giúp giảm bớt những việc khiến bản thân phải ngượng ngùng

    • Anh ta không hề kiêu ngạo. Mọi người thích giọng văn thân mật, thẳng thắn và tự giễu, mà đó là điều trái ngược với kiêu ngạo
      Có vẻ như họ đang đọc sự tự giễu mơ hồ thành một tuyên bố nghiêm túc
      Tóm lại vì sao nó đủ quan trọng để chia sẻ: đây là một vấn đề khá ngách, chỉ quan trọng khi bạn cố chạy một bản mô phỏng mờ nhạt của ChatGPT trên phần cứng hạn chế. Vì vậy hoàn toàn có khả năng các nhóm nghiên cứu lớn không coi trọng nó. Dù sao họ cũng đâu có định chạy LLM trên 3090
    • Nhận xét “kiêu ngạo” nghe lạ
      Bài viết có giọng văn đời thường, tự giễu và hài hước. Tôi không rõ ưu nhược điểm ra sao, nhưng phần lập luận thì hoàn toàn theo dõi được. Nó khác xa với kiêu ngạo
      Câu “giảm bớt những việc khiến bản thân phải ngượng ngùng” hàm ý rằng nếu sai hoặc không phải phát hiện đầu tiên thì sẽ đáng ngượng. Chẳng phải chính điều đó mới là kiêu ngạo sao?