推动专家混合模型的极限:用于指令调优的极端参数高效MoE

本文主要是介绍推动专家混合模型的极限:用于指令调优的极端参数高效MoE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

MoE是一种在特定子任务上具有专门化子模型(专家)的神经网络架构,这些子模型可以独立优化,以提高整体性能。然而,传统的MoE在大规模应用时面临挑战,因为需要在内存中存储所有专家。这不仅增加了内存的需求,而且在完全微调(full fine-tuning)时计算成本极高。为了克服这些限制,Cohere for AI的研究团队提出了一种极端参数高效的MoE方法。该方法通过将MoE架构与轻量级专家相结合,实现了在只更新不到1%的参数的情况下,与全参数微调相媲美的性能。这种方法不仅在未见任务上具有良好的泛化能力,而且不依赖于任何先验任务知识。

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

项目链接:GitHub - for-ai/parameter-efficient-moe

方法

研究者们将任务集划分为训练任务(Ttrain)和评估任务(Teval),即。基础预训练模型首先在训练任务上进行微调,然后在评估任务上的每个未见任务进行零样本评估。标准方法是微调所有模型参数,这导致计算和内存成本高。

研究者们将专家混合(MoE)架构推向参数效率的极端,使用参数高效微调(PEFT)方法。PEFT 方法通过限制权重更新至有限数量的参数,解决了在大规模完全微调大型语言模型(LLM)时出现的与更新大量参数相关的挑战。

(IA)3 方法:引入三个新向量 ​, ,,这些向量重新调整自注意力中的关键和价值激活,以及逐位置前馈层中的中间激活:其中Q,K,V 是自注意力的查询、键和值投影矩阵, 是预训练模型中前馈层的冻结权重。由于 (IA)3 只更新,它在参数效率上极为高效。对于3亿参数的 T5 模型,它仅更新了总参数的0.018%。

LORA 方法:优化了大型语言模型中密集层的低秩分解。对于预训练权重矩阵 和输入激活 ,LORA 将 W_0​ 分解为两个低秩矩阵: 其中 ​,秩。在微调期间,所有预训练权重都冻结,只更新A 和 B 矩阵。LORA 适配可以用于每个 Transformer 块中的所有线性层,包括自注意力的查询 Q、键 K、值 V 以及前馈层 W_1​ 和 W_2​ 的输出。与 (IA)3 不同,LORA 适配在参数使用上提供了更多的灵活性。

研究者们提出了一种极端参数高效的 MoE 框架,该框架利用轻量级“适配器”作为专家,建立在预训练密集模型之上。MoE 层由路由器网络R 和一组n 专家​ 组成,每个专家 E_i​ 是一个参数化函数。路由器网络通常由一个密集层和随后的 softmax 函数组成,这一层接收中间令牌表示 x 作为输入,并根据门控分数​ 组合每个专家的输出:

MoV 架构如图 2 左侧所示,MoV 架构的概览突出了软合并,其中只有向量和路由器针对每个多头注意力块进行更新。右侧提供了实现 MoV 层核心的 JAX 风格伪代码。

通过 MoV 和 MoLORA 方法,只更新一小部分参数,在训练和推理时都有多个实际好处,后者是 MoE 架构独有的。这些增益如下:

  • 训练效率:极端参数高效的 MoE 公式导致内存显著减少。在训练期间冻结大多数参数减少了计算模型参数梯度的计算开销,也减少了存储模型优化器状态的内存需求。
  • 推理效率:MoV 和 MoLORA 方法的固有结构模块化允许在推理时显著减少内存需求。对于传统的 MoE 模型,需要在内存中存储许多完整的前馈块(甚至是基于特定架构的模型的完整副本),这是一项昂贵的工作。而使用研究者们的方法,无论确切类型如何,除了轻量级参数高效专家外,只需要在内存中存储模型主干的单一副本。这导致推理时内存需求的显著减少。

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

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

实验 

实验设置:

  • 基础预训练模型:使用了不同大小的T5模型,参数量从770M到11B不等,包括T5 v1.1+LM适配。
  • 优化器:所有实验都使用Adafactor优化器进行微调,学习率设置为3×10−43×10−4。
  • 序列长度:输入序列长度设置为1024,目标序列长度设置为256。
  • 批量大小和训练步数:对于所有参数高效的MoE变体,使用32的批量大小在500K步内进行微调。

基线比较:

  • 与完全微调的模型(T0基线)和标准的参数高效微调方法((IA)3和LORA)进行比较。
  • T0基线:通过使用较大的批量大小和学习率进行微调,获得了更好的性能。具体来说,使用256的批量大小和1×10−31×10−3的学习率进行10K步的微调。
  • (IA)3和LORA:对于秩为4的(IA)3和LORA,使用相同的训练超参数,即学习率为3×10−43×10−4,批量大小为32,训练500K步。

评估指标:

  • 在8个未见数据集上测试了他们的方法和基线方法,这些数据集包括ANLI、HellaSwag、WinoGrande和5个Super Glue数据集,涵盖了指代消解、自然语言推理、多项选择问答、故事完成和词义消歧等不同任务。
  • 计算每个评估数据集在不同提示模板下的中位数准确率,并报告每个数据集的结果以及所有数据集的平均结果。

基础设施:

  • 所有实验都在TPU v4机器上进行,最多使用256个pod切片。
  • 使用SeqIO和T5X框架进行训练、评估和推理,这些框架支持跨TPU核心的数据和模型并行处理。

消融研究:

  • 路由输入: 令牌与句子嵌入的比较,探讨了任务表示形式的指令嵌入如何影响路由和下游泛化。
  • 路由策略: 软合并与离散top-k路由策略的比较,研究了在参数高效的MoE中哪种路由策略最有效。

研究者们首先将他们提出的MoE模型(包括MoV和MoLORA)与标准的PEFT方法((IA)3和LORA)进行了比较。这些比较是基于使用T5-3B作为基础模型的零样本(zero-shot)性能测试。表1展示了这些方法在不同任务上的平均中位数结果。

表1中数据显示,MoV和MoLORA在多个任务上相较于(IA)3和LORA显示出显著的性能提升。特别是,使用30个专家的MoV实现了相比其密集对应模型14.57%的性能提升。这一改进在所有未见任务上都是一致的,并且仅通过增加每个专家0.018%的参数更新实现。对于LORA,配备15个专家的MoLORA实现了平均中位数得分5.70%的提升,虽然这一提升相比MoV来说不那么显著,但仍然证明了混合学习的优势。

研究者们进一步比较了MoE方法与全参数微调(Full-FT)的性能。表1显示,即使是只更新0.32%的参数的MoV-10,也能达到与全参数微调相当的性能。当增加专家数量时,MoV和MoLORA甚至略微超过了全参数微调的性能。

研究者们探讨了MoE方法在不同规模的基础模型(从770M到11B参数)上的表现。图1(右图)展示了MoV在不同模型规模上与(IA)3和全参数微调的性能比较。结果显示,MoV在所有评估的模型规模上均保持比标准PEFT更高的性能,并与全参数微调取得了相当的结果。

研究者们还研究了专家数量对未见任务性能的影响。图4(中间图)展示了在所有模型规模上,增加专家数量通常会提高未见任务的性能。例如,在770M和11B参数的模型上,使用60个专家的MoV方法实现了最佳性能。

研究者们比较了MoV使用不同路由策略的性能。图4(右图)显示,软合并(soft merging)策略显著优于离散的top-k路由策略。这表明在极端参数高效的MoE设置中,软合并能够实现更优的性能。

为了理解专家如何在不同任务中被激活,研究者们分析了MoV中5个专家在最后解码器块的前馈层的平均路由概率。图5展示了不同任务(包括训练任务和未见评估任务)中专家的平均路由概率。结果表明,专家的专业化是内在的,并且可以从训练任务迁移到未见任务。

最后,研究者们对MoE架构对超参数的敏感性进行了广泛的消融研究。他们发现,较大的批量大小更可能导致MoE模型坍塌为单一专家,而较小的学习率有助于稳定训练,防止快速、不平衡的更新抑制多样性,从而导致次优解决方案。

通过这些详细的分析,研究者们展示了他们提出的MoE模型在参数效率和性能上的显著优势,以及在不同设置下的有效性和鲁棒性。

这篇关于推动专家混合模型的极限:用于指令调优的极端参数高效MoE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro