论文研究
mp.weixin.qq.com ·
@大模型智能
从 Attention 到 Relation:Token 流动方式的一种新架构探索
文章记录作者从 Attention 出发设计 Relation 架构的思路:认为标准 Attention 将关系形成与信息流分配压缩在一步内,于是尝试拆分为 Self(自问)与 Exchange(互问)两类关系角色,用矩阵对角线/非对角线结构组织关系网。作者称 Relation2 去掉 FFN 接口后,在相同小参量下 PPL 较 MHA 低约 9%,并提及此前 MemGLU 门控论文获 SELU 第一作者关注。文中未提供实验设置、数据集与可复现细节,结论属作者自述。
AI推荐理由 作者自述的架构探索记录,提出将 Attention 中关系形成与信息流分配拆分为 Self/Exchange 两类关系角色的 Relation 思路,并称 Relation2 在小参量下 PPL 较 MHA 低约 9%,同时提到 MemGLU 论文获 SELU 作者关注。但正文为个人推导笔记,未给出实验设置、数据集、对比基线和可复现细节,9% 的 PPL 优势无法独立验证,且原文为转载(来源青稞AI),存在重复转述成分,故质量分中等。
62
正文
大模型智能 2026-09-12 00:00 吉林

Relation2效果很好,通过再次“掀桌子”:把FFN接口干掉。相同的小参量下,已经能压MHA接近9%的PPL了

大模型智能|分享
来源 | 青稞AI
作者 | Yuting Ge
进城大之前,暑假写了两个小文章:
首先是Is SwiGLU's Open Positive Tail Necessary? Evidence from Closed-Tail Gating with MemGLU[1] 。这篇文章是一个针对MLP激活门控的小论文:从RELU到SwiGLU,大家似乎默认了开放正尾,而该文用一个闭尾门控函数:MemGLU来检验开放正尾门控是否必要。
在我看来,这是一个工作量极小的question-perfect文章,上arxiv后第二天就收到了SELU(Scaled Exponential Linear Units)第一作者:Prof. Günter Klambauer 的一个询问(来管我要代码了)。

作为一个从忆阻神经网络转行到LLM的人来说:MemGLU这个函数在忆阻器领域真是太常见了。MemGLU不是很重要,反而是question很重要。这篇文章反而是第二篇的一个铺垫,因为如果没有Prof. Günter Klambauer 的关注,我可能第二篇文章是进行不下去的。
第二篇是Ask Self, Ask Others: Relation Is All You Need[2]
这篇是本文的重点,本文主要记录该idea的演化思路,以及Relation家族的公式及其性质,我真的怕我开始上课之后,忘了我当时怎么推的了。做记录,以后一旦忘了,回头看看能想起来。
接下来开始吧。
***01***
**怎么从Attention转向的Relation?**
其实idea最早并不是Relation,而是Attention:Attention太贵了。
作为LLM的Token Mixing部分,其标准Attention的计算复杂度是 。工业上大多采取稀疏注意力、线性注意力等机制去降低这个复杂度。而我在想:既然他这么贵,MHA还是一个标准的全局通信,我能不能改进一下MHA,让他少出现几次,把复杂度降下去,最好一次开头,一次结尾就行。
然后开始小规模实验,结果很明显,各种招法都上了(不等宽Attention,高维投影等),根本不work。
第二天重看公式的时候,发现了Attention一个很有意思的点:
将 , 两个输入投影做点积,去衡量交互证据。即:证据有多强?
随后
将整行 归一化为一个权重分布,决定接下来的信息流如何在各 token 之间分配。
在这里, 似乎承担的有点多,这个标量既要编码“关系”又要参与信息流分配。更准确的说: 将关系形成与信息流分配压缩到了一个步骤内。能不能把这两点拆开呢?
首先尝试在原Attention上面动刀,做了几个实验,又是不work。而且发现了不work的原因:Attention作为一个成功的组件,一旦动了一个位置,牵一发而动全身。因此,如果想把关系与信息流分配分开,只有“掀桌子”了。
***02***
**Relation是怎么来的?**
现在开始“掀桌子”,本章节重点来讲,这个架构是怎么一点点设计出来的。
### 1.关系应该是什么样?
如果要将关系形成与信息流分配分开,第一个问题就是:**关系应该是什么样的?**
以语言举例,将一段话打成Token送入模型,模型通过学习会学到各种各样的关系。一个 Token 在不同上下文里,可能与其他 Token 构成指代、修饰、动作关联等不同关系。如果真想把关系分到精细,是很难做到的。
因此,我选了两类最基本的关系角色:Self,Exchange。
* • Self:自问,Ask self,自己跟自己的关系,即:衡量自己。
* • Exchange:互问,Ask others,自己跟其他Token的关系,即:衡量他人。
Self 与 Exchange 是互斥的两种结构角色,可以把一个 token 的关系空间先做最简单的二分。
### 2.关系如何形成关系网?
有了Self跟Exchange,下一个问题自然而然:**怎么把它们组织成一个真正的关系对象?**
吃了考研线性代数的福,对于矩阵的理解深刻了一些。我们来看一个任意矩阵 :
矩阵 天然区分对角线与非对角线:对角线对应同一位置,非对角线对应不同位置。这正好给了 Relation 一个最简单的结构划分。就有了 阵
其中,对角线承担Self,非对角线为Exchange。 表示第 个Token对第 个Token的关系。
### 3.怎么构建关系?
好, 的结构有了,那里面这些 Self 和 Exchange 的数值到底从哪里来?
这就不得不回头提到Attention了:
是两个由输入 进行投影得到的矩阵。在Attention中,被语义化为:query,key。但实际上,从数学角度看,这两个矩阵实际上仅仅是输入 的投影: 仅仅经过了两个线性变换。
而Relation要构建Self,Exchange的数值,正需要“证据”。只有将”证据“拿齐,我们才能经过“分析”得到关系。
因此,Relatio中,首先构建关系证据:
收集“证据”的方式,跟Attention一模一样,这里并没有区别。而接下来的问题是:如何将证据变为Self,Exchange。
证据是统一的,关系是不同的,我们需要一个算法,将证据 投射为两类关系: , 。由于要将 彻底分离,这里需要一对非线性函数。
通过大量的消融(23个),最终确定
其中 是Self temperature。选这两个函数的原因一方面是数值分离,一方面是局部最优。
当时做了好多消融以及测评,统一发现:
* • 不能用相同函数,用了相同函数退化到不如Attention;
* • 很喜欢开放正尾,但不喜欢开放负尾。
* • 的数值需要被限制。
至于具体原因,等到后面用Relation的分解公式去解释。
### 4.怎么让关系指导信息流?
现在关系网阵 已经被精确定义,关系被显式的拿出。接下来就是:**如何让 来指导信息流?**
在Attention中, 。我们依旧采取这个方式,让关系指导信息流:
### 5.信息本身怎么被搬运?
在Attention中,
而Relation仍然借鉴Attention的这个形式,在这里,我们先对 阵做因果掩码:
随后定义Relation的信息 及其搬运公式:
与Attention依旧相似。
### 6.怎么传递到下一层?
依然借鉴Attention,在Attention中:
而在Relation中:
没有差别。
### 7.当前公式有没有问题?
有问题的,当前矩阵 :
则进softmax后第 行为:
好了,问题出来了。Self永远只有 ,而Exchange会随着 的增大而增大。
假设一个极端情况,如果所有 Exchange relation 都差不多:
那么:
取对数:
也就是说,**哪怕单个 Exchange relation 完全没有变强,只因为候选历史 token 变多,汇聚的Exchange relation就会自然多出一个约 logi 的量。**
因此,定义带 Exchange的log 修正的关系网 阵:
其中 为逐层可学习参数。该修正相当于做一个缩放:
### 8.该章结尾
到此为止,单头的Relation已经全部推导完毕。我们将基础算子命名为:Self-Exchange Relation。
其与Attention的差别在于显式的构造关系矩阵 ,并让其指导信息流分配。
Attention:
:

***03***
**将Self-Exchange Relation推向多头**
接下来,我们将单头算子推向多头。
### 1.直接推广
首先定义head维度:
随后将关系空间和信息空间拆成 个 head:
每个 head 独立构造 Relation:
最后每个 head 输出:
### 2.特殊处理
如果直接将Relation像Attention那样直接推向多头。会导致一个问题:Relation会被头截断。举个例子:
在Attention中,特征直接按head划分,不需要一个显式的“关系对象”需要跨 head 保持一致。
但在Relation中,每个 head 都拥有自己的:,也就是自己的关系结构。
但是如果: 也是按head直接划分,也固定绑定在对应 head:
那么每个 head 看到的信息也被限制在自己的子空间。
意味着:head 1的 relation 只能搬运 head 1的 information。
由于Relation的 是每个头独立训练的,但 是按head暴力划分的,因此: 与 未必天然匹配。
因此,我们采取考研数学里面常见的正交变换Givens对 通过每对两轮的交替配对做旋转:
Givens 在 Relation 里不是一个普通正交旋转,它承担的是一个很具体的功能:解除 与 的固定绑定。
举个例子:
对于 H=8 ,两层交替配对为:
A,B分别做相邻两个head的局部混合,随后经过多层交替,最终达到全局混合 I 的效果:
偶数层进行偶数编号相邻 head 混合,奇数层切换为奇数编号相邻 head 混合。由于两种 pairing 交替出现,局部交换路径逐层扩展,最终使每个 head 的信息可以访问全局 head 信息。
### 3.总体Multi-Head Relation
因此,Multi-Head Relation的公式为:
每个head:
最终:

***04***
**一个显式的R阵,有什么意义?**
### 1.被拼出来的关系网矩阵
关系网 阵首先有着一个与Attention注意力矩阵完全不同的特点:他是被拼出来的!
他的主对角线是Self关系,而非主对角线为Exchange与修正项。这个拼出来的特点,将会在接下来给予Relation极其有趣的工程特点。
### 2.在信息传输中,显化Token关系
Relation的显式 阵,首先揭露Token竞争关系,让我们从softmax开始推导:
展开第 行:
代入 Relation 矩阵:
则归一化的分母为:
随后把所有 Exchange 项合并:
有:
到这就很干净了,将Self与Exchange项彻底分野,随后将Self项代入 :
化为sigmod形式:
此时Self 权重可以完全由 来表示。对于所有非对角项,令:
由于
因此:
此时,所有 Exchange 项的总权重由 表示。
随后,开始揭露Exchange 的内部分配。由于第 行,有:
我们首先把 Exchange 部分单独归一化,定义:
其中 表示 Exchange 内部不同 Token 的相对分配。则代回有:
则:
总公式为:
到此为止,Relation彻底将Token的关系显化:一个Token在进入信息流后,首先发问:我到底是需要Self进行自问,还是Exchange去进行互问?随后发问:如果我去进行互问,那么我应该问谁?
最有意思的一点是,Self与Exchange这两个身份,一直持续到了信息流阶段。Attention只能做同等数学的算术切割,而Relation第一次给了语义!
这个总公式将作为Relation的分解公式,随后的Flash化根据将直接来源于此。
***05***
**将Relation推向落地:Flash与Linear**
正是因为 Relation 显式存在,揭露了一个全新的计算路径去做Flash与Linear。
### 1.将分解公式应用落地:FlashRelation
我们首先看FlashAttention是怎么实现的,在标准Attention中:
FlashAttention 对一个分块 进行逐块扫描,实时更新三个变量:当前最大值 、归一化系数 、以及输出累加值 ,这些变量用于稳定计算并分块完成注意力输出:
扫描完整行之后:
FlashRelation 借鉴的正是这个逐块扫描思路,但 Relation 的 R 并不是一个普通矩阵,它已经被拆成 Self 与 Exchange,因此执行路径也发生了变化,由于:
然后把 Exchange 内部那一项定义成一个归一化历史块:
即:
由于:
有了化简公式:
于是 FlashRelation 根本没必要在线维护完整 Ri 或完整 Fi 。只需要逐块算出 Exchange 的两个东西:对数归一化常数,以及 。最后再和 Self 合并即可。
因此,整个流程为:扫描历史 Exchange:
随后与FlashAttention一样,对一个分块 进行逐块扫描,实时更新三个变量:当前最大值 、归一化系数 、以及输出累加值 :
扫完整个历史 Exchange 后,令:
然后把修正项加回来:
再做 Self–Exchange 竞争,并输出:
到此为止,FlashRelation结束。实验结果已经接近了PyTorch FlashAttention吞吐速度,至于能不能再优化,那是以后的事了。
### 2.将Relation递推进历史:Linear Relation
同样先看KIMI团队的 KDA 所采用的 gated delta-rule 思路。简化来看,其状态更新包含一个误差修正项:
先更新:
然后读出当前 key 在旧状态中的值:
再构造误差:
最后用 delta 修正状态:
即,总流程为:
而Linear Relation则不相同,先定义Self,Ask Self:
随后给定更新方向:
通过输入依赖的逐通道保留系数 ,决定历史关系状态 中哪些信息继续保留:
随后由Self开始进行主导,Ask Others:
之后得 , Answer:
最后将Self自己变为历史,Become Others:
即,总流程为:
因此跟KDA对比:
在Linear Relation里面,Self占据主导权:
这里跟KDA相比,有着三个很有意思的特点:
**1、读写顺序本身就是 Relation 语义**。当前公式是严格的 read-before-write。当前 Token 在读取历史 时,自己还没被写进去,所以 是严格历史信息;等回答 形成后,当前 Token 才变成未来 Token 的 Others。
**2、写进状态的是 ,不是。**
正是因为当前 Token 成为未来 Others 时,应该留下的是它自己的信息 ,不是把“自己 + 刚从历史读出来的东西”重新写回历史。否则历史信息会被递归回灌。
**3、Self主导读写**。KDA需要额外的参数 来控制误差修正的写入强度。Linear Relation 没有再单独引入这个变量,**因为 Relation 已经有了语义明确的 Self : ,并直接让它控制当前 Token 的读写强度。也就是让Self自己决定要读写多少。**
### 3.总结
到此为止,写了一堆,累死我了,可算把Flash跟Linear写完了。论文里实际上还做了Hybird跟Relation Cache。但由于没什么特点,几乎就是Attention换皮,就不写了。
### 4.经济账

直接用论文里面的表了,我不想再做表了。
***06***
**写到最后**
人就不能闲着。Relation从头到尾的研究,几乎都来源于每天闲的发慌。作为一条“流浪狗”,每天不干点东西难受,因此选择假期做点自己喜欢的东西玩,谁寻思“玩”出这么个东西。
至于能不能还有Relation2。我觉得还真有可能,当前Relation只是实现了Flow follows Relaiton,有没有可能出现Flow and computation follow Relation呢?当然这是后话了。小实验虽然已经有了点小趋势,但是Relation2一旦出来就真的要追SOTA,追SOTA就不是我一个人或者我们几个能hold得住的了。
***07***
**补充**
写到最后回头看发现,我有三个问题没回答:
* • 不能用相同函数,用了相同函数退化到不如Attention;
* • 很喜欢开放正尾,但不喜欢开放负尾。
* • 的数值需要被限制。
一个一个回答。
### 1.为什么 Self 和 Exchange 要用不同函数?
先把这个公式拿出来:
因此 负责的是 Self 与整个 Exchange 总权重的竞争。而 一方面进入:
即总Exchange 总权重。另一方面还决定:
也就是 Exchange 内部到底找谁,因此 根本不是同一数学角色,用同一个函数就是“找死”。
### 2.为什么 喜欢开放正尾,却不喜欢开放负尾?
在Exchange内部,满足:
所以当某个历史 Token 真正特别相关时,我们希望 时,有:
否则如果正尾被压住,比如 sigmoid:
那么真正非常强的 Exchange 也只能挤在有限区间里,强关系拉不开。
所以 Exchange 需要一个开放正尾,来保留强关系的区分能力。
但负尾不一样,如果: 也允许 。那么这个 Token 会形成极端负 relation;大量这样的项还会参与 Exchange aggregate:
这会让极端负 relation 进入 Exchange 的聚合结构,但它们并不能提供我们真正需要的强 Exchange 证据。
而 真正需要的是:有很强的历史关系时,把它突出出来;没有关系时,不需要无限惩罚。
而SiLU形状刚刚好:
这也就是为什么用SiLU。
### 3.为什么Self需要被限制
是一个单独的 Self 信号,要和整个历史Exchange总权重竞争。如果:
或者:
即一次极大的对角线数值就能把整个历史 Exchange 关掉。或者一个极小的对角线数值就能让历史Exchange霸占整个关系。所以 Self 这个角色更适合成为一个稳定、有限的信号,sigmod正正好好。
***08***
**更新(2026.8.27)**
做Relation2的过程中,对原分解总公式做了一些新的分解,发现了一些新东西:
把 代入得
随后定义聚合后的Exchange信息:
代回原公式:
等价分解:
随后如果把这个 单独拿出来,再代回我们会发现:
这就意味着实际上, 是从Self所在位置,走向Exchange聚合的方向,而 是走动幅度。这就很有意思了,这是竞争中的转化,从Self到Exchange的转化。动态更新的角度,准备放论文正文里面了。
另外一提,Relation2效果很好,通过再次“掀桌子”:把FFN接口干掉。相同的小参量下,已经能压MHA接近9%的PPL了。 阵的实际情况比想象的可怕一点:他真的能指导computation。 方向的Givens变换则给了我“掀FFN桌子”的一个良好接口。
#### 引用链接
`[1]` Is SwiGLU's Open Positive Tail Necessary? Evidence from Closed-Tail Gating with MemGLU: **
`[2]` Ask Self, Ask Others: Relation Is All You Need: **

技术交流群邀请函




△长按添加小助手
扫描二维码添加小助手微信
请备注:姓名-学校/公司-研究方向-城市
(如:小夏-浙大-大模型-杭州)
即可申请加入深度学习/机器学习等技术交流群
```
—完—
```
```
为您推荐
《跨语言大模型》最新综述
深度学习领域,你心目中 idea 最惊艳的论文是哪篇?
思考丨到底什么叫算法工程师的落地能力?
Transformer模型有多少种变体?看看这篇全面综述
从SGD到NadaMax,十种优化算法原理及实现
各种注意力机制的PyTorch实现
```

```
```
[跳转微信打开](https://wechat2rss.bestblogs.dev/link-proxy/?k=e6b673f8&r=1&u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3NjE4NjQ4MA%3D%3D%26mid%3D2247557247%26idx%3D1%26sn%3D63cbe22e31183b88c6551d919a2a3529)