模型训练指南二:三种训练实操对比
本文以工程落地的视角,深入浅出地剖析了 LLM 训练中的三大关键动作。
渲染中...
本文以工程落地的视角,深入浅出地剖析了 LLM 训练中的三大关键动作:PT(增量预训练)、**SFT(有监督微调)**与 DPO(偏好对齐)。 ## 1. PT PT(增量预训练):像是在给模型“灌书”,你的操作重点在于**“吞吐量”**和**“数据清洗”**。 **你手里拿的数据:** 是一堆巨大的 `.txt` 或 `.jsonl` 文件,里面全是长段的长段话,没有“问”和“答”的区别。 **你做的核心动作:** - **切分(Chunking):** 你要把几十 GB 的文本切成每段 2048 或 4096 长度的块。 - **调大学习率吗?不,调小:** 你会把学习率(LR)设得非常低(比如 `1e-5`),因为你只是想让它学点新词,别把它原有的逻辑给冲了。 **你盯着看的指标:** **Loss(损失值)**。只要 Loss 在平滑下降,就说明它在“背书”。 **操作结束的标志:** 你发现模型开始能接出你喂给它的那些专业术语了。 ## 2. SFT SFT(有监督微调):像是在给模型“演剧本”,你的操作重点在于**“对话模板”**和**“Mask(掩码)”**。 **你手里拿的数据:** 是严格的问答对。 - `"instruction": "我失恋了怎么办"` - `"output": "抱抱你,哭出来会好受一点..."` **你做的核心动作:** - **选模板(Template):** 这是你最容易翻车的地方。你必须在脚本里指定模型对应的模板(比如 `qwen` 或 `llama3`),否则模型会学废。 - **设置 Mask:** 你在操作脚本里要确保模型**只对 Output 算 Loss**。如果你没设置好,模型会把用户的问题也背下来,导致它以后只会复读你的问题。 **你盯着看的指标:** **验证集准确率**和 **Loss**。如果 Loss 降得太快(比如瞬间到 0.1 以下),说明过拟合了,它在死记硬背你的剧本。 **操作结束的标志:** 你输入测试题,它能按你设定的语气(比如温柔、幽默)和你聊天了。 ## 3. DPO DPO(偏好对齐):像是在给模型“做考卷”,你的操作重点在于**“显存管理”**和**“Beta 参数”**。 **你手里拿的数据:** 是三元组。每个问题后面跟着一个**“好答案”**和一个**“差答案”**。 **你做的核心动作:** - **双模型加载:** 你的显存会瞬间吃紧。因为你要同时加载“正在练的模型”和“作为参考的模型”。 - **调 Beta 值:** 这是 DPO 唯一的玄学参数。你在脚本里改 `pref_beta`。如果模型练完后说话变得很极端、复读,你就得回来改这个数(通常在 0.1 到 0.5 之间)。 **你盯着看的指标:** **Rewards/margins(奖励差值)**。你会看到两条线,一条是 Chosen,一条是 Rejected。如果两条线拉开了距离,说明模型学会了区分“好坏”。 **操作结束的标志:** 那些原本“冷冰冰、像机器人”的回答消失了,模型变得更懂你的偏好。 ## 操作差异总结 | **操作项** | **PT (灌知识)** | **SFT (学规矩)** | **DPO (分好坏)** | | ------------------- | ----------------------- | ------------------------------ | -------------------------- | | **你最费劲的事** | 清洗和剔除垃圾文本 | 编写和校对高质量对话脚本 | 找模型答错的案例凑对比对 | | **脚本核心开关** | `stage: pt` | `stage: sft` + `template: xxx` | `stage: dpo` + `beta: 0.1` | | **对显存的要求** | 稳定(单倍显存) | 稳定(单倍显存) | **巨大(双倍显存)** | | **训练轮数(Epoch)** | 通常只跑 1 遍(防复读) | 跑 3-5 遍(学深点) | 跑 1-2 遍(防练歪) |
END
评论
登录后查看和发表评论
前往登录