LoRAMoE:缓解大模型的世界知识遗忘问题

2024-08-30 14:20

本文主要是介绍LoRAMoE:缓解大模型的世界知识遗忘问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

人工智能咨询培训老师叶梓 转载标明出处

大模型(LLMs)在进行SFT时,通过增加指令数据量来提升其在多个下游任务中的性能或显著改善特定任务的表现。但研究者们发现,这种大规模的数据增加可能会导致模型遗忘其预训练阶段学习到的世界知识。这种遗忘现象在封闭书籍问答等任务中尤为明显,这些任务通常用来衡量模型的世界知识水平。

为了应对这一挑战,复旦大学的研究团队提出了LoRAMoE框架。LoRAMoE是一种Mixture-of-Experts(MoE)风格的插件,它引入了多个低秩适配器(LoRAs),并通过路由器网络进行集成。该框架的核心思想是在保持模型主体不变的情况下,通过部分LoRAs来利用世界知识解决下游任务,从而缓解世界知识遗忘的问题。

论文链接:https://arxiv.org/pdf/2312.09979

项目链接:https://github.com/Ablustrund/LoRAMoE

方法 

LoRAMoE的核心架构如图4所示,与标准的MoE架构相比,LoRAMoE在每个Transformer块的前馈神经(FFN)层中引入了多个LoRA(Low-Rank Adaptation)作为可适应的专家,并通过路由器来控制它们。在训练过程中,只有专家和路由器是被优化的。

标准MoE架构的工作流程如下:

  • 输入数据通过一系列的嵌入层(Embedding)和Transformer块进行处理。
  • 在MoE中,路由器根据数据为专家分配权重,使它们能够分工完成前向传播过程。
  • LoRAMoE在此基础上进行了改进,冻结了主干模型以保持世界知识,并引入专家来利用这些知识解决任务,同时提高在多个下游任务上的性能。

在LoRAMoE中,传统的FFN层被替换为MoE风格的插件,使得专家可以协作处理任务。在训练阶段,主干模型被冻结,只更新∆W。如果考虑一个包含N个专家的LoRAMoE层,其前向过程可以表示为: 其中,分别代表第i个专家和路由器。W_g​ 是路由网络的可训练参数矩阵。

为了提高训练和推理的效率,LoRA被用作专家的架构。专家的参数矩阵∆WE被替换为低秩格式,显著减少了可训练参数,从而提高了微调过程的效率和资源利用率。

LoRAMoE面临的一个典型问题是专家使用不平衡,如图5所示。传统的解决方案是平衡专家的使用,通过将专家重要性的变异系数作为损失函数。然而,这种方法假设所有训练样本都在同一分布下,忽略了样本可能来自不同分布的事实,如图6所示。

LoRAMoE在训练阶段引入了一种新颖的平衡专家使用的方法——Localized Balancing Constraint。这种方法通过软性约束专家专注于两个方面:一部分专家专注于通过学习相关数据集来利用世界知识,另一部分专家专注于其他下游任务。同时,解决同一方面的专家之间进行平衡。

具体来说,定义LoRAMoE层的重要性矩阵Q,其中表示第n个专家对第m个训练样本的路由器值之和。然后定义与Q相同大小的系数矩阵I,其中​表示​的重要性系数。通过优化损失函数,可以使得对应专家从样本中学习更多,并被路由器分配更大的权重。

最终,LoRAMoE的损失函数可以表示为:其中,L是LLMs的下一个token预测损失,β控制本地平衡约束的强度。在训练阶段,主干模型被冻结,只有LoRAMoE层中的专家和路由器的参数是可训练的。在推理过程中,路由器自动为所有专家分配权重,避免了预指定数据类型的需要。

通过这种方法,LoRAMoE不仅提高了模型在多个下游任务上的性能,同时也有效地保持了模型内部的世界知识。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加助理微信提供直播链接:amliy007,29.9元即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory,关注享粉丝福利,限时免费CSDN听直播后的录播讲解。
LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

实验 

实验设置中,LoRAMoE仅将大型语言模型(LLM)前馈神经网络中的线性层替换为LoRAMoE层。每个LoRAMoE层初始化包含六个专家,其中三个专家专注于处理下游任务,另外三个专家负责通过学习相关任务来利用基础模型中的世界知识。控制约束强度β和不平衡程度δ的超参数均设置为0.1。对于LoRA设置,α和r分别设置为32和4。dropout设置为0.05,学习率为。训练数据集被精心设计,以确保它能够代表模型在实际应用中可能遇到的多样化挑战。基础模型的参数被冻结,只有LoRAMoE中的专家和路由器是可训练的。每个节点的批量大小设置为16。

表2展示了LoRAMoE的性能,并将其结果与直接对模型应用SFT或使用LoRA调整的结果进行了比较。结果显示,使用LoRAMoE的语言模型在世界知识基准测试和其他方面都表现良好,表明其在避免知识遗忘的同时提高了多任务处理能力。对于世界知识基准测试,与灾难性崩溃相反,LoRAMoE不仅避免了这个问题,而且还超越了仅使用CBQA数据集进行微调的模型。LoRAMoE在世界知识基准测试中的性能比纯SFT有显著提升,最高提升了63.9%,平均增长了35.3%。对于其他下游任务,LoRAMoE能够达到接近甚至超越直接SFT的性能。例如,在所有阅读理解任务(即Race、ReCoRD、multiRC)中,LoRAMoE都取得了优越的性能。另外还将LoRAMoE与单个LoRA的参数高效微调(PEFT)进行了比较。在单个LoRA调整期间也发生了知识遗忘,因为它本质上与纯SFT相同。与单个LoRA相比,LoRAMoE中的多个协作LoRAs增强了世界知识保留和多任务处理能力。

表2 显示的LoRAMoE的结果中与直接完整微调和使用LoRA调整后在世界知识基准测试中表现下降的情况不同,LoRAMoE确保了世界知识基准测试和其他下游任务的同时增长。它们在世界知识基准测试中平均提高了30.9%,在其他下游任务中平均提高了8.4%。Llbc在绝大多数任务中改善了LoRAMoE的结果,无论是世界知识基准测试还是其他任务。值得注意的是,对于阅读理解、NLI和原始CBQA数据集,这种方法的好处相当大,高达17.6%。这表明专家组的能力划分有利于多任务学习。

在参数敏感性分析部分,研究者保持其他设置不变,改变专家的数量和LoRA的秩。表3显示了在包括世界知识基准测试和所有其他下游任务在内的所有测试集上,不同参数设置下的平均性能。随着可训练参数数量的增加,性能总体上保持稳定。六个专家的数量是最有益的选择,因为更多的专家并不会导致更高的性能。虽然增加LoRA的秩在某种程度上提高了模型的能力,但它带来了可训练参数的指数级增长。

为了确认LoRAMoE在使专家专门化方面的有效性,研究者可视化了路由器在遇到下游任务数据和知识基准测试数据时分配给专家的权重,如图7所示。在处理世界知识基准测试和其他下游任务时,两种类型的专家的使用率存在明显差异。这表明路由器可以在推理阶段自动将特定任务分配给具有相应能力的专家。被要求利用世界知识的专家在世界知识基准测试中被大量使用(例如,TriviaQA、Natural Questions和HotpotQA),这强调了它们在防止世界知识遗忘中的关键作用。这与第2节中所述的事实相对应,即监督式微调通过将模型中预存的世界知识与人类指令相关联,提高了模型在这些任务中的能力。另一方面,被指派专注于提高下游任务性能的专家在遇到这些任务时被赋予了更高的突出地位。通过这种可视化结果,可以发现一些下游任务仍然需要另一种类型的专家。这是合理的。例如,在阅读理解任务中,模型在预训练期间学到的知识可以更好地协助做出事实判断。这种现象在基于语言的任务中更加明显。在WSC任务中,路由器平均分配了大约45%的注意力给负责世界知识的专家。

通过可视化专家权重的实验进一步表明,LoRAMoE通过促进专家之间的协作,有效缓解了世界知识遗忘问题,并实现了模型性能的提升。

这篇关于LoRAMoE:缓解大模型的世界知识遗忘问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121071

相关文章

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.