7年来Google首次更新transformer框架,性能提升50%

2024-04-15 19:44

本文主要是介绍7年来Google首次更新transformer框架,性能提升50%,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Transformer模型回顾

"Attention is All You Need" 是一篇著名的深度学习论文,由 Ashish Vaswani 等人撰写。这篇论文首次提出了 Transformer 模型,该模型在自然语言处理领域取得了重大成功。该论文于 2017 年 6 月在第 31 届 AAAI 会议(Association for the Advancement of Artificial Intelligence)上公布,并于同年 11 月在 arXiv 上发表。

transformer模型框架

虽然很多人对transformer模型并不太熟悉,但是要是提起ChatGPT,Sora文生视频,Google Gemini等大语言模型,也许会有很多人了解。岂不知这些大模型的主干都是由transformer模型框架构成,而transformer模型最核心的便是注意力机制了。

transformer模型框架的注意力机制是一种全局注意力机制,虽然注意力机制被大模型使用。但是考虑到资源分配以及提升计算性能上,很多模型并没有完全使用transformer模型的标准框架,而是进行了一系列魔改。比如GPT系列模型仅仅使用了transformer模型的解码器部分,而VIT视觉模型仅仅使用了transformer模型的编码器部分,同样使用在视觉模型的Swin模型更是为了降低计算复杂度使用了窗口注意力机制。

VIT模型框架

尽管大模型都对transformer模型进行了或多或少的修改,都是为了降低计算复杂度,提高性能。但是其注意力机制的计算逻辑并没有改变,其模型的核心计算单元都是注意力机制的计算。只是在注意力机制的基础上增加了不同的网络设计,不同的逻辑。但是随着模型深度的不断加深,其计算资源也是相当的大,如何改善transformer模型的计算性能的问题一直是大家感兴趣的问题。

MoE混合专家模型

随着 Mixtral 8x7B的推出,一种称为混合专家模型 (Mixed Expert Models,简称 MoEs) 的 Transformer 模型在开源人工智能社区引起了广泛关注。

混合专家模型

MoE混合专家模型是一种基于 Transformer 架构的模型,混合专家模型主要由两个关键部分组成:

稀疏 MoE 层: 这些层代替了传统 Transformer 模型中的前馈网络 (FFN) 层。MoE 层包含若干“专家”(例如 8 个),每个专家本身是一个独立的神经网络。在实际应用中,这些专家通常是前馈网络 (FFN),但它们也可以是更复杂的网络结构,甚至可以是 MoE 层本身,从而形成层级式的 MoE 结构。

混合专家模型

门控网络或路由: 这个部分用于决定哪些token 被发送到哪个专家。例如,在下图中,“More”这个令牌可能被发送到第二个专家,而“Parameters”这个令牌被发送到第一个专家。有时,一个令牌甚至可以被发送到多个专家。

混合专家模型门控网络

据统计,transformer模型中最浪费计算资源的并不是注意力机制层,而是前馈神经网络。因此混合专家模型便取代了前馈神经网络层。在混合专家模型 (MoE) 中,将传统 Transformer 模型中的每个前馈神经网络 (FFN) 层替换为 MoE 层,其中 MoE 层由两个核心部分组成: 一个门控网络和若干数量的专家。因此就大大降低了计算复杂度的问题。而Google更新的transformer模型框架也是基于MoE框架进行了扩展,称之为MoD模型。

Mixture-of-Depths:动态分配Transformer模型中的计算资源

Google发布的文章称之为MoD模型,其实质也是一种transformer模型,但是提出了动态分配计算资源的问题,大大提升了50%的计算性能。传统的基于 Transformer 的语言模型在输入序列中均匀地分配 FLOPs(浮点运算次数)。MoD模型证明了 Transformer 可以学习动态地将 FLOPs分配到序列中的特定位置,并在模型的不同层级中优化序列的分配。MoD方法通过限制在给定层中可以参与自注意力和 MLP 计算的 token 数量来强制执行总计算预算。

Mixture-of-Depths Transformer

与混合专家 (MoE) Transformer 一样,MoD使用路由器在潜在的计算路径中进行选择。但与 MoE Transformer 不同的是,由于一些 token 采用了第二种路径,因此与 vanilla 或 MoE Transformer 相比,混合深度 (MoD) Transformer 具有更小的总 FLOP计算。

MoD考虑了两种学习路由方案:token 选择和专家选择。在 token 选择路由中,路由器在计算路径上(例如,在 MoE Transformer 中的专家身份之间)生成每个 token 的概率分布。然后将 token 转移到它们喜欢的路径(即概率最高的路径),并且辅助损失确保所有 token 不会收敛到相同的路径。token 选择路由可能会出现负载平衡问题,因为不能保证 token 在可能的路径之间适当地分配自己。“专家选择路由”颠覆了这个过程:不是让 token 选择它们喜欢的路径,而是每条路径根据 token 的偏好选择前 k 个 token。这确保了完美的负载平衡,因为 k 个 token 被保证被转移到每条路径。

MoD学习路由方案

除了 vanilla Transformer 之外,MoD 技术还可以与 MoE 模型集成(共同构成 MoDE 模型)。而论文也是尝试了两种变体:在分阶段 MoDE 中,在自注意力步骤之前添加路由,这样能够允许token跳过注意力机制层,提高计算效率。

而在集成 MoDE 中,通过在常规 MLP 专家中集成 MoD 路由。大大简化了路由机制,也可以有效的提高计算性能。但是模型需要学习如何有效地进行路由选择,才能保证计算资源的合理分配和模型的性能。

Mixture-of-Depths-and-Experts (MoDE)

MoD 的核心思想:

  1. 设置静态计算预算: 通过限制参与每个 block(自注意力层和前馈网络层)计算的 token 数量来控制总计算量。
  2. 路由机制: 使用路由器为每个 token 生成一个权重,表示该 token 参与 block 计算的优先级。
  3. Top-k 选择: 选择权重最高的 k 个 token 参与 block 计算,保证计算图和张量大小保持静态。

MoD 的优势:

  1. 提高计算效率: 相比于传统 Transformer 模型,MoD 模型在每个前向传递中使用更少的计算量,从而提高了训练和推理速度。
  2. 保持或提升性能: 实验结果表明,在相同的计算预算下,MoD 模型可以达到与传统 Transformer 模型相当甚至更好的性能。
  3. 灵活的资源分配: MoD 模型可以根据上下文动态地将计算资源分配给更需要处理的 token,从而更好地理解输入序列。

attention is all you need原论文框图

目前来看,大模型依然是transformer模型的天下,其注意力机制仅仅有3个矩阵构成,其公式也是比较简单。就是这么简单的计算公式,却是如今大模型必不可缺的模型框架,GPT系列,Gemini系列,mistral AI系列,Claude 系列,trok Xai系列以及国内的大模型都离不开注意力机制的计算。可想transformer模型是如此的强大,而目前绝大模型的做法也是MoE混合模型,据说GPT4模型便是一个MoE混合模型。无论哪个模型,都是使用了transformer模型的注意力机制。

https://huggingface.co/blog/
https://arxiv.org/abs/2404.02258 Mixture-of-Depths: Dynamically allocating compute in transformer-based language models更多transformer,VIT,swin tranformer
参考头条号:人工智能研究所
v号:启示AI科技
微信中复制如下链接,打开,免费使用chatgpthttps://wx2.expostar.cn/qz/pages/manor/index?id=1137&share_from_id=79482&sid=24

动画详解transformer 教程在线

这篇关于7年来Google首次更新transformer框架,性能提升50%的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面