1:自注意力机制的结构是什么?
答:输入是一个序列,初始化三个权重矩阵;对于序列中的每个元素,分别经过这些权重矩阵生成Q K V,然后Q与序列中的所有元素的K进行点积乘法,得到当前元素与序列中每个元素的注意力得分,这样得到了所有元素关于序列中所有元素的注意力得分;再对每个元素与序列中元素的得分进行softmax归一化,使得分数之和为1,得到注意力权重;再与序列中元素的V相乘并累加,即加权求和,得到最终的输出矩阵。
对于缩放点积注意力,还需要对注意力得分除以根号下K的维度,这样是为了确保点积的方差在不考虑向量长度的情况下仍然是1。
自注意力机制是一种关键的神经网络结构,它在处理序列数据时能够动态地关注序列中不同部分的信息。自注意力的工作流程可以概括为以下几个步骤:
初始化权重矩阵:模型首先初始化三个权重矩阵,用于将输入序列的每个元素映射到查询(Q)、键(K)和值(V)空间。这一步骤是为了创建多个表示,分别捕获输入元素在不同角色和上下文中的信息。
计算注意力得分:对于序列中的每个元素,模型计算其查询(Q)与序列中所有元素的键(K)的点积,得到一个注意力得分矩阵。这个得分矩阵表达了序列中每个元素对其他元素的相对重要性或关联度。
缩放点积注意力:为了防止点积运算在高维空间时导致的梯度消失问题,模型将注意力得分矩阵除以键(K)向量维度的平方根。这个缩放步骤有助于控制得分的分布,使其更适合后续的softmax操作。
应用softmax函数:接下来,模型对每个元素的注意力得分应用softmax函数进行归一化,使得每个元素对序列中所有元素的注意力得分之和为1。这一步骤产生了注意力权重,反映了在构建输出时,每个元素应当赋予序列中其他元素多大的重视。
加权求和:最后,模型使用注意力权重对值(V)进行加权求和,为序列中的每个元素生成一个加权的输出表示。这个输出矩阵综合了整个序列的信息,其中每个元素的表示都受到了序列中其他元素的动态影响。
通过上述步骤,自注意力机制使得模型能够在处理每个序列元素时,考虑到序列中的所有元素,从而捕捉它们之间的复杂关系。这种机制是Transformer架构的核心,广泛应用于自然语言处理和其他序列建模任务中,展现了卓越的性能和灵活性。
手写自注意力机制,不考虑batch_size
import torch
import torch.nn as nn
import numpy as np
class self_attention(nn.Module):
def __init__(self,input_dim, output_dim):
super(self_attention, self).__init__()
self.input_dim = input_dim
self.output_dim = output_dim
# 初始化权重矩阵
self.w_q = nn.Linear(input_dim, output_dim)
self.w_k = nn.Linear(input_dim, output_dim)
self.w_v = nn.Linear(input_dim, output_dim)
# 初始化softmax
self.softmax = nn.Softmax(dim=-1)
def forward(self, x):
# 计算Q K V
Q = self.w_q(x)
K = self.w_k(x)
V = self.w_v(x)
标签:知识点,元素,dim,self,transfomer,得分,注意力,序列,梳理
From: https://blog.csdn.net/qq_43814415/article/details/136967324