W3 · Training / inference workflow
Chuẩn hóa vector và đường cộng residual trong transformer
Hai thao tác khung xương quanh mỗi khối con của Transformer: chuẩn hóa biên độ vector (RMSNorm hoặc LayerNorm) và cộng đường tắt residual để giữ thông tin và gradient.
1Định nghĩa
Chuẩn hóa (normalization) và đường cộng tắt (residual connection) là khung xương bao quanh mỗi khối con trong lớp Transformer, giúp tín hiệu và đạo hàm đi qua hàng chục lớp mà không bùng nổ hay triệt tiêu. Ở cấu trúc Pre-Norm phổ biến, vector ẩn x đi vào nhánh con được chuẩn hóa biên độ trước (bằng RMSNorm hoặc LayerNorm), đưa qua khối attention hoặc MLP, rồi cộng kết quả vào chính vector x ban đầu.
Nhờ phép cộng y = x + F(Norm(x)), ở lượt backward gradient luôn có một đường thẳng về các lớp đầu mà không phải chui qua mọi phép nhân ma trận. Khi chạy trên GPU, phép cộng residual và phép chuẩn hóa của nhánh kế tiếp thường được gộp trong một kernel để tiết kiệm một lượt đọc ghi bộ nhớ.
Ví dụ đời thường: Chuẩn hóa và đường tắt giống một đường ống dẫn nước qua tòa nhà cao tầng: van điều áp ở đầu mỗi tầng (norm) giữ áp lực nước vừa phải để ống không vỡ, còn ống chính chạy thẳng từ tầng một lên tầng thượng (đường residual) bảo đảm dòng nước gốc luôn thông suốt dù các nhánh lọc phụ ở từng tầng có phức tạp tới đâu. Khác đường ống thật, ở đây mỗi nhánh lọc còn cộng thêm phần nước đã xử lý vào ống chính.
2Luồng
Đây là ô 2C. Mũi tên chính (đường residual) mang vector x đi thẳng từ lớp này sang lớp kế; nhánh phụ đi qua norm và khối con rồi cộng ngược vào. Khi backward, gradient cũng đi theo đường thẳng này.
- Vector ẩn x
Đầu vào của một khối con, mỗi hàng là một vị trí.
- Chuẩn hóa nhánh
RMSNorm đưa biên độ vector về cỡ ổn định; γ học được co giãn lại.
- Attention hoặc MLP
Khối con tính phần biến đổi mới F từ vector đã chuẩn hóa.
- Cộng residual
y = x + F; vector gốc không bị chuẩn hóa nên đi thẳng sang lớp tiếp.
Mã Mermaid
flowchart TD
step1["Vector ẩn x"]
step2["Chuẩn hóa nhánh"]
step3["Attention hoặc MLP"]
step4["Cộng residual"]
step1 --> step2
step2 --> step3
step3 --> step4 3Giải pháp
Vị trí trên sơ đồ: ô 2C "Norm & residual" trong cột 2 · Forward qua Transformer. Dù xếp thứ ba trong cột, về thứ tự chạy nó xuất hiện hai lần trong mỗi lớp: một lần trước attention (ô 2A) và một lần trước MLP (ô 2B), cùng hai phép cộng residual sau mỗi khối đó.
Vấn đề cần giải. Qua nhiều lớp, độ lớn của vector có thể phình ra hoặc co lại, khiến các phép tính phía sau (đặc biệt softmax và hàm kích hoạt) làm việc ở vùng kém ổn định, và gradient đi ngược về cũng bị khuếch đại hoặc triệt tiêu. Cần hai công cụ: giữ biên độ ổn định (norm) và giữ một đường thông suốt cho thông tin (residual).
Khái niệm tối thiểu. Một vector x gồm d số. 'Trung bình bình phương' (mean square) là (x1² + x2² + ... + xd²) / d; căn bậc hai của nó là RMS, đo độ lớn điển hình của các phần tử. RMSNorm(x) = γ ⊙ x / sqrt(mean(x²) + ε), trong đó γ là vector d số học được và ε rất nhỏ. Mỗi hàng của bảng (T × d) được chuẩn hóa riêng, không phụ thuộc hàng khác.
Ví dụ có số (minh họa, d = 2, γ = [1, 1], bỏ ε cho gọn). Vector x = [3, 4]. Trung bình bình phương = (9 + 16) / 2 = 12,5; RMS = 3,5355. Vector chuẩn hóa = [3 / 3,5355; 4 / 3,5355] = [0,8485; 1,1314]. Kiểm tra: trung bình bình phương của kết quả = (0,72 + 1,28) / 2 = 1, tức độ lớn đã được đưa về cỡ 1. Nếu nhân x lên 10 thành [30, 40], kết quả chuẩn hóa vẫn là [0,8485; 1,1314]: RMSNorm không phụ thuộc vào thang đo tổng thể của vector.
Residual với số. Giả sử khối con (attention hoặc MLP) nhận vector đã chuẩn hóa và cho ra F = [0,5; −0,5]. Cộng vào vector gốc chưa chuẩn hóa: y = x + F = [3 + 0,5; 4 − 0,5] = [3,5; 3,5]. Điểm quan trọng: x đi thẳng sang y mà không bị chuẩn hóa hay nhân ma trận, nên khối con chỉ học 'cần sửa thêm bao nhiêu' thay vì phải tái tạo toàn bộ vector.
Vì sao đường thẳng giúp học được. Ở backward, đạo hàm của y theo x gồm phần đi thẳng (hệ số 1) cộng phần đi qua khối con. Phần đi thẳng luôn tồn tại, nên gradient từ lớp trên về lớp dưới không bị nhân liên tiếp với hàng chục ma trận (xem gradient qua một lớp). Bên ngoài ví dụ này còn có các biến thể mới như Post-norm, Sandwich, QK-norm và residual cải tiến, được so sánh ở Normalization và Residual.
Điều có thể và không thể kết luận. Đã chuẩn hóa nghĩa là độ lớn của vector ổn định, chứ không có nghĩa là mô hình học tốt. Không đổi RMSNorm thành LayerNorm chỉ như một tối ưu của engine: đó là đổi phép tính của mô hình, và checkpoint huấn luyện với phép nào phải chạy bằng đúng phép đó.
Thực thi. Phép cộng residual và phép norm của nhánh sau đều đọc và ghi cùng một vector nên có thể gộp vào một kernel để giảm một vòng đọc ghi bộ nhớ, miễn giữ đúng thứ tự toán học. Sai khác nhỏ về sai số số học do gộp là bình thường, xem độ chính xác và sai số.
Để chạy chuẩn hóa trên các vector thật của một forward, mở giai đoạn 3 · Forward (khối norm và residual) của Bài Lab tổng hợp. Hãy tự dự đoán: sau RMSNorm với γ = 1, trung bình bình phương của mỗi hàng xấp xỉ bằng bao nhiêu?
4Profiling
- Khớp số học
So đầu ra và gradient với cài đặt tham chiếu, bao gồm cả vector giá trị rất nhỏ (gần 0, dễ chia cho 0 nếu thiếu ε) và rất lớn (dễ tràn nếu dùng kiểu số ít bit). Với γ = 1, trung bình bình phương của đầu ra mỗi hàng phải xấp xỉ 1. Khớp tham chiếu chứng minh cài đặt đúng, không chứng minh mô hình học tốt hơn.
- Lưu lượng bộ nhớ
Đo số vòng đọc ghi và độ trễ của phiên bản gộp và chưa gộp ở các shape đại diện, cùng kiểu số và cùng phần cứng. Chỉ báo giảm thời gian cả bước (step), chứ không chỉ thời gian của riêng kernel norm, vì phần norm thường nhỏ so với toàn bước.
- Độ lớn theo lớp
Theo dõi RMS của vector residual sau từng lớp trên một batch cố định. Nếu độ lớn tăng rất nhanh theo độ sâu hoặc xuất hiện NaN, hãy kiểm tra ε, kiểu số và thứ tự norm. Con số này là chỉ báo chẩn đoán, không phải thước đo chất lượng.
Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.
5Ví dụ
Decoder dùng Pre-norm
Attention nhận vector đã chuẩn hóa, đầu ra của nó được cộng vào đường residual chưa chuẩn hóa. Tự kiểm tra: trong ví dụ x = [3, 4], nếu F = [0, 0] thì y bằng gì? Đáp án: y = x = [3, 4]; khối con không làm gì thì thông tin gốc vẫn đi qua nguyên vẹn, đó là điểm mạnh của residual.
Kernel gộp
Norm và residual được gộp để giảm lưu lượng bộ nhớ nhưng phải giữ thứ tự: cộng residual xong mới chuẩn hóa cho nhánh sau. Dự đoán: nếu đảo thứ tự thì kết quả có đổi không? Có, vì chuẩn hóa không giao hoán với phép cộng; đó là lý do phải so với cài đặt tham chiếu sau khi gộp.
Tự kiểm tra: vector toàn số nhỏ
Cho x = [0,001; 0,002] và ε = 1e-6. Trung bình bình phương = (1e-6 + 4e-6) / 2 = 2,5e-6, cộng ε được 3,5e-6, căn khoảng 0,00187. Kết quả chuẩn hóa xấp xỉ [0,53; 1,07], nhỏ hơn mức 'chuẩn' vì ε không còn nhỏ so với vector. Đây là lý do ε cần chọn nhỏ hơn nhiều so với bình phương thông thường của dữ liệu.
6Thuật ngữ
- Root Mean Square Normalization (RMSNorm)
- Chia vector cho căn bậc hai của trung bình bình phương các phần tử (cộng ε nhỏ để tránh chia cho 0) rồi nhân với hệ số học được γ.
- LayerNorm
- Trước khi chia, trừ đi trung bình của vector và chia cho độ lệch chuẩn; thường có thêm bias học được.
- Pre-norm
- Chuẩn hóa trước khi vào attention hoặc MLP, rồi cộng kết quả vào đường residual chưa chuẩn hóa; thứ tự cụ thể phụ thuộc mô hình.
- Residual connection
- Phép cộng y = x + F(Norm(x)) tạo đường tắt cho tín hiệu và gradient đi thẳng xuyên qua khối.
- Epsilon (ε)
- Số rất nhỏ cộng vào mẫu số để không chia cho 0 khi vector gần như toàn số 0.
Glossary (6)
- Vector
- Danh sách số biểu diễn một token ở một vị trí; norm áp lên từng vector riêng.
- Forward pass
- Lượt tính từ đầu vào đến đầu ra theo trọng số hiện tại.
- Backward pass
- Lượt tính gradient ngược qua các phụ thuộc của forward; residual làm nó dễ đi qua nhiều lớp.
- Kernel
- Hàm tính toán chạy trên GPU; phép cộng residual và norm tiếp theo thường được gộp thành một kernel.
- Latency
- Thời gian chờ để nhận một kết quả; kernel gộp giảm số lần đọc ghi bộ nhớ nên có thể giảm latency.
- Gradient
- Đạo hàm của loss theo một tham số, cho biết tham số nên tăng hay giảm; bài wf-backward giải thích.
