SFT — Dạy model bắt chước output tốt
Supervised Fine-Tuning biến pre-trained model thành assistant thực thụ bằng cách dạy nó bắt chước câu trả lời chất lượng từ dữ liệu curated.
ChatGPT không tự nhiên biết cách trả lời câu hỏi một cách lịch sự và hữu ích. Sau khi đọc hàng terabyte văn bản từ Internet, model chỉ biết "tiếp tục câu" theo kiểu autocomplete chứ chưa hiểu khái niệm "trả lời người dùng". Để biến một cỗ máy đoán chữ thành assistant, các kỹ sư phải chạy giai đoạn Supervised Fine-Tuning (SFT) — dạy model bắt chước những mẫu hội thoại chất lượng cao do con người tạo ra. Đây là bước nền tảng trong pipeline tạo nên mọi chatbot hiện đại, từ Claude đến Llama Instruct.
Vấn đề
Giai đoạn pre-training dạy LLM kiến thức ngôn ngữ và thế giới thông qua next-token prediction trên dữ liệu thô, nhưng nó tạo ra một "bộ não" chỉ biết viết tiếp văn bản, không biết tương tác. Khi bạn hỏi một model vừa pre-training xong "Thủ đô của Việt Nam là gì?", nó có thể trả lời "là Hà Nội, nằm bên bờ sông Hồng, nơi có..." rồi cứ thế viết thêm 10 đoạn văn không dừng lại được, hoặc đột ngột chuyển sang tiếng Trung vì trong corpus có đoạn song ngữ tương tự. Nó thiếu:
- Tính helpful: Không biết khi nào thì dừng, khi nào cần hỏi lại, khi nào từ chối trả lời câu hỏi nguy hiểm.
- Format chuẩn: Không hiểu cấu trúc hỏi-đáp, có thể lẫn lộn vai trò người dùng và assistant trong cùng một đoạn.
- An toàn: Dễ sinh ra nội dung độc hại vì đã "học" từ nhiều nguồn không kiểm soát.
Bạn có một model thông minh nhưng chưa được đào tạo nghề. SFT chính là giai đoạn "internship" — đưa model vào môi trường có giám sát để học cách hành xử đúng mực.
Ý tưởng cốt lõi
SFT là behavioral cloning (bắt chước hành vi). Thay vì để model tự bơi trong biển dữ liệu, ta cho nó xem hàng nghìn ví dụ cụ thể về "câu hỏi → câu trả lời tốt" và bắt buộc nó bắt chước y nguyên.
Dataset cho SFT gồm các bộ ba (instruction, input, output) hoặc (prompt, completion). Ví dụ:
Instruction: Dịch câu sau sang tiếng Anh
Input: Tôi yêu lập trình
Output: I love programmingHoặc phức tạp hơn với system prompt để định nghĩa persona:
System: Bạn là assistant hữu ích, trung thực và an toàn.
User: Viết một đoạn code Python đọc file CSV.
Assistant: [code Python chuẩn, có comment, xử lý lỗi]Điểm then chốt khiến SFT khác biệt với pre-training là loss masking. Khi tính hàm loss (cross-entropy), ta chỉ tính lỗi trên phần output (câu trả lời của assistant), còn phần instruction và input được "che" (mask) — model không bị phạt nếu đoán sai từ trong câu hỏi. Điều này tập trung gradient descent vào việc học cách trả lời, thay vì học cách đặt câu hỏi.
Insight cốt lõi: SFT không cố gắng "nhồi" thêm kiến thức mới vào đầu model. Thay vào đó, nó dạy model cách tổ chức lại kiến thức sẵn có thành định dạng hữu ích. Model đã biết Python từ pre-training; SFT chỉ dạy nó "khi người dùng yêu cầu code, hãy đặt trong markdown và giải thích từng bước". Đây là lý do tại sao SFT cần ít dữ liệu (thường 10k–100k ví dụ) nhưng chất lượng phải cực cao — ta đang dạy nghề chứ không dạy chữ.
Aha moment: Nhiều người nghĩ SFT là để "dạy model kiến thức mới" — thực ra sai lầm. Nếu bạn muốn model biết sự kiện xảy ra sau ngày cutoff của pre-training, SFT chỉ giúp nó "bịa" có cấu trúc hơn chứ không thực sự biết. Kiến thức mới cần Retrieval-Augmented Generation (RAG) hoặc pre-training tiếp; SFT chỉ là lớp sơn "giao diện người dùng" lên kiến thức cũ.
Tại sao nó hoạt động
SFT thành công nhờ kết hợp ba yếu tố:
1. Transfer Learning mạnh mẽ
Pre-training tạo ra representation không gian cực tốt. Khi bạn fine-tune, model khởi đầu từ một điểm trong không gian weight mà đã hiểu ngữ nghĩa, ngữ pháp và logic thế giới. Việc chỉnh hướng nó sang nhiệm vụ cụ thể là một bước đi nhỏ trong không gian tham số, không phải cuộc cách mạng.
2. Imitation Learning hiệu quả
LLM là máy sinh xác suất. Khi bạn cung cấp dataset gồm toàn những câu trả lời hay, gradient descent tự động tìm cách nâng cao xác suất của các chuỗi token "đẹp" và hạ thấp chuỗi "xấu". Đây là dạng maximum likelihood estimation có điều kiện: maximize P(output | instruction).
3. Causal Masking ngăn gian lận
Vì transformer sử dụng causal attention (chỉ nhìn quá khứ), model không thể "nhìn trộm" đáp án để tính loss. Nó buộc phải học mối quan hệ thực sự giữa câu hỏi và câu trả lời.
Tuy nhiên, SFT có giới hạn cứng: overfitting. Với dataset nhỏ, model dễ rơi vào mode collapse — bắt đầu trả lời y chang các mẫu trong training data, thậm chí nhớ cả sai lỗi chính tả trong dataset. Đây là lý do tại sao sau SFT, người ta thường chạy thêm RLHF hoặc DPO để "mở rộng" phân phối và giảm overfitting.
Ý nghĩa thực tế
SFT là bước không thể thiếu trong pipeline tạo assistant hiện đại. Pre-training tạo ra bộ não, SFT tạo ra tính cách.
Thực tế triển khai:
- OpenAI: GPT-3 → GPT-3.5 thông qua SFT trên dữ liệu contractor viết tay.
- Meta: Llama 2 Chat được tạo ra bằng cách SFT trên 27,540 ví dụ chất lượng cao trước khi đưa vào RLHF.
- Cộng đồng open-source: Mọi mô hình "Instruct" (Vicuna, Alpaca, Mistral Instruct) đều là kết quả của SFT lên base model bằng dataset chia sẻ công khai.
Trade-off quan trọng:
- Chất lượng > Số lượng: 10,000 ví dụ do chuyên gia biên soạn kỹ càng tốt hơn 1 triệu ví dụ tự động crawl từ Reddit.
- Phân phối: Nếu dữ liệu SFT thiên lệch (ví dụ toàn câu hỏi lập trình), model sẽ quên cách viết thơ hay nói chuyện thường ngày — hiện tượng catastrophic forgetting mặc dù nhẹ hơn full fine-tuning.
Kết nối pipeline: SFT thường là bước 2 trong 3 bước chuẩn: Pre-training → SFT → RLHF. Nó cung cấp một "policy" khởi đầu tốt cho RL, giúp RLHF không phải học từ zero. Không có SFT, RLHF sẽ bay loạn vì không biết cấu trúc câu trả lời cơ bản.
Đào sâu hơn
Paper gốc:
"InstructGPT: Training language models to follow instructions with human feedback" (OpenAI, 2022) — mô tả cách SFT kết hợp với RLHF để tạo ChatGPT ban đầu.
"Llama 2: Open Foundation and Fine-Tuned Chat Models" (Meta, 2023) — chi tiết về cách chọn lọc dữ liệu SFT để tránh overfitting.
Cùng cụm:
- RLHF — Bước tiếp theo sau SFT, dùng reinforcement learning để tinh chỉnh hành vi
- Instruction Tuning — Góc nhìn rộng hơn về việc dạy model làm theo lệnh
- LoRA — Cách chạy SFT hiệu quả trên phần cứng nhỏ mà không cần full fine-tune
- Prompt Engineering — Kỹ thuật "ra đề" để khai thác model đã qua SFT
- Chain-of-Thought — Kỹ thuật nâng cao trong SFT để dạy model "nghĩ từng bước"
- Reward Modeling — Bước chuẩn bị cho RLHF sau SFT
Đọc tiếp:
- DPO — Bỏ qua cả reward model và RL phức tạp, tối ưu trực tiếp từ data SFT
- QLoRA — Chạy SFT trên GPU 48GB cho model 65B tham số
- SimPO & ORPO — Các phương pháp alignment mới thay thế cả SFT và RLHF
- GRPO — Dạy model tự suy luận mà không cần SFT data đắt đỏ
Masked LM — Che 15% từ, bắt đoán lại — BERT's trick
Hiểu cách BERT dùng Masked Language Modeling để đọc cả câu hai chiều, thay vì đoán từ tiếp theo như GPT. Core idea của bidirectional understanding.
RLHF — Cách ChatGPT học để trở nên helpful
Từ mô hình biết 'đoán chữ' thành trợ lý AI thực thụ: hiểu cách RLHF dùng phản hồi người dùng để dạy LLM cách hữu ích, trung thực, và vô hại.