普通自注意力(Self-Attention)的工作原理主要是让模型能够关注输入序列中不同位置的信息,并根据这些信息来生成当前位置的输出。它是Transformer模型中的一个关键组件,尤其在处理序列数据(如文本、语音等)时表现出色。
以下是自注意力机制的优缺点分析:
下面我将使用一个简单的例子来一步步演示自注意力机制的计算过程。
假设我们有一个简单的输入序列,该序列包含4个单词(或标记),表示为 [w1, w2, w3, w4]
。为了简化,我们假设每个单词的嵌入向量都是2维的。
首先,将输入的序列数据(如文本序列)转换为嵌入向量(embedding vectors)表示。对于文本数据,这通常是通过一个词嵌入矩阵(word embedding matrix)来实现的,该矩阵将每个单词映射到一个高维的向量空间。
假设嵌入后的向量如下(这里只是示例值):
w1 = [1, 0]
w2 = [0, 1]
w3 = [1, 1]
w4 = [0, 0]
首先,将输入的序列数据(如文本序列)转换为嵌入向量(embedding vectors)表示。对于文本数据,这通常是通过一个词嵌入矩阵(word embedding matrix)来实现的,该矩阵将每个单词映射到一个高维的向量空间。
在实际应用中,我们需要添加位置编码,但在此示例中为了简化,我们省略这一步骤。
对于序列中的每个位置,使用三个不同的线性变换(即三个不同的权重矩阵)来生成查询(Q)、键(K)和值(V)向量。这些变换通常是全连接层(或称为线性层)实现的,可以将嵌入向量(或嵌入向量与位置编码的和)转换为不同的维度空间。 对于输入序列中的每个位置 (i),通过线性变换得到查询(Query)、键(Key)和值(Value)的向量表示:
其中,(X_i) 是输入序列中第 (i) 个位置的嵌入向量(或包含位置编码的嵌入向量),(W^Q), (W^K), (W^V) 是可学习的权重矩阵。
这里我们假设线性变换的权重矩阵是固定的,并使用相同的权重矩阵来生成Q、K和V(在实际情况中,Q、K和V通常有不同的权重矩阵)。
假设权重矩阵 W_q = W_k = W_v = [[1, 0], [0, 1]]
(同样,这只是一个示例),则:
Q1 = W_q * w1 = [1, 0]
Q2 = W_q * w2 = [0, 1]
Q3 = W_q * w3 = [1, 1]
Q4 = W_q * w4 = [0, 0]
K1 = W_k * w1 = [1, 0]
K2 = W_k * w2 = [0, 1]
K3 = W_k * w3 = [1, 1]
K4 = W_k * w4 = [0, 0]
V1 = W_v * w1 = [1, 0]
V2 = W_v * w2 = [0, 1]
V3 = W_v * w3 = [1, 1]
V4 = W_v * w4 = [0, 0]
(注意:在实际应用中,Q、K和V通常具有不同的维度,但在这里为了简化,我们假设它们与嵌入向量的维度相同。)
对于每个位置 (i),计算其查询向量 (Q_i) 与所有位置 (j) 的键向量 (K_j) 的点积(dot product),并除以一个缩放因子 (\sqrt{d_k})((d_k) 是键向量的维度,用于防止梯度消失),得到注意力得分。这些得分表示了当前位置与其他位置之间的相关性:
使用点积来计算注意力分数,并除以 (\sqrt{d_k})(在这里 (d_k = 2)):
Score(Q1, K1) = Q1 · K1 / sqrt(2) = 1
Score(Q1, K2) = Q1 · K2 / sqrt(2) = 0
Score(Q1, K3) = Q1 · K3 / sqrt(2) = 0.707
Score(Q1, K4) = Q1 · K4 / sqrt(2) = 0
... (类似地计算其他Q和K的点积)
将注意力得分输入到softmax函数中,得到注意力权重。softmax函数将原始得分转换为概率分布,使得所有位置的注意力权重之和为1。
其中,(n) 是序列的长度。 下面简化计算,将注意力分数转换为注意力权重:
Weight(Q1, K1) = softmax([1, 0, 0.707, 0]) = ... (具体值取决于softmax函数)
... (类似地计算其他权重)
使用注意力权重对值向量进行加权求和,得到每个位置的输出表示。这个过程也被称为上下文向量(Context Vector)的计算,因为它包含了整个序列的上下文信息。
使用注意力权重对值向量进行加权求和:
Output1 = Weight(Q1, K1) * V1 + Weight(Q1, K2) * V2 + ...
... (类似地计算其他位置的输出)
在实际应用中,会并行进行多个“头”的自注意力计算,并将结果拼接起来。但在此示例中,我们省略了这一步骤。
在实际应用中,还会将自注意力层的输出与原始输入相加,并进行层归一化。但在此示例中,我们省略了这一步骤。
最后,还会将自注意力层的输出传递给一个前馈神经网络进行进一步处理。但在此示例中,我们省略了这一步骤。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有