注意力机制的核心本质是什么?
flyfish
注意力机制的核心本质是表达相似性。注意力机制不仅仅停留在“相似性”的层面,它还通过学习动态的 Query、Key 和 Value 表达,在上下文中灵活地建模关系。相比于简单的相似性计算(如余弦相似),注意力机制具备更强的表示能力。
注意力机制
注意力机制是一种让模型在处理数据(如文本、图像)时,根据上下文信息动态地“关注”最相关部分的技术。其核心在于通过计算输入之间的相似性来分配权重,再通过这些权重对输入信息进行加权聚合,从而生成上下文相关的表示。
注意力机制的关键操作可以简化为矩阵运算
注意力机制的关键操作可以简化为矩阵运算,但它包含的不只是普通的矩阵乘法,还包括其他步骤。以最常见的**缩放点积注意力(Scaled Dot-Product Attention)**为例,它的核心公式是:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V
其中:
- Q Q Q 是查询向量(Query)。
- K K K 是键向量(Key)。
- V V V 是值向量(Value)。
- d k d_k dk 是向量的维度,用于缩放内积结果。
可以看到,注意力机制的第一步是计算 Q K T Q K^T QKT,这是一个矩阵乘法,它实际上是多个向量内积的结果。
矩阵乘法本质上是多个向量内积的集合
- 矩阵乘法本质上是多个向量内积的集合:
- 例如,对于矩阵 A ∈ R m × n A \in \mathbb{R}^{m \times n} A∈Rm×n 和矩阵 B ∈ R n × p B \in \mathbb{R}^{n \times p} B∈Rn×p,它们的乘积 C = A B ∈ R m × p C = AB \in \mathbb{R}^{m \times p} C=AB∈Rm×p,其中 C i j = a i ⋅ b j C_{ij} = \mathbf{a}_i \cdot \mathbf{b}_j Cij=ai⋅bj 是矩阵 A A A 的第 i i i 行向量与矩阵 B B B 的第 j j j 列向量的内积。
- 所以,矩阵乘法是多个内积操作的汇总。
向量内积可以被用作一种相似性度量
向量内积可以被用作一种相似性度量,但需要满足特定条件:
- 标准化后的内积:如果两个向量被归一化(即每个向量的模为1),内积直接等于两者夹角的余弦值( cos θ \cos\theta cosθ)。这在高维空间中被称为余弦相似性。
- 未归一化的内积:它不仅反映方向的相似性,还反映了向量模的大小。
在注意力机制中,通常会对内积进行缩放和归一化(例如通过 softmax 函数),使其更加适合表达相对相似性。
注意力机制的核心操作就是计算**查询(Query)和键(Key)之间的相似性
- 点积相似性:通过计算 Q K T Q K^T QKT,点积的结果可以看作 Query 与 Key 的余弦相似性的一个近似(如果 Q 和 K 的向量长度类似)。
- 归一化相似性:通过 softmax 函数将相似性结果归一化为概率分布,强调哪些 Key 对当前 Query 更重要。
- 加权求和:用这些相似性分数对值向量(Value)进行加权求和,得到最终的注意力输出。
注意力机制的核心表达的是Query 和 Key 的相似性,并利用这种相似性对 Value 进行加权。
注意力机制的数学推导和公式
以Scaled Dot-Product Attention为例,这是现代注意力机制的基础,也是 Transformer 的核心注意力机制。
1. 输入表示
注意力机制的输入主要包括:
- Query ( Q Q Q):查询向量,用来指定要关注的内容。
- Key ( K K K):键向量,用来表示输入信息的特征。
- Value ( V V V):值向量,存储实际的信息。
假设:
- Q ∈ R n q × d k Q \in \mathbb{R}^{n_q \times d_k} Q∈Rnq×dk( n q n_q nq 是查询向量的数量, d k d_k dk 是向量维度),
- K ∈ R n k × d k K \in \mathbb{R}^{n_k \times d_k} K∈Rnk×dk( n k n_k nk 是键向量的数量),
- V ∈ R n k × d v V \in \mathbb{R}^{n_k \times d_v} V∈Rnk×dv( d v d_v dv 是值向量的维度)。
2. 计算相似性分数
通过点积计算 Query 和 Key 的相似性:
score ( Q , K ) = Q K T \text{score}(Q, K) = Q K^T score(Q,K)=QKT
- Q K T Q K^T QKT 生成一个大小为 n q × n k n_q \times n_k nq×nk 的矩阵,其中第 i , j i, j i,j 项表示第 i i i 个 Query 和第 j j j 个 Key 的点积相似性。
为了避免点积值过大导致梯度不稳定,对其进行缩放:
scaled_score ( Q , K ) = Q K T d k \text{scaled\_score}(Q, K) = \frac{Q K^T}{\sqrt{d_k}} scaled_score(Q,K)=dkQKT
其中, d k \sqrt{d_k} dk 是缩放因子,用于平衡高维向量的数值幅度。
3. 转化为权重分布
相似性分数经过 Softmax 函数 转化为权重分布:
α i j = Softmax ( Q K T d k ) i j = exp ( ( Q K T ) i j d k ) ∑ j = 1 n k exp ( ( Q K T ) i j d k ) \alpha_{ij} = \text{Softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right)_{ij} = \frac{\exp\left(\frac{(Q K^T)_{ij}}{\sqrt{d_k}}\right)}{\sum_{j=1}^{n_k} \exp\left(\frac{(Q K^T)_{ij}}{\sqrt{d_k}}\right)} αij=Softmax(dkQKT)ij=∑j=1nkexp(dk(QKT)ij)exp(dk(QKT)ij)
- α i j \alpha_{ij} αij 是第 i i i 个 Query 对第 j j j 个 Key 的注意力权重,表示第 j j j 个 Key 对 i i i 个 Query 的重要性。
4. 加权聚合
利用注意力权重 α \alpha α 对 Value ( V V V) 进行加权求和,生成最终的输出:
Attention ( Q , K , V ) = Softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V Attention(Q,K,V)=Softmax(dkQKT)V
- 输出大小为 n q × d v n_q \times d_v nq×dv,其中每一行是针对一个 Query 的上下文感知表示。
步骤
- 计算相似性:用点积计算 Query 和 Key 的相似性分数。
- 缩放相似性:用 d k \sqrt{d_k} dk 缩放分数,避免梯度过大。
- 归一化权重:通过 Softmax 转化为权重分布,确保所有权重和为 1。
- 加权聚合:用权重对 Value 加权求和,生成上下文相关的表示。
多头注意力(Multi-Head Attention)
在 Transformer 中,注意力机制被扩展为多头注意力,以增强表示能力。
公式
假设有 h h h 个注意力头,每个头有独立的 Query、Key 和 Value 变换矩阵 W Q i , W K i , W V i W_Q^i, W_K^i, W_V^i WQi,WKi,WVi:
head i = Attention ( Q W Q i , K W K i , V W V i ) \text{head}_i = \text{Attention}(Q W_Q^i, K W_K^i, V W_V^i) headi=Attention(QWQi,KWKi,VWVi)
将 h h h 个注意力头的结果拼接并通过一个线性变换:
MultiHead ( Q , K , V ) = Concat ( head 1 , head 2 , … , head h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \text{head}_2, \ldots, \text{head}_h) W_O MultiHead(Q,K,V)=Concat(head1,head2,…,headh)WO
- W O W_O WO 是输出变换矩阵。
不同头可以关注不同的关系或模式
相似性的说明
注意力机制的核心本质是表达相似性。注意力机制不仅仅停留在“相似性”的层面,它还通过学习动态的 Query、Key 和 Value 表达,在上下文中灵活地建模关系。相比于简单的相似性计算(如余弦相似),注意力机制具备更强的表示能力。
1. 动态学习 Query、Key 和 Value 的表示
在简单的相似性计算(如余弦相似)中,我们通常直接比较两个静态向量的相似度,例如:
similarity ( u , v ) = u ⋅ v ∥ u ∥ ∥ v ∥ \text{similarity}(\mathbf{u}, \mathbf{v}) = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\| \|\mathbf{v}\|} similarity(u,v)=∥u∥∥v∥u⋅v
这里的 u \mathbf{u} u 和 v \mathbf{v} v 是固定的向量,表示能力有限。
而在注意力机制中,Query、Key 和 Value 都是通过神经网络动态生成的:
Q = X W Q , K = X W K , V = X W V Q = XW_Q, \quad K = XW_K, \quad V = XW_V Q=XWQ,K=XWK,V=XWV
- X X X 是输入序列(如词嵌入矩阵)。
- W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV 是可以学习的参数矩阵。
这种动态学习机制意味着:
- 同样的输入 X X X 在不同的上下文中,可以生成不同的 Q Q Q、 K K K、 V V V,即注意力机制会根据具体任务和输入调整相似性计算的方式。
- 这种灵活性使得注意力机制能够捕获复杂的、动态的上下文关系,而不仅仅局限于静态的相似性。
2. 引入上下文信息的灵活建模
简单相似性的局限性
简单的相似性计算通常只描述了两个向量之间的关系,缺乏上下文。例如:
- 在句子 “The cat sat on the mat” 中,词 “cat” 和 “mat” 的简单相似性很低,但在上下文中它们关系密切(“cat” 在 “mat” 上)。
- 传统的余弦相似或点积无法灵活适应不同上下文。
注意力机制的改进
注意力机制通过加权聚合(Weighted Aggregation)解决了这个问题:
- 首先,通过 Q K T QK^T QKT 计算 Query 和 Key 之间的相似性矩阵,得到每个 Query 对所有 Key 的注意力分布。
- 然后,利用相似性分数对 Value 进行加权求和,动态聚合上下文信息:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V - 这样,注意力机制不仅考虑了 Query 和 Key 的相似性,还通过 Value 的加权聚合整合了整个上下文的信息。
3. 多头注意力(Multi-Head Attention)的表达能力
多头注意力进一步增强了注意力机制的表达能力。简单来说,它允许模型从不同的“角度”看待数据:
- 每个“头”(head)使用不同的 W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV 参数生成 Query、Key 和 Value,从而专注于不同的关系特征。
- 最终将所有头的输出拼接起来,从多个视角综合建模上下文关系。
公式为:
MultiHead ( Q , K , V ) = Concat ( head 1 , … , head h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W_O MultiHead(Q,K,V)=Concat(head1,…,headh)WO
其中每个 head i \text{head}_i headi 独立计算:
head i = Attention ( Q W Q i , K W K i , V W V i ) \text{head}_i = \text{Attention}(QW_{Q_i}, KW_{K_i}, VW_{V_i}) headi=Attention(QWQi,KWKi,VWVi)
多头注意力的优点在于:
- 不同的头可以专注于不同的特征(例如句子中短期依赖和长期依赖)。
- 提高了注意力机制对复杂模式的捕获能力。
4. 注意力机制超越简单相似性的表现
以下是一些例子,展示了注意力机制如何超越简单的相似性计算:
(1) 异质关系建模
在许多任务中,输入 X X X 中的元素可能具有不同的类型和语义。例如,在机器翻译中,注意力机制需要根据上下文判断哪些单词之间的关系更重要,而这超出了简单的相似性计算。
(2) 多尺度信息整合
在自然语言处理或图像任务中,不同尺度的信息(如短句依赖和长句依赖)需要综合考虑:
- 例如在长句中,注意力机制能够捕获远距离的语义关联,而简单的内积相似无法有效处理这种情况。
(3) 异构输入的交互
注意力机制特别适合处理不同输入之间的交互关系(例如跨模态任务,如文本与图像的联合建模)。动态学习的 Q Q Q、 K K K、(V$ 使得注意力机制能够适应异构数据。
5. 注意力机制的优化与扩展
(1) 增强的相似性计算
在基础点积相似性上,有一些改进模型增强了注意力机制的表达能力,例如:
- 加性注意力(Additive Attention):将点积替换为更复杂的非线性变换。
- 交互式注意力:引入外部知识或特定模式,进一步提升相似性计算的精确性。
(2) 提高效率的变种
标准注意力机制对长序列的计算代价较高,但出现了许多变种(如稀疏注意力、低秩注意力等),在减少计算复杂度的同时保留了捕获相似性的能力。