语言模型监督式微调(SFT)概述

AgenticAI·十月创作之星挑战赛 10w+人浏览 1.2k人参与

一、SFT流程简述

        监督式微调是一种把通用语言模型转化为特定类型模型的方法,其旨在使用提示-响应对数据,对语言模型进行再次训练,以达到我们预期的效果。其流程简述为以下四步:

1. 预先训练语言模型

        先在庞大数据集上训练出一个泛用型的语言模型,也可以从模型网站Hugging Face上下载已训练好的模型。

2. 准备数据集

        从模型需要完成的任务或者做出的行为出发,寻找相关领域的提示-响应对或者助手回复的提示-响应对。

3. 进行SFT训练

        将模型在数据集上进行监督式微调处理,即通过最小化响应的交叉熵损失来进行训练。

4. 进行模型评估

        将训练好的模型进行系统评估,以判断是否达到期望标准。

        以上的损失函数公式本质上是在最大化给定提示i下所有响应token的联合概率分布,如果模型输出偏离响应标签会增大熵,因此SFT实际上是在教会模型“模仿”,这好比一个在大学学习的学生,学的东西泛而浅,他出来工作时需要学习公司的办事方式和沟通表达等等。

二、SFT的最佳使用场景

1. 激发模型新的行为

  • 将预训练的没有固定格式的模型变为能遵守指令的模型
  • 让不具备推理能力的模型具备基本的推理能力
  • 让模型在没有明说的情况下默认使用某个工具

2. 提示模型能力

  • 通过大模型生成高质量数据,通过“模型蒸馏”方式转移到我们的模型中

三、SFT 数据策划原则

在 SFT(监督微调)过程中,数据质量是决定最终效果的核心变量,其影响力远超数据数量。高质量、多场景的训练样本能引导模型学习合规且高效的输出模式,而低质量样本则会导致模型习得错误逻辑或不当表达,形成 “坏习惯”。

主流 SFT 数据构建策略

  1. 蒸馏策略:借助性能更优的指令模型生成高质量回复,再以这些回复为目标,训练参数规模更小的模型。该方法可有效将大模型的核心能力迁移至轻量模型,降低部署成本。
  2. Best-of-K / 拒绝采样:针对同一条输入提示,生成 K 个不同的候选回复。通过预设的奖励函数对这些候选进行打分,筛选出评分最高的回复作为训练样本,确保数据的优质性。
  3. 过滤策略:从大规模原始 SFT 数据集中,依据 “回复质量高” 和 “提示场景多样” 两个核心标准进行筛选,最终形成规模精简但质量过硬的训练数据集。

核心原则:质量优先于数量

SFT 的本质是让模型 “模仿所见数据”,这种模仿具有无差别性 —— 模型会同时学习数据中的优点与缺陷。因此,1000 条经过精心筛选、覆盖多类场景的优质样本,其训练效果通常优于 100 万条质量参差不齐的样本,前者能精准塑造模型行为,后者则可能引入大量噪声,拖累模型性能。

全参数微调与参数高效微调的对比

在进行 SFT(或其他模型对齐方法)时,核心决策之一是确定模型权重的更新方式:

  • 全参数微调:为模型每一层都配置完整的权重更新矩阵\(\Delta W\),即对所有参数进行调整。这种方式能带来显著的性能提升,但相应地需要庞大的存储资源和计算能力支持。

  • 参数高效微调:以 LoRA(低秩适配)为例,其通过在每一层引入小型低秩矩阵 A 和 B 来实现参数调整。这种方法大幅减少了可训练参数的数量,有效节省显存空间,但存在局限性 —— 由于更新的参数规模较小,模型的学习能力和遗忘能力都会受到一定限制。

这两种微调策略可与任何训练方法结合使用。实际应用中,可根据资源约束和性能需求选择:追求极致性能且资源充足时可选全参数微调;硬件条件有限时,参数高效微调则成为更受欢迎的选择。

总结

监督式微调是语言模型对齐过程中的基础且重要的方法。其核心原理是通过最小化目标回复的负对数似然,使模型学会模仿预期行为,并能针对提示做出恰当回应。

SFT 的优势在于:特别适合启动新行为,以及实现从大模型向小模型的能力 "蒸馏"。

但需重点注意:数据质量对 SFT 效果起决定性作用 —— 采用蒸馏、拒绝采样、过滤等策略处理的数据,其训练效果远胜于简单堆砌大量普通数据。

而全参数微调与参数高效微调的选择,本质上是在性能表现与资源消耗之间寻找平衡。

以上来源DataWhale的打卡学习活动,学习内容来自:https://github.com/datawhalechina/Post-training-of-LLMs/tree/main/docs/chapter1

### 大模型无监督微调方法概述 无监督微调是一种针对大规模语言模型的重要技术手段,其核心在于利用未标注的数据来优化模型性能。相比于有监督学习中的指令微调(Supervised Fine-Tuning, SFT),无监督微调更注重于提升模型的语言理解能力以及泛化能力。 #### 数据准备 无监督微调通常依赖大量的未标注文本数据作为输入源。这些数据可以来自互联网爬取的内容、书籍语料库或其他公开可用的大规模文本集合[^1]。为了提高效率和效果,建议对原始数据进行清洗处理,去除噪声较高的部分,并确保数据质量满足需求。 #### 微调目标设定 在设置具体的微调目标时,可以根据实际应用场景调整损失函数形式。常见的做法是以自回归预测或者掩码填充任务为基础构建训练目标。例如,在BERT这样的双向编码器架构下采用Masked Language Modeling (MLM),而在GPT系列单向生成模型里则更多运用Next Sentence Prediction 或者单纯的因果关系建模[^2]。 #### 实现过程详解 以下是基于PyTorch框架实现的一个简单例子: ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("model_name") # 替换为具体的基础模型名称 model = AutoModelForCausalLM.from_pretrained("model_name") optimizer = torch.optim.AdamW(model.parameters(), lr=5e-5) def train_step(input_ids, attention_mask): outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=input_ids) loss = outputs.loss loss.backward() optimizer.step() optimizer.zero_grad() for epoch in range(num_epochs): # 定义迭代次数num_epochs for batch in dataloader: # 使用dataloader加载批次数据 input_ids = batch['input_ids'] attention_mask = batch['attention_mask'] train_step(input_ids, attention_mask) ``` 以上代码片段展示了如何定义基本的训练循环逻辑,其中包含了前向传播计算loss值、反向梯度更新参数等关键操作步骤[^1]。 #### 注意事项 当执行此类项目期间需要注意几个方面的问题: - **硬件资源分配**:由于涉及到大量参数更新运算,因此需要足够的GPU显存支持; - **超参调节策略**:包括但不限于学习率调度方案的选择、batch size大小的确立等因素都会显著影响最终成果的好坏程度; - **评估指标选取**:除了常规perplexity之外还可以考虑引入其他衡量标准比如BLEU分数等等用于综合考量改进幅度情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值