分享
Transformer中的三种注意力机制
输入“/”快速插入内容
Transformer中的三种注意力机制
飞书用户2749
6月23日修改
注意力机制在我们模型中的应用
Transformer使用多头注意力机制的三种不同方式如下:
•
在“编码器-解码器注意力”层中,查询来自前一层解码器,而记忆键和值则来自编码器的输出。这使得解码器中的每个位置都能关注输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意力机制。
•
编码器包含自注意力层。在自注意力层中,所有的键、值和查询都来自同一个地方,即编码器前一层的输出。编码器中的每个位置都可以关注编码器前一层中的所有位置。
•
同样,解码器中的自注意力层允许解码器中的每个位置关注解码器中包括该位置在内的所有位置。我们需要防止解码器中的信息向左流动,以保持自回归属性。我们通过将softmax输入中对应非法连接的所有值掩盖掉(设为-∞)来实现这一点。
相信大家跟我一样,刚开始看到这段话一脸懵逼,每个字都认识,但组合起来却感觉难以理解,甚至有点“不明觉厉”的感觉。
那今天我们来说人话、敲黑板、划重点,希望通过一系列问答,让大家真正一文搞懂Transformer中的三种注意力机制。
本文将从
Self Attention、Cross Attention、Causal Attention
三个方面,带您一文搞懂
Transformer中的三种注意力机制。
(每篇文章的标准开头不能少,生活再苦再累,仪式感不能缺)
Transformer中的三种注意力机制
一、
Self Attention
疑问一:图中编码器明明写的是Multi-Head Attention,怎么就说是Self Attention?
编码器的Self Attention
先了解三个概念:Scaled Dot-Product Attention、
Self Attention、
Multi-Head Attention
Scaled Dot-Product Attention和Multi-Head Attention
Scaled Dot-Product Attention(缩放点积注意力)
:输入包括维度为dk的查询(queries)和键(keys),以及维度为dv的值(values)。我们计算查询与所有键的点积,每个点积结果都除以√dk,然后应用softmax函数,以得到注意力分数。
体现如何计算注意力分数,关注
Q、K、V
计算公式。
Self Attention(自注意力):
对同一个序列,通过缩放点积注意力计算注意力分数,最终对值向量进行加权求和,从而得到输入序列中每个位置的加权表示。
表达的是一种注意力机制,如何使用缩放点积注意力对同一个序列计算注意力分数,从而得到同一序列中每个位置的注意力权重。
Self Attention(自注意力)
Multi-Head Attention(多头注意力):
多个注意力头并行运行,每个头都会独立地计算注意力权重和输出,然后将所有头的输出拼接起来得到最终的输出。
强调的是一种实操方法,实际操作中我们并不会使用单个维度来执行单一的注意力函数,而是通过h=8个头分别计算,然后加权平均。这样为了避免单个计算的误差。
Multi-Head Attention(多头注意力)
疑问解答:
Scaled Dot-Product Attention、Self Attention、Multi-Head Attention实际上说的是同一件事,从不同维度解答如何获取同一个序列中每个位置的注意力权重。图上标注Multi-Head Attention强调需要多个头计算注意力权重。
Transformer第一个注意力(Self Attention)更严谨的描述应该为:编码器输入序列通过Multi-Head Self Attention(多头自注意力)计算注意力权重。