优化大型语言模型微调: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

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整