AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


聊聊 MOE + LoRA 微调新方式
发布日期:2024-04-11 07:28:32 浏览次数: 2295



1.背景介绍

随着大语言模型(LLMs)的火爆发展,相应的微调技术也随之不断迭代。业界最近接连推出以 MOE(Mixture-of-Experts) + LoRA(Low-Rank Adaptation)组成的高效微调(PEFT)方案。相比于 MOE 通过设立多个独立的专家来学习任务特定的知识,并通过 gating 函数来调节每个专家的贡献;LoRA 技术通常微调一部分参数,同时保持预训练的 LLM 参数不变,通过使用低秩矩阵减少训练参数。可以说两者的结合有效解决了微调领域中多任务集数据冲突问题,在微调效果和成本上做到了新的高度。

2. LLaVA-MoLE

2.1 摘要

LLaVA-MoLE 提出了一种高效的专家混合(MoE)设计,它是一种用于指令微调 MLLM 的稀疏低秩自适应(MoLE)的混合。在 Transformer 层内,我们通过为 MLP 层创建一组专门用于 LoRA 的专家,扩展了 LoRA 方法,并基于路由函数将每个 token 路由到排名第一的专家,允许对来自不同领域的令牌进行自适应选择。由于 LoRA 专家被稀疏激活,与原始的 LoRA 方法相比,训练和推理成本基本保持不变。使用 MoE 设计替换 LLaVA-1.5 的普通 LoRA,最终模型被命名为 LLaVA-MoLE。广泛的实验证明,LLaVA-MoLE 在混合多个不同的指令数据集以及各种配置时,有效地缓解了数据冲突问题,并在强大的普通 LoRA 基线上实现了一致的性能提升。最重要的是,在混合数据集上,LLaVA-MoLE 甚至可以超过使用两倍样本训练的普通 LoRA 基线的性能。

2.2 背景介绍

研究中发现,当前使用普通 LoRA 进行训练的 MLLM 对于训练数据的配置非常敏感。如图1所示,我们采用了来自不同领域的三个指令微调数据集:

  1. 一个包含各种视觉语言指令数据混合的通用多任务数据集;

  2. 一个针对图表、表格和文档理解构建的面向文档的数据集;

  3. 一个由病理图像上的问答对组成的生物医学数据集。

通过对比,当 MLLM 在每个单独的数据集上进行微调时,它在相应的基准测试上取得了合理的性能。但是,当将文档和生物医学数据集与通用数据集混合在一起时,经过训练的LLaVA-Mix 在通用基准测试上的性能从 306.3 下降到 295.8,这意味着添加与通用多任务指令明显不同的数据会导致冲突。这严重阻碍了通过添加来自新领域的训练数据来扩展 MLLM 能力的可能性。

2.3 解决方法

为了解决上述问题,提出了将稀疏的 LoRA 专家混合应用于 LLaVA-1.5 进行指令微调,从而得到模型 LLaVA-MoLE。重新设计了 LoRA 应用于 LLM 的 Transformer 层中的MLP。不仅仅向原始线性层添加一对低秩分解矩阵,而是引入了一组具有与原始 LoRA 相同结构但不同权重的专家。如图2所示,LLaVA-MoLE 与稀疏的 LoRA 专家混合模型的整体框架。模型基于LLaVA-1.5,其中输入图像经过 CLIP ViT处理,然后通过一个两层 MLP 进行投影。输入文本被 tokenizer 和 embedding 处理,然后与视觉输入连接以输入 LLM。LLM 的每一层都是使用提出的稀疏的 LoRA 专家进行训练的。FFN 根据路由器的输出分布选择并与一个 LoRA 专家进行组合。自注意力也使用 LoRA 进行训练,但不应用MoE(混合专家)技术。


其中作者推导一个多模态大型语言模型(MLLM)可以表示为:

作者提出的方法的目标是在混合不同类型的指令数据时减轻冲突。为此,我们引入了一组 LoRA 专家和每个 Transformer 层的路由器。在每个输入标记处,路由器学习选择最合适的专家进行激活,以便模型具有处理不同类型输入的额外能力。假设每层有 K 个专家,选择具有最高路由函数值的专家:

为了更具体,现代 LLMs 中的 FFN 层通常是多层的。在这种情况下,FFN 的每个线性层都有一个独立的 MoE,但它们共享同一个路由器,即这些层的专家选择是相同的。通过仅激活排名第一的专家,实际计算成本与使用普通 LoRA 的原始 FFN 大致相同。(这部分公式含义可以参见论文,不展开介绍了)

2.4 负载均衡

如前一节介绍的,通过将每一个 token 路由到单个专家,MoE 模型的总计算量基本接近于普通的 LoRA 模型。然而,如果专家分配严重不平衡,低负载的专家将会有浪费的空闲时间。与之前的稀疏 MoE 方法类似,引入 MoE 层引入了负载平衡损失,其公式为:


每层的损失取平均,并乘以一个常数因子 ,然后加到语言建模损失中。由于 c 向量是不可微的,梯度只通过 p 向量流动,并优化路由器权重。随着的减小,专家分配趋向于均匀。之前的研究设置了专家容量,确保每个专家不能处理超过给定容量的 tokens 数量(溢出的tokens 将被丢弃),从而严格限制了每个专家的计算负载。在论文的场景中,由于指令数据相对于之前的研究中使用的文本语料库来说相对较小,决定将专家容量提高到 LLM 的最大上下文长度,以便不丢弃任何标记,并确保专家接收到足够的训练。

2.5 实验

实验配置,作者将 PathVQA 用作生物医学领域的指令数据。它包含来自 4,998 张病理图像的32,799 个问题。训练集有 19,755 个问答对,测试集有 3,370 个开放式问题和 3,391 个闭合式问题。我们在开放式和闭合式问题集上报告结果。

对于这两个阶段,我们使用 Deepspeed ZeRO-2 优化在64个 NVIDIA A100 80GB GPU 上进行模型训练。在三个数据集的混合上微调一个 LLaVA-MoLE 模型大约需要16小时。采用 AdamW 优化器进行训练,并进行学习率预热。在图3中列出了训练配置的重要参数。

图 4 中使用不同数据和 MoE 配置训练的模型的实验结果。λG、λD 和 λM 分别是用于一般多任务数据、文档数据和生物医学数据的采样频率。采样频率为 0 表示未使用该数据集。VR、VP、VKA、VC 和 OH 分别代表粗略能力类别的视觉推理、视觉感知、视觉知识获取、视觉常识和物体幻觉。∗表示官方发布的模型,†表示我们复现的模型,×2表示模型训练了两个周期。LLaVA-Mix 和 LLaVA-MoLE 是使用不同的数据集混合配置进行训练的,通过追加数据配置来区分它们。LaVA-MoLE 可以成功解决多任务数据存在的冲突问题。


2.6总结

本文的贡献总结如下:

  1. 基于先进的 MLLM 模型和大规模数据集,发现在将 MLLM 在明显不同的指令数据集混合上进行指令微调时存在数据冲突问题。

  2. 提出了 LLaVA-MoLE,它是通过稀疏的 LoRA 专家混合进行指令微调,以解决数据冲突问题,而不会显著增加训练计算或内存。允许调整混合中每个数据集的采样比例,以在特定任务上实现更高的性能,而不影响其他任务。

  3. 广泛的实验证明,与使用普通 LoRA 微调相比,LLaVA-MoLE 在多个基准测试上对于各种数据配置都实现了一致的性能提升。

3. MOELoRA

3.1 摘要

最近在大型语言模型(LLMs)领域出现了一股热潮,引起了许多领域的重视。为了将 LLM 定制到特定领域,如基于网络的医疗保健系统,需要使用领域知识进行微调。然而,在为医疗应用进行LLM微调时会出现两个问题。

  • 第一个问题是任务多样性,真实世界的医疗场景中存在许多不同的任务。这种多样性通常导致微调不够优化,因为存在数据不平衡和摇摆问题。

  • 此外,微调的高成本可能会阻碍 LLM 的应用。LLMs 中的大量参数导致在微调过程中需要消耗巨大的时间和计算资源,这很难合理解释。

作者提出了一种新颖的用于多任务医疗应用的参数高效微调框架,称为 MOELoRA。该框架旨在充分利用 MOE 进行多任务学习和 LoRA 进行参数高效微调的优势。为了验证所提方法的有效性和实用性,作者在一个公开的多任务中文医学数据集上进行了全面的实验。实验结果表明,MOELoRA 优于现有的参数高效微调方法。

3.2 背景介绍

由于大型语言模型(LLMs)在语言理解和生成方面的卓越能力,如 ChatGPT 和ChatGLM,它们在学术界和工业界引起了广泛的关注。许多工作致力于研究 LLMs 在各个领域的潜在应用。对于 LLMs 而言,医疗领域是一个特别适合的领域,因为 LLMs 的应用可以使患者和医生受益。对于患者而言,基于LLM的在线聊天机器人可以提供方便的医学知识获取途径;对于医生而言,基于 LLM 的临床决策支持系统(CDSS)可以减轻他们的工作负担并提高诊断效率。

将 LLMs 用于医疗领域的微调通常涉及两个主要挑战:

  1. 任务多样性问题:在真实世界的临床环境中,LLMs 可以应用于各种任务,如医生推荐、诊断预测、药物推荐、医学命名实体识别、临床报告生成等。由于这些任务的输入和输出非常不同,很难为所有任务微调一个统一的模型。

  2. 高调整成本:在 Bert 时代,微调所有模型参数是一种标准方法,但对于 LLMs 来说,由于其庞大的规模,这变得具有挑战性。LLMs中大量的参数可能导致实际中的时间和计算开销非常高。因此,迫切需要参数高效的微调方法。

3.3 解决方法

在当代基于网络的医疗保健环境中,智能医疗系统越来越普遍。许多研究试图通过定义一致的输入和输出模式来标准化医疗任务,从而简化模型设计过程。以医学命名实体识别(NER)为例,如图 5 所示,传统模型通常处理医学文本(表示为),并生成实体。然而,将 LLMs 整合到医疗任务中引入了一种独特的范式。由于 LLMs 的输入和输出通常都是语言性质的,因此需要重新制定医疗任务以与 LLMs 兼容。增加相应的指令结构体:

在为 LLMs 进行任务重构之后,我们可以使用纯语言数据对基础大型语言模型进行微调,例如LlaMA,ChatGLM等。然后,微调后的模型通过生成规范化的答案来完成医疗任务。

图 6 提供了使用 MOELoRA 对 LLMs 进行参数高效微调的过程的可视化表示。在参数高效微调领域,LoRA 仅引入了两个低秩矩阵作为密集层的替代。在此基础上,作者的方法将 MOELoRA 层集成到每个密集层中,使它们能够获取键、查询和值,并促进前馈过程。此方法的一个重要优势是,只微调 MOELoRA 层的参数,保持原始 LLM 的其余参数不变。这种方法大大降低了微调的成本。

此外,每个 MOELoRA 层都包含多个共享的专家。这些专家被设计用于捕捉不同医学领域的多样化知识。引入了一个任务驱动的门函数,以确保为每个任务学习到独特的参数集。该函数确定了所有 MOELoRA 层中专家的贡献权重,使得可以生成针对不同任务定制的不同更新参数。值得注意的是,作者为所有 MOELoRA 层使用单个 gating 函数,而不是在 gating 和MOELoRA 层之间建立对应关系。这种设计选择是有意的,旨在减少可调参数的数量,并减轻过参数化的风险。

3.4 MOELoRA

在原始的 LoRA 中,所有任务的参数都进行微调,导致难以学习医学知识的各个方面。解决这个挑战的一个潜在解决方案是将整个参数集分割成几个部分,并推导出各种组合。多任务专家模型(MOE),使用多个专家网络来捕捉多任务信息的不同方面,与组合概念相吻合。这一观点引导作者设计了 MOELoRA,无缝地整合了 LoRA 和 MOE 的优势。为了使 LoRA 和 MOE 的不同前向过程协调一致,我们引入了一组专家,表示为

的这些贡献权重。(细节参考论文原文)

MOELoRA 的训练和推理过程如下图 8 所示。

3.5 推理和优化
优化:作者讨论 MOELoRA 的优化和推理过程。如上算法过程中总结了整个过程,首先根据 LLM 中指定的层和几个超参数配置 MOELoRA(第1-3行)。然后,为了进行参数高效的微调,LLM 中的所有预训练参数都被冻结(第4行)。在优化过程中,代地随机从所有任务中抽取一批数据,而不是像一些多任务研究那样将来自同一任务的样本分组成一批。作者选择随机抽样的批次进行性能比较实验。使用数据批次,可以进行前向过程并计算训练损失(第6-7行)。在参数更新方面,值得注意的是,作者只微调 MOELoRA 和任务驱动的门函数的参数。

推理:MOELoRA可以通过方程(6)为每个任务恢复微调的参数矩阵。在推理过程中,首先为每个任务恢复训练好的 LLM 参数(第10-13行),这意味着每个任务都有自己的 LLM 参数。然后,可以应用相应的 LLM 来完成指定的任务。

3.6 实验

在本节中,作者对一个多任务的中文医学数据集进行了全面的实验。通过对实验结果的详细分析,试图回答以下研究问题(RQ):

  • RQ1:在性能方面,MOELoRA 与其他参数高效微调策略和跨任务泛化方法相比如何?

  • RQ2:MOE 架构和 gating 函数对微调过程有何影响?此外,不同的训练策略如何影响MOELoRA 的性能?

  • RQ3:专家数量和MOELoRA的秩如何影响性能结果?

  • RQ4:专家是否专门捕捉特定知识方面的信息?

通过回答这些问题,可以深入了解 MOELoRA 的性能、架构和训练策略对于多任务学习的影响,并探讨专家的特化程度以及它们在捕捉特定知识方面的能力。这些实验结果将有助于我们评估 MOELoRA 的优势和适用性,并为进一步改进和应用提供指导。

数据集:作者的实验是在 PromptCBLUE 数据集上进行的,该数据集包含16个不同的医学任务,每个任务都使用特定的提示转换为纯文本格式,以确保与 LLM 兼容。

基准线:在实验中,作者与三个不同的基准线组进行了对比,分别是:

  1. 无微调的LLM

  2. 微调的LLM

  3. 跨任务泛化。后两组利用 ChatGLM 6B 进行微调

实现细节:使用PyTorch 1.12.0 和 Python 3.6. 5。在Tesla V100 GPU上运行代码以加速计算。LLM ChatGLM 6B 选为微调的基础模型。其他配置如下:

  • 模型层:对于所有 LoRA 微调基准线和提出的 MOELoRA。

  • 输入/输出长度:最大输入长度和输出长度分别配置为1,024和196。

  • 参数:我们将 batchsize 大小设置为 64,最大训练步数为 8,000。LoRA 的秩 r 固定为16,LoRA 的 dropout α = 0.1。对于 MOELoRA,专家数量设置为 8。

如图 9 所示,基线和 MOELoRA 在 PromptCBLUE 上的整体结果。粗体表示最高分数,下划线表示基线的最佳结果。"*"表示相对于最佳基线的统计显著改进(即,双边 t 检验,p < 0.05)。

MOELoRA 和竞争基准线的综合实验结果如图 9 所示。分析所有任务的平均分数,可以明显看出MOELoRA 始终优于所有其他方法。

为了更深入地探讨 RQ2 并了解 MOELoRA 中每个组件的贡献,作者在图 10 中展示了消融研究结果。去除 MOE的 变体(实质上回到LoRA(Full))排除了 MOE 架构。它表现出较差的性能,与完整的 MOELoRA 相比,突出了 MOE 架构的重要性。同样,去除 gating 函数的变体,它使用均匀的专家权重绕过门函数,也落后于 MOELoRA,突显了gating 函数的有效性。多个 gating 函数的变体为每个 MOELoRA 层使用独特的 gating 函数。可以看到,它在几个任务上实现了可比较的结果,但由于过度参数化而略逊于单个门函数设计。此外,多个门函数还会导致更高数量的可训练参数,与单个门函数设置相比效率降低。

为了回答 RQ3,作者深入研究了超参数对 MOELoRA 性能的影响。从图 11b 中观察到,虽然 r的增加始终提高性能,但也会导致可训练参数的相应增加。考虑到效率和性能之间的平衡,r 的一个实际选择是 16。

对于RQ4,在图 12 中呈现了四个任务中的专家权重的可视化。对于每个任务,不同颜色的条的长度表示相应专家的权重。由于专家权重被归一化为1,因此每个任务的条的长度相同。在宏观层面上,明显可以看出每个专家的贡献差异很大,突显了不同专家在医学知识的不同方面专长的观点。此外,权重在不同任务之间的显著差异突出了医学应用的多样性。仔细观察 CHIP-CDN 和KUAKE-QIC 任务,可以看到它们的专家权重在很大程度上是一致的,只有专家 3 和 4 有些例外。鉴于 CHIP-CDN 可以被视为 KUAKE-QIC 的前身——因为诊断词归一化可以增强查询分类——专家权重的相似性表明 MOELoRA 擅长利用共享知识来使内在相关的任务受益。


3.7 总结

在本文中,作者首先迈出了一步,探索了 LLM 驱动的医学应用的多任务参数高效微调方法。为了满足微调的效率要求和多任务的有效性要求,作者提出了一种新颖的多任务微调框架。具体而言,设计了 MOELoRA 架构,它由多个低秩专家组成,作为可训练参数来学习与任务相关的知识并保持高效性。此外,我们设计了一种任务驱动的 gating 函数,用于为不同任务生成不同的微调参数。通过对一个多任务的中文医学数据集进行全面的实验,验证了所提出的MOELoRA 的有效性。在未来,作者将进一步探索如何通过微调将显式的医学知识(如知识图谱)与 LLM 相结合。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询