一文搞懂注意力机制(Pytorch)
前言
注意力机制模仿人类视觉的聚焦特性,允许模型在处理数据时动态分配权重,重点关注输入中的重要部分。其目的是为了让AI模型具备像人类一样“抓重点”的能力,这样AI在处理信息时也会自动分配“注意力权重”,强化关键特征,弱化次要信息。

一、注意力权重
权重矩阵(Wq、Wk、Wv)是什么?权重矩阵(Wq、Wk、Wv)是可训练的参数矩阵,通过线性变换将输入数据映射到Q、K、V向量空间。
对于输入嵌入矩阵 X,通过三个独立矩阵进行线性变换:Q = X*Wq,K = X*Wk,V=X*Wv。其中权重矩阵权重矩阵(Wq、Wk、Wv)是可训练的参数,模型通过训练,可以学习到如何从输入数据中提取出对任务有用的特征,并将其映射到Q、K、V向量中。
在注意力机制中使用三个独立的线性连接层(self.query、self.key、self.value)将输入序列分别投影到查询(Query)、键(Key)和值(Value)三个不同的特征空间,从而捕捉输入的不同语义角色,并支持注意力权重的动态计算。
import torch
import torch.nn as nn
import torch.nn.functional as F
class AttentionLayer(nn.Module):
def __init__(self, input_dim):
super().__init__()
self.query = nn.Linear(input_dim, input_dim)
self.key = nn.Linear(input_dim, input_dim)
self.value = nn.Linear(input_dim, input_dim)
def forward(self, x):
Q = self.query(x) # (batch_size, seq_len, dim)
K = self.key(x) # (batch_size, seq_len, dim)
V = self.value(x) # (batch_size, seq_len, dim)
scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(Q.size(-1)))
weights = F.softmax(scores, dim=-1)
output = torch.matmul(weights, V)
return output

二、注意力分数
如何计算注意力分数?通过可学习的权重矩阵将输入映射为查询(Query)、键(Key)、值(Value),然后计算Query与Key的点积得到未归一化的注意力分数,再进行缩放处理以稳定梯度,最后通过Softmax函数归一化为概率分布。

1、生成查询(Query)、键(Key)、值(Value)
通过可学习的权重矩阵(Wq、Wk、Wv)将输入向量映射到三个不同的空间:
- Query:表示当前需要匹配的目标特征(如翻译任务中的目标词)
- Key:表示被匹配的源特征(如翻译任务中的源语言词)
- Value:实际携带信息的内容向量(与Key同源)
# 通过线性层生成Q/K/V
Q = torch.matmul(inputs, W_Q) # (batch_size, seq_len, d_k)
K = torch.matmul(inputs, W_K) # (batch_size, seq_len, d_k)
V = torch.matmul(inputs, W_V) # (batch_size, seq_len, d_v)
2、计算相似度分数:
通过点积(Dot-Product),得到未归一化的注意力分数,来衡量Query与Key的关联性。Q、K的点积值越大,表示两者的相关性越强。
# (batch_size, seq_len_q, seq_len_k)
scores = torch.matmul(Q, K.transpose(-2, -1))
3、缩放处理(Scaling)
为避免Q、K的点积值过大导致梯度不稳定,需除以向量维度的平方根进行缩放。
scaled_scores = scores / (K.size(-1) ** 0.5)
4、归一化为概率分布
使用Softmax函数将分数转换为概率分布,确保所有权重和为1。
attention_weights = F.softmax(scaled_scores, dim=-1)

资料分享
为了方便大家学习,我整理了一份100G人工智能学习资料(如图)
包含数学与Python编程基础、深度学习+机器学习入门到实战,计算机视觉+自然语言处理+大模型资料合集,不仅有配套教程讲义还有对应源码数据集,更有零基础入门学习路线,不论你处于什么阶段,这份资料都能帮助你更好地入门到进阶。

需要的兄弟可以按照这个图的方式免费获取

更多推荐
所有评论(0)