网站首页 > 技术文章 正文
梦晨 发自 凹非寺
量子位 | 公众号 QbitAI
新架构,再次向Transformer发起挑战!
核心思想:将RNN中的隐藏状态换成可学习的模型。
甚至在测试时都可以学习,所以该方法称为TTT(Test-Time Training)。
共同一作UC伯克利的Karen Dalal表示:我相信这将从根本上改变语言模型。
一个TTT层拥有比RNN表达能力更强的隐藏状态,可以直接取代Transformer中昂贵的自注意力层。
在实验中,隐藏状态是线性模型的TTT-Linear表现超过了Transformer和Mamba,用更少的算力达到更低的困惑度(左),也能更好利用长上下文(右)。
此外,隐藏状态是MLP模型的TTT-MLP在32k长上下文时表现还要更好。
Karen Dalel还指出,理论上可学习的隐藏状态可以是任意模型,对于更长上下文来说,可以是CNN、甚至可以是完整的Transformer来套娃。
目前刚刚出炉的TTT论文已经在学术界引起关注和讨论,斯坦福博士生Andrew Gao认为,这篇论文或许能成为下一篇Attention is all you need。
另外有人表示,众多新架构能否真正击败Transformer,还要看能不能扩展到更大规模。
Karen Dalel透露,马上就会推出7B模型。
用机器学习模型来压缩上下文
传统RNN,隐藏状态固定大小表达能力受限,也不好并行训练。
Transformer强大,但自注意力机制随上下文长度呈平方复杂度,非常昂贵。
最近一系列基于RNN的架构创新中:
RWKV,用线性注意力结合RNN和Transformer的优点,在训练时可以并行计算。
Mamba,赋予模型选择性记住或遗忘信息的能力来压缩上下文,同时设计了面向硬件的高效并行算法。
它们的表现在短上下文时追上甚至超越了Transformer,但在32k超长上下文以上,Trasformer依旧称霸。
TTT团队的想法来自于:与其让隐藏状态被动地储存信息,不如让它主动学习。
就像Transformer模型作为一个整体在压缩互联网数据到参数中一样,可学习的隐藏状态模型也在少量参数上不断缩上下文信息。
这种“隐藏状态模型”随着时间的推移仍然具有固定的大小(固定的模型参数),但表达能力更强了。
论文的联合指导UCSD助理教授王小龙认为:
Transformer显式地储存所有输入token,如果你认为个神经网络是压缩信息的好方法,那么压缩这些token也将是有意义的。
如此一来,整个框架的时间复杂度还是线性的,
至此,序列建模被拆解为两个嵌套的学习循环,外循环负责整体的语言建模,内循环通过自监督学习压缩上下文信息。
外循环的参数变成了内循环的超参数,也就是元学习的一个变种了。
标准的元学习是训练一个适应不同任务的模型,而TTT是让模型去适应每一个测试样本。单个样本虽然信息量小,但用来训练隐藏状态模型也绰绰有余。
特别的,在内循环是一个线性模型时,相当于线性注意力。当内循环是一个Nadaraya-Watson estimator时,TTT等价于自注意力。
在测试时学习
在TTT层里,使用自监督学习方法将上下文压缩到隐藏状态。
上下文就是未标记的数据集,隐藏状态不再是一个固定的向量,可以是线性模型、小型神经网络或任何机器学习模型,更新规则采用了在自监督损失上的一步梯度下降。
这样一来,隐藏状态模型可以记住产生大梯度的输入,并且可以获得比选择性遗忘机制更强的拟合和泛化能力,并且在测试时仍然为每个输入序列训练不同的参数。
到目前为止,朴素的TTT层已经有效了,但还无法并行化。
团队提出的解决方案为mini-batch梯度下降,把一个batch内的梯度计算并行化。
再通过Dual form方法,只在mini-batch结束时计算权重以及输出token,避免冗余计算。在JAX版实现中快了5倍以上。
TTT能否成为“Transformer杀手”?
理论上都走的通了,那么TTT在实验中表现到底如何?
最简单干净的测试方法,应该是直接替换掉Transformer中的自注意力层。
但是在研究过程中,团队发现Mamba等现代RNN的骨干中在RNN层之前还包含时间卷积,对TTT也有帮助。
所以实验中TTT-Linear和TTT-MLP主要应用到Mamba骨干上,其他训练细节也严格遵照Mamba论文中的设置。
最终在Pile数据集短上下文测试中:
- 2k上下文时,TTT-Linear、Mamba和Transform具有相当的性能,TTT-MLP的表现略差。
- 8k上下文时,TTT-Linear和TTT-MLP都优于Mamba和Transformer,应用在Transformer骨干的TTT-MLP(T)在1.3B参数左右也略好与Mamba。
总的来说,随着上下文长度的增长,TTT层相对于Mamba的优势也会扩大。
另外团队猜测,线性模型比MLP表达能力差,因此从Mamba骨干的卷积中受益更多。
长上下文实验使用Pile的子集Books3:
- 32k上下文,TTT-Linear和TTT-MLP的表现都优于曼巴,类似于Pile 8k的观察。即使是带有Transformer骨干的TTT-MLP(T)表现也略好于曼巴。
- 1.3B参数尺度上,TTT-MLP(T)仅比TTT-MLP(M)稍差,Transformer骨干可能更适合论文评估范围之外的更大模型和更长的上下文。
在A100上测试速度,TTT-Linear在预填充阶段比Mamba稍快,解码阶段几乎与Mamba速度相同。TTT-MLP相比Transformer整体上也有线性复杂度的优势。
共同一作Karan Dala表示:我一直被问到的一个问题是,我们是否相信TTT就是“Transformer杀手”,我仍然认为我们需要继续努力。
隐藏状态可以是任意模型,但目前的研究只涉及了线性模型和小型MLP,更复杂的还有待研究。
隐藏状态模型的学习可以用Adam代替普通的梯度下降等等。
还可用于视频建模
三位共同一作中:
Yu Sun博士毕业于UC Berkeley,目前是斯坦福大学博士后。
Xinhao Li是电子科技大学校友,硕士毕业于UCSD。
Karan Dalel本科毕业于UC Berkley,正在机器人初创公司1X实习。
最后,联合指导UCSD助理教授王小龙还透露,TTT方法除了语言模型,还适用于视频。
TTT就是“Transformer杀手”,我仍然认为我们需要继续努力。
将来在对长视频进行建模时,我们可以密集地采样帧而不是采样1 FPS,这些密集帧对Transformer来说是一种负担,但对TTT层来说是一种福音。
论文地址:
https://arxiv.org/abs/2407.04620
参考链接:
[1]https://x.com/karansdalal/status/1810338845659131940
[2]https://x.com/xiaolonw/status/1810387662060269668
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态
猜你喜欢
- 2024-09-23 长文解析|九类交互状态的自查与设计
- 2024-09-23 如何使用Axure做一份高质量的EMS能源管理系统原型?
- 2024-09-23 计算机机箱的结构通常包括以下几个部分: ? 外壳
- 2024-09-23 标准化的响应结构对于C#项目至关重要
- 2024-09-23 产品架构设计之产品实体设计一,二
- 2024-09-23 PostgreSQL技术内幕3:PG逻辑存储层级和物理存储结构
- 2024-09-23 一文彻底搞明白状态模式(什么是状态模式)
- 2024-09-23 09 打造无状态的存储实现随时切库的写入服务
- 2024-09-23 众合科技获得发明专利授权:“基于状态机的冗余架构设备资源管理方法”
- 2024-09-23 mysql索引数据结构(mysql中索引的数据结构)
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 571℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 512℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 468℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 447℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 445℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)