大模型微调完全指南:从时机选择到数据策略,非常详细收藏我这一篇就够了
1、微调时机
什么时候才需要对大模型进行微调呢?
一般来说,做微调之前,应先把Prompting Engineering做到极致,如果通过优化Prompt已经不能解决剩余的问题了,这时候就需要进行模型的微调了。具体表现为:
1)通过Prompting Engineering无法解决问题或Prompt中描述过于复杂,导致线上推理耗时很长的情况;
2)应用对大模型响应的内容有固定格式要求,而模型在Prompting Engineering后仍有部分情况的输出不符合要求;
3)期望通过SFT来进行大模型蒸馏,使小参数模型蒸馏后也可以有效果、并且推理耗时也在可以接受的范围内。
这三种情况出现时,并且给模型添加RAG也没有明显效果的时候,就说明我们需要对模型进行微调了。
下面先概括对比大模型几种常见的优化手段:
| 对比维度 | 继续Pre-train | Prompt | 知识库RAG | SFT微调 |
| 核心目标 | 垂直领域知识深度适应 | 理解和生成长篇内容 | 提供背景知识,增强回答能力 | 优化模型在特定任务领域的表现 |
| 优点 | 利用大量无标注垂直领域原始数据,简单 | 连贯性强,适合复杂任务 | 灵活性高,可随时更新 | 性能提升,定制化效果强 |
| 缺点 | 效果上限依赖数据质量 | 资源消耗大,上下文限制 | 依赖检索,实时性要求高 | 需要标注数据,有一定硬件要求 |
| 适应场景 | 垂直领域知识强依赖型任务,如医学/法律文本生成 | 写作助手、阅读理解 | 智能客服、问答系统 | 专业领域、特定任务 |
| 额外数据 | 大规模垂直无标注文本(10B+ Tokens) | 不需要,可能需要优化上下文长度 | 需要知识库数据 | 需要特定领域标注数据 |
| 重新训练 | 需完整训练流程 | 不需要,可能需要优化模型 | 不需要,只需更新知识库 | 需要对模型进一步训练 |
| 技术实现 | 动态掩码语言模型+领域词权重增强+渐进式学习率衰减 | 扩大上下文窗口 | 检索+生成(RAG) | 调整模型参数 |
| 数据依赖 | 强数据敏感 | 无需额外数据 | 依赖结构化知识库 | 需要大量标注数据 |
| 实时性 | 静态(训练后固定,不会实时更新) | 动态(依赖输入内容) | 动态(知识库可随时更新) | 静态(训练后固定) |
| 资源消耗 | 极高(需千卡集群并行训练) | 高(长文本计算成本高) | 中(需维护检索系统) | 高(训练算力需求大) |
| 灵活性 | 低(领域切换需重新预训练) | 中(适合单次长内容分析) | 高(可扩展多知识库) | 低(需重新训练适应变化) |
2、微调实施手段
大模型的调整优化根据应用场景,一般有三个范式:
第一种是提示词(Prompt)范式。这种模式适合在未知任务上直接测试。例如基础大模型经预训练后,通过设计特定指令或上下文提示引导模型输出,无需修改模型参数就能适应新任务。
第二种是:预训练(Pretrain)-微调范式。这种模式适合在单一任务上微调和测试;如基础大模型经预训练和微调后,进行剧本生成。
第三种范式是:预训练-指令微调范式。这种模式适合在在多样任务上微调,在未知任务上测试。如基础大模型经预训练后,经多种类型的任务进行指令微调,进行通用任务的处理。
一般我们会根据任务特点,选择大模型微调采用哪种模式。
3、微调数据
SFT微调的数据结构是指令-响应对格式,以Json形式存储。SFT数据由以下几部分组成:角色定义、标签分类任务、生成任务、参考问答等。
SFT的数据质量比数据量更重要,一般来时其数据量级如下:
1)生成类任务:需2000-3000条
2)参考问答类任务:需2000-1万条
3)文本分类任务:需1000-3000条
SFT的数据采样策略主要有两种,分别是:
1)数据采样与分布平衡:采样要平衡各类数据的分布,难度也需要渐进分布;同时,要兼顾数据长度分布,尽量覆盖所有领域;
2)预置数据混入策略:通过预先设计,准备好需混入的数据。混入数据的比例一般在15%-30%左右,从而缓解大模型在某个领域上SFT后,通用能力下降的问题,保持模型在特定领域外的基本能力。
如果在SFT时,发现数据量不够,可以采用现有大模型进行数据增广;对于采集到的数据,可从数据集中抽样进行评估,确保SFT数据集对已知问题有一定覆盖度,并且格式正确性,数据内容质量符合预期。业界也有一些措施来确保SFT数据质量,例如:
1)在数据筛选和验证方面,可采用自动化筛选的方式,对数据格式、一致性以及语法进行检查;其次,人工抽样审核数据,对数据质量进行评分,也可进行专家验证;最后,利用预训练的模型对数据进行辅助筛选,筛选完成后可以人工复核。
2)在数据相关性采集方面,要考虑数据风格保持一致,即场景相关性要匹配;也要有跟任务高相似度的数据;其次,在难度梯度方面,最好从简单到复杂,让模型能逐步理解数据。
3)在模型响应的多样性保障方面,要尽量从相同prompt生成多种风格、多种角度的响应数据;其次通过调整模型的生成参数,来改变模型生成的多样性;数据采集的时候,要尽量从多源头采样,如采集多个来源、不同人类响应的数据。
4)SFT的数据采集可能不会一次到位,可以迭代式对数据进行改进。如先进行微调,然后针对量化指标如准确率和相关性等定位数据的缺陷,针对这些数据缺陷,有针对性地补充数据。
在数据质量方面,一定要考虑到特定领域的适应,可以让领域专家审核,添加专业术语或者添加边界情况下的数据,从而让数据质量更高。
还可以采取一些对比学习策略,如设置标准,告诉模型什么是好响应,什么是坏响应,从而让模型能自动学习。
总得来说,高质量的数据是SFT微调的基石。在采集微调数据时,应遵循以下大的原则:
1)数据质量优于数量;
2)应建立系统性的方法保障微调效果,如通过自动化、人工、模型辅助手段评估数据质量。评估出结果后,通过几轮迭代来持续优化数据质量;
3)要针对性适配不同场景的需求。例如要匹配目标场景的示例与响应风格。针对专业领域,还需强化专家验证、术语准确性以及边界情况的覆盖。
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:




更多推荐

所有评论(0)