手里只有 1000 条标注数据,想微调一个 Qwen-7B 或者 Qwen2-VL-7B-Instruct 让它干点专活。这事能成,但成的前提是你先认怂:这点数据量,喂不饱一个几十亿参数的大模型,硬喂就是过拟合。
这篇把少量样本微调的完整套路过一遍,从策略到数据到解码参数,都是能直接照抄的操作。
先认清三个坑
坑一:模型太大,数据太少。 全参数微调在这种数据量下必过拟合——模型把训练集背下来了,换新数据就露馅。
坑二:策略不对。 学习率拉太高,一步就把预训练学到的知识冲没了;Epoch 跑太多,训练集上的 loss 一路降,验证集上的分一路崩。
坑三:格式没对齐。 模型对输入格式有要求,缺了开始标记、结束标记、角色标识,它解析不了你的数据,再好的数据也白搭。
策略:能冻结的全冻结
少量样本微调的第一原则:别动大模型的底子,只让它学任务相关的那一层。
- 冻结大部分参数,只微调高层或任务相关层。Qwen 这种模型,冻结后保留的是它预训练攒下的通用知识,学不坏。
- 用 LoRA。秩(rank)取 4 或 8 就够,缩放系数 alpha 跟着任务调。LoRA 把新增参数压到极小,天然抗过拟合。
- 学习率给 1e-5 或更低,让参数更新慢而稳。
- 只跑 2-3 个 Epoch,配合早停:验证集性能不涨了就停,别恋战。
数据:1000 条怎么变出花样
数据量小,就得靠增强撑场面。
- 同义词替换:用同义词词典或小模型替换句中的部分词。
- 回译:翻成英文再翻回来,语义不变、表述翻新。
- 随机插入、删除、交换:低成本加多样性。
- 生成式增强:拿模型按原句仿写新样本。
格式这关也要统一:输入输出按模型要求对齐,开始/结束标记给全,对话任务分清角色。格式错了,模型学到的全是噪音。
解码参数
微调完的推理阶段,别用默认值裸奔:
- temperature 0.7-1.0,平衡随机性和稳定性。
- Top-k(k≈50)或 Top-p(p≈0.9)采样,二选一。
- 限制最大生成长度,防止模型放飞。
- 加停止标记,让生成在正确的地方收住。
一张能直接抄的参数表
| 参数 | 建议值 |
|---|---|
| 学习率 | 1e-5 或更低 |
| 批次大小 | 8 或 16(看显存) |
| Epoch | 2-3,配合早停 |
| LoRA 秩 | 4 或 8 |
| 优化器 | AdamW |
| 权重衰减 | 0.01 |
| 梯度裁剪 | 1.0 |
收尾的验证
微调前先在未调过的模型上跑一遍输入,确认它本身能正常生成;微调后再跑一遍,对比输出有没有被调坏。这两步能帮你把"数据格式问题"和"微调策略问题"分开排查,别混在一起调参,否则永远找不到病灶。
少量样本微调的真相就一句:模型是借来的底子,你要做的只是给它戴上一副合手的任务手套,而不是重造一个大脑。
FIN