Nếu các bạn chưa tự tin về Transformers thì hãy đọc qua phần 1 và phần 2 nhá. Phần 1 ở đây, phần 2 ở đây.
Toàn bộ bài viết này là note của mình cho bài báo
[] (cũng là bài báo favorite của mình).
1. Một góc nhìn tổng quát
Một mô hình transformers sẽ bắt đầu token embedding, đưa một token (one-hot vector) thành một vector embedding thông qua embedding matrix , tiếp sau đó là một chuỗi các residual blocks, và cuối cùng là đến token unembedding, đưa một vector embedding (layer cuối) sang vector logits thông qua unembedding matrix .
Mỗi residual block (hay transformers block) sẽ bao gồm một attention layer và sau đó là một MLP layer. Cả attention layer và MLP layer read (đọc) input từ residual stream (đường thẳng từ đến và tương tự đến như hình) và sau đó write (ghi) kết quả của chúng (các layer) vào residual stream bằng cách dùng residual connection .
2. Residual Stream là một kênh liên lạc giữa các component Transformers với nhau
Nếu ta xem Transformers như một cái máy tính siêu phức tạp thì Residual stream là một trong những tính năng chính của Transformers (thật ra residual stream đã xuất hiện trong những model xưa hơn ví dụ cell memory của LSTM hay ResNet). Residual stream chỉ đơn giản là tổng của ouput layer trước đó (ví dụ là attention layer hoặc MLP layer) với embedding ban đầu (ví dụ là vector embedding ).
Ta xem residual stream là một communication channel bởi vì nó không thực hiện bất kỳ phép toán hay xử lý nào (ví dụ MLP sẽ thực hiện nhân ma trận) và mọi layers (hay các component) thực hiện liên lạc với nhau (bằng cách read thông tin từ layer trước đó và write để tạo thông tin mới cho layer sau) thông qua residual stream.
Residual stream có linear structure (cấu trúc tuyến tính) (khác với ResNet, ở mỗi residual connection của ResNet đều sử dụng thêm activation ví dụ như ReLU
). Mỗi layer trong residual block thực hiện các linear transformation (ánh xạ tuyến tính) bất kỳ để read input từ residual stream. Ngoài ra, trước khi write outputs của layer ấy vào residual stream, layer cũng thực hiện các linear transformation.
- Giờ ta sẽ tập trung vào attention layer trước, nhắc lại, mỗi vector embedding sẽ được chiếu (hay nói cách khác, nhân ma trận) để trở thành các query, key, value vector thông qua các ma trận tương ứng (đây chính linear transformation để đọc input từ residual stream). Sau khi đã tính được giá trị (chính là output của một attention head), giá trị này sẽ được chiếu lần nữa thông qua (đây chính là linear transformation trước khi write ouputs của layer vào residual stream).
- Thông thường (theo bài báo gốc), MLP của Transformers bao gồm 1 hidden layer, vậy tức là ở lần đầu tiên, input sẽ được chiếu vào hidden layer thông qua 1 linear transformation (read) sau đó hidden layer này được chiếu sang output layer thông qua 1 linear transformation nữa (before write) và cuối cùng đưa qua activation (write).
Một trong những hệ quả của tính linear, addtive (tuyến tính và cộng) của residual stream chính là residual stream không có cơ sở ưu tiên (privileged basis) 1. Vì vậy, ta có thể xoay (rotate) các ma trận mà tương tác với residual stream mà không làm thay đổi hành vi (behaviors) của model.
a. Cơ sở ưu tiên
- Xét một không gian vector gồm chiều, khi đó basis (cơ sở) là tập hợp vector độc lập tuyến tính với nhau, gọi là sao cho . Tức là mọi vector trong không gian vector đều có thể viết thành tổ hợp tuyến tính của basis tương ứng. Ở đây vector space có thể chính là không gian hidden state của model và vector space ấy có (model dimension) chiều.
- Thông thường khi nhắc đến basis, ta quan tâm nhiều hơn đến standard basis (cơ sở chuẩn), gọi là và có duy nhất vị trí là , còn lại là (ví dụ như trục cho vector space 3 chiều).
Dựa theo định nghĩa của bài báo gốc 1:
A privileged basis occurs when some aspect of a model’s architecture encourages neural network features to align with basis dimensions, for example because of a sparse activation function such as ReLU.
Bây giờ ta sẽ giải thích từng câu để làm rõ cơ sở ưu tiên:
Dựa theo
Điều quan trọng là feature này được biểu diễn như thế nào bên trong mạng.
- Trong một cơ sở ưu tiên, một feature có thể được biểu diễn bởi một neuron duy nhất (hoặc một nhóm nhỏ các neuron). Bởi vì ta có thể mỗi neuron là một trục trong hệ cơ sở của không gian chiều (đối với neuron), do đó mỗi trục này sẽ gần như ứng với một feature.
- Trong một cơ sở không ưu tiên (non-privileged basis), một feature có thể là một sự kết hợp phức tạp của nhiều neuron (như đã nói ở trên, một neuron xem như một vector, vì vậy feature là một tổ hợp tuyến tính của các neuron).
Để làm rõ hơn, giờ ta lấy ví dụ một neural network (MLP) đơn giản được huấn luyện để nhận dạng các hình dạng trong ảnh. Ta sẽ tập trung vào một hidden layer, gọi là Layer .
- Layer L có neuron. Vì vậy, không gian kích hoạt (activation space) của có 4 chiều.
- Các vector cơ sở cho không gian này là các cơ sở chuẩn:
- (trục của Neuron 1)
- (trục của Neuron 2)
- (trục của Neuron 3)
- (trục của Neuron 4)
Mục tiêu của chúng ta là phát hiện ba hình dạng cơ bản: hình vuông, hình tam giác và hình tròn. Sau khi huấn luyện, mạng có thể học được rằng:
-
(1) Không có ReLU
- Một hình vuông được biểu diễn bởi vector
[1.2, -0.9, 0.8, 1.1]
. Đây là một dense vector (ít các phần tử bằng ) chỉ theo một hướng bất kỳ trong không gian 4D. - Một hình tam giác được biểu diễn bởi
[-0.8, -1.1, 1.3, -0.9]
. - Một hình tròn được biểu diễn bởi
[1.4, 1.2, 0.1, -0.7]
- Có thể thấy, nếu không có ReLU, mỗi feature là một tổ hợp tuyến tính cụ thể và phức tạp của cả bốn neuron. Ta không thể chỉ vào một neuron duy nhất và nói “đây là neuron chuyên phát hiện hình vuông”. Các feature không thẳng hàng (align) 2 với các vector cơ sở. Đây là một cơ sở không ưu tiên.
- Một hình vuông được biểu diễn bởi vector
-
(2) Có sự xuất hiện của ReLU
- Một hình vuông được biểu diễn bởi vector
[1.2, -0.9, 0.8, 1.1]
lúc này trở thành[1.5, 0, 0, 0.1]
. Có thể thấy vector này sparse (thưa) và đặc biệt hơn là vector này có thể được xấp xỉ bằng với , do đó feature hình vuông này được “align” hoàn toàn với neuron đầu tiên. - Tương tự với hình tròn và hình tam giác, ta có các vector sau ReLU lần lượt là
[1.4, 1.2, 0.1, 0]
và[0, 0, 1.3, 0]
. Feature hình tam giác hoàn toàn align với neuron 3. Trong khi đó feature hình tròn lại phức tạp hơn khi cần 2 neuron để biểu diễn là neuron 1 và neuron 2 (điều này còn cho thấy, neural network xem feature hình tròn rất gần với feature hình vuông).
- Một hình vuông được biểu diễn bởi vector
- Có thể thấy nhờ sự xuất hiện của ReLU (hay theo định nghĩa gốc, “occurs when some aspect of a model’s architecture encourages neural network features to align with basis dimensions”), các feature đã được align với từng neuron, vì vậy ta có thể “tự tin” chỉ tay vào từng neuron và bảo rằng neuron này trách nhiệm cho phát hiện hình vuông, … Điều này làm cho biểu diễn có thể diễn giải được, và đó là những gì ta gọi là một cơ sở ưu tiên (privileged basis). Một điều nữa đó là tính không tuyến tính (non-linear) của ReLU và cả tính sparse của vector kích hoạt (sau ReLU).
b. Xoay cơ sở
Hãy nghĩ về xoay như thế này:
- Mô hình với cơ sở không ưu tiên giống như một người ngoài hành tinh nói một ngôn ngữ khó hiểu (
u i i ai o uu ii a i
). Nó biết câu trả lời đúng, nhưng cách nó biểu diễn “tại sao lại có câu trả lời” ấy thông qua các feature được encode theo những hướng (cực kì lộn xộn) trong không gian nhiều chiều (có khi là cả trăm ngàn chiều với trăm ngàn neuron). - Trục Neuron (cơ sở tiêu chuẩn) là ngôn ngữ duy nhất chúng ta (con người) có thể “đọc” và “diễn giải” một cách trực tiếp. Nhưng việc này là vô dụng nếu đây một cơ sở không ưu tiên.
Mục tiêu của việc “xoay cơ sở” 3 là tìm ra một hệ tọa độ (cơ sở) mới mà align với các feature thực sự mà mô hình đã học. Quá trình tìm hệ tọa độ mới này về mặt toán học chính là một phép xoay. Khi đã tìm được “cơ sở diễn giải được” (interpretable feature) này, chúng ta có thể chỉ vào một trục hay neuron mới (một hướng đã được xoay) và tự tin nói: “Hướng này phát hiện hình tròn”.
Chúng ta xoay cơ sở để chúng ta, con người, có thể hiểu được mô hình.
Và một điểm đặc biệt của Residual Stream đó chính là xoay cơ sở không làm thay đổi hành vi (hay chính xác là output) của mô hình. Tại sao lại vậy ?
- Xét một ma trận xoay , đầu tiên là một orthogonal matrix (ma trận trực giao), tức là hay . Giả sử vector embedding nằm trên residual stream được xoay bằng ma trận xoay , khi đó ta có .
- Mỗi component (attention, mlp, …) nếu muốn tương tác (read, write) với residual stream thì cần phải xoay ma trận chiếu tương ứng của nó.
- Xét Attention Component:
- Input từ residual stream sẽ được read thông qua 3 ma trận , do đã rotate thông qua ma trận , để không làm thay đổi behavior, ta cần mới sao cho:
- Có thể thấy . Vậy, khi mà input ở residual stream bị xoay bởi ma trận thì các phép chiếu tuyến tính (hay chính là nhân ma trận) trong component sẽ “un-rotate” thông qua ma trận , tức là . Điều này cho thấy, các cách tính toán () bên trong component vẫn giữ nguyên không thay đổi.
- Tiếp theo ở operation write, attention layer sẽ write vào residual stream thông qua công thức sau:
- Do các giá trị trên residual stream đều rotate bởi , vì vậy:
- Có thể thấy nếu input xoay bởi ma trận , thì cùng lúc đó ma trận output cũng xoay bởi ma trận 4.
- Với residual stream, ta có thể thấy việc rotate input thông qua ma trận bất kỳ sẽ không làm ảnh hưởng đến các việc tính toán của các component (các component vẫn tính toán bằng đúng các tính toán trước khi rotate, ví dụ như: ). Vì vậy residual stream không phụ thuộc vào 1 basis bất kì nào (việc rotate sẽ thay đổi basis => ta nói residual stream là basis-free).
3. Virtual Weights (Trọng số “ảo”)
Nhờ tính linear của Residual Stream mà ta có thể xem như có một bộ trọng số “ảo” kết nối một cặp layer bất kỳ (cho dù khoảng cách giữa hai layer ấy có xa hay không). Bộ trọng số ảo này chính là tích ma trận giữa trọng số output của một layer và trọng số input của layer còn lại.
Xét component (kí hiệu là ) thứ , ta có , đặt là output của component thứ (trước khi chiếu qua trọng số output), do đó . Tổng quát lên, với mỗi component thứ , ta có:
Khi đó, ở component tiếp theo , component này sẽ read information từ residual stream, do đó input của sẽ là:
Có thể thấy, ở component layer sau, component này read information ở layer phía trước thông qua virtual weight (là tích của ma trận input layer hiện tại và ma trận output layer phía trước).
Tương tự, ở component tiếp theo, ta cũng có:
Tổng quát lên, một component read information từ component (với ) thông qua virtual weight . Virutal weight chính là thứ mà connect được output của component trước đó với input của component phía sau.
4. Không gian con và “thông lượng” (bandwitdh) của Residual Stream
Residual stream là một không gian nhiều chiều (thông thường, một mô hình nhỏ, ví dụ như bài báo gốc thì , hay những model lớn hơn thì có thể hàng ngàn như ở Gemma-2-2B, ). Điều này nghĩa là các layers gửi information (send information) của mình đến các layer khác bằng việc lưu trữ information trong một không gian con khác (ở đây residual stream là một không gian có chiều, trong đó sẽ có nhiều không gian khác nhau và các layers sẽ store information của mình trên những không gian con ấy).
Ta nói một tập hợp các subspace của vector space disjoint với nhau nếu:
- hay (này giống như một phép “hợp” trong tập hợp vậy).
Ở attention layer (thông thường là multi-head attetion), khi đó mỗi attention head sẽ có chiều là với là số lượng attention head (ở paper gốc, attention head có chiều là ), có thể thấy chiều của attention rất nhỏ so với residual stream. Do đó khi các attention head write (thông qua concatenation và linear projection) thì các information sẽ nằm trên một phần (hay một không gian con) của không gian vector residual stream, và các không gian con của các head ấy có thể disjoint với nhau 5.
Khi mà information được thêm (added) vào residual stream, nó sẽ nằm đó (persist) cho đến khi một layer khác thay đổi nó (bằng cách overwrite ví dụ như delete, add more, …). Từ góc nhìn này, ta có thể xem residual stream chính là memory hay bandwitdth, vì vậy (về mặt lý thuyết) việc tăng lên thì ta có thể lưu trữ được nhiều information từ các component hơn.
Một điều nữa là token embedding hay token unembedding thông thường chỉ tương tác (interact) với một phần nhỏ các chiều trong residual stream 6, do đó còn rất nhiều các chiều trống trong residual stream (nói cách khác là những phân vùng trống trong bộ nhớ) cho các layer còn lại lưu trữ thông tin của mình.
Ở đây ý chỉ đến chiều của những component có “khả năng tính toán” ví dụ như MLP, Attention Head (residual stream chỉ có khả năng lưu trữ information). Ví dụ chiều Attention Head layer thì có thể bằng (sau khi concat các attention head) tuy nhiên chiều của MLP (ở đây ta nói đến hidden layer) thông thường gấp 4 lần chiều của .
Ngoài ra, residual stream in very high demand (bởi vì đây là nơi duy nhất mà các layer có thể communicate với nhau, ngoài ra các layer liên tục read and write vào residual stream). Tuy nhiên, số chiều tính toán (computational dimensions) thường lớn hơn rất nhiều so với số chiều của residual stream (nghĩa là thông tin mà các component có thường rất lớn so với khả năng lưu trữ của residual stream memory).
Ta nói một (vector) activation là bottleneck activations nếu nó có chiều nhỏ hơn activations trước và sau nó (nằm giữa nhưng có chiều nhỏ hơn 2 activations còn lại gây ra nghẽn cổ chai). Tương tự như việc ta có một GPU và CPU quá mạnh nhưng memory lại quá yếu, do GPU và CPU chỉ có thể communicate với nhau thông qua memory => nghẽn cổ chai, làm chậm PC của chúng ta đi rất nhiều.
- Ví dụ, residual stream chính là một bottleneck activation, các MLP ở các layer khác nhau (thông thường có activation nhiều chiều hơn residual stream) muốn comunicate với nhau phải thông qua residual stream (do đó residual stream nằm giữa 2 layer MLP có (rất) nhiều chiều hơn so với mình). Ngoài ra, residual stream chính là con đường duy nhất để một layer MLP bất kỳ communicate với các layer MLP phía sau, hơn nữa, residual stream còn phải lưu trữ các information đến từ các lớp MLP khác trên đường dẫn đến extreme bottleneck.
- Tương tự, một value vector (trong của attention head) cũng là một bottleneck activation.
- Đầu tiên, value vector sẽ có chiều là với là số attention head do đó có chiều nhỏ hơn rất nhiều so với residual stream.
- Đặt là residual stream tại token ở position , do đó value vector của sẽ là . Khi đó, value vector được dùng để update residual stream ở position , tức là:
- Có thể thấy, information từ residual stream sẽ compressed (nén vào) vào sau đó được chuyển sang residual stream ở token position mới là , vì vậy giữa 2 residual stream, value vector chính là bottleneck activation, ngoài ra có thể thấy value vector là cách duy nhất để move information từ token này sang token khác.
Bởi vì tính chất high demand của residual stream bandwidth, ta có thể thấy các một vài MLP neurons hoặc các attention head thực hiện chức năng memory management ví dụ như clearing residual stream dimensions by other layer bằng cách đọc information và write negative của information đó (giống như việc có một app thực hiện dọn bộ nhớ, dọn ở đây chính là ghi vào một thông tin “negative” của thông tin cần xoá, vì vậy triệt tiêu nhau).
5. Các Attention Head hoạt động độc lập với nhau
Có thể thấy, attention layers của Transformers bao gồm nhiều attention heads hoạt động độc lập và song song với nhau và sau đó, mỗi attention head sẽ thêm output của mình vào residual stream.
Nhắc lại Attention:
Giả sử, là output của attention head thứ , tương tự ta có là output của attention head thứ (có chiều là và là vector dòng). Theo paper gốc, khi hoàn thành output, ta concat các attention head lại với nhau và nhân với output matrix . Đặt là component (ma trận con) thứ của có chiều là , tức là sẽ gồm component của và các component được vstack với nhau, ta có:
Có thể thấy việc tính toán output cuối cùng tương tự như việc tính từng attention head một cách độc lập với nhau sau đó nhân với từng output matrix tương ứng (là các component của output matrix tổng), cuối cùng cộng lại rồi được kết quả cuối và lấy kết quả cuối cùng ấy đưa vào residual stream.
6. Attentions Heads chính là nơi để thông tin “di chuyển”
Câu hỏi: Nếu các Attention Head hoạt động độc lập với nhau, chúng thực sự làm gì ?
Hoạt động cơ bản nhất của attention heads đó chính là moving information. Các attention head read information từ residual stream của một token này và sau đó write information ấy vào residual stream của token khác.
The main observation to take away from this section is that which tokens to move information from is completely separable from what information is “read” to be moved and how it is “written” to the destination (note: mình không hiểu câu này lắm).
Để nhìn rõ hơn, ta nhìn kĩ vào cách tính toán của Attention Head:
- Đặt là residual stream value tại token (ở đây mình sẽ xem các vector này vector cột giống như paper thay vì vector dòng), khi đó value vector sẽ là .
- Khi đó giá trị head (hay result vector trước khi nhân với output matrix) là (trong đó là giá trị softmax của score giữa hai token và ).
- Cuối cùng, tính giá trị output vector (ở đây ta giả sử chỉ có 1 attention head duy nhất, nếu là attention head thì ).
- Đặt là một ma trận gồm token, mỗi token có chiều (chiều của embedding vector), khi đó sẽ có kích thước là .
- Khi ta nhân một ma trận bất kỳ với , ta sẽ có 2 cách nhân, là per token (hay token side) và across position (hay position side).
- Đầu tiên, các ma trận như và đặc biệt là hoạt động trên per token, có thể thấy mỗi dòng của chính là với là dòng của và mỗi dòng ấy tương ứng với một token.
- Tiếp theo, đối với ma trận , ta có các dòng của sẽ là:
Có thể thấy mỗi dòng của (là ) được sử dụng để nhân với các value vector (vector dòng), vậy được tính bằng tính các value vector across position từ (position đầu tiên) cho đến (position hiện tại).
Một bilinear map (ánh xạ song tuyến tính) là một hàm mà kết hợp phần tử từ hai vector spaces để cho ra một phần tử của vector space thứ 3. Ngoài ra bilinear map cũng là một hàm linear cho từng argument của nó. Tức là bilinear map sẽ có:
Một Tensor Product (tích Tensor) là một không gian vector cùng với một ánh xạ song tuyến tính (bilinear map) .
Nếu là một ma trận và là một ma trận thì Kronecker Product (tích Kronecker) của và , kí hiệu là , sẽ là một ma trận gồm các block matrix:
- Kronecker product chính là một Tensor product giữa 2 vector space mà và là các linear transformation.
- Ta đặt là operation mà vectorized thành một vector một chiều, ví dụ kích thước của là thì sẽ có chiều là (hoặc nếu là vector dòng). Khi đó với ma trận và bất kì, ta có:
- Đặt là ma trận gồm các embedding vector, mỗi embedding được xếp thành cột, mục đích của ta là nhân cho từng cột của , vì vậy, dùng tensor product (ta hiểu ở đây là Kronecker product), ta có:
- Tương tự, sau đó đưa qua , ta có:
- Và cuối cùng,
- Viết lại gọn hơn, ta có:
Đặt là ma trận dòng, khi đó ta và , nếu viết theo tensor products, ta có:
References
- Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition with Language Models, Daniel Jurafsky and James H. Martin2025https://web.stanford.edu/~jurafsky/slp3/
- Mechanistic Interpretability for AI Safety -- A Review, Leonard Bereska and Efstratios Gavves2024https://arxiv.org/abs/2404.14082
- Distributed representations, simple recurrent networks, and grammatical structure, Elman, Jeffrey L.Machine Learning, 1991https://doi.org/10.1007/BF00114844
- Effective Approaches to Attention-based Neural Machine Translation, Minh-Thang Luong and Hieu Pham and Christopher D. Manning2015https://arxiv.org/abs/1508.04025
- Neural Machine Translation by Jointly Learning to Align and Translate, Dzmitry Bahdanau and Kyunghyun Cho and Yoshua Bengio2016https://arxiv.org/abs/1409.0473
- Attention Is All You Need, Ashish Vaswani and Noam Shazeer and Niki Parmar and Jakob Uszkoreit and Llion Jones and Aidan N. Gomez and Lukasz Kaiser and Illia Polosukhin2023https://arxiv.org/abs/1706.03762
- Advancing Transformer Architecture in Long-Context Large Language Models: A Comprehensive Survey, Yunpeng Huang and Jingwei Xu and Junyu Lai and Zixu Jiang and Taolue Chen and Zenan Li and Yuan Yao and Xiaoxing Ma and Lijuan Yang and Hao Chen and Shupeng Li and Penghao Zhao2024https://arxiv.org/abs/2311.12351
- A Mathematical Framework for Transformer Circuits, Elhage, Nelson and Nanda, Neel and Olsson, Catherine and Henighan, Tom and Joseph, Nicholas and Mann, Ben and Askell, Amanda and Bai, Yuntao and Chen, Anna and Conerly, Tom and DasSarma, Nova and Drain, Dawn and Ganguli, Deep and Hatfield-Dodds, Zac and Hernandez, Danny and Jones, Andy and Kernion, Jackson and Lovitt, Liane and Ndousse, Kamal and Amodei, Dario and Brown, Tom and Clark, Jack and Kaplan, Jared and McCandlish, Sam and Olah, ChrisTransformer Circuits Thread, 2021https://transformer-circuits.pub/2021/framework
- Zoom In: An Introduction to Circuits, Olah, Chris and Cammarata, Nick and Schubert, Ludwig and Goh, Gabriel and Petrov, Michael and Carter, ShanDistill, 2020https://distill.pub/2020/circuits/zoom-in
Footnotes
-
https://transformer-circuits.pub/2021/framework/index.html#def-privileged-basis ↩ ↩2
-
Ta có thể hiểu một vector align (hay thẳng hàng) với vector nếu vector có thể xấp xỉ hay bằng với , hay còn gọi là collinear (https://en.wikipedia.org/wiki/Collinearity). Ngoài ra ta còn có 2 trường hợp là , khi đó “nằm cùng hướng” với , ngược lại “nằm ngược hướng” với , thông thường, ta sẽ nghĩ đến trường hợp cùng hướng với . Vậy làm sao để ta tính được việc xấp xỉ đó, ta sẽ dựa vào cosine similarity, giá trị này càng gần , 2 vector càng nằm cùng một hướng với nhau (do đó align với nhau). ↩
-
Dựa vào 2, việc xoay chính là cố gắng đưa 1 vector nào đó nằm thẳng hàng với vector còn lại. Giả sử ở một hệ toạ độ Oxy, vector nằm chếch lên độ so với vector , vì vậy để đưa vector thẳng hàng với , ta xoay một góc độ (thông qua một phép xoay nào đó). ↩
-
Một điều nữa đó chính là output của Attention Component (before write) là rotational invariance (https://en.wikipedia.org/wiki/Rotational_invariance). Bởi vì input của head là , nếu được xoay bởi ma trận , thì các ma trận sẽ “un-rotate” trở về ban đầu do đó không ảnh hưởng đến output . ↩
-
Nếu nói đơn giản thì mỗi head tìm cho mình một chỗ trống, giống như bộ nhớ còn trống vậy, để write thông tin mình lên, do mỗi head chỉ cẩn 64 bytes mà residual stream lại có đến 512 bytes, vì vậy các head không cần phải tranh nhau mà sẽ ghi lên những phân vùng riêng (các không gian con) của mình. ↩
-
https://transformer-circuits.pub/2021/framework/index.html#d-footnote-6 ↩