深化留意力机制 LLM基础模型系列

大模型技术论文始终,每个月总会新增上千篇。本专栏​ ​精选论文​ ​​重点解读,主题还是围绕着行业通常和工程量产。若在某个环节发生卡点,可以回到​ ​大模型必备声调​ ​​或许​ ​LLM面前的基础模型​ ​​新阅读。而​ ​最新科技(Mamba,xLSTM,KAN)​ ​则提供了大模型畛域最新技术跟踪。

1.自留意力Self-Attention

自留意力的重要配置是从输入序列自身生成高低文感知向量,而不是像基于RNN的编码器-解码器架构那样同时思考输入和输入。在继续往下之前,还是须要协助大家温习下之前的内容,也请各位能够仔细的了解自留意力。

在例句中,“火车准时退出车站”中有 7 个Tokens,可以获取一个 7x7 的自留意力得分矩阵。依据图中描画的自留意力得分,“火车”一词更关注“车站”一词,而不是关注其余单词。自留意力分数有助于了解给定句子中单词的高低文含意。例如,这里的“车站”一词用于火车站的高低文,而不是用于其余高低文,如加油站或公共汽车站等。

自留意力分数是经过余弦相似度计算的,即两个词向量的点积。它用于评价两个词向量之间的相关强度或比拟词向量之间的相似水平。

这些自留意力分数最后会被依照权重启动加权累加,最终输入一个向量可以了解为曾经将高低文启动编码。例如,词为“站”这个词时,与“站”亲密相关的词对总和的奉献更大(包含“站”这个词自身),而不相关的词简直不会奉献任何词。由此发生的向量作为“站”一词的新示意,并联合了周围的高低文。无了解这句话的时刻,火车站的高低文消息就被编码到最后的输入。

2.多头留意力Multi-Head Attention

在Transformer中,少量的经常使用了多头留意力的模块,它的原理和自留意力差不多。上方来解释下这个模块和自留意力机制的相关。

在刚才提到的点积留意力中,如下图所示,输入序列经过代表查问Q、键K和值V的三个矩阵启动转换而后计算自留意力。其中绿色x(2)为一个Embedding向量。

而在多头留意力的背景下,某种意义三个矩阵可以被看作是一个独自的留意力头。参与单个自留意力头的输入维度和经常使用多个留意力头之间的区别在于模型如何解决数据并从中学习。只管这两种方法都参与了模型示意数据不同特色或方面的才干,但它们的模式基本不同。

上方这张图想表白的是一个输入的Embedding可以和多套的QKV协同运算。论文上形容的是多个W变换到子空间,然而成功上普通驳回分段的模式。大文言说是将Embedding的长度切分为n段区分做运算。比如原来Embedding是512维,假如32头,那么Embedding会被切分红512/32=16维,相当于多个子空间。

例如,多头留意力机制中的每个留意力头通常上可以学习集中在输入序列的不同局部,捕捉数据中的各种方面或相关。这种多样性是多头留意力成功的关键,毕竟每一个Embedding基本上都是高维度,经过多头区分捕捉数据在各个层面的依赖和相关。

例如有的头专门捕捉感情因子,有的头专门捕捉地区特色,有的头专门捕捉人物相关等等……

多头留意力也可以更高效,特意是在并行计算方面。每个头部可以独立解决,使其十分适宜现代配件减速器,如长于并行解决的 GPU 或 TPU。简而言之,经常使用多个留意力头不只仅是为了参与模型的容量,而是为了增强其学习数据中多样特色和相关的才干。

3.交叉留意力Cross-Attention

除输入局部外,交叉留意力计算与自留意力相反。交叉留意力说白了就是Q来至一个序列,而KV来至另一个序列。这些序列都是相反维度的嵌入序列。相比之下,自留意力输入是单个嵌入序列。而交叉留意力则是其中一个序列用作Q输入,而另一个序列用作K和V输入。

读者可以细心观察上图,在传统的Transformer的架构中,自留意力机制普通在Encoder(下图左),而交叉留意力机制普通在Decoder(下图右)。

其实也很好了解,对大模型的提问输入在Encoder中经过自留意力抽取出查问的高低文消息,而后输入为K和V供应给Decoder,而Decoder一方面始终地上班发生新的Token,一方面始终地将曾经输入的序列嵌入输入Q,再次和Encoder的K和V做交叉留意力,供后续的组件吐出下个Token的概率散布。

4.因果留意力Causal-Attention

因果自留意的来源来至序列中某个位置的输入仅仅依赖于先前位置的已知输入,而不是基于未来位置。比如说Decoder,它是依照顺序发生Token,先发生的Token必需不可依赖后发生的Token。因此关于解决的每个Token,因果留意力机制屏蔽了未来的Token。所谓的未来,就是在Token之后的尚未生成的Tokens。因此原来的自留意力矩阵则成为上三角矩阵,由于有一半是不须要计算的。

例如life生成的时刻只有要计算和自己,当生成到life is的时刻,则只有要计算is和life,is和自己,如此类推……

值得一提的是,每次生成的留意力矩阵每一行都须要归一化。这里有个小小的技巧,可以将尚未生成的Token标志为-∞,而后在由softmax启动归一化。

附录:多头留意力的变换环节全景图

推导步骤1:

推导步骤2:

推导步骤3:

推导步骤4:

您可能还会对下面的文章感兴趣: