Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Ngày xuất bản
Ngày xuất bản

Fine-tuning là gì? Hướng dẫn chi tiết về kỹ thuật tinh chỉnh mô hình AI

Hướng dẫn toàn tập về kỹ thuật huấn luyện mô hình AI theo dữ liệu riêng


⚙️ 1. Giới thiệu

Khi bạn dùng mô hình AI như GPT, LLaMA, Mistral, hoặc Phi, bạn đang làm việc với một Large Language Model (LLM) đã được huấn luyện trên hàng nghìn tỷ từ. Nhưng đôi khi bạn muốn mô hình này hiểu đúng lĩnh vực riêng của bạn — ví dụ:

  • Viết email theo phong cách công ty
  • Hiểu thuật ngữ y học, tài chính, pháp lý
  • Trả lời theo giọng văn tiếng Việt chuyên nghiệp

Lúc đó, ta cần đến Fine-tuning.

🧩 Fine-tuning là quá trình “dạy lại” mô hình AI với dữ liệu chuyên biệt, để nó hiểu rõ và phản ứng theo mục tiêu cụ thể hơn.


🔍 2. Fine-tuning là gì?

Fine-tuning (tạm dịch: “tinh chỉnh mô hình”) là kỹ thuật huấn luyện lại mô hình đã có sẵn (pretrained model) bằng một tập dữ liệu nhỏ hơn, mang tính chuyên biệt cho một nhiệm vụ cụ thể.

Ví dụ: Bạn có mô hình LLaMA 3 hiểu tiếng Anh chung chung, nhưng bạn muốn nó trở thành chatbot tư vấn pháp luật Việt Nam → bạn cung cấp cho nó vài nghìn hội thoại thật trong lĩnh vực pháp lý → Fine-tune lại.


🧩 3. Kiến trúc cơ bản của quá trình Fine-tuning

Base Model (Pretrained)
     ↓
Fine-tuning Dataset (Domain-specific)
     ↓
Training Process (PyTorch / Transformers)
     ↓
Fine-tuned Model (Specialized LLM)

⚙️ 4. Quy trình chi tiết Fine-tuning

🧩 Bước 1: Chọn mô hình nền (Base Model)

Chọn model phù hợp với mục tiêu và tài nguyên:

  • LLaMA 3 / Mistral / Gemma / Phi-3: open-source, dễ fine-tune
  • GPT / Claude: không thể fine-tune trực tiếp, chỉ hỗ trợ API fine-tuning (OpenAI)

🧾 Bước 2: Chuẩn bị dữ liệu huấn luyện

Tạo tập dữ liệu input–output theo định dạng instructionresponse, ví dụ JSONL:

{"instruction": "Giải thích thuật ngữ 'Machine Learning'", "output": "Machine Learning là lĩnh vực nghiên cứu..."}
{"instruction": "Tạo email cảm ơn khách hàng", "output": "Kính gửi quý khách, ..."}

⚠️ Chất lượng dữ liệu quan trọng hơn số lượng! Một tập dữ liệu 5.000–10.000 mẫu sạch và đa dạng có thể hiệu quả hơn 100.000 mẫu nhiễu.


🧮 Bước 3: Tiền xử lý (Preprocessing)

  • Loại bỏ ký tự lỗi, câu lặp
  • Chuẩn hóa ngôn ngữ (ví dụ: tiếng Việt có dấu, không viết tắt)
  • Giới hạn độ dài câu (thường < 1024 tokens)

🔥 Bước 4: Huấn luyện (Training)

Dùng thư viện phổ biến như Hugging Face Transformers + PyTorch:

from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments

model_name = "mistralai/Mistral-7B-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Tải dữ liệu
from datasets import load_dataset
dataset = load_dataset("json", data_files="data/train.jsonl")

# Thiết lập huấn luyện
training_args = TrainingArguments(
    output_dir="./finetuned-model",
    num_train_epochs=3,
    per_device_train_batch_size=1,
    learning_rate=2e-5,
    fp16=True,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
)

trainer.train()

🧩 Bước 5: Lưu và kiểm thử

Sau khi fine-tune xong, bạn có thể lưu mô hình để tái sử dụng:

trainer.save_model("./finetuned-model")

Rồi kiểm thử:

from transformers import pipeline
pipe = pipeline("text-generation", model="./finetuned-model")
pipe("Xin hãy viết email xin nghỉ phép lịch sự bằng tiếng Việt.")

🧠 5. Các loại Fine-tuning phổ biến

Loại Fine-tuning Mục đích Ví dụ
Instruction tuning Giúp mô hình hiểu lệnh tự nhiên Dạy mô hình trả lời theo phong cách ChatGPT
Domain tuning Áp dụng cho lĩnh vực cụ thể Y tế, pháp lý, giáo dục
Style tuning Tùy chỉnh giọng văn Viết marketing, viết blog
Multi-turn tuning Huấn luyện hội thoại nhiều lượt Chatbot trợ lý nội bộ

⚖️ 6. So sánh Fine-tuning và RAG

Tiêu chí Fine-tuning RAG
Mục tiêu Dạy mô hình hiểu / nói đúng phong cách Cho mô hình truy cập kiến thức thật
Chi phí Cao (training GPU) Thấp (embedding + DB)
Dễ cập nhật dữ liệu Khó (phải retrain) Dễ (chỉ cập nhật DB)
Bảo mật Dữ liệu có thể bị rò nếu không kiểm soát Giữ nội bộ
Khi nào dùng Khi cần “hành vi” ổn định, hiểu ngữ cảnh Khi cần trả lời từ tài liệu thực tế

💡 Tốt nhất: Kết hợp Fine-tuning + RAG Fine-tuning để mô hình “nói đúng”, RAG để mô hình “biết đúng”.


🧩 7. Best Practice khi Fine-tuning

Mục tiêu Thực hành khuyến nghị
Giảm chi phí GPU Dùng LoRA / QLoRA để fine-tune nhẹ
Tối ưu tốc độ Dùng batch nhỏ (1–2) và mixed precision (fp16)
Tránh overfitting Thêm early stopping, shuffle dữ liệu
Cải thiện đầu ra Dùng prompt chuẩn hóa trong dữ liệu
Kiểm thử mô hình So sánh với mô hình gốc bằng benchmark (BLEU, ROUGE, GPT evaluation)

💡 Ví dụ: Fine-tuning với LoRA

Thay vì train lại toàn bộ 7B tham số (rất nặng), LoRA (Low-Rank Adaptation) chỉ tinh chỉnh một phần nhỏ (~1–2%). Công cụ hỗ trợ: PEFT (Parameter-Efficient Fine-Tuning).

from peft import LoraConfig, get_peft_model

config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
)

model = get_peft_model(model, config)

Kết quả: training nhanh hơn, chi phí thấp hơn 10–20 lần.


⚠️ 8. Các lỗi thường gặp

Lỗi Nguyên nhân Cách khắc phục
Loss không giảm Dữ liệu không chuẩn / học rate cao Giảm learning rate, kiểm tra format
Kết quả lặp hoặc vô nghĩa Dữ liệu thiếu đa dạng Bổ sung data nhiều ngữ cảnh
Model quên kiến thức cũ Fine-tune quá sâu Giảm epoch hoặc dùng LoRA
GPU out of memory Batch size lớn Giảm batch hoặc dùng gradient accumulation

🧭 9. Khi nào nên Fine-tune?

Tình huống Có nên fine-tune không?
Cần mô hình nói đúng giọng văn thương hiệu ✅ Có
Cần chatbot trả lời chính xác theo tài liệu nội bộ ⚠️ Kết hợp RAG
Cần LLM chuyên sâu ngành y / tài chính ✅ Có
Chỉ muốn cải thiện vài câu trả lời nhỏ ❌ Không cần, prompt engineering đủ

🚀 10. Kết luận

Fine-tuning không chỉ là “dạy thêm” cho mô hình, mà là chuyển hóa một LLM tổng quát thành chuyên gia trong lĩnh vực riêng của bạn.

Khi kết hợp với RAG (Retrieval-Augmented Generation), bạn có thể xây dựng chatbot hoặc hệ thống AI vừa hiểu cách giao tiếp của bạn, vừa truy cập được dữ liệu thực tế — đúng nghĩa “AI riêng của doanh nghiệp”.