大家好,我是微学AI,今天给大介绍一下人工智能基础部分25-一篇文章将透注意力机制(Attention)与自注意力机制(self-Attention),帮助大家加深印象。注意力机制(Attention)与自注意力机制(self-Attention)都是在深度学习模型中用于提升模型性能的技术,它广泛地应用于计算机视觉、自然语言处理等深度学习任务,它们之间的主要区别在于作用的对象和场景。
文章目录
- 一、注意力机制的起源与发展
- Attention的起源
- self-Attention的起源
- 二、注意力机制与自注意力机制的区别
- 注意力机制
- 自注意力机制
- Attention与self-Attention的形象例子
- 三、自注意力机制是怎么实现的
- 自注意力机制的基本步骤
- 实现自注意力机制的Python代码
- 四、注意力机制在哪些领域中有应用
- 自然语言处理
- 计算机视觉
- 语音识别
- 数据预测
一、注意力机制的起源与发展
Attention的起源
注意力机制起源于上世纪80年代,最初主要应用于计算机视觉领域,用于解决目标检测和识别问题。在自然语言处理领域,注意力机制的发展可以追溯到2014年,Bahdanau等人在他们的论文《Neural Machine Translation by Jointly Learning to Align and Translate》中首次提出了一种基于注意力机制的神经机器翻译模型4。
随着深度学习的快速发展,注意力机制成为了自然语言处理领域的核心技术之一。许多最先进的模型,如BERT、GPT等,都使用了注意力机制来实现对输入序列的建模和表示学习。这些模型在各种自然语言处理任务上取得了显著的成果,并且成为了该领域的重要里程碑。
self-Attention的起源
自注意力机制最早是在2017年被提出,并在被广泛应用于Transformer模型中,成为了自然语言处理领域的重要突破之一。自注意力机制的核心思想是将输入序列中的每个元素都看作是查询、键和值,通过计算它们之间的相似度来确定每个元素对于其他元素的重要性。
当时Bahdanau等人提出了一种基于注意力机制的神经机器翻译模型。其中自注意力机制被广泛应用于编码器和解码器中。这个模型在机器翻译、文本生成和语言理解等任务中都取得了非常好的效果,成为了自然语言处理领域的重要突破之一[2]。
注意力机制和自注意力机制都是深度学习领域的重要创新,它们通过动态地关注输入序列中的重要部分,提高了模型的性能和效率,并且在自然语言处理、计算机视觉等多个领域都有广泛的应用。
二、注意力机制与自注意力机制的区别
注意力机制和自注意力机制都是在深度学习模型中用于提升模型性能的技术,它们的主要区别在于作用的对象和场景。
注意力机制
注意力机制是一种允许模型在处理输入时,对不同的部分赋予不同权重的机制。例如,在处理一个句子时,模型可能会对一些关键词赋予更高的权重,以使模型更加关注这些部分。
自注意力机制
自注意力机制则是一种特殊的注意力机制,它是在同一个输入中,根据不同位置的重要性赋予不同的权重。例如,在一个句子中,模型可能会根据不同位置的关键词赋予不同的权重,以更好地捕捉输入中的关键信息。
Attention与self-Attention的形象例子
注意力机制就像是聚会上的一个主持人,他/她会在不同的时间点引导大家的注意力到不同的客人或活动上。比如,当宣布晚餐开始时,主持会将大家的注意力引向餐桌;当进行游戏环节时,又会让大家的注意力集中在正在游戏的客人身上。主持人的注意力是选择性的,每次只关注聚会中的一个特定部分。
自注意力机制则像是聚会上的一个互动游戏,比如“真心话大冒险”,在这个游戏中,每个人都需要轮流分享自己的故事或回答问题,而其他所有人都在认真倾听并参与互动。在这个过程中,每个人都在关注其他人说的内容,并根据这些内容来更新自己对整个聚会的理解和感受。每个参与者都在同时关注所有人,而不是只听主持人的引导。
三、自注意力机制是怎么实现的
自注意力机制(Self-Attention Mechanism)是一种特殊的注意力机制,它是在同一个输入中,根据不同位置的重要性赋予不同的权重。例如,在一个句子中,模型可能会根据不同位置的关键词赋予不同的权重,以更好地捕捉输入中的关键信息。
自注意力机制的基本步骤
-
获取输入特征:给定输入特征 a 1 , a 2 , . . . , a n a^1, a^2, ..., a^n a1,a2,...,an,其中 n n n 是输入的长度。
-
计算查询(Query)、键(Key)和值(Value):将输入特征 I I I 乘以三个矩阵 W q W^q Wq、 W k W^k Wk 和 W v W^v Wv,得到查询 Q Q Q、键 K K K 和值 V V V 三个矩阵。
-
计算注意力矩阵:使用查询 Q Q Q 和键 K K K 的乘积得到注意力矩阵 A A A,然后进行归一化得到 A ^ \hat{A} A^。
-
计算最终输出:将归一化后的注意力矩阵 A ^ \hat{A} A^ 乘以值 V V V,得到最终的输出特征 O O O。
此外,还有一种更高级的形式叫做多头自注意力机制(Multi-Head Self-Attention Mechanism)。在这种机制中,每个输入特征 a i a^i ai都会被分成多个子向量,每个子向量都会被赋予不同的权重,从而能够从不同的角度捕捉输入中的信息。这种机制通常比单头自注意力机制效果更好,因为它可以捕获更多的信息维度。
实现自注意力机制的Python代码
import torch.nn as nn
import torch
class SelfAttention(nn.Module):
def __init__(self, d_in, d_out_kq, d_out_v):
super().__init__()
self.d_out_kq = d_out_kq
self.W_query = nn.Parameter(torch.rand(d_in, d_out_kq))
self.W_key = nn.Parameter(torch.rand(d_in, d_out_kq))
self.W_value = nn.Parameter(torch.rand(d_in, d_out_v))
def forward(self, x):
keys = x @ self.W_key
queries = x @ self.W_query
values = x @ self.W_value
attn_scores = queries @ keys.T # unnormalized attention weights
attn_weights = torch.softmax(attn_scores / self.d_out_kq**0.5, dim=-1)
context_vec = attn_weights @ values
return context_vec
这段代码首先定义了一个名为
S
e
l
f
A
t
t
e
n
t
i
o
n
SelfAttention
SelfAttention 的模块,然后在
f
o
r
w
a
r
d
forward
forward方法中实现了自注意力机制的过程。在这个过程中,使用了 PyTorch 的线性层
n
n
.
L
i
n
e
a
r
nn.Linear
nn.Linear 来定义查询、键和值的映射矩阵,并使用 PyTorch 的广播操作 @
来进行矩阵乘法运算。
四、注意力机制在哪些领域中有应用
自注意力机制在多个领域中都有应用,以下是几个主要的应用领域:
自然语言处理
自注意力机制在自然语言处理领域中有着广泛的应用,例如机器翻译、文本分类、情感分析等任务。基于自注意力机制的Transformer模型已经成为NLP领域的标配架构之一[4]。
计算机视觉
自注意力机制也在计算机视觉领域得到了广泛的应用,例如图像分类、目标检测、图像生成等任务。通过引入自注意力机制,可以有效地捕捉图像中的全局上下文信息[4]。
语音识别
自注意力机制还被应用于语音识别领域,例如自注意力循环神经网络是一种结合了自注意力机制和循环神经网络的序列建模模型,它在语音识别、时间序列分析等领域有重要的应用[2]。
数据预测
自注意力机制也被用于数据预测领域,例如基于自注意力机制的序列建模算法可以用于学习源语言和目标语言之间的关联性,实现了对句子级别的翻译建模,为机器翻译任务提供了更好的基础[2]。