【ShuQiHere】语言处理的两次飞跃(下):自注意力机制的未来

【ShuQiHere】

在上一篇文章中,我们探讨了Seq2Seq模型如何在序列到序列任务中取得显著的突破,但同时也面临了一些局限性,如信息压缩和长距离依赖问题。为了解决这些问题,自注意力机制应运而生。通过引入动态关注机制,自注意力极大地提升了模型的灵活性和性能,并为更复杂的模型(如Transformer)奠定了基础。在本文中,我们将深入探讨自注意力机制的工作原理,特别是其背后的矩阵运算,并通过具体的例子来详细说明这些概念。

1. 注意力机制中的矩阵表示

在深度学习模型中,输入的文本或序列通常被转换为向量或矩阵表示,使得模型能够利用矩阵运算来处理这些数据。

1.1 输入序列的向量化

假设我们有一个简单的英文句子:“The cat is on the mat.”,我们需要将这个句子转换为向量表示。通常,通过词嵌入技术(如Word2Vec或GloVe),我们可以将每个单词转换为一个向量。例如,“cat”的词向量 (\mathbf{v}_{cat}) 可以表示为一个n维向量:

[
v c a t = [ 0.1 0.3 0.5 … 0.2 ] \mathbf{v}_{cat} = \begin{bmatrix} 0.1 \\ 0.3 \\ 0.5 \\ \dots \\ 0.2 \end{bmatrix} vcat= 0.10.30.50.2
]

对句子中的每个单词进行相同的操作后,我们可以得到一个向量序列,用来表示整个句子。整个句子的向量表示可以写成一个矩阵:

[
X = [ v T h e v c a t v i s v o n v t h e v m a t ] \mathbf{X} = \begin{bmatrix} \mathbf{v}_{The} \\ \mathbf{v}_{cat} \\ \mathbf{v}_{is} \\ \mathbf{v}_{on} \\ \mathbf{v}_{the} \\ \mathbf{v}_{mat} \end{bmatrix} X= vThevcatvisvonvthevmat
]

假设每个词向量的维度为4,向量矩阵 (\mathbf{X}) 可以具体表示为:

[
X = [ 0.1 0.2 0.3 0.4 0.5 0.1 0.7 0.6 0.4 0.8 0.9 0.2 0.6 0.3 0.1 0.5 0.1 0.7 0.4 0.3 0.2 0.9 0.5 0.4 ] \mathbf{X} = \begin{bmatrix} 0.1 & 0.2 & 0.3 & 0.4 \\ 0.5 & 0.1 & 0.7 & 0.6 \\ 0.4 & 0.8 & 0.9 & 0.2 \\ 0.6 & 0.3 & 0.1 & 0.5 \\ 0.1 & 0.7 & 0.4 & 0.3 \\ 0.2 & 0.9 & 0.5 & 0.4 \end{bmatrix} X= 0.10.50.40.60.10.20.20.10.80.30.70.90.30.70.90.10.40.50.40.60.20.50.30.4
]

2. 查询、键和值的向量表示

在注意力机制中,每个输入向量(如 (\mathbf{v}_{cat}) )都会被映射成查询向量(Query)、键向量(Key)和值向量(Value)。这些向量用于计算注意力得分,并最终生成输出。

2.1 查询、键和值的计算公式

查询向量(Query)的生成公式为:

[
Q = X W Q \mathbf{Q} = \mathbf{X} \mathbf{W}^Q Q=XWQ
]

键向量(Key)的生成公式为:

[
K = X W K \mathbf{K} = \mathbf{X} \mathbf{W}^K K=XWK
]

值向量(Value)的生成公式为:

[
V = X W V \mathbf{V} = \mathbf{X} \mathbf{W}^V V=XWV
]

其中:

  • (\mathbf{X}) 是输入词向量(如 (\mathbf{v}_{cat}))。
  • (\mathbf{W}Q)、(\mathbf{W}K) 和 (\mathbf{W}^V) 是可训练的权重矩阵,用于生成查询、键和值向量。
2.2 查询、键和值的矩阵表示

假设输入序列有 (T) 个词,每个词用 (n) 维向量表示,那么输入序列可以表示为 (T \times n) 的矩阵 (\mathbf{X}):

[
X = [ v T h e v c a t v i s … v m a t ] \mathbf{X} = \begin{bmatrix} \mathbf{v}_{The} \\ \mathbf{v}_{cat} \\ \mathbf{v}_{is} \\ \dots \\ \mathbf{v}_{mat} \end{bmatrix} X= vThevcatvisvmat
]

对于权重矩阵 (\mathbf{W}^Q)(大小为 (n \times d_k)),我们可以通过矩阵乘法生成查询矩阵 (\mathbf{Q})(大小为 (T \times d_k)):

[
Q = X W Q \mathbf{Q} = \mathbf{X} \mathbf{W}^Q Q=XWQ
]

例如,如果 (\mathbf{W}^Q) 的维度为 (4 \times 3),假设其具体值为:

[
W Q = [ 0.2 0.3 0.5 0.6 0.1 0.4 0.3 0.2 0.7 0.5 0.4 0.1 ] \mathbf{W}^Q = \begin{bmatrix} 0.2 & 0.3 & 0.5 \\ 0.6 & 0.1 & 0.4 \\ 0.3 & 0.2 & 0.7 \\ 0.5 & 0.4 & 0.1 \end{bmatrix} WQ= 0.20.60.30.50.30.10.20.40.50.40.70.1
]

则查询矩阵 (\mathbf{Q}) 为:

[
$$
\mathbf{Q} = \mathbf{X} \mathbf{W}^Q = \begin{bmatrix}
0.1 & 0.2 & 0.3 & 0.4 \
0.5 & 0.1 & 0.7 & 0.6 \
0.4 & 0.8 & 0.9 & 0.2 \
0.6 & 0.3 & 0.1 & 0.5 \
0.1 & 0.7 & 0.4 & 0.3 \
0.2 & 0.9 & 0.5 & 0.4
\end{bmatrix}
\begin{bmatrix}
0.2 & 0.3 & 0.5 \
0.6 & 0.1 & 0.4 \
0.3 & 0.2 & 0.7 \
0.5 & 0.4 & 0.1
\end{bmatrix}

=

\begin{bmatrix}
0.41 & 0.27 & 0.38 \
0.73 & 0.52 & 0.83 \
0.73 & 0.43 & 0.71 \
0.64 & 0.46 & 0.69 \
0.52 & 0.25 & 0.44 \
0.73 & 0.47 & 0.71
\end{bmatrix}
$$
]

同样地,可以得到键矩阵 (\mathbf{K}) 和值矩阵 (\mathbf{V})。

3. 计算注意力得分(Attention Scores)

为了计算注意力得分,我们将查询矩阵 (\mathbf{Q}) 与键矩阵 (\mathbf{K}) 进行点积操作。这个点积表示查询向量与每个键向量之间的相似度:

[
Attention Scores = Q ⋅ K T \text{Attention Scores} = \mathbf{Q} \cdot \mathbf{K}^T Attention Scores=QKT
]

假设键矩阵 (\mathbf{K}) 为:

[
K = [ 0.2 0.1 0.7 0.6 0.9 0.4 0.3 0.8 0.5 ] \mathbf{K} = \begin{bmatrix} 0.2 & 0.1 & 0.7 \\ 0.6 & 0.9 & 0.4 \\ 0.3 & 0.8 & 0.5 \end{bmatrix} K= 0.20.60.30.10.90.80.70.40.5
]

则注意力得分为:

[
Attention Scores = Q ⋅ K T = [ 0.41 0.27 0.38 0.73 0.52 0.83 ] ⋅ [ 0.2 0.6 0.3 0.1 0.9 0.8 0.7 0.4 0.5 ] T = [ 0.41 × 0.2 + 0.27 × 0.1 + 0.38 × 0.7 0.73 × 0.6 + 0.52 × 0.9 + 0.83 × 0.4 ] = [ 0.405 0.998 ] \text{Attention Scores} = \mathbf{Q} \cdot \mathbf{K}^T = \begin{bmatrix} 0.41 & 0.27 & 0.38 \\ 0.73 & 0.52 & 0.83 \end{bmatrix} \cdot \begin{bmatrix} 0.2 & 0.6 & 0.3 \\ 0.1 & 0.9 & 0.8 \\ 0.7 & 0.4 & 0.5 \end{bmatrix}^T = \begin{bmatrix} 0.41 \times 0.2 + 0.27 \times 0.1 + 0.38 \times 0.7 \\ 0.73 \times 0.6 + 0.52 \times 0.9 + 0.83 \times 0.4 \end{bmatrix} = \begin{bmatrix} 0.405 \\ 0.998 \end{bmatrix} Attention Scores=QKT=[0.410.730.270.520.380.83] 0.20.10.70.60.90.40.30.80.5 T=[0.41×0.2+0.27×0.1+0.38×0.70.73×0.6+0.52×0.9+0.83×0.4]=[0.4050.998]
]

4. 缩放与Softmax归一化

为了防止点积结果过大导致梯度消失或爆炸,我们将其进行缩

放,并使用Softmax函数进行归一化:

[
Scaled Scores = Attention Scores d k \text{Scaled Scores} = \frac{\text{Attention Scores}}{\sqrt{d_k}} Scaled Scores=dk Attention Scores
]

假设 (d_k = 3),那么缩放后的得分为:

[
Scaled Scores = [ 0.405 0.998 ] 3 = [ 0.234 0.576 ] \text{Scaled Scores} = \frac{\begin{bmatrix} 0.405 \\ 0.998 \end{bmatrix}}{\sqrt{3}} = \begin{bmatrix} 0.234 \\ 0.576 \end{bmatrix} Scaled Scores=3 [0.4050.998]=[0.2340.576]
]

接下来,我们应用Softmax函数,得到注意力权重矩阵:

[
Attention Weights = Softmax ( Q ⋅ K T d k ) \text{Attention Weights} = \text{Softmax}\left(\frac{\mathbf{Q} \cdot \mathbf{K}^T}{\sqrt{d_k}}\right) Attention Weights=Softmax(dk QKT)
]

通过Softmax归一化后,得到的注意力权重矩阵为:

[
Attention Weights = [ 0.415 0.585 ] \text{Attention Weights} = \begin{bmatrix} 0.415 \\ 0.585 \end{bmatrix} Attention Weights=[0.4150.585]
]

5. 加权求和值向量

最后,用注意力权重矩阵对值矩阵 (\mathbf{V}) 进行加权求和,得到最终的输出:

[
Output = Attention Weights ⋅ V \text{Output} = \text{Attention Weights} \cdot \mathbf{V} Output=Attention WeightsV
]

假设值矩阵 (\mathbf{V}) 为:

[
V = [ 0.1 0.2 0.3 0.4 0.5 0.6 ] \mathbf{V} = \begin{bmatrix} 0.1 & 0.2 & 0.3 \\ 0.4 & 0.5 & 0.6 \end{bmatrix} V=[0.10.40.20.50.30.6]
]

加权求和后的输出为:

[
Output = [ 0.415 0.585 ] ⋅ [ 0.1 0.2 0.3 0.4 0.5 0.6 ] = [ 0.415 × 0.1 + 0.585 × 0.4 0.415 × 0.2 + 0.585 × 0.5 0.415 × 0.3 + 0.585 × 0.6 ] = [ 0.324 0.467 0.610 ] \text{Output} = \begin{bmatrix} 0.415 \\ 0.585 \end{bmatrix} \cdot \begin{bmatrix} 0.1 & 0.2 & 0.3 \\ 0.4 & 0.5 & 0.6 \end{bmatrix} = \begin{bmatrix} 0.415 \times 0.1 + 0.585 \times 0.4 \\ 0.415 \times 0.2 + 0.585 \times 0.5 \\ 0.415 \times 0.3 + 0.585 \times 0.6 \end{bmatrix} = \begin{bmatrix} 0.324 \\ 0.467 \\ 0.610 \end{bmatrix} Output=[0.4150.585][0.10.40.20.50.30.6]= 0.415×0.1+0.585×0.40.415×0.2+0.585×0.50.415×0.3+0.585×0.6 = 0.3240.4670.610
]

输出矩阵的大小是 (T \times d_v),其中 (d_v) 是值向量的维度。

6. 形象的理解

让我们通过书本的类比来形象地理解自注意力机制:

  • 查询(Query):问题“主角做了什么?”被表示为一个向量,它与书中的每个段落(键)进行对比。
  • 键(Key):每个段落的主题被表示为键向量,与查询向量进行比较。
  • 值(Value):段落的内容被表示为值向量。

通过计算查询与键的相似度,注意力机制决定了哪些段落是最重要的,并将注意力集中在这些段落上,从中提取出有用的信息。

7. 自注意力的优势

自注意力机制相比传统的RNN或Seq2Seq模型具有显著的优势:

  1. 并行计算:由于自注意力机制不依赖于序列顺序,可以并行处理输入序列,从而大幅提高计算效率。

  2. 长距离依赖处理:自注意力机制通过直接计算查询与键的相似度,可以更好地捕捉输入序列中的长距离依赖关系。

  3. 灵活性:自注意力机制能够根据当前查询的上下文动态调整关注的内容,从而更灵活地处理不同类型的输入。

结论

在本文中,我们深入探讨了自注意力机制中的矩阵表示及其计算过程。通过这种机制,模型能够在生成每个输出时,动态地关注输入序列中的不同部分,从而实现更灵活、更精确的处理。自注意力机制的引入,不仅解决了Seq2Seq模型的诸多问题,还为更复杂的模型(如Transformer)奠定了基础。如果你有任何问题或想进一步了解,请随时与我们交流!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShuQiHere

啊这,不好吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值