论文解读 | ACL 2024:自我蒸馏在语言模型微调中架起分布差异的桥梁

点击蓝字

b6844e8860a5af02cd4b82d751e895c4.jpeg

关注我们

AI TIME欢迎每一位AI爱好者的加入!

fca94401d542391b1d151aecc0184a6d.jpeg

杨兆瑞

浙江大学CAD&CG全国重点实验室博士生

导师为陈为教授

概述

大型语言模型(LLMs)的兴起彻底改变了自然语言处理领域,但对它们进行特定任务的微调常常面临在平衡性能和保持一般指令遵循能力方面的挑战。在本文中,我们认为任务数据集与LLMs之间的分布差距是问题的主要根本原因。为解决这一问题,我们引入了自蒸馏微调(Self-Distillation Fine-Tuning,SDFT)方法。它引导模型对任务数据集进行改写,并在蒸馏生成的数据集上进行微调,从而弥合分布差距,并匹配模型的原始分布。我们使用Llama-2-chat模型在各种基准数据集上进行了实验,证明了SDFT能有效减轻灾难性遗忘,且在与普通微调相比时,在下游任务上实现了相当或更佳的性能。此外,SDFT表现出维持LLMs的有用性和安全对齐的潜力。

论文地址:https://arxiv.org/abs/2402.13669

代码地址:https://github.com/sail-sg/sdft

01

The Landscape of LLM Model Fine-tuning

在Hugging Face平台上,每天都有众多微调模型涌现,既有社区爱好者的贡献,也有大型研究机构的成果。例如,搜索基于Llama3的模型,便能找到超过9000个结果。

3ca3c400f8f6ad0adf0e0fb4c4f4c07b.png

02

The Challenge of Enhancing Existing Models: Performance

尽管微调模型以提升特定任务性能看似简单,但实际操作却面临挑战。以Meta发布的Llama3为例,其训练数据细节未公开,且模型已使用超过1000万个未公开标注示例。因此,收集模型未见过的私有数据并进行有效微调并非易事。

f999654528f8236a72c4c087eb983b6c.png

03

The Challenge of Enhancing Existing Models: Safety

微调大型语言模型可能削弱其安全性。根据ICLR 24的一篇文章,微调后的模型安全性可能大幅降低。尽管模型在通过RLHF对齐后与人类价值观一致,微调仍可能破坏这一安全保障。实验显示,即使是使用良性数据集进行微调,模型的安全性也会降低。

b4c082eb1366c5e0e009547880cf21dc.png

04

The Need for a Better Approach

前面提到了微调面临的两个挑战:性能和安全性。本文探讨是否存在一种更优的方法来进行微调,以便在提升下游任务能力的同时,仍能保持模型原有的安全性能。这涉及到对模型进行定制化与保持其通用性的平衡。

0a18b534d9f8cb9d09600cc7b9b5f334.png

05

The Root Cause of Challenge

本文实验表明,微调的主要挑战在于原始模型数据分布与微调数据分布之间的差异。左图显示了Lama-3-Instruct模型的广泛能力,如代码生成、故事讲述和文本摘要,这些能力与人类价值观对齐,确保了模型的安全性。然而,微调特定任务时,所用数据往往来自狭窄分布,可能影响模型性能。

af51692a2716814583352824e31d1d59.png

06

Introducing Self-Distillation Fine-Tuning

基于上述发现,本研究提出了一种新的微调策略,名为自蒸馏微调(Self-Distillation Fine-Tuning,简称SDFT)。该方法旨在对齐任务数据集与语言模型的原始数据集,以减少两者之间的分布差异,同时保留数据集中的监督信息。SDFT通过语言模型对目标标签进行重写,实现新知识与模型原有知识体系的整合。

本文进一步提供了一个示意图,清晰展示了两种微调方法的差异。图的上半部分展示了传统微调(Vanilla Fine-Tuning),即直接在特定数据集上对语言模型进行微调,以增强其在特定任务上的表现。然而,此方法可能导致模型在其他能力上的损失,形成所谓的折衷语言模型。相对而言,图的下半部分介绍了SDFT方法。该方法首先通过蒸馏技术生成精炼数据集,随后在该数据集上执行微调,旨在提升模型在特定任务上的性能,同时避免对原始能力的损害。

35a0b70ffa287ec0513528c1814fa125.png

07

Method: Self-Distillation Fine-tuning

本文提出的SDFT方法通过从选定的对话模型开始,如Llama-3-Instruct或Llama-2-Chat,筛选并重写特定下游任务中表现不佳的数据集,生成与原始模型分布对齐的精炼数据集,进而在该数据集上进行微调,以实现在提升新技能的同时保持模型原有能力的目标。示意图展示了将原始数据集分布向模型原始分布的转变过程,从而确保微调后的数据集分布(橙色区域)与模型的初始分布更为接近。

8d1b070e55150d1c408ae605c9a7de25.png

下图中呈现了一个用于知识蒸馏的模板及其应用实例。该模板是在Alpaca模板的基础上经过调整形成的,它包含了原始的指令和响应,旨在引导模型基于这些信息生成创新的响应。演示的右侧部分具体展示了一个示例,其中包含了指令和原始响应,以及模型经过改写得到的蒸馏响应。原始响应仅对问题进行了简要回答,而蒸馏响应则在此基础上进行了扩展,融入了模型自有的知识体系,以提供更全面的答复。

fe0e2c429c272b0ece75ac05d9e1a0ae.png

08

Experiments: SDFT vs. Vanilla Fine-tuning

实验阶段,本表格详细对比了传统的Fine-tuning方法与本研究所提出方法的性能差异。

实验主要聚焦于三个具有代表性的下游任务数据集:GSM8K(数学问题集)、HumanEval(代码生成能力评估)以及OpenFunctions(函数调用能力评估)。表格中列出了各模型在经过微调后,在不同数据集上的性能表现。

数据显示,在经过传统微调之后,模型在特定微调数据集上的性能有所增强。例如,原始的语言模型在OpenFunctions数据集上的准确率从19.6提升至34.8。然而,这种提升往往伴随着在其他数据集上性能的下降,如在OpenFunctions数据集上微调后,GSM8K数据集上的准确率从29.4下降至21.5。这一对比凸显了传统微调方法的局限性。相对地,采用本研究提出的自我蒸馏微调方法,观察到了不同的结果,表明该方法可以在维持模型原有能力的同时,有效提升特定任务的性能。

f4b6aa97bfbf22db4b7366b028c8d9a0.png

在针对特定任务数据集的微调过程中,本研究所采用的方法不仅在目标数据集上实现了性能提升,其准确率达到了36.6,这一结果与采用传统微调所取得的提升相当或更优,如蓝框所示区域所展示。值得注意的是,在经过本方法的微调后,模型在其他数据集上的性能下降幅度较小。以GSM8K数据集为例,在传统微调后性能下降至21.5,而通过自我蒸馏微调后,性能仅略微下降至29.1。这一现象表明,尽管两种微调方法均能有效提升模型在目标任务上的性能,但本研究所提出的方法在保持模型原有广泛能力方面表现更佳。

本部分深入探讨了模型在安全性和帮助性方面的表现。实验对比了两种微调技术:传统微调与自我蒸馏微调。图表中,左侧展示了传统微调的结果,而右侧则展示了SDFT的效果。实验结果表明,经过传统微调后,模型在安全性和帮助性方面的性能出现了显著下降。相比之下,采用SDFT方法的模型在微调后能够更有效地维持其原有的安全性和帮助性水平,从而在保持性能的同时,也确保了模型的可靠性和实用性。

c550d53b0523aeee52642089af58cbaf.png

09

Analysis: Distribution Gap

在本研究的分析阶段,探讨了微调后模型与原始模型之间分布差异的问题。通过对数据集进行模型推理,评估了微调后模型与原始模型在嵌入空间的相似度,以此衡量模型分布的变化。图表中,红色区域代表传统微调后模型与原始模型的嵌入相似度,而绿色区域则显示了采用自我蒸馏微调方法后的嵌入相似度。结果表明,自我蒸馏微调方法处理后的模型在嵌入相似度上具有明显提升,这表明该方法能够有效地减少分布变化,减轻微调过程中的模型遗忘问题。

048f534185fa3db7569394236eb27f16.png

10

Analysis: Effective across Models

在进一步的分析中,研究旨在验证所提方法在不同模型和规模上的普适性。先前的表格主要关注了Llama-2-7b-chat模型在LoRA微调上的表现。为补充这一分析,本研究扩展了考察范围,包括以下三种不同场景:首先是在Llama-2-7b-chat模型上实施全参数微调,结果表明了显著的性能提升;其次是在Llama-2-13b-chat模型上应用LoRA微调;最后是在最新发布的Llama-3-8B-Instruct模型上执行LoRA微调。实验结果显示,在所有这三种场景中,所提方法相较于传统微调均展现出更优的性能。综合这些发现,可以得出结论,该方法在不同模型尺寸和架构上均表现出良好的效果和适用性。

487302dbbba43c90c4a2a662e0122122.png

11

Take Away

本研究的核心发现指出,分布偏移是导致微调过程中灾难性遗忘的关键因素。为应对这一挑战,提出的方法采用自蒸馏技术来减少分布差距,有效缓解了遗忘问题。实验结果进一步证实,该方法不仅提升了模型在目标任务上的性能,还成功保留了模型的原始能力。

本篇文章由陈研整理

a4557abf1566802f7ea75577d6c98b68.png

点击  阅读原文 观看作者直播讲解回放 !

https://www.bilibili.com/video/BV1gb421779t/?share_source=copy_web&vd_source=46fea0c86812502b4bd703eca52de309&t=5489

往期精彩文章推荐

f59f35e9e76fbf35f1feb5f5e3aa347c.jpeg

ACL 2024 | BPO:灵活的 Prompt 对齐优化技术

记得关注我们呀!每天都有新知识!

 关于AI TIME 

AI TIME源起于2019年,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法和场景应用的本质问题进行探索,加强思想碰撞,链接全球AI学者、行业专家和爱好者,希望以辩论的形式,探讨人工智能和人类未来之间的矛盾,探索人工智能领域的未来。

迄今为止,AI TIME已经邀请了1800多位海内外讲者,举办了逾600场活动,超700万人次观看。

4b7086b7727694aeb87d657653529af3.jpeg

我知道你

在看

提出观点,表达想法,欢迎

留言

f6738cf32cb61990fe94a38a53942627.gif

点击 阅读原文 观看作者直播讲解回放!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/397056.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ | (一)C++入门基础

从本篇文章开始,我们正式进行C的系统学习。C是在C语言的基础上添加了面向对象编程的特性,是C语言的延伸,并遵循C语言的绝大多数语法。如果想学习C,必须要有一定的C语言基础,这样学起来才不会太过痛苦。 本文章即假设读…

【实战】Spring Security Oauth2自定义授权模式接入手机验证

文章目录 前言技术积累Oauth2简介Oauth2的四种模式授权码模式简化模式密码模式客户端模式自定义模式 实战演示1、mavan依赖引入2、自定义手机用户3、自定义手机用户信息获取服务4、自定义认证令牌5、自定义授权模式6、自定义实际认证提供者7、认证服务配置8、Oauth2配置9、资源…

【数据结构】—— 队列

1、队列的概念2、队列的结构如何选择合适的数据结构实现队列(数组or链表) 3、队列的链式存储3.1 队列的链式存储结构3.2 队列的常见接口3.3 队列的接口实现初始化判空入队列出队列获取队头元素获取队尾元素获取节点个数销毁 3.4 源代码 4、队列的顺序存储…

k8s持久化存储PV和PVC

一、PV和PVC 1.PersistentVolume (PV) PersistentVolume (PV) 是外部存储系统中的⼀块存储空间,由管理员创建和维护。与 Volume⼀样, PV 具有持久性,⽣命周期独⽴于 Pod; 2.PersistentVolumeClaim (PVC) PersistentVolumeClaim…

散点图、折线图 -- 通过javascript实现

散点图 散点图适合用于探索数据大局、比较值、发现趋势、模式和变量间关系&#xff0c;是数据分析中直观展示和初步探索的有力工具。 代码&#xff1a; <!DOCTYPE html> <html> <script src"https://cdn.plot.ly/plotly-latest.min.js"><…

如何快速实现MODBUS TCP转Profinet——泗博网关EPN-330

泗博网关EPN-330可作为PROFINET从站&#xff0c;支持与西门子S7-200 SMART/300/400/1200/1500全系列PLC以及具有PROFINET主站的系统无缝对接&#xff0c;而Modbus TCP端&#xff0c;可以与Modbus TCP从站设备、主站PLC、DCS系统以及组态软件等进行数据交互。 通过EPN-330&…

SemanticKernel/C#:实现接口,接入本地嵌入模型

前言 本文通过Codeblaze.SemanticKernel这个项目&#xff0c;学习如何实现ITextEmbeddingGenerationService接口&#xff0c;接入本地嵌入模型。 项目地址&#xff1a;https://github.com/BLaZeKiLL/Codeblaze.SemanticKernel 实践 SemanticKernel初看以为只支持OpenAI的各…

近似算法:求Π的近似值(迭代法)

问题&#xff1a;请用正多边形逼近法求Π的近似值。 算法&#xff1a;圆的周长 正多边形的边长 * 边数。设圆的半径为1&#xff0c;则2Π i * x 。其中 i 为正多边形边数&#xff0c;x 为边长。 因为圆的半径 内接于此圆的正六边形的边长&#xff0c;故从六边形开始计算。参…

git系统学习

git系统学习 git命令行获取git 版本号 创建初始版本库创建git库初始化用户名和密码查看用户名和邮箱修改用户名和密码 将文件添加到版本库中删除暂存文件提交代码查看提交信息查看更加详细的信息查看提交差异版本库内文件的删除和重命名删除库里的文件重命名库里的文件 打标签查…

重启人生计划-大梦方醒

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 从今天开始&#xff0c;我…

MybatisPlus——扩展功能(一)

扩展功能 1.代码生成 在使用MybatisPlus以后&#xff0c;基础的Mapper、Service、PO代码相对固定&#xff0c;重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不过代码生成器同样要编码使用&#xff0c;也很麻…

软考高级:真实的程序、核心程序、小型基准程序、合成基准程序

一、AI 讲解 这段内容描述了在软件测试或性能测试中&#xff0c;不同类型程序的测试精确度排名。 测试类型说明精确度排名真实的程序直接测试实际运行的软件或系统&#xff0c;能够反映真实的使用场景1核心程序测试系统或应用的核心模块或功能&#xff0c;虽然范围较小但仍具…

使用Selenium调试Edge浏览器的常见问题与解决方案

背景介绍 在当今互联网时代&#xff0c;网页爬虫已经成为数据获取的重要手段。而Selenium作为一款功能强大的自动化测试工具&#xff0c;被广泛应用于网页爬取任务中。虽然Chrome浏览器是Selenium用户的常见选择&#xff0c;但在某些工作环境中&#xff0c;我们可能需要使用Ed…

运行时数据区

运行时数据区 方法区 Method Area&#xff0c;用于存储已被虚拟机加载的类信息&#xff08;、、&#xff09;、常量、静态变量、即时编译后的代码等数据线程公用类信息 类型信息&#xff1a;类class、接口interface、注解annotation、枚举enum域Field信息&#xff1a;字段名称、…

某MDM主数据管理系统与微软Dynamic CRM系统(新加坡节点)集成案例

一、项目背景 某客户需要将物料和配件等主数据和海外系统进行对接&#xff0c;由SAP PO在中间对接海外系统&#xff0c;进行主数据的下发&#xff0c;方便两端系统之间进行对接&#xff0c;集团统一性管理国内海外数据&#xff0c;提高整体业务效率&#xff0c;保证数据的时…

基于Java中的SSM框架实现在线收银系统项目【项目源码+论文说明】

基于Java中的SSM框架实现在线收银系统演示 摘要 科技的力量总是在关键的地方改变着人们的生活&#xff0c;不仅如此&#xff0c;我们的生活也是离不开这样或者那样的科技改变&#xff0c;有的消费者没有时间去商场购物&#xff0c;那么电商和快递的结合让端口到消费者的距离不…

气膜建筑的抗风与防火性能:保障仓储的安全—轻空间

气膜建筑以其独特的结构和材料优势&#xff0c;为仓储设施提供了可靠的安全保障。在应对自然灾害特别是强风和火灾时&#xff0c;气膜建筑展示了优异的抗风和防火性能。轻空间将详细探讨这些性能及其在实际应用中的表现。 气膜建筑的抗风能力源于其特殊的结构设计和高性能材料。…

ZLM+wvp-pro使用错误记录

这里千万不要写127.0.0.1 在同步国标同步的时候&#xff0c;会出现接口不可达。以下是抓包工具抓的内容 这个时候就很奇怪了&#xff0c;这是为什么呢&#xff0c;这个时候我们通过telnet来判断一下&#xff0c;会发现端口占用&#xff0c;那么这个时候为什么说端口不可达。。。…

一站搞定原型链:深入理解JavaScript的继承机制

目录 一站搞定原型链&#xff1a;深入理解JavaScript的继承机制 一、基本概念 1. 对象与原型 2. 构造函数 二、原型链 三、原型链的终点 四、原型链的构造 1. 创建对象 2. 原型对象的原型 五、继承 1. 原型继承 2. Class 语法糖 六、总结 作者&#xff1a;watermel…

冥想第一千二百四十八天(12478)

1.今天周日&#xff0c;被今天的天气治愈了&#xff0c;空气特别的好。 2.先去游泳了1个小时&#xff0c;中午和家人一起吃饭。 3.下午没再出去了。给溪溪桐桐洗了澡。 4.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。