谷歌Titans模型论文解析,Transformer迎来变革拐点——DeepSeek能否“接招”?

embedded/2025/2/8 22:56:33/

Titans__0">一、引入 Titans 模型

我们将深入探讨谷歌研究院的一篇新论文《Titans: Learning to Memorize at Test Time》,该论文介绍了一种名为 Titans 的新模型架构。
在这里插入图片描述

Titans 在缓解 Transformer 二次方成本问题的同时,展现出了令人期待的成果。Titans 模型的设计灵感来源于人类大脑的记忆运作方式。论文中有一句有趣的话提到,记忆是一种基本的心理过程,是人类学习不可或缺的组成部分。如果没有正常运作的记忆系统,人类和动物将局限于基本的反射和刻板行为

在这里插入图片描述

二、深度神经长期记忆模块

Titans 论文的一个关键贡献是深度神经长期记忆模块(deep neural long-term memory module)。我们先来了解一下它是什么,然后再探讨它是如何融入 Titans 模型的。

与循环神经网络中将记忆编码为固定向量不同,神经长期记忆模块本身就是一个模型,是一个多层神经网络,它将过去的历史抽象编码到自身的参数中。要训练这样一个模型,一种思路是训练它记忆训练数据。然而,众所周知,记忆会限制模型的泛化能力,可能导致性能不佳。

三、避免过拟合的记忆机制

研究人员设计了一种巧妙的方法,来创建一个能够记忆,但又不会在训练数据上过拟合的模型。这种方法的灵感来自人类记忆的一个类比。当我们遇到令人惊讶的事件时,我们更有可能记住它。神经长期记忆模块的学习过程正是基于这一理念设计的。

3.1 对 “惊讶” 进行建模

在这里插入图片描述
Updating the neural memory using a surprise element

通过论文中的上述定义,我们可以了解研究人员是如何对 “惊讶” 进行建模的。 Mt代表时刻t的神经长期记忆模块。它通过上一时刻的参数以及一个被建模为梯度的 “惊讶” 元素进行更新。如果梯度较大,说明模型对输入更 “惊讶”,这会导致模型权重得到更显著的更新。

然而,这个定义仍不理想,因为模型可能会错过 “惊讶” 时刻之后紧接着发生的重要信息。

3.2 对 “过去的惊讶” 进行建模

从人类的角度来看,一个令人惊讶的事件不会在很长一段时间内持续让我们感到惊讶,尽管它仍然令人难忘。我们通常会适应这个令人惊讶的事件。不过,该事件可能足够令人惊讶,从而在很长一段时间内吸引我们的注意力,使我们记住整个时间段。

在这里插入图片描述
Updating the neural memory using both past and momentary surprise

通过论文中的上述定义,我们可以了解到改进后的建模方式,其中包括对 “过去的惊讶” 的建模。现在,我们使用上一时刻的权重状态以及一个 “惊讶” 分量St来更新神经长期记忆的权重。“惊讶” 分量现在是随时间测量的,它由带有衰减因子的上一时刻 “惊讶” 和我们在上一节讨论过的当下 “惊讶” 组成。

还有一个尚未建模的因素是遗忘。

3.3 对遗忘进行建模

在这里插入图片描述
Allowing the model to forget past information

在处理非常长的序列(例如数百万个标记 tokens)时,管理哪些过去的信息应该被遗忘至关重要。通过论文中的上述定义,我们可以看到最终的建模方式。这些定义与上一节的定义相同,只是我们添加了一个自适应遗忘机制,用 alpha 表示,也称为门控机制(gating mechanism)。这使得记忆能够遗忘不再需要的信息。

3.4 损失函数

在这里插入图片描述
Neural memory loss function

损失函数由上述公式定义。该损失旨在通过将过去的数据存储为键值对来模拟联想记忆,并训练模型在键和值之间进行映射。与 Transformer 类似,线性层将输入投影为键和值。然后,损失值loss衡量记忆模块学习键值对之间关联的程度。

需要说明的是,模型不是一次性处理整个序列,而是逐步处理,在其权重中积累记忆信息。

Titans__52">四、Titans 架构

Titans__1_MAC_53">4.1 Titans 架构 1—— 记忆作为上下文(MAC)

论文提出了几种不同的架构。第一种称为记忆作为上下文(MAC)。我们可以通过论文中的下图来了解它。

在这里插入图片描述
Titans Memory as a Context Architecture

该模型由 3 个组件组成:持久记忆、核心和上下文记忆。给定一个长输入序列,我们将其划分为较小的序列。核心组件中显示的序列实际上是一个分块后的序列。

持久记忆

我们首先引入持久记忆,在序列开头添加与数据无关的可学习权重。实际上,这些是可学习的标记,用于存储不受输入影响的全局信息。序列还会经过一个注意力块,在序列开头添加可学习标记有助于避免注意力分散,因为由于偏差,注意力权重往往会过度关注初始标记。英伟达的 Hymba 模型添加可学习元标记的做法也取得了成功,我后续会介绍。

上下文记忆

上下文记忆(Contextual memory)由深度神经长期记忆模块构成,因为它依赖于上下文。我们使用神经长期记忆模块的前向传递,以分块后的输入序列作为输入,从长期记忆中检索记忆标记(memory tokens)。由于即使在测试阶段神经记忆也在不断更新,当我们处理长序列的一个分块时,神经记忆已经更新了同一序列先前分块的信息。检索到的记忆标记会在持久记忆标记之后添加到输入序列中。

核心组件

核心组件将所有信息整合在一起,使用一个注意力块,该注意力块的输入是扩展后的序列,其中包含来自持久记忆、上下文记忆和输入本身的信息。通过这种方式,模型可以利用多种类型的记忆。注意力块的输出用于更新神经记忆。注意力机制有助于根据给定的输入确定是否使用长期记忆。此外,注意力机制有助于长期记忆仅存储当前上下文中有用的信息。最终输出基于注意力块的输出和神经记忆的输出确定。

Titans__2_MAG_69">4.2 Titans 架构 2—— 记忆作为门控(MAG)

Titans 的下一个架构版本称为记忆作为门控(MAG: Memory as a Gate),我们可以通过论文中的下图来了解它。

在这里插入图片描述
Titans Memory as a Gate Architecture

在这个版本中,我们同样有代表持久记忆、核心和上下文记忆的 3 个分支。与前一个版本不同的是,这里的序列没有分块,输入序列是完整的输入序列。这是通过在注意力块中使用滑动窗口注意力实现的。持久记忆的可学习权重同样添加到序列开头。但与之前不同的是,神经记忆不会为注意力块的上下文提供数据。相反,神经记忆根据输入序列进行更新,其输出通过门控机制与核心分支相结合。

Titans__3_MAL_77">4.3 Titans 架构 3—— 记忆作为层(MAL)

Titans 架构的第三个变体称为记忆作为层(MAL)。我们可以通过论文中的下图来了解它。

在这里插入图片描述
Titans Memory as a Layer Architecture

与前一个版本类似,这里的序列也没有分块,并且我们使用滑动窗口注意力。

在这个版本中,我们将神经记忆用作模型的一层,输入序列与可学习权重首先经过神经记忆,然后再经过注意力块。这种设计允许堆叠多个神经记忆模块和注意力块,就像通常堆叠 Transformer 层一样。然而,这种顺序设计使得模型的能力受到每一层能力的限制。这与 Hymba 论文中的观察结果类似,出于同样的原因,Hymba 论文中的不同组件采用并行而非顺序放置。

Titans__4LMM_87">4.4 Titans 架构 4——LMM

Titans 的最后一个变体称为 LMM,它与前一个版本相同,但没有注意力块,仅依赖于记忆模块。

在这里插入图片描述
Comparison of Titans with baselines on language tasks

在上表中,我们可以看到 Titans 模型与基线模型在语言建模和常识推理任务上的对比。混合模型(同时利用循环和注意力机制)的最佳结果标为蓝色,非混合模型的最佳结果标为黄色。

与其他非混合模型相比,Titan LMM 取得了最佳结果,展示了神经长期记忆模块的强大能力。在混合模型中,MAC Titan 总体表现最佳,MAG Titan 的表现略逊于它。

五、大海捞针任务

在这里插入图片描述
Needle in a Haystack Comparison

另一个有趣的对比是 “大海捞针” 任务。我们可以从论文的上表中看到结果。在这个任务中,模型需要从非常长的文本中检索一条信息,从而衡量模型实际有效的上下文长度。

标题中的数字表示评估序列的长度。在所有三个基准测试中,随着序列长度的增加,Titans 明显优于基线模型。

六、BABILong 基准测试

在这里插入图片描述
Comparison on the BABILong benchmark of Titans MAC with top models

在上面的图中可以看到另一个有趣的结果,该图展示了 Titans 与顶尖模型在 BABILong 基准测试上的对比。这是一个针对长序列的更具挑战性的基准测试,在这个测试中,模型需要对分布在极长文档中的事实进行推理。

在 x 轴上,我们看到的是序列长度,y 轴衡量的是每个模型的准确率。MAC Titan 的结果用红线表示,在处理极长序列时,它的表现明显优于其他模型!

参考

  1. [1706.03762] Attention Is All You Need
  2. [2501.00663] Titans: Learning to Memorize at Test Time
  3. [2411.13676] Hymba: A Hybrid-head Architecture for Small Language Models
  4. AI Papers Academy: Titans by Google: The Era of AI After Transformers?

http://www.ppmy.cn/embedded/160647.html

相关文章

使用 OpenGL ES 渲染一个四边形

使用 OpenGL ES 渲染一个四边形 在 iOS 开发中,OpenGL ES 是一个强大的工具,用于实现高性能的 2D 和 3D 图形渲染。本文将通过一个完整的代码示例,详细解析如何使用 OpenGL ES 渲染一个简单的四边形。我们将从基础概念入手,逐步讲解代码的每个部分,帮助你理解 OpenGL ES …

前端组件标准化专家Prompt指令的最佳实践

前端组件标准化专家Prompt 提示词可作为项目自定义提示词使用,本次提示词偏向前端开发的使用,如有需要可适当修改关键词和示例 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使用最好的模型,可以…

【SQL】count(1)、count() 与 count(列名) 的区别

在 SQL 中,COUNT 函数用于计算查询结果集中的行数。COUNT(1)、COUNT(*) 和 COUNT(列名) 都可以用来统计行数,但它们在实现细节和使用场景上有一些区别。以下是详细的解释: 1. COUNT(1) 定义: COUNT(1) 计算查询结果集中的行数。 实现: 在执…

高阶C语言|和结构体与位段的邂逅之旅

💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习! 👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C语言感兴…

《语义捕捉全解析:从“我爱自然语言处理”到嵌入向量的全过程》

首先讲在前面,介绍一些背景 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索与语言生成模型的技术,通过从外部知识库中检索相关信息,并将其作为提示输入给大型语言模型&#xff…

(动态规划基础 整数拆分)leetcode 343

整数n拆成俩数 j的取值从1-n或者是1--n/2 使得nj*(n-j)俩数比较 而在前j数中已经求出拆分后的最大值也就是dp[i-j],打个比方说dp[3]2,隐含了拆分成12俩和数相乘为最优值,但是这里有特殊情况,4的两和数相乘比2*dp[2]要大&#x…

Docker镜像管理:掌握save/load与export/import的精髓

0x01 Docker Save & Load docker save: 用于将Docker镜像保存为.tar文件。这个过程会保存镜像的所有层、元数据和历史记录,因此生成的文件较大。当你需要备份或者迁移某个镜像时非常有用,尤其是当你需要保留镜像的全部构建历史以便将来在其他地方恢复…

ubuntu重启网络服务

在 Ubuntu 系统中,重启网络服务的方法取决于你使用的网络管理工具。以下是几种常见的方式: 方法 1:使用 systemctl 重启 Networking 服务 如果你使用的是传统的 networking 服务,可以通过以下命令重启: 重启网络服务&…