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

相关文章

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态: