优化大型语言模型微调:MoLA层级专家分配策略

2024-08-31 04:44

本文主要是介绍优化大型语言模型微调:MoLA层级专家分配策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

大模型(LLMs)的微调过程中,计算资源的需求巨大,这促使研究者们探索参数高效微调(PEFT)技术。低秩适应(LoRA)和专家混合模型(MoE)的结合显示出了提升性能的潜力,但大多数现有方法只是简单地在MoE框架下用LoRA适配器替换专家,并且每一层都分配相同数量的专家。这种方法可能会导致一些问题,比如由于表示崩溃或学习到的路由策略过拟合,导致专家之间的冗余。来自美国西北大学、Mineral Research和Google DeepMind的研究人员提出了一种新颖的参数高效MoE方法,通过层级专家分配(MoLA)来优化Transformer模型的性能。

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

项目链接:https://github.com/GCYZSL/MoLA

方法

MoE-LoRA与层级分配(MoLA)的新方法不仅结合了LoRA和MoE技术,还通过智能的层级专家分配来优化模型。在这种方法中,不是给Transformer的每一层分配相同数量的专家,而是根据每一层的需求分配不同数量的专家。

Figure 1 展示了MoLA架构的总览。在这种架构下,LoRA-MoE被应用于预训练的Transformer模型,并且每个模型层可以采用不同数量的专家。在训练过程中,预训练的权重被冻结,只有LoRA专家被调整作为权重的适配器。这种设计允许模型在保持预训练权重不变的同时,通过调整LoRA专家来适应特定的任务或数据集。

在训练预训练的LLM时,不是将每个密集线性层的权重矩阵分解成一对低秩矩阵,而是创建多对低秩矩阵,每对称为一个LoRA专家。通过学习一个路由模块来为每个输入令牌指定不同的LoRA专家。对于具有m层的Transformer模型,为第j层分配Nj个专家,并有个专家总计。对于第j层模块t中的预训练权重矩阵,创建Nj对低秩矩阵{​}和{}。每个矩阵从随机高斯分布初始化,将设置为零。然后,使用具有可训练权重矩阵​的路由器为输入x指定不同的LoRA专家。MoLA选择顶部K个专家进行计算,并在每一层应用负载平衡损失。

研究者提出了四种基于不同假设的层级专家配置(Figure 2):MoLA Triangle (MoLA-△)、MoLA Inverted-Triangle (MoLA-▽)、MoLA Hourglass (MoLA-▷◁) 和 MoLA Rectangle (MoLA-□)。每种配置都基于不同的假设,显示了如何在不同层级分配专家。

  • MoLA Triangle (MoLA-△):基于假设,较低层次学习更多词级特征,如词义、语法,而高层次捕获更抽象的高级信息。因此,假设较低层次需要更多的专家来区分细微的意义,而高层次需要较少的专家进行泛化。
  • MoLA Inverted-Triangle (MoLA-▽):与MoLA-△相反,假设处理词级信息的更多专家可能会在信息处理中引入冗余。由于高层次学习更抽象和高级的信息,这些特征用于下游任务,可能需要更多的专家。
  • MoLA Hourglass (MoLA-▷◁):第三种模型假设,由于较低和较高层次都专注于处理基本特征和抽象特征,它们需要更多的专家。中间层次在聚合基本特征和将它们映射到高维空间进行抽象推理方面发挥作用,需要较少的细粒度特征。
  • MoLA Rectangle (MoLA-□):最后一种配置是MoE的原始设计,其中每个Transformer层都有相同数量的专家,用作基线。

通过这些方法,MoLA旨在提高LLMs微调的效率和效果,同时减少训练过程中的计算资源需求。

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

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

实验

实验包括了指导微调(instruction-tuning)后进行微调(fine-tuning),以及直接微调两种不同的设置。为了确保比较的一致性和清晰性,研究者们为大模型设计了四种MoLA的专家分配配置,他们采用了含有32层的LLaMA2作为基础模型,并为不同的层分配了不同数量的专家。

实验设置:

  • MoLA-△:在前8层每层分配8个专家,接下来的8层每层分配6个专家,17-24层每层分配4个专家,最后8层每层分配2个专家,表示为8642。
  • MoLA Inverted Triangle:在较低层次分配较少的专家,而为更高层次分配更多的专家,表示为2468。
  • MoLA Hourglass 和 MoLA Rectangle:分别采用8228和5555的分配方式。所有变体的总专家数保持一致,即具有相同数量的可训练参数。

在实验的第一阶段,研究者们在指导微调数据集上使用PEFT方法进行指导微调,随后对下游任务进行微调。在直接微调设置中,研究者们直接对下游任务进行微调,不经过指导微调阶段。

MoLA旨在对下游任务进行LLMs微调,研究者们评估了包括自然语言处理(NLP)任务和常识推理(CR)任务在内的多个数据集。这包括:

  • Microsoft’s Research Paraphrase Corpus (MRPC):用于判断句子对是否为同义句。
  • Recognizing Textual Entailment (RTE):用于判断句子间是否具有蕴含关系。
  • Corpus of Linguistic Acceptability (COLA):用于判断英语句子是否符合语法规范。
  • ScienceQA:用于评估模型对科学知识的理解和常识推理能力。
  • CommonsenseQA 和 OpenbookQA:用于评估常识推理能力。

MoLA与三种参数高效微调方法进行了比较:prompt tuning、LLaMA-Adapter和LoRA。还评估了全参数微调的性能。

实验使用了LLAMA2-7B作为基础语言模型。在指导微调设置中,对采样的指导微调数据集进行了3个epoch的训练。在两种设置中,对下游任务微调的epoch数量进行了网格搜索,包括10、15和20个epoch。优化器采用AdamW,学习率为3e-4,截断长度设为256,批量大小为128。

Table 1 展示了直接微调设置的结果,其中MoLA-▽在所有基准测试中均优于其他变体或基线,即使在参数数量减少近40%的情况下,也能与MoLA-□ (8888) 竞争或表现得更好。

Table 2 展示了指导微调及下游微调设置的结果,MoLA-▽在所有数据集上均显著优于LoRA,显示出MoLA在传递学习能力方面的优势。

研究者们观察到在更高层次分配更多的LoRA专家可以带来更多的性能提升。基于这一假设,他们进一步研究了不同层次专家的冗余性。Figure 3 展示了通过抽样指导微调数据集训练的MoLA-□(8888)和MoLA-□(5555)模型中,每层自注意力模块中任意两个不同LoRA专家的权重矩阵之间的Frobenius范数平均值。从图中可以看出,从较低层次到更高层次,专家之间的平均Frobenius范数逐渐增加,表明较低层次的专家相似度更高,因此冗余性更大。这一发现支持了研究者的假设,即在总专家数量一定的情况下,为更高层次分配更多的专家可以更有效地提高模型性能。

研究者们还分析了每层专家的平均路由权重和被选择次数。分析显示,大多数专家被选择进行类似的工作负载并得到了充分的利用。在具有相似选择权重和次数的情况下,较低层次由于专家间更相似而具有更高的专家冗余性,再次支持了研究者的论断。

研究者们还探讨了基于MoE的架构在持续学习环境下的表现。他们选择了ScienceQA数据集中训练样本最多的五个主题:生物学、物理学、化学、经济学和地球科学,对MoLAs进行了持续微调,并研究了在先前领域上的性能下降情况。根据Chaudhry等人(2018)的方法,他们计算了整体性能(OP):

其中,t 是领域数量,R_t,i​ 表示在连续训练领域t后模型在领域i上的准确率。他们还提出了一个性能下降分数来衡量领域遗忘,通过计算持续学习过程中的性能下降来得出,如下所示:

Table 3 展示了在持续学习环境中不同MoLA模型的整体性能和性能下降分数。结果显示,MoLAs能够实现比LoRA更好的整体性能。特别是,MoLA-▽通过具有-0.47的性能下降分数显示出避免领域知识遗忘的优越能力,这与研究者们关于更高层次具有较少专家冗余的洞察一致。

通过这些分析和实验,研究者们进一步验证了MoLA模型的有效性,并展示了其在处理更复杂下游问题时的潜力。这些发现为未来LLMs的微调和优化提供了有价值的参考。

这篇关于优化大型语言模型微调:MoLA层级专家分配策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

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

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

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路