AI Core cho lập trình viên/Fine-tune model — khi nào xứng đáng, khi nào không
48/54
Bài 48 / 54~13 phútTầng quyết định của engineerMiễn phí lượt xem

Fine-tune model — khi nào xứng đáng, khi nào không

Fine-tune dạy được hành vi — format, giọng điệu, domain — nhưng không nạp nổi sự kiện mới đáng tin. Cái giá: data nhãn, catastrophic forgetting, vòng đời vận hành.

TL;DR: Fine-tune train tiếp một model trên dữ liệu riêng — dịch chuyển trọng số, nên dạy được hành vi: format, giọng điệu, thuật ngữ domain, tuân thủ schema. Nó không phải cách nạp sự kiện mới đáng tin — kiến thức trong trọng số mờ, không cập nhật theo ngày; việc đó thuộc về RAG. Cái giá: data nhãn sạch, catastrophic forgetting, và vòng đời vận hành — model gốc đổi bản là phải train lại, đánh giá lại. Xứng đáng khi hành vi lặp lại ở quy mô lớn tới mức prompt dài không gánh nổi.

Đội tester một ngân hàng dán log giao dịch thô vào chat để model quy về JSON nội bộ chuẩn — vài trăm dòng/ngày trong đợt UAT, tăng dần. Prompt đã kèm ba ví dụ mẫu, model đúng phần lớn thời gian, nhưng cứ vài chục log lại lệch schema: sai kiểu amount, thiếu status, hoặc chèn giải thích mà downstream không parse được.

Câu hỏi tự nhiên là "vậy fine-tune model đi cho xong". Bài này trả lời nghiêm túc cho cả case trên lẫn những case fine-tune không giúp được gì, dù nghe rất giống.

1. Ba tình huống ngân hàng — fine-tune có giúp không?

Cả ba ở môi trường dev/UAT nội bộ, không phải dữ liệu khách hàng thật. Với mỗi tình huống, tự trả lời có/khôngmột câu vì sao trước khi đọc mục 2.

Tình huống A — chuẩn hoá log giao dịch test. Đúng tình huống mở bài: model trả JSON đúng schema nội bộ (transactionId, amount, currency, status) từ log thô, khối lượng hàng trăm dòng/ngày và tăng dần suốt đợt UAT.

Tình huống B — trả lời câu hỏi về API mới. Đội dev vừa ra mắt endpoint /api/v3/refund tuần trước, muốn chatbot trả lời đúng field, đúng status code của endpoint này.

Tình huống C — chuẩn hoá report cho một team nhỏ. Team 3 người muốn report tuần luôn đúng định dạng, gọi model chừng 20 lần/ngày.

Thử đoán trước khi đọc tiếp

Viết ra cho cả ba: fine-tune có giúp không, và lý do — dạy hành vi hay nạp sự kiện? Nếu là hành vi, quy mô đã đủ lớn để đáng chi phí chưa?

Analogy — đào tạo nhân viên theo quy trình nội bộ

Đào tạo nhân viên mới theo quy trình nội bộ dạy được cách làm — mẫu báo cáo, giọng email, thứ tự duyệt. Nó không dạy tin tức sáng nay: bản tin đầu ngày mới làm việc đó, ai cũng phải đọc lại dù đã được đào tạo từ lâu. Học dồn một quy trình mới cũng có thể khiến nhân viên quên lẫn thói quen cũ tốt. Ba khái niệm bài này map đúng ba hiện tượng đó:

Đời thườngTrong bài
Đào tạo nội bộ — dạy cách làm, không dạy tin tứcFine-tune
Bản tin đầu ngày — luôn mớiRAG
Học dồn, quên thói quen cũ tốtCatastrophic forgetting

2. Cơ chế bên dưới — fine-tune dịch chuyển trọng số, không "học thêm sự thật"

Fine-tune train tiếp một base model đã có, nhưng trên ví dụ do bạn chọn — cặp input/output đúng định dạng bạn muốn — thay vì khối văn bản khổng lồ của pretraining. Mỗi bước train chỉnh trọng số để output khớp ví dụ hơn, cùng cơ chế pretraining, chỉ khác dữ liệu và quy mô.

Vì tác động nằm ở trọng số — cấu trúc phân tán hàng tỷ con số, không phải bảng tra cứu chèn/xoá được — fine-tune dạy tốt đúng cái nó vốn giỏi: hành vi lặp lại. Format đúng cấu trúc, giọng điệu nhất quán, thuật ngữ domain chuẩn, schema được tuân thủ mà không cần liệt kê ví dụ mỗi request. "Luôn trả đúng JSON schema dù log lệch" là một hành vi — và hành vi thì huấn luyện được vào trọng số, đây là lý do tình huống A hợp lý.

Nhưng cơ chế đó khiến fine-tune không phải cách đáng tin để nạp sự kiện mới: một chi tiết như "endpoint /api/v3/refund nhận field reasonCode" không nằm ở một vị trí trọng số cụ thể, mà hoà vào hàng tỷ tham số — mức model "nhớ" đúng nó là mờ. Ovadia và cộng sự (Fine-Tuning or Retrieval?, EMNLP 2024) kết luận định tính: fine-tune không đáng tin để nắm chắc dữ liệu sự kiện, RAG tốt hơn — nhưng paper đo unsupervised fine-tuning (train tiếp trên văn bản thô), khác supervised fine-tune trên cặp input-output có nhãn như log→JSON ở bài này. Lập luận cơ chế vẫn mở rộng hợp lý, nhưng cần nói rõ phạm vi khi trích dẫn.

Có một trục thời gian ẩn: trọng số là bản chụp cố định tại thời điểm train xong — sự kiện phát sinh sau đó (API mới, policy vừa đổi) không "vào" được cho tới lần fine-tune tiếp theo. Đây là staleness: khoảng cách giữa "thứ model biết" và "thứ đang đúng bây giờ". Tình huống B vì vậy không giúp: endpoint mới cần có mặt ngay và tiếp tục đúng khi đổi tiếp — việc của RAG, không phải train lại mỗi lần docs đổi.

Cây quyết định: sự kiện mới thì RAG, hành vi quy mô nhỏ thì few-shot, chỉ quy mô lớn mới đáng fine-tune

Tình huống C chưa trả lời được ở đây — không phải câu hỏi "hành vi hay sự kiện" (rõ ràng là hành vi), mà là "hành vi đó có đáng chi phí không". Mục 4 quay lại nó.

3. Cái giá thật của fine-tune

Ba khoản chi phí dưới đây không nằm trên hoá đơn API — chúng là chi phí ẩn khiến fine-tune đắt hơn con số "train một lần" gợi ý.

3.1 Data gán nhãn chất lượng

Fine-tune học từ ví dụ input/output do bạn cung cấp — chất lượng ví dụ quyết định chất lượng hành vi học được, đúng nguyên tắc nhãn là expected đã gặp ở bài dữ liệu/nhãn.

Bài đó dạy hai điều áp thẳng vào đây: nhãn sai thì model học sai âm thầm — không compiler nào bắt được; và tách train/validation/test phải làm TRƯỚC khi chạm dữ liệu — fine-tune cũng cần tập eval riêng, cùng bẫy rò rỉ: eval rút từ cùng đợt log với train thì điểm "đúng 98%" chỉ phản ánh học thuộc đợt log đó, không phải khả năng tổng quát.

Với tình huống A, "data nhãn" nghĩa là vài trăm cặp log-thô → JSON-chuẩn được review xác nhận đúng, không phải vài ví dụ viết nhanh trong prompt.

3.2 Catastrophic forgetting

Khi train tiếp trên một tập hẹp (chỉ log giao dịch, một định dạng), trọng số bị kéo mạnh về tối ưu cho tập đó — có thể kéo lệch khả năng tổng quát từ pretraining. Đây là catastrophic forgetting: model giỏi hẳn ở việc vừa train, nhưng có thể sa sút ở việc từng làm tốt mà không nằm trong tập fine-tune — ví dụ mất khả năng trò chuyện tự nhiên. Chỗ sa sút thường chỉ lộ ra khi người dùng gặp phải.

3.3 Vòng đời vận hành

Fine-tune không phải việc làm một lần rồi xong: base model sẽ được thay bằng bản mới, và mỗi lần đó bạn cần train lại rồi đánh giá lại từ đầu, vì hành vi học trên bản cũ không đảm bảo giữ nguyên trên bản khác. Đây là chi phí lặp lại mà ước lượng "train một lần, dùng mãi" bỏ sót.

Khoản chi phíKhi nào phát sinhVì sao dễ bị bỏ sót
Data nhãn sạchTrước khi trainTrông giống "chỉ cần vài ví dụ", thực ra cần review + tách tập đúng
Catastrophic forgettingSau khi train, phát hiện muộnChỉ lộ ra ở việc KHÔNG nằm trong tập fine-tune
Train lại theo vòng đờiMỗi lần base model đổi bảnDễ tưởng "train một lần là xong"

4. Khung quyết định — khi nào hành vi lặp lại xứng đáng fine-tune

Quay lại tình huống C: team 3 người, ~20 lần gọi/ngày. Đây là hành vi lặp lại — nhưng quy mô nhỏ, vài ví dụ mẫu (few-shot) đã đủ ổn định và rẻ hơn nhiều so với gán nhãn + train + duy trì vòng đời fine-tune. Câu trả lời là chưa đáng — không vì nó không phải hành vi, mà vì quy mô chưa tới ngưỡng.

Tình huống A khác ở trục quy mô: hàng trăm log/ngày, tăng dần, và few-shot đã cho thấy giới hạn — sai lệch xảy ra đều đặn. Chi phí token cộng dồn mỗi request, còn độ ổn định vẫn thua một hành vi đã "khắc" vào trọng số — chi phí một lần của fine-tune giờ rẻ hơn chi phí lặp lại vô hạn của một prompt vẫn sai một phần nhỏ mỗi lần.

Khung rút gọn còn hai câu hỏi lọc:

  1. Hành vi lặp lại hay sự kiện mới? Sự kiện mới → dừng, dùng RAG (mục 2). Hành vi → đi tiếp câu 2.
  2. Hành vi đó có lặp ở quy mô đủ lớn để prompt dài không gánh nổi? Quy mô nhỏ, few-shot còn rẻ và ổn định → chưa đáng (C). Quy mô lớn, few-shot đã lộ giới hạn hoặc chi phí token vượt chi phí train + duy trì → fine-tune xứng đáng (A).
Một câu về kỹ thuật, không đào sâu

Có kỹ thuật fine-tune rẻ hơn train lại toàn bộ trọng số (họ LoRA) — nhưng đó là câu hỏi làm thế nào, khác câu hỏi khi nào bài này trả lời.

5. Pitfall tổng hợp

Nhầm 1 — coi fine-tune là cách nạp "cơ sở dữ liệu nội bộ" vào model: ✅ Fine-tune dạy hành vi, không nạp sự kiện đáng tin — trả lời đúng theo tài liệu công ty là việc của RAG.

Nhầm 2 — chỉ test đúng use case fine-tune, không kiểm việc khác model từng làm: ✅ Catastrophic forgetting lộ ở việc KHÔNG nằm trong tập fine-tune (3.2) — giữ một bộ eval tổng quát bên cạnh eval riêng.

Nhầm 3 — dùng chung một đợt log vừa để train vừa để đánh giá: ✅ Đúng bẫy rò rỉ dữ liệu — tách eval từ một đợt log khác với train, nếu không điểm đánh giá không phản ánh khả năng tổng quát.

6. 📚 Đào sâu

📚 Nguồn gốc — đọc khi muốn xuống tầng sâu hơn

Tài liệu tham khảo:

  • Ovadia và cộng sự, Fine-Tuning or Retrieval? Comparing Knowledge Injection in LLMs, EMNLP 2024 — so sánh fine-tune và RAG cho việc nạp kiến thức sự kiện. Bài này chỉ trích phần định tính đã verify trong abstract — abstract KHÔNG công bố số phần trăm, nên mọi tỉ lệ "%" lưu hành trên blog về so sánh này chưa được xác minh.

7. Liên hệ các bài khác

8. Tóm tắt

  • Fine-tune train tiếp trên dữ liệu riêng, dịch chuyển trọng số — nên dạy hành vi (format, giọng điệu, thuật ngữ domain, tuân thủ schema).
  • Fine-tune không phải cách nạp sự kiện mới đáng tin: kiến thức trong trọng số mờ, là bản chụp cố định (staleness) — nạp sự kiện mới thuộc về RAG.
  • Ba khoản chi phí ẩn: data nhãn sạch (và bẫy rò rỉ khi tách eval), catastrophic forgetting ngoài tập fine-tune, và vòng đời vận hành — train lại mỗi khi base model đổi bản.
  • Khung quyết định hai bước: hành vi hay sự kiện; nếu là hành vi, quy mô có đủ lớn để prompt dài không gánh nổi hay chưa.
  • Có kỹ thuật rẻ hơn full fine-tune (LoRA), nhưng đó là câu hỏi làm-thế-nào, không đổi câu trả lời khi-nào.

9. Tự kiểm tra

Tự kiểm tra
Q1
Vì sao fine-tune dạy được 'luôn trả đúng JSON schema' nhưng không dạy được 'biết endpoint mới ra tuần trước'? Cả hai đều là thứ bạn muốn model biết thêm.

Fine-tune dịch chuyển trọng số qua nhiều bước train trên ví dụ lặp lại — phù hợp với hành vi (khuôn mẫu xuyên suốt tập ví dụ). Một sự kiện đơn lẻ như "endpoint mới nhận field X" không phải khuôn mẫu lặp lại, mà là chi tiết rời rạc hoà vào hàng tỷ tham số — mức model "nhớ" đúng chi tiết đó là mờ. Nạp sự kiện cần chính xác và cập nhật khi nó đổi tiếp — việc RAG làm tốt hơn.

Q2
Giải thích staleness bằng chính cơ chế train: vì sao fine-tune hôm nay không giúp model 'biết' một chính sách công ty ban hành tuần sau?

Fine-tune tạo ra một bản chụp trọng số cố định tại thời điểm train xong — trọng số không tự đổi cho tới lần train tiếp theo. Một chính sách ban hành sau mốc train không "vào" được trọng số đã đóng băng đó. Khoảng cách đó chính là staleness; chỉ thu hẹp bằng train lại (đắt, chậm) hoặc bằng RAG (trỏ vào tài liệu luôn cập nhật).

Q3
Vì sao catastrophic forgetting thường bị phát hiện muộn, thay vì lộ ra ngay khi vừa fine-tune xong?

Eval sau fine-tune thường chỉ đo đúng use case vừa train — vì đó là thứ team quan tâm và có sẵn ví dụ so sánh. Catastrophic forgetting lại xảy ra ở khả năng KHÔNG nằm trong tập fine-tune (ví dụ trò chuyện tự nhiên), nên eval hẹp báo "tốt" dù model đã sa sút ở việc khác — chỉ lộ khi người dùng chạm đúng phần đã yếu đi.

Q4
Team dùng chính đợt log giao dịch tuần này để vừa làm ví dụ fine-tune vừa làm ví dụ đánh giá 'model đã học đúng chưa'. Vì sao con số đánh giá đó không đáng tin, và cách sửa là gì?

Đây là rò rỉ dữ liệu đúng kiểu đã học ở bài dữ liệu/nhãn: eval rút từ cùng đợt log với train thì điểm cao chỉ phản ánh học thuộc đợt log đó, không phải khả năng tổng quát cho log tương lai. Cách sửa: tách eval từ một đợt log khác — lý tưởng phát sinh SAU mốc cắt tập train — trước khi train, không phải sau khi có kết quả.

Q5
Tình huống C (team 3 người, ~20 lần gọi/ngày, muốn report đúng định dạng) và tình huống A (hàng trăm log/ngày, chuẩn hoá JSON) đều là hành vi lặp lại. Vì sao câu trả lời fine-tune lại khác nhau giữa hai tình huống?

Cả hai đúng là hành vi, nên câu hỏi phân biệt nằm ở quy mô, không phải loại. Tình huống C khối lượng nhỏ, few-shot đã đủ ổn định và rẻ hơn train + duy trì vòng đời. Tình huống A khối lượng lớn và tăng dần, few-shot đã bộc lộ giới hạn, chi phí token cộng dồn vượt chi phí một lần của fine-tune — lúc đó phép tính đảo chiều.

Bài tiếp theo: Agent — vòng lặp và công cụ

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên

Bài tiếp theo

Agent trong AI: LLM + tool trong vòng lặp quyết định