一、概述
RNN、Self-attention和Linear Attention都是用于seq2seq的技术,输入一串向量,输出另一串融合了所有输入向量的信息的向量。Transformer的出现使得Self-attention取代了RNN,Mamba这一类模型的出现又使得Linear Attention成为一个研究热点。而Linear Attention可以看作特殊的RNN或Self-attention.
注:本文中的Self-attention都指Masked Self-attention.
二、RNN
RNN(循环神经网络) 是在Transformer提出Self-attention Layer之前最常用的技术,它通过将输入一个一个进行处理来传递融合的信息。如图所示,H代表当前时间的Hidden State,每次先根据前一个时间点的Hidden State和当前输入生成新的Hidden State,再由这个新的Hidden State生成输出,重复下去。
RNN过程
另外fA, fB, fC这三个函数是可以变化的,让他们随着x而变化效果会好很多。
改进的RNN
这其实和AI-Agent的记忆功能很相似,每次有新的记忆 (输入) 时通过Write模组 (fB函数) 提取出需要写入的信息,并通过Reflection模组 (fA函数) 从过去的Memory (Hidden State) 中提取与当前输入相关的信息,最后再由Read模组 (fC函数) 从新的Memory (Hidden State) 中读取需要的信息。
RNN与AI Agent‘s Memory的对比
二、Self-attention
Self-attention相比RNN最大的优势就是训练时可以并行计算,因此它的训练效率要高很多。但是在推理的时候由于需要读取前面所有的向量来获取信息,所以它所需要的内存和计算量会随序列长度的增加而增加,RNN就不会,因为前面的信息都在Hidden State里面。
Self-attention
随着现在对序列长度的要求越来越高,特别是多模态数据的处理,Self-attention的缺点越来越凸显,于是人们开始怀念起RNN,开始思考RNN是否真的不能并行,然后就出现了Linear Attention.
三、Linear Attention
首先看RNN展开后的式子,可以发现其无法并行的原因是由于要一步步调用fA.
RNN展开式
那么只要把fA给去掉,H就可以并行计算了。
去掉fA后的RNN展开式
假设H是一个 d*d 的矩阵,让我们换一种写法,令fB(x) = v·k,fC(H) = H·q,其中q = Wq·x,v = Wv·x,k = Wk·x,再写出y的式子,会发现它和Self-attention很像。
换变量后的式子
整理一下,令k·q = α,就可以看出这就是Self-attention去掉了softmax,而这就是Linear Attention.
Linear Attention式子
因此,Linear Attention在训练的时候可以当作Self-attention,原因是RNN去掉fA后变得可并行计算了,提高了训练效率;在推理的时候可以当作RNN,原因是Self-attention每次把H存下来,下次计算H时直接使用Ht = (Ht-1 + fB(x))·q来算,不需要再读取前面的输入,并且没有softmax,不用存储前面所有的α,避免了内存占用随序列变长而增大。
Linear Attention的训练与推理
但是正因为少了softmax,Linear Attention的效果不如Self-attention,因为它存储的重要性都是绝对的,而实际上一个事件的重要性应该是相对的。
softmax的作用
所以要改进Linear Attention就得让它学会遗忘。常见的方法有:
1)通过乘上一个固定的小于1的γ来逐渐遗忘,但是这样会导致以前的重要的事件丢失;
2) 通过乘上变化的γ来选择性的遗忘,但是这样还是太简单了;
3)通过乘以一个矩阵G来选择哪些记忆需要保留,哪些需要遗忘,哪些需要减弱;
四、Mamba
Mamba采用了优化的Linear Attention,通过乘以一个复杂的G来选择记忆。
各种模型的G矩阵
Linear Attention总体不如Self-attention,而Mamba是第一个在效果上打败Transformer的Linear Attention架构,并且由于Linear Attention在推理速度方面的优势,Mamba的推理速度也远超Transformer.
模型能力图
推理速度图