MEGALODON:突破传统,实现高效无限上下文长度的大规模语言模型预训练和推理

在人工智能领域,尤其是在自然语言处理(NLP)中,大模型(LLMs)的预训练和推理效率一直是研究的热点。最近,一项突破性的研究提出了一种新型神经网络架构——MEGALODON,旨在解决传统Transformer架构在处理长序列时面临的挑战。

MEGALODON-7B、LLAMA2-7B和LLAMA2-13B在训练过程中处理的token数量与负对数似然(Negative Log-Likelihood, NLL)的关系。比较不同模型在相同训练token数量下的性能,其中NLL越低表示模型性能越好

大模型(LLMs)在处理诸如多轮对话、长文档理解和视频生成等实际应用时,需要高效地处理长序列数据,并生成连贯的输出。然而,现有的Transformer架构由于其二次数方的计算复杂性以及对长度泛化的有限归纳偏差,使得其在长序列建模上效率不高。尽管已经提出了一些次二次数方的解决方案,如线性注意力和状态空间模型,但它们在预训练效率和下游任务准确性上仍不如Transformer。

不同模型在标准学术基准测试中的表现,包括模型大小、上下文长度以及预训练期间使用的数据token数量。表格中还展示了各个模型在多个基准测试中的得分

为了克服这些限制,MEGALODON架构应运而生。它继承了MEGA(指数移动平均与门控注意力)的架构,并进一步引入了多个技术组件以提高其能力和稳定性。这些组件包括复杂指数移动平均(CEMA)、时间步归一化层、归一化注意力机制以及预归一化和双跳残差配置。

不同归一化方法的示意图,包括层归一化(Layer Norm)、组归一化(Group Norm)和时间步归一化(Timestep Norm)

Figure 2展示了不同归一化方法的计算方式,这些方法在神经网络中用于稳定训练过程并提高模型的性能。归一化通过调整激活输出的分布,减少内部协变量偏移,从而使得模型更加稳定,便于学习和泛化。归一化方法包括:

  1. Layer Normalization(层归一化):这是一种常用的归一化技术,它在神经网络的层级上对数据进行归一化处理。Layer Normalization会在神经网络的每一层计算激活值的均值和方差,然后使用这些统计量来归一化当前层的激活输出。

  2. Group Normalization(分组归一化):这种方法是对Layer Normalization的一个扩展,它将特征维度分成多个组,并在每个组内分别计算均值和方差来归一化激活值。Group Normalization允许模型在特征维度上捕捉局部依赖性,同时减少参数数量。

  3. Timestep Normalization(时间步归一化):这是MEGALODON架构中特别提出的一种归一化方法,它专门用于处理序列数据。Timestep Normalization在序列的时间步上计算累积的均值和方差,以此来归一化序列数据。这种方法对于自回归模型特别有用,因为它可以防止时间步上的梯度消失或爆炸问题,同时避免未来信息的泄露。

MEGALODON架构中,这些归一化方法被用来增强模型处理长序列的能力。通过合理地选择和应用这些归一化技术,MEGALODON能够在保持计算效率的同时,提高模型在长序列数据上的稳定性和性能。

MEGALODON架构的示意图

Figure 3提供了MEGALODON架构的详细图解,展示了其核心组件和配置。这个架构是为了提高大型语言模型(LLMs)在长序列数据上的效率和性能而设计的

Figure 3(a) 展示了一个MEGALODON层的草图,它包括以下几个关键组件:

  • CEMA (Complex Exponential Moving Average) Output: 这是MEGALODON中的一个创新组件,它扩展了传统的指数移动平均(EMA)到复数域,以增强模型捕捉长距离依赖的能力。

  • Gate: 门控机制是控制信息流的一种方式,在MEGALODON中,可能包括重置门(reset gate)和更新门(update gate),它们共同作用于注意力机制的输出。

  • Q, K, V (Query, Key, Value): 这些是注意力机制中的查询、键和值,它们是模型用来计算注意力分数和加权输出的基础。

  • Normalized Attention Unit: 归一化注意力单元是MEGALODON中的另一个关键创新,它通过归一化查询和键的表示来提高注意力机制的稳定性。

  • Output Y: 经过注意力机制和后续的归一化处理后,得到的输出将被送入下一层或作为最终的预测结果。

  • Layer Norm: 层归一化被应用于输入和注意力输出上,以稳定训练过程并提高模型的泛化能力。

  • FFN (Feed-Forward Network): 这是每个Transformer层中的标准组件,用于在注意力机制之后进一步处理数据。

Figure 3(b) 展示了预归一化(Pre-Norm)的配置,这是Transformer架构中常用的一种归一化策略。在这种配置中:

  • 输入X首先被送入归一化层,然后进入注意力机制。

  • 注意力机制的输出与原始输入X相加,形成残差连接。

  • 残差连接的输出再次经过归一化,然后送入前馈网络(FFN)。

这种配置有助于减少训练过程中的内部协变量偏移,并且由于归一化层在每个子层(如注意力机制和FFN)之前应用,因此有助于稳定深层网络的训练。

Figure 3(c)展示了MEGALODON中的另一种配置,即预归一化结合双跳残差连接。这种配置对预归一化进行了改进:

  • 输入X首先经过归一化,然后送入注意力机制。

  • 注意力机制的输出与原始输入X相加,形成第一跳残差连接。

  • 这个残差连接的输出再次经过归一化,然后送入前馈网络(FFN)。

  • FFN的输出与原始输入X再次相加,形成第二跳残差连接。

这种双跳残差连接的设计有助于进一步稳定深层网络的训练,特别是在模型规模非常大时。通过在每个主要组件(如注意力机制和FFN)之后重新使用原始输入作为残差连接,这种配置减少了深层网络中梯度消失或爆炸的风险。

MEGALODON架构是针对现有Transformer架构在处理长序列数据时遇到的挑战而设计的。它基于MEGA架构,引入了一系列创新技术,以提高模型处理长序列的能力,并保持了高效的计算性能。

MEGALODON采用了复杂指数移动平均(CEMA),这是对MEGA中使用的多维阻尼指数移动平均(EMA)的扩展。CEMA通过在复数域中操作,增加了模型捕捉长序列依赖关系的能力。CEMA通过将EMA中的衰减和阻尼因子扩展到复数参数,使得模型能够在保持时间序列信息的同时,更好地捕捉序列中的长距离依赖。

MEGALODON引入了时间步归一化层(Timestep Normalization Layer),这是一种对现有归一化技术(如Layer Normalization和Group Normalization)的改进。时间步归一化层通过在序列的时间维度上计算累积的均值和方差,来减少序列内部的协变量偏移。这种归一化方法特别适用于自回归序列建模任务,因为它可以防止未来信息的泄露,同时提高了模型的稳定性。

MEGALODON采用了归一化注意力机制(Normalized Attention Mechanism),这是一种改进的注意力计算方法,通过使用归一化的共享表示来计算查询(Q)、键(K)和值(V)。这种方法简化了注意力分数的计算,并且通过引入非线性,提高了模型的表达能力。

MEGALODON还提出了预归一化和双跳残差配置(Pre-Norm with Two-hop Residual Configuration)。这种配置通过重新组织每个块中的残差连接,减少了深层网络训练中的不稳定性。在这种配置中,输入序列在经过归一化后直接用于残差连接,从而简化了模型的架构并提高了训练的稳定性。

MEGALODON架构通过将输入序列分块处理,实现了线性的计算和内存复杂度。这意味着无论序列长度如何,模型都能够以恒定的资源消耗来处理数据,这对于大规模语言模型的预训练和推理尤为重要。

MEGALODON还提出了一种新的分布式预训练算法,该算法通过在时间步/序列维度上进行并行化,进一步提高了模型的可扩展性。这种并行化策略允许模型在保持通信开销较低的同时,有效地利用多个计算设备,加速了模型的训练过程。

研究人员对MEGALODON架构进行了全面的评估,以验证其在长上下文序列建模上的性能。为此,他们构建了一个70亿参数的模型,并在2万亿个训练token上进行了预训练,这是一个前所未有的规模,旨在模拟真实世界中可能遇到的复杂和庞大的数据集。

在实验中,MEGALODON展现出了卓越的效率和可扩展性。与LLAMA2相比,MEGALODON在训练困惑度上取得了显著的降低,这是一个衡量模型对数据集预测准确性的关键指标。低困惑度意味着模型在预测下一个token时更加自信,这在长序列建模中尤为重要,因为即使是微小的误差也可能会随着序列的增长而累积。

在不同上下文长度下,LLAMA2-7B和MEGALODON-7B每个设备的平均每秒单词数(Words Per Second, WPS),用于衡量训练速度

除了训练效率外,MEGALODON在多个下游任务中也表现出色。研究人员在不同的学术基准测试中对MEGALODON进行了评估,包括常识推理、世界知识问答和阅读理解等任务。在这些测试中,MEGALODON不仅超越了LLAMA2,而且在某些任务上达到了与更大模型规模相当的性能水平。

在长上下文评估中,MEGALODON的能力得到了进一步的证明。研究人员构建了一个包含不同上下文长度的验证数据集,从几千到两百万token不等。MEGALODON在这个数据集上的表现显示,随着上下文长度的增加,模型的预测性能稳步提高,这表明MEGALODON能够有效地利用更长的上下文信息来做出更准确的预测。

表 2: 列出了MEGALODON-7B和其他7B规模的开源长上下文模型在Scrolls数据集上的长上下文开放书籍问答(QA)任务的结果

MEGALODON在中等规模的基准测试中也显示出了其鲁棒性。研究人员在图像分类和自回归语言建模等任务上对MEGALODON进行了测试。在ImageNet-1K数据集上的图像分类任务中,MEGALODON达到了比现有最先进模型更高的准确率。在PG-19数据集上的自回归语言建模任务中,MEGALODON同样展现出了更低的困惑度,这意味着它能够更准确地预测文本序列中的下一个单词。

在ImageNet-1K数据集上,不同模型的Top-1准确率,用于评估MEGALODON在图像分类任务上的表现

这些实验结果不仅证明了MEGALODON在长上下文序列建模上的有效性,也展示了其在多种任务和数据类型上的通用性和鲁棒性。MEGALODON的这些特性使其成为一个有潜力的架构,可以应用于各种实际应用中,包括但不限于自然语言处理、计算机视觉和其他需要处理长序列数据的领域。随着人工智能技术的不断进步,MEGALODON架构有望在未来的AI研究和应用中发挥重要作用。

论文链接:https://arxiv.org/abs/2404.08801

GitHub 地址:https://github.com/XuezheMax/megalodon

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

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

相关文章

python怎么连接以太坊,python实现数据上传以太坊

目录 python怎么连接以太坊 python实现数据上传以太坊 python怎么连接以太坊 要在Python中连接以太坊网络,通常你需要使用以太坊的客户端(如Geth或Parity)以及一个Python库来与这些客户端进行交互。最常用的Python库之一是web3.py,它提供了与以太坊网络交互的功能。 以…

PyTorch 索引与切片-Tensor基本操作

以如下 tensor a 为例,展示常用的 indxing, slicing 及其他高阶操作 >>> a torch.rand(4,3,28,28) >>> a.shape torch.Size([4, 3, 28, 28])Indexing: 使用索引获取目标对象,[x,x,x,....] >>> a[0].shape torch.Size([3, 2…

认识与学习JSP

JSP核心技术 什么是JSP JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP/Servlet规范。JSP实际上就是Servlet JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm…

阿里新发布的UniAnimate现高效人像动画生成;在ComfyUI中使用Stable 3模型;音频版的gpt2o;将 PDF 文档转换为音频播客

✨ 1: UniAnimate 阿里新发布的UniAnimate通过统一的视频扩散模型,实现高效人像动画生成,支持长视频生成 UniAnimate 是一种专注于一致性人像动画生成的统一视频扩散模型。该模型通过映射参考图像、姿势指导和噪声视频到一个共同特征空间,实…

ZED双目相机环境配置

官方资料:stereolabs/zed-python-api: Python API for the ZED SDK (github.com) 1,配置ZED相机环境 1.安装CUDA 查看电脑是否安装CUDA,安装过程可参考以下博文: 如何选择匹配的CUDA版本:https://blog.csdn.net/iam…

MoCo v3(ICCV 2021)

paper:An Empirical Study of Training Self-Supervised Vision Transformers official implementation:https://github.com/facebookresearch/moco-v3 出发点 本文并没有提出一种新的方法,而是对计算机视觉领域最近进展中的一个重要且基础…

C++杂记

文章目录 前言cin1. getline(cin, str)2. cin.getline(arr, number)3. cin.get()4. cin >> variable_name5. cin.clear(); 动态内存1. 可以在动态声名数组的同时进行初始化。 数组1. &arr[0]2. &arr3. 数组输入指定长度和非数字时,停止 前言 在写《C…

C++中的组合模式

目录 组合模式(Composite Pattern) 实际应用 文件系统 组织结构 图形对象 总结 组合模式(Composite Pattern) 组合模式是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使…

沃尔玛自养号测评:优势与技术要求解析

沃尔玛自养号测评是一种卖家在沃尔玛平台上提升店铺权重和排名的营销手段。传统运营策略的局限性日益显现,如营销手段单一、难以应对市场竞争等。因此,许多卖家为了提升店铺权重和排名,选择了自养号测评这一技术手段。 以下是对沃尔玛自养号…

关于BERT和embedding

embedding到一个低维向量,但是需要回到onehot高维表示,所以大部分填词游戏最后都需要加上一个MLP接头。 word2vec如此简单的结构,学习到的是embedding 基于计数的统计方法和word2vec融合就形成了glove词嵌入模型 总结:通过各种…

消费者消费数据时报错:INVALID_REPLICATION_FACTOR

今天部署了kafka集群,三台服务器,启动后,生产者发送数据,消费者接收数据的时候报错,INVALID_REPLICATION_FACTOR。 查了很多资料,说是要改kafka下config目录的server.properties,可能是副本数太小&#xff…

WPS中XLS表格使用的技巧记录

我遇到一个问题,xls表格中有一列数据的格式是会计专用,金额前面有货币符号,但是我想复制这列数据为普通的文本,并且在后面添加.00,有什么方法可以做到。 TEXT(B2, “0”) & “.00”

【第5章】Stable Diffusion大模型(简介/两种版本/安装/模型推荐/使用方式)ComfyUI基础入门教程

🍩 大模型简介 大模型,又称为Stable Diffusion模型,所有Stable Diffusion的绘图都是以该模型能力为基础上进行的。 发展到现在,大模型已经更新了很多个版本,大家听说过的可能有Stable Diffusion 1.4(简称SD1.4),Stable Diffusion 1.5(简称SD1.5),Stable Diffusion 2.0…

【react】如何合理使用useEffect

useEffect 是 React Hooks API 的一部分,它允许你在函数组件中执行副作用操作,比如数据获取、订阅或者手动更改 DOM。合理使用 useEffect 可以帮助你管理组件的生命周期行为,同时避免不必要的渲染和性能问题。以下是一些关于如何合理使用 useEffect 的建议: 明确依赖项: 当…

【计算机视觉】人脸算法之图像处理基础知识(四)

图像的几何变换 图像的几何变换是指在不改变图像内容的前提下对图像的像素进行空间几何变换。主要包括图像的平移变换、镜像变换、缩放和旋转等。 1.插值算法 插值通常用来放缩图像大小,在图像处理中常见的插值算法有最邻近插值法、双线性插值法、二次立方、三次…

sap怎么批量给信息记录打上删除标识

1.MEMASSIN-----事务代码 2.选择完成字段 3.根据条件查询需要冻结的信息记录 4.输入查询条件 5.全部勾选完成标识,点击保存,即可冻结完成

特殊矩阵:零矩阵(Zero)幺矩阵(Ones)单位矩阵(Identity)随机矩阵(Random)#matlab

在MATLAB中,通用的特殊矩阵主要包括以下几种,每种都有其特定的函数来创建: 零矩阵(Zero Matrix) 使用zeros函数创建,,元素全为0。 格式: zeros(m, n): 创建一个m行n列的零矩阵。 zeros(n):…

盘点国内外免费AI视频工具,助你先人一步拥抱AI

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 6月13日,Luma AI 在 X 平台(原 Twitter)宣布其视频生成模型 Dream Machine 开放测试,并提供免费试用,这在海外 AI 圈掀起了一…

配置中心理论学习

配置中心是一种用于集中管理应用程序配置信息的系统或服务。在微服务架构中,由于服务数量众多且可能分布在不同的环境中,配置中心的作用尤为突出。它允许开发者将配置信息从应用程序代码中分离出来,集中存储和管理,从而提高配置的…

C#防止多次注册事件

事件声明和使用部分的代码,防止多次注册事件主要通过判断事件中类型的委托实例是否为空实现 public class ReRegisterEvent {public delegate void Mydelegate(string message);private Mydelegate? mydel;public event Mydelegate Myevent{add{if (mydel null){…