优雅谈大模型10:MoE

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

大型语言模型能够取得巨大的进步完全取决于缩放定律。随着基础模型的参数规模增加,性能的确也是平滑提升。当不断地扩展这些参数规模大的LLMs时,内存成本和计算资源也会随之而剧增,进而达到硬件的最终极限。那么是否可以使用稀疏激活的大语言模型来解决这个问题?

Mixture of Experts (MoE)

专家混合(层)MoE,允许增加语言模型的大小或容量,而无需相应增加计算量。只是将模型的某些层替换为该层的多个副本(称为“专家”,可以理解为每个副本专注各自的领域),这些副本具有独立的参数。

然后使用门控机制稀疏地(如何理解稀疏,就是将部分的请求分给部分专家)选择用于处理每个输入的专家。这个想法其实早在90年代早期的条件计算研究,它允许以一种易于处理的方式训练大规模模型。

先来看看Decode-Only的Transformer架构,例如GPT系列都是基于Decode-Only,而Bert则是基于Encode-Only的架构。Decode-Only的大模型基本都是由Decoder Block堆叠而成,每一个Block的结构如上图左侧所示。在通过多头注意力模块之后,会接一个FFNN层。<若是忘记FFNN,可以点击链接回去温习!>

在LLMs中,MoE对这个架构进行了简单修改——用MoE层替换了前馈层!该MoE层由多个专家组成(数量在几个到几千个之间),其中每个专家都是前馈子层,各自拥有独立的参数。

可以通过将编码器和解码器中的前馈子层替换为MoE层,进而将原来的模型转换为MoE模型。也可以只将这些子层的一部分(例如,每隔N层)转换为MoE层。

也许会疑惑,不是增加了很多专家,肯定向模型添加了大量参数。毕竟MoE模型在Transformer的每个前馈子层内具有多个独立的神经网络。其实可以这么来理解稀疏的,给定一个Token序列作为输入,使用路由机制稀疏地选择一组专家,每个Token将被发送到这些专家,而不是激活所有的专家,因此MoE模型前向传递的计算成本远低于具有相同参数数量的密集模型的计算成本。

MoE的结构

MoE应用于 transformer 模型时,MoE 层有两个主要组件:

  • Sparse MoE Layer: 将变压器中的前馈层替换为几个结构相似的“专家”的稀疏层。

  • Router: 路由器,确定将 MoE 层中的哪些令牌发送给哪些专家。

稀疏MoE层中的每个专家都是一个前馈神经网络,具有自己独立的参数集 。每个专家的架构都模仿传统的前馈子层。路由器将每个Token作为输入,并在专家上产生概率分布,以确定每个Token发送到哪个专家。

路由器有自己的一组参数,并与网络的其余部分共同训练。每个Token都可以发送给许多专家,一般而言只向通过某些计算得到的前k位专家发送Token。k取决于参数设置,例如k=1或k=2 则意味着每个Token分别由一个或两个专家处理。

例如,假设有一个7B参数LLM,并将其每个前馈子层替换为一个由 8 个专家组成的MoE层,其中每个令牌激活2个专家。这与Mixtral-8x7B(Mistral-7B的MoE变体)所使用的架构完全相同。完整模型大约有 47B 参数,所有这些参数都必须加载到内存中。但是,该模型的推理成本与 14B参数模型相当。每个Token只使用两个专家来处理,这会产生约2 x 7B的矩阵乘法。然而整体实现了约50B的参数模型。

MoE模型被广泛使用,能够用固定的计算资源训练更大的模型。与密集模型相比,MoE模型的预训练速度更快,并且与具有相同参数数量的密集模型相比,推理速度要快得多。

但是MoE类的LLMs也会消耗更多的VRAM,因为所有专家都必须加载到内存中,再者GPU擅长高效执行算术运算,但不擅长分支,而条件计算则对分支计算的要求较高。此外MoE模型容易出现过拟合,并且很难微调。

当然MoE和RNN网络也是可以可以整合。

门控机制

为了计算MoE模块的输出,可以利用专家输出的加权组合,其中权重由路由器提供。路由器输出权重的N维向量(N是专家的数量)。当路由器输出稀疏时,在计算 MoE时不考虑权重为零的专家。

对于MoE内部路由有很多不同的策略。最简单的方法是将输入乘以权重矩阵并应用softmax。为了进一步保证是稀疏的输出,有研究人员提出一种改进的门控机制,为这种简单的softmax门控机制增加了稀疏性和噪声。

上图示意在应用softmax之前,将可调节的高斯噪声添加到路由器的输出。另外除了Top K专家的输出,所有输出都被设置为-∞进行屏蔽以确保专家的选择是稀疏的。

MoE的经典问题是,在训练期间,网络一般都会倾向重复的使用相同的少数专家。门控机制将收敛到一种状态,即始终为每个输入选择同一组专家。这是一个循环,一旦一个专家被频繁的选中,它的训练速度更快,因此它会被继续选中!很多研究都在解决这个问题的方法,例如可以通过在训练损失中添加一个简单的“软”约束来平衡。

说来也简单,首先在每个批次的训练过程中,将每个专家的门控得分做累加得到Importance Score。那意味着在某个批次中经常被选中的专家将获得最高的分数。

接下来通过取专家Importance Score的平方变异系数 (CV) 来计算辅助损失函数。若所有专家的分数都非常相似,那么CV值就会很小,反之亦然。将这个损失项添加到模型的训练目标中以便于鼓励专家在每批中获得同等的重要性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应对800G以太网挑战:数据中心迁移

在过去几年中&#xff0c;云基础设施和服务的大规模使用推动了对更多带宽、更快速度和更低延迟性能的需求。交换机和服务器技术的改进要求布线和架构随之调整。因此&#xff0c;800G以太网对数据中心迁移的需求&#xff0c;特别是对速率&#xff08;包括带宽、光纤密度和通道速…

进程和计划任务以及步骤

进程 进程和程序有关&#xff0c;把该文件放到内存里&#xff0c;进程是动态的&#xff0c;不同时刻的状态不一样 内存&#xff1a;放置正在运行的程序和所需数据的位置 程序启动 ——》将相关文件和数据放到内存里 ——》进程&#xff08;processes&#xff09; 进程相关命令 …

【Python】教你彻底认识Python中的Web开发

​​​​ 文章目录 一、Web开发的基本概念1. Web服务器2. 客户端-服务器模型3. HTTP协议4. 前端与后端 二、常用的Web开发框架1. Django1.1 安装Django1.2 创建Django项目1.3 定义模型1.4 定义视图1.5 定义URL路由1.6 模板 2. Flask2.1 安装Flask2.2 创建Flask应用2.3 模板2.4…

达梦8 并行查询

达梦数据库可以通过在查询语句加/* parallel */ HINT并行执行。下面以一个排序语句为例 我们通过一条监控语句查询排序区的使用情况。 最初没有查询结果&#xff08;no rows&#xff09; 伴随着语句insert /* parallel(4) */ into d select * from a order by 2执行&#xff…

计算机组成结构—总线

目录 一、总线的基本概念 1.分散连接和总线连接 2.总线的特点和组成 二、总线的分类 1. 片内总线 2. 系统总线 3. 通信总线 三、总线结构 1. 单总线结构 2. 双总线结构 3. 三总线结构 四、总线的性能指标 五、总线标准 六、总线判优&#xff08;总线仲裁&#xf…

【List,ArrayList与顺序表】

目录 1&#xff0c;什么是List 2&#xff0c;List的使用 3&#xff0c;线性表 4&#xff0c;顺序表 4.1 接口的实现 5&#xff0c; ArrayList简介 6&#xff0c;ArrayList的使用 6.1 ArrayList的构造方法 6.2 ArrayList的常见操作 6.3 ArrayList的遍历 7&#xff0c;…

解决CSDN 导入Markdown图片失效不显示问题

每次将MarkDown文件导入CSDN的时候&#xff0c;有些图片总是由于防盗链的问题导致图片加载不出来&#xff0c;还得手动再导一遍&#xff0c;极其不方便。所以我们能不能建立一个属于自己的图片服务器或者说在线图库呢&#xff0c;而且每次使用Typora插入图片的时候都会自动的上…

JVM学习-Arthas

Arthas Alibaba开源的Java诊断工具&#xff0c;在线排查问题&#xff0c;无需重启&#xff0c;动态跟踪Java代码&#xff0c;实时监控JVM状态Arthas支持JDK6&#xff0c;支持Linux/Mac/Windows&#xff0c;采用命令行交互模式&#xff0c;同时提供丰富的Tab自动补全功能&#…

makefile2

makefile的条件判断 运行make。 替换 make -c make-f …… 还可以 man make来查看其他的make命令。

Vue3的ref创建一个全局变量,非常好用!

1. 前言 Vue3的ref对象我们都知道其用法,通过ref可以创建一个响应式对象使用,同时可以用compute,watch等Vue3的API对其进行操作 不同于Vue2的是,Vue3使用的是组合式API,这也就意味着,我可以在外部单独创建一个ref对象,然后保存,通过导出的方式,给其他的页面使用 理论存在,开始…

SpringBoot高手之路04-Aop

文章目录 AOP 基础AOP概述start依赖,开发某一个功能,只需要下载这一个依赖,关于他的依赖都会下载下来 AOP快速入门AOP核心概念 切入点表达式-execution AOP 基础 AOP概述 AOP 对特定的方法做增强 AOP 快速入门 start依赖,开发某一个功能,只需要下载这一个依赖,关于他的依赖…

快速上手 ngrok:将你的本地服务一键暴露到互联网,开发者必备技能!

想让外界轻松访问你本地电脑上的项目&#xff1f;试试 ngrok 吧&#xff01;无论是调试 Web 应用&#xff0c;还是进行跨网络测试&#xff0c;ngrok 都能帮你一键创建安全隧道&#xff0c;将本地服务映射到公共 URL&#xff0c;让全球任何地方都能访问。本文详细介绍 ngrok 的安…

【Spring框架全系列】SpringBoot_基础_先知(详细)

文章目录 1.SpringBoot介绍2.创建一个SpringBoot项目3.parent标签 - 父工程4.starter依赖5.启动类和文件打包6.默认配置 1.SpringBoot介绍 Spring阶段最困扰大家的事情是什么&#xff1f; 配置 → 配置魔鬼 快速搭建一个独立的生产级别的Spring应用 快速引入项目相关依赖 开箱…

【漏洞复现】I Doc View 在线文档预览 qJvqhFt.json 任意文件读取漏洞(XVE-2024-2115)

0x01 产品简介 iDocView是一个在线文档解析应用&#xff0c;旨在提供便捷的文件查看和编辑服务。 0x02 漏洞概述 iDocView是一个在线文档预览系统 /iew/gJvghftjson 接口处存在任意文件读取漏洞&#xff0c;未授权的攻击者可以利用此接口并携带默认token读取服务器敏感文件信…

表格中附件的上传、显示以及文件下载#Vue3#后端接口数据

表格中附件的上传及显示#Vue3#后端接口数据 一、图片上传并显示在表格中实现效果&#xff1a; 表格中上传附件 代码&#xff1a; <!-- 文件的上传及显示 --> <template><!-- 演示地址 --><div class"dem-add"><!-- Search start -->…

【推荐】用scss循环zoom缩放比例,解决可视化大屏在不同分辨率屏幕下的适配问题

方法1&#xff1a; 指定几种常规屏幕宽度&#xff08;用这种方式就必须要强制用户全屏查看页面&#xff0c;在固定的宽度下才能达到比较不错的显示效果&#xff09; // 适配不同分辨率的页面---------------------------------------- html {overflow: hidden;width: 1920px;…

SQL语句练习每日5题(二)

题目1——查找学校是北大的学生信息 筛选出所有北京大学的学生进行用户调研&#xff0c;请你从用户信息表中取出满足条件的数据&#xff0c;结果返回设备id和学校。 解法&#xff1a;考察where条件语句 select device_id,university from user_profile where university北京…

python数据文件处理库-pandas

内容目录 一、pandas介绍二、数据加载和写出三、数据清洗四、数据转换五、数据查询和筛选六、数据统计七、数据可视化 pandas 是一个 Python提供的快速、灵活的数据结构处理包&#xff0c;让“关系型”或“标记型”数据的交互既简单又直观。 官网地址: https://pandas.pydata.o…

今日arXiv最热大模型论文:大模型都能怎么用?中南大学最新综述:大模型时代的自然语言处理

还记得2022年末ChatGPT的横空出世&#xff0c;带来了整个NLP乃至AI领域的震动&#xff0c;随后如LLaMA、ChatGLM、Qwen等类ChatGPT大模型&#xff08;LLM&#xff09;开始如雨后春笋般涌现&#xff0c;这些先进的模型不仅展示了在零样本学习中的出色表现&#xff0c;还在多种NL…

树形表/树形数据接口的开发

数据表格式 需要返回的json格式 点击查看json数据 [{"childrenTreeNodes" : [{"childrenTreeNodes" : null,"id" : "1-1-1","isLeaf" : null,"isShow" : null,"label" : "HTML/CSS","na…