minimind/learning/day04/01_prereading.md

1.7 KiB
Raw Blame History

Day 4 Prereading: SFT 实战

今日目标

今天从 pretrain 权重继续训练 full_sft,得到能按对话模板回答的模型。

必须掌握的基础概念

  • SFT:Supervised Fine-Tuning,用高质量指令/对话数据训练助手行为。
  • Instruction following:理解用户意图并按格式回答。
  • Chat template:训练和推理必须一致。
  • Assistant-only loss:只让模型学习 assistant 输出,不学习复述 user。
  • Catastrophic forgetting:微调过窄数据可能损伤原有能力。

面试考点

  • Pretrain 和 SFT 的本质区别是什么?
  • SFT 能不能注入新知识?
  • 为什么 SFT 学到的不只是格式,也可能改变知识分布?
  • 为什么学习率比 pretrain 小很多?
  • 为什么 SFT 后模型更会聊天,但不一定更真实?

工业要求

  • SFT 数据必须检查格式一致性。
  • 训练和推理的 chat template 必须一致。
  • SFT 评测不能只看 loss,要看真实生成。
  • 小模型 SFT 容易学表面风格,但事实性仍弱。
  • 如果领域微调,要混合通用数据避免能力坍缩。

项目中要看的文件

  • trainer/train_full_sft.py
  • dataset/lm_dataset.py::SFTDataset
  • eval_llm.py
  • scripts/eval_toolcall.py

今日推荐命令

cd trainer
python train_full_sft.py \
  --epochs 2 \
  --from_weight pretrain \
  --batch_size 16 \
  --accumulation_steps 1 \
  --max_seq_len 768 \
  --learning_rate 1e-5 \
  --log_interval 100 \
  --save_interval 1000

训练后:

cd ..
python eval_llm.py --weight full_sft

今日记录模板

SFT 命令:
from_weight:
数据:
max_seq_len:
初始 loss:
最终 loss:
pretrain 回答样例:
full_sft 回答样例:
明显提升:
明显问题: