OpenArchLabOpen Architecture — From Models to Systems

W3 · Training / inference workflow

Tạo câu hỏi và đáp án cho mỗi vị trí trong chuỗi

Dịch chuỗi token đi một vị trí để mỗi vị trí có đáp án là token đứng ngay sau (teacher forcing), kèm mask chỉ ra vị trí nào được tính vào hàm mất mát.

LESSON ID wf-target GROUP Kiến trúc huấn luyện
Mục lục bài học

1Định nghĩa

Tạo nhãn dự đoán token kế tiếp (next-token targets) là bước biến một khối token ID thành một bài tập có đáp án: tại mỗi vị trí, đề bài là các token đã đứng trước và đáp án là token đứng ngay sau. Từ khối T + 1 token của bước chuẩn bị dữ liệu, mảng đầu vào (inputs) lấy T token đầu, mảng nhãn (labels) lấy T token cuối, nên hai mảng lệch nhau đúng một vị trí.

Cách đưa chuỗi thật vào mọi vị trí cùng lúc gọi là teacher forcing. Kết hợp với mặt nạ nhân quả trong attention, mô hình tính được dự đoán cho cả T vị trí trong một lượt forward song song mà không đọc trộm tương lai. Đi kèm labels là mặt nạ mất mát (loss mask) báo cho hàm mất mát bỏ qua các vị trí không nên chấm điểm như token đệm hoặc phần câu hỏi.

Ví dụ đời thường: Tạo nhãn token kế tiếp giống bài tập điền chữ vào chỗ trống khi học ngoại ngữ từ một câu mẫu có sẵn: che chữ thứ hai để đoán từ chữ thứ nhất, rồi lập tức mở chữ thứ hai ra làm gợi ý chuẩn để đoán chữ thứ ba. Vì luôn có câu gốc chuẩn làm điểm tựa, người học dù đoán sai ở đầu câu thì các chỗ sau vẫn luyện đúng mạch văn; còn quy tắc “không lật sang trang đáp án” chính là mặt nạ nhân quả.

2Luồng

Ô 1B nhận bảng token ID từ ô 1A và phát ra ba thứ cùng shape: inputs đi vào cột 2, labels và loss mask đi thẳng tới ô 3A ở cột 3. Mũi tên xuống cột 2 và mũi tên tới cột 3 chạy độc lập; ghép lại chỉ ở hàm mất mát.

Sơ đồ kiến trúc huấn luyện · 22 ô (1A → 5C)

Kiến trúc huấn luyện LLM · Ánh xạ với Bài Lab tổng hợp

Thứ tự đọc: 1A → 1B ở cột 1, 2A → 2D ở cột 2, 3A → 3E ở cột 3; mũi tên next batch từ 3E quay về cột 1 và mũi tên load weights đi xuống băng 5 (5A → 5C). Cột 4 không phải bước kế tiếp: 4A, 4B tiết kiệm bộ nhớ, còn 4C–4G là các phương pháp huấn luyện thay thế nhau. Di chuột hoặc bấm vào từng ô để đọc pop-over.

Sơ đồ kiến trúc huấn luyện LLM gồm 22 ô từ 1A đến 5C
1B1 · Data & Targets
input = ids[:-1] · label = ids[1:] · causal mask

1B · Next-Token Targets

Dịch chuỗi đi một vị trí để mỗi vị trí có đáp án là token đứng ngay sau, kèm mặt nạ nhân quả.

Nhận gì
Các dãy token ID từ ô 1A (mũi tên đi xuống từ 1A).
Làm gì, vì sao
Dịch chuỗi đi một vị trí để mỗi vị trí có đáp án (nhãn, label) là token đứng ngay sau nó, và dựng mặt nạ nhân quả (causal mask) để vị trí đang tính không nhìn thấy các vị trí phía sau. Nhờ vậy văn bản tự sinh ra đề và đáp án, không cần ai gán nhãn.
Ra gì
Cặp (input, nhãn) cùng mặt nạ. Input đi sang ô 2A ở cột 2 (mũi tên sang phải), còn nhãn chờ ở ô 3A để chấm điểm.
Ví dụ, cách đọc ô
Trong ô: input là "The capital of France", label là "capital of France is". Mỗi vị trí của input được chấm bằng token kế tiếp: The → capital, capital → of, of → France, France → is.
Lưu ý
Việc dịch nhãn chỉ chuẩn bị đề, chưa nói mô hình giải đúng hay sai. Trong SFT (ô 1C) còn có thêm mặt nạ loss để chỉ chấm một phần nhãn.
Sơ đồ luồng (4 bước)
  1. Khối token từ ô 1A

    Nhận khối T + 1 token ID, ví dụ [mèo, ăn, cá, eos, chó] = [1, 3, 4, 6, 2].

  2. Tách inputs và labels

    Inputs bỏ token cuối, labels bỏ token đầu: hai mảng lệch nhau một vị trí.

  3. Đặt loss mask

    Gán 0 cho vị trí không nên chấm điểm (đệm, qua ranh giới tài liệu, phần prompt).

  4. Giữ causal mask cho attention

    Attention che tương lai để mô hình không đọc trộm đáp án nằm ngay bên phải.

Mã Mermaid
flowchart TD
  step1["Khối token từ ô 1A"]
  step2["Tách inputs và labels"]
  step3["Đặt loss mask"]
  step4["Giữ causal mask cho attention"]
  step1 --> step2
  step2 --> step3
  step3 --> step4

3Giải pháp

Vị trí trên sơ đồ: ô 1B "Next-token targets" nằm ngay dưới ô 1A trong cột 1 · Dữ liệu & mục tiêu. Nó nhận bảng token ID từ ô 1A và phát ra ba mảng cùng shape (B, T): inputs đi vào cột 2, còn labels và loss mask đi thẳng sang ô 3A (hàm mất mát) ở cột 3. Hai nhánh này chạy độc lập và chỉ gặp nhau khi so dự đoán với đáp án.

Vấn đề cần giải. Chúng ta không có ai viết sẵn đáp án cho từng câu hỏi; nhưng bản thân văn bản đã chứa đáp án, vì token đứng sau chính là đáp án của câu hỏi “sau chuỗi này là gì?”. Bước này khai thác điều đó: mỗi khối T + 1 token sinh ra T bài tập nhỏ mà không cần gán nhãn thủ công.

Khái niệm tối thiểu. Đầu vào là khối token ID shape (B, T + 1): B hàng là B khối, T + 1 cột là các vị trí. Teacher forcing nghĩa là ở vị trí t, mô hình luôn được trao token thật của vị trí 0 đến t, không phải token mô hình tự đoán trước đó. Ground truth là token thật ở vị trí t + 1. Loss mask là mảng 0/1 cùng shape với labels.

Ví dụ có số (minh họa, tính tay). Lấy khối đầu của bài trước: [1, 3, 4, 6, 2] = “mèo ăn cá eos chó”. Inputs (bỏ token cuối) = [1, 3, 4, 6]; labels (bỏ token đầu) = [3, 4, 6, 2]. Bốn bài tập con: thấy “mèo” thì đáp án là “ăn” (3); thấy “mèo ăn” thì đáp án là “cá” (4); thấy “mèo ăn cá” thì đáp án là eos (6); thấy “mèo ăn cá eos” thì đáp án là “chó” (2).

Tại sao tính cả bốn vị trí được cùng một lúc? Vì teacher forcing: ngữ cảnh của vị trí 2 là “mèo ăn cá” thật, không phụ thuộc mô hình đã đoán gì ở vị trí 0 và 1. Chỉ cần một lượt forward thay vì bốn lượt nối tiếp. Điều kiện là phải có causal mask trong attention: nếu không, khi tính vị trí 0, vị trí này có thể nhìn thấy token “ăn” nằm ngay bên phải (chính là đáp án của nó) và mô hình học cách chép thay vì học cách dự đoán.

Loss mask. Bài tập thứ tư (thấy eos, đáp án “chó”) có đáp án thuộc một tài liệu khác, không liên quan: sau khi “mèo ăn cá” kết thúc, từ nào đến tiếp là ngẫu nhiên. Nếu muốn mô hình không học điều này, đặt loss mask = [1, 1, 1, 0]. Số vị trí hợp lệ khi đó là 3. Các vị trí token đệm trong cách padding cũng nhận mask 0. Với dữ liệu hội thoại, mask 0 cho phần câu hỏi của người dùng và mask 1 cho phần câu trả lời; mô hình vẫn đọc câu hỏi như ngữ cảnh nhưng chỉ bị chấm điểm trên câu trả lời. Phần này (ô 1C trên sơ đồ) được dạy kỹ ở phương pháp fine-tuning.

Đừng nhầm hai loại mask. Attention mask quyết định vị trí nào được nhìn vị trí nào (ví dụ che tương lai, hoặc che tài liệu khác khi đã packing); loss mask quyết định vị trí nào bị chấm điểm. Một vị trí có thể được nhìn nhưng không bị chấm (câu hỏi trong hội thoại), hoặc ngược lại bị chấm nhưng bị che một phần.

Cách đọc đầu ra: ba mảng inputs, labels, loss_mask đều shape (B, T); mỗi hàng là một khối, mỗi cột là một vị trí. Số đáp án thực sự được chấm là tổng của loss mask. Điều có thể kết luận khi kiểm tra: labels[t] bằng inputs[t + 1] ở mọi vị trí. Điều không thể kết luận: căn chỉnh đúng không có nghĩa là mô hình sẽ học tốt hay loss sẽ thấp.

Lỗi hay gặp là shift hai lần. Nhiều thư viện nhận nguyên chuỗi làm labels rồi tự dịch một vị trí bên trong mô hình; nếu pipeline đã dịch sẵn mà mô hình dịch thêm lần nữa thì mô hình học dự đoán token cách hai vị trí. Hãy xác định rõ ai dịch. Với packing, cũng phải quyết định target ở ranh giới tài liệu có được học hay không; mask padding thường dùng giá trị ignore theo cách cài đặt của hàm loss.

Muốn tự chạy, mở giai đoạn 2 · Next-token targets của Bài Lab tổng hợp. Hãy đoán trước inputs, labels và loss mask của khối đầu, rồi so với kết quả in ra.

4Profiling

  • Kiểm tra căn chỉnh

    In inputs và labels của một chuỗi ngắn và kiểm tra từng cặp: labels[t] phải bằng inputs[t + 1]. Đây là phép kiểm tra tính đúng nên làm trước mọi phép đo khác. Với khối [1, 3, 4, 6, 2], inputs = [1, 3, 4, 6] và labels = [3, 4, 6, 2]; nếu thấy hai mảng giống hệt nhau, có lỗi dịch (hoặc ai đó đã dịch hai lần).

  • Kiểm tra rò rỉ tương lai

    Giữ nguyên trọng số, đổi một token ở vị trí xa phía sau rồi chạy forward lại; logits của các vị trí đứng trước phải không đổi, trừ sai số số học nhỏ. Nếu đổi, causal mask hoặc phép dịch đang sai. Bài kiểm tra này chứng minh không có rò rỉ cho cấu hình đã thử, không chứng minh mô hình tốt.

  • Đếm số đáp án hợp lệ

    Ghi tổng loss mask của mỗi batch và so với kỳ vọng (ví dụ 3 trên 4 vị trí trong khối minh họa). Số đáp án hợp lệ là mẫu số khi tính trung bình loss ở bài kế tiếp, nên sai số ở đây làm sai mọi con số loss sau đó. Một mask lỗi có thể làm loss trông đẹp nhưng mô hình học sai.

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ụ

Chuỗi minh họa

Input [mèo, ăn, cá] ứng với labels [ăn, cá, eos]. Tự kiểm tra: nếu một người viết nhầm labels = inputs thì mô hình được thưởng khi làm gì? Đáp án: chép lại đúng token đang nhìn thấy, nên loss giảm rất nhanh nhưng mô hình không học dự đoán gì; đó là dấu hiệu căn chỉnh sai. Kỳ vọng đúng: loss khởi đầu gần mức đoán ngẫu nhiên và giảm dần chậm hơn.

Ranh giới giữa hai tài liệu

Trong khối [mèo, ăn, cá, eos, chó], câu hỏi thứ tư có đáp án “chó” thuộc tài liệu khác. Dự đoán: nên đặt loss mask 1 hay 0? Cả hai đều có thể chấp nhận. Mask 0 tránh dạy mô hình điều không có quy luật; mask 1 dạy mô hình đoán từ đầu của tài liệu kế tiếp. Quan trọng là ghi rõ chính sách và dùng nhất quán, vì nó đổi cả số đáp án hợp lệ lẫn giá trị loss.

Huấn luyện trả lời hội thoại

Mẫu “Người dùng: mèo ăn gì? Trợ lý: cá”. Chỉ các token của câu trả lời (và token kết thúc) có loss mask 1; câu hỏi có mask 0 nhưng vẫn nằm trong ngữ cảnh mà mô hình đọc. Tự kiểm tra: nếu để mask 1 cho cả câu hỏi thì điều gì thay đổi? Đáp án: mô hình cũng bị dạy chép câu hỏi của người dùng, làm loãng tín hiệu học cách trả lời và đổi nghĩa của con số loss. Dạng dữ liệu này thuộc phương pháp fine-tuning.

6Thuật ngữ

Inputs và labels
Inputs là T token đầu của khối, labels là T token cuối; hai mảng lệch nhau một vị trí nên tại vị trí t, đáp án labels[t] chính là token inputs[t + 1].
Teacher forcing
Trong huấn luyện, luôn đưa các token thật từ dữ liệu làm ngữ cảnh ở mọi vị trí, kể cả khi mô hình vừa dự đoán sai vị trí trước đó.
Ground truth
Đáp án có sẵn trong dữ liệu, ở đây là token thật đứng sau; dùng làm chuẩn để tính loss.
Loss mask
Mảng 0/1 cùng shape với labels: 1 nghĩa là vị trí đó góp vào hàm mất mát, 0 nghĩa là bỏ qua (đệm, qua ranh giới tài liệu, phần câu hỏi của hội thoại).
Causal mask
Mặt nạ trong attention che mọi vị trí tương lai để vị trí t chỉ nhìn được các token từ 0 đến t.
Glossary (5)
Prefix
Phần đầu của một chuỗi token, tức mọi token đứng trước một vị trí.
Logits
Điểm số chưa chuẩn hóa mà mô hình gán cho từng token trong bảng từ vựng ở một vị trí; bài wf-forward giải thích, bài wf-loss chuẩn hóa chúng.
Mask
Quy tắc 0/1 về vị trí nào được nhìn nhau (attention mask) hoặc vị trí nào được chấm điểm (loss mask).
Forward pass
Lượt tính từ đầu vào đến đầu ra của mô hình theo trọng số hiện tại.
Token ID
Số nguyên xác định một token trong bảng từ vựng, kết quả của ô 1A.

7Bài liên quan

8Nguồn