自注意力(self-attention)

注意力机制通过Q、K、V三个概念来工作,其中Q代表查询,K代表键,V代表值。权重矩阵Wq、Wk、Wv用于处理输入向量。点积用于计算Q和K的关联度,Soft-max激活函数用于规范化注意力权重。最后,这些权重用于加权输入特征,形成输出。

小trick:注意力中最主要的是有q,k,v三个概念;并且对于普通的自注意力来说要求的就是Wq,Wk,Wv三个可学习参数,对于多头注意力就是有多组这种参数。

q相当于自己,k相当于别人,v相当于知道与别人关系的自己;结果是权重矩阵

关于提特征:输入向量和对应的权重矩阵进行点积,类似于卷积操作中,矩阵和卷积核进行点积,因此,相类似,是一种提取特征的过程。

对于自注意力来说,其输入是一个token,是一维向量,一维向量和权重矩阵进行点积;即使是彩色图像(3维),其对应的也是一个token(vector);

在注意力机制中,输入可以是一维向量,也可以是多维特征图。对于输入特征图,注意力机制通常会先将其压缩成一维向量,再进行权重计算,最终将权重应用到输入特征图上。因此,可以说在注意力机制中输入可以是一维向量,也可以是多维特征图,而输出通常是权重矩阵,用于加权输入特征图的不同通道或空间位置的特征

注意力机制的权重计算是通过输入的特征图(可以是一维向量或多维特征图)中每个通道或空间位置的信息来计算的,因此可以说是向量内各个元素之间的关系。在计算注意力权重时,通常需要先对输入特征图中的每个通道或空间位置进行一定的变换(如全连接层或卷积层),得到一个向量表示该通道或位置的信息然后,这些向量通过一定的计算方式(如点积、加权和等)生成注意力权重,用于加权输入特征图的不同通道或空间位置的特征。因此,可以说注意力机制的权重计算是基于向量内各个元素之间的关系。

在注意力机制的运算中,通常不会显式地改变特征图的大小或维度。注意力机制通常是在原始特征图上计算权重,然后将这些权重应用于特征图中的每个位置或通道。这些权重本质上是一个与特征图大小和维度相同的张量,所以它们不会改变特征图的大小或维度。

在某些情况下,注意力机制可能会使用类似于卷积操作的方法来计算权重,这种操作可能会改变特征图的大小或维度。例如,Self-Attention机制就可以通过矩阵乘法来计算注意力权重,这可能会将一个维度较高的特征图转化为另一个维度较高的特征图。然而,这种情况并不常见,因为通常在应用注意力机制时,我们只是在原始特征图上计算注意力权重,并将它们应用于相同大小和维度的特征图上。

  • 对于当前的输入向量,我们称之为 query,它对应有 Wq 这个权重矩阵,query 的值为权重矩阵乘以输入向量,也就是 qi=Wq·ai 。
  • 而 query 外的其他的输入向量,则被被成为 key,其对应有 Wk 这个权重向量,key 的值为权重矩阵乘以这个其它输入向量,也就是 ki=Wk·aj(j可能等于i)

权重

采用点积(Dot-product)的方式,比如说 query1 和 key2 的关联度,就为二者的点积:α1,2=q1·k2

点积结果越大,两者关系越密切。

得出所有的 αi,j 之后,这些数需要通过激活函数比如 Soft-max 函数,输出激活后的 α',也就是我们需要的注意力权重。这里的激活函数使用的是 Soft-max,目的是做 Normalization。至于为什么使用 soft-max 并没有定论,也可以使用别的激活函数,比如 ReLU。

vi ,它的计算方式也和 query 或 key 的计算很相似,它也有属于自己的权重矩阵 Wv ,所以计算方式为: vi=Wv·ai

b1 是加全求和,每也就是个注意力权重 α1,j′ 乘以对应的 vi ,计算公式为:

b1=∑iα1,i′vi=α1,1′v1+α1,2′v2+...+α1,4′v4

关于关系的计算是可以并行处理的 

参考:Self-attention 自注意力机制讲解 李宏毅版 v.s 吴恩达版 - 知乎

自注意力机制(Self-Attention Mechanism)是深度学习中的重要技术,广泛应用于自然语言处理、计算机视觉等领域,在Transformer模型中发挥核心作用。其关键思想是通过计算输入序列中每个元素与其他元素的相关性,赋予每个元素不同的权重,以此捕捉全局信息和长距离依赖 [^1]。 也有学者认为自注意力的本质是加权和。经过自注意力处理,输入序列中的元素能将全局语义考虑在内,方便后续通过前馈网络进行进一步处理 [^2]。 自注意力机制与RNN机制存在区别。在RNN中,后面的输出值很难考虑到第一个输入(虽然双向RNN或改进的RNN如LSTM可以实现),而自注意力机制很容易实现这一点 [^4]。 只要设置合适的参数,Self-attention可以实现和CNN一样的功能,且比CNN更加灵活。不过,更灵活的模型需要更多的数据,否则容易过拟合,而有限制的模型在数据量小的时候可能也不会过拟合 [^3]。 以下是一个简单的自注意力机制的Python伪代码示例: ```python import torch import torch.nn.functional as F def self_attention(inputs, d_k): # 计算Q, K, V queries = torch.matmul(inputs, torch.randn(inputs.size(-1), d_k)) keys = torch.matmul(inputs, torch.randn(inputs.size(-1), d_k)) values = torch.matmul(inputs, torch.randn(inputs.size(-1), d_k)) # 计算注意力分数 scores = torch.matmul(queries, keys.transpose(-2, -1)) / (d_k ** 0.5) # 计算注意力权重 attention_weights = F.softmax(scores, dim=-1) # 计算输出 output = torch.matmul(attention_weights, values) return output # 示例输入 inputs = torch.randn(3, 5, 10) # 输入序列,batch_size=3, 序列长度=5, 特征维度=10 d_k = 8 # 键值对的维度 output = self_attention(inputs, d_k) print(output.shape) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值