【一起来学AI大模型】Transformer架构Self-Attention
Self-Attention是Transformer架构的核心创新,通过Query-Key-Value机制实现序列元素的全局交互。每个元素通过计算与其他元素的注意力分数,动态聚合上下文信息,解决了RNN/LSTM的长距离依赖和并行化问题。多头注意力机制扩展了模型的表达能力。该机制支持完全并行计算,能动态分配权重,并具有一定可解释性,为BERT、GPT等大模型奠定了基础,是处理序列数据的突破性技术。
Transformer 架构中的 Self-Attention (自注意力) 是其核心创新和强大功能的关键所在。它彻底改变了处理序列数据(如文本)的方式,克服了 RNN 和 LSTM 在处理长距离依赖和并行化方面的主要限制。
以下是 Self-Attention 机制的详细解析:
核心思想
Self-Attention 允许序列中的 每一个元素 直接与序列中的 所有其他元素(包括它自己)进行交互和“关注”,以计算该元素的新的、上下文感知的表示。它动态地决定在编码或解码当前元素时,应该赋予序列中其他元素多少“注意力”或权重。
运作步骤
-
输入表示 (Input Representation):
-
输入是一个序列的向量表示(例如,一个句子中每个词的嵌入向量),记为
X = [x1, x2, ..., xn],其中xi是第i个元素的d_model维向量。 -
这些向量通常结合了词嵌入(Word Embeddings)和位置编码(Positional Encoding),以注入序列的顺序信息。
-
-
生成 Query, Key, Value 向量:
-
对输入序列
X中的 每一个 元素xi,通过三个不同的线性变换(可学习的权重矩阵W^Q,W^K,W^V)生成三个新向量:-
Query (qi):
qi = xi * W^Q- 代表当前元素正在“询问”或“寻找”相关信息。 -
Key (ki):
ki = xi * W^K- 代表当前元素可以用来“回答”其他元素查询的“标识”或“内容摘要”。 -
Value (vi):
vi = xi * W^V- 代表当前元素实际携带的、将被聚合的“信息内容”。
-
-
这些变换将输入向量从
d_model维投影到d_k(Query/Key) 和d_v(Value) 维空间。通常d_k = d_v。
-
-
计算注意力分数 (Attention Scores):
-
为了计算第
i个元素(以其 Queryqi为代表)对第j个元素(以其 Keykj为代表)的注意力分数(相关性),计算qi和kj的点积:-
score(i, j) = qi · kj^T(^T 表示转置)
-
-
这样,为序列中的每一对位置
(i, j)都计算了一个分数。分数越高,表示元素j对理解元素i越重要。
-
-
缩放 (Scaling):
-
点积分数可能会随着向量维度
d_k的增大而变得非常大(方差增大),导致 softmax 的梯度非常小。因此,将分数除以sqrt(d_k)进行缩放,稳定训练:-
scaled_score(i, j) = score(i, j) / sqrt(d_k)
-
-
-
应用 Softmax (归一化权重):
-
对第
i个元素对应的所有j(j=1 to n) 的缩放分数应用 softmax 函数:-
alpha(i, j) = softmax(scaled_score(i, j)) = exp(scaled_score(i, j)) / sum_k(exp(scaled_score(i, k)))
-
-
这确保了:
-
所有权重
alpha(i, j)都在 0 和 1 之间。 -
对于固定的
i,所有权重alpha(i, j)的总和为 1。 -
alpha(i, j)表示在生成第i个位置的输出时,应该“关注”第j个位置的程度。
-
-
-
计算加权和输出 (Output as Weighted Sum of Values):
-
第
i个位置的 Self-Attention 输出向量zi是所有 Value 向量vj的加权和,权重就是上一步计算出的注意力权重alpha(i, j):-
zi = sum_j( alpha(i, j) * vj )
-
-
这个
zi就是元素xi的新的、上下文感知的表示。它融合了整个序列中所有与xi相关的元素(根据注意力权重)的信息。
-
矩阵形式表示
上述过程可以高效地用矩阵运算表示:
-
Q = X * W^Q(Query 矩阵) -
K = X * W^K(Key 矩阵) -
V = X * W^V(Value 矩阵) -
Attention Scores = Q * K^T -
Scaled Scores = (Q * K^T) / sqrt(d_k) -
Attention Weights (A) = softmax(Scaled Scores)(按行 softmax) -
Output (Z) = A * V
多头注意力 (Multi-Head Attention - MHA)
原始的 Self-Attention 被称为 “单头注意力”。Transformer 使用了 多头注意力 来增强模型的表达能力:
-
并行计算多个头: 将
Q,K,V通过h个不同的线性变换(h个头)投影到h个维度为d_k'(通常d_k' = d_k / h),d_k',d_v'(通常d_v' = d_v / h) 的子空间中。 -
独立计算注意力: 在每个子空间(头)中独立执行步骤 2-6 的 Self-Attention 操作,得到
h个输出矩阵Z1, Z2, ..., Zh(每个维度为n x d_v')。 -
拼接 (Concatenate): 将所有头的输出
Z1, Z2, ..., Zh沿着最后一个维度拼接起来,得到一个n x (h * d_v')维的矩阵Z_concat。 -
线性投影: 将拼接后的矩阵通过一个最终的线性变换
W^O投影回d_model维空间:-
MultiHead(Q, K, V) = Concat(Z1, Z2, ..., Zh) * W^O
-
MHA 的优势:
-
允许模型在不同的表示子空间中(例如,语法、语义、指代关系等)并行地关注不同位置的不同方面。
-
显著增强了模型的表示能力。
-
是 Transformer 性能强大的关键因素之一。
Transformer 中的应用
-
编码器 (Encoder):
-
使用 Multi-Head Self-Attention 层。每个位置的输出
zi都融合了整个输入序列的信息。 -
是真正的全局自注意力,能看到整个序列。
-
-
解码器 (Decoder):
-
第一层: Masked Multi-Head Self-Attention:
-
同样是 Self-Attention,但在计算注意力分数时引入了 掩码 (Mask)。
-
在生成目标序列的第
i个位置时,解码器只能“看到”位置1到i(以及编码器的最终输出),不能“看到”位置i+1及之后的未来信息(因为那些位置在预测时还未生成)。 -
掩码通过在 softmax 步骤之前,将未来位置
(j > i)的注意力分数设置为一个非常大的负数(如-1e9)来实现。softmax 之后,这些位置的权重就接近于 0。
-
-
第二层: Multi-Head Encoder-Decoder Attention:
-
这不是 Self-Attention。它的
Q来自解码器上一层的输出,而K和V来自编码器的最终输出。 -
这允许解码器在生成每个目标词时,关注编码器编码的整个源序列中最相关的部分。
-
-
Self-Attention 的关键优势
-
长距离依赖 (Long-Range Dependencies): 直接计算任意两个位置之间的关联,不受序列长度限制,彻底解决了 RNN/LSTM 的梯度消失/爆炸问题对长序列建模的影响。
-
高度并行化 (Massive Parallelization): 计算所有位置的 Query、Key、Value 以及所有注意力分数都可以完全并行进行(主要依赖矩阵乘法),极大地提高了训练和推理速度。
-
动态权重分配 (Dynamic Weighting): 注意力权重
alpha(i, j)是动态计算的,基于当前输入序列的具体内容。模型可以灵活地为不同的上下文分配不同的重要性。 -
可解释性 (Interpretability - 一定程度上): 分析注意力权重矩阵
A可以直观地看到模型在处理特定输入时关注了序列中的哪些部分(例如,某个词主要关注了哪些其他词)。
总结
Self-Attention 机制是 Transformer 架构的灵魂。它通过让序列中的每个元素直接关注序列中的所有其他元素(通过 Query-Key-Value 框架和点积注意力),并动态计算权重来聚合信息,实现了对序列数据高效、并行、且能有效捕捉长距离依赖关系的建模。Multi-Head Attention 进一步提升了其表达能力。Self-Attention 的成功奠定了现代大规模语言模型(如 BERT, GPT 系列)的基础。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)