当前位置: 首页 > web >正文

指令微调时,也要考虑提示损失

动机

大模型在预训练之后往往需要经过指令微调,以更好地遵循人类指令。常规做法是在自回归流程中,只对回答部分计算损失而忽略提示部分的误差。但这样的设计是否最优,一直缺乏深入研究

OpenAI 的 fine-tuning API 曾允许为 Prompt 部分设定一个小的非零权重,默认为0.01,声称“对短回答的数据可以稳定训练”,但当时缺乏广泛的实验证据,后来也移除了此参数

理论上,如果训练时加入提示部分损失,可能会带来两方面影响:

  • 正向效应(稳定训练): 当训练数据的答案很短时,纯粹依靠短答案部分更新参数可能不足以稳定地优化模型。此时给予 Prompt 部分一个小的损失权重,相当于提供了额外的预测任务,哪怕Prompt只是重复输入,也为模型提供了类似正则化的信号,避免因有效训练信号过少而发生梯度发散

  • 负效应(目标偏差): 引入 prompt 损失存在训练-测试不一致的风险,模型可能过多关注指令文本的复现,而非专注于生成正确的回答

所以我们需要在这两种效应之间取得平衡,需要在不同尺寸、不同架构的模型上进行广泛的测试,以确认提示损失到底要不要算、要算多少

实验结果

一、训练方法

对提示和回答 token 的损失进行加权,如下图所示

在这里插入图片描述

二、对不同长度任务的影响

根据上述理论分析,我们认为使用提示损失的最大作用在于处理短回答指令任务。于是基于 Stanford Alpaca 数据集构造短回答样本与长回答样本(划分依据为回答长度是否大于提示长度)进行训练,并在八个下游任务中进行测试(ARC、WinoGrande、PIQA、TruthfulQA、WMT等)

在这里插入图片描述

如图所示,将提示损失权重从0逐步提高到1,完整数据和长数据构建的模型整体效果变化不大,而短数据训练的模型却展示出了性能由弱变强再下降的趋势,说明之前的理论分析正确:对于短文本指令任务,加入提示损失明显利大于弊

参考文献:
https://arxiv.org/pdf/2401.13586v2
Instruction Fine-Tuning: Does Prompt Loss Matter?

三、更广泛的测试

另一项研究更完善地测试了不同架构、尺寸、训练数据规模的模型,通过多种损失权重组合上进行训练后,在五个基准上(MMLU、BBH、AlpacaEval、IFEval、MT-Bench)的准确率

在这里插入图片描述

如上图所示,传统的微调方案很少产生最佳的模型性能,而在大约 81% 的情况下,最佳性能的模型是通过低到中等的提示标记权重(0 到 0.6)和中等到高的响应标记权重(0.4 到 1)获得的

在这里插入图片描述

理想情况下,我们希望指令微调后的模型对输入噪声具有良好的鲁棒性,即模型更多地学到了指令背后的逻辑,而非专注于数据表层的语义模式。对此,作者测试时使用了拼写错误、重新措辞和格式更改后的样本,检查模型回答的一致性:

在这里插入图片描述

可以发现,使用传统指令微调的模型在提示敏感性方面几乎从未表现最佳,并且通常还会比未经训练的基础模型更加敏感。而如果给一个较低的提示权重,敏感性通常会降至最低

微调后的模型往往还需要进行各种基于强化学习的对齐训练。实践中我们可能会发现,不同模型存在“可塑性”差异:某些微调模型在做对齐训练时可能表现不佳。对此,作者测试了使用了提示加权训练出来的模型,与传统微调模型,进行 DPO 后训练时的效果差异

在这里插入图片描述

可见使用了提示权重所训练的模型,会更适合进行下游对齐

参考文献:
https://arxiv.org/pdf/2507.07817
On the Effect of Instruction Tuning Loss on Generalization

总结

介绍的两项研究都揭示了指令微调中损失函数设计与模型泛化能力之间的重要联系,适度地对 prompt 本身进行损失计算与学习是有益的

http://www.xdnf.cn/news/15298.html

相关文章:

  • 多模态数据解压-Parquet
  • 精密模具大深径比微孔尺寸检测方案 —— 激光频率梳 3D 轮廓检测
  • Apache HTTP Server 从安装到配置
  • 【Linux仓库】虚拟地址空间【进程·陆】
  • 未来软件开发的新方向:从工程到智能的深度演进
  • Claude Code:完爆 Cursor 的编程体验
  • 剑指offer——链表:从尾到头打印链表
  • 上位机知识篇---SD卡U盘镜像
  • [论文阅读] 人工智能 + 软件工程 | LLM辅助软件开发:需求如何转化为代码?
  • 链表算法之【判断链表中是否有环】
  • 千辛万苦3面却倒在性格测试?这太离谱了吧!
  • 【C++】内联函数inline以及 C++入门(4)
  • 自动评论+AI 写作+定时发布,这款媒体工具让自媒体人躺赚流量
  • C++(STL源码刨析/List)
  • PyTorch中的torch.argmax()和torch.max()区别
  • 标准化模型格式ONNX介绍:打通AI模型从训练到部署的环节
  • 基于Springboot+UniApp+Ai实现模拟面试小工具二:后端项目搭建
  • 上位机知识篇---安装包架构
  • java集合类
  • 输入流挂起
  • 人脸图像生成(DCGAN)
  • Java线程进阶-并发编程
  • python的病例管理系统
  • halcon 求一个tuple的极值点
  • 性能狂飙 Gooxi 8卡5090服务器重新定义高密度算力
  • 深入剖析Spring Bean生命周期:从诞生到消亡的全过程
  • JavaSE——Object
  • Linux驱动基本概念(内核态、用户态、模块、加载、卸载、设备注册、字符设备)
  • DSSA(Domain-Specific Software Architecture)特定领域架构
  • 台球 PCOL:极致物理还原的网页斯诺克引擎(附源码深度解析)