今天给大家分享 transformer 中的一个核心概念,自注意力机制
自注意力机制(Self-Attention Mechanism)是 Transformer 中的其核心组件之一,它使模型在处理序列数据时能够根据输入序列的各个位置相互之间的关联关系动态地为每个位置生成上下文表示。
自注意力机制使 Transformer 能够捕捉远距离的依赖关系,进而在自然语言处理、图像处理等领域大获成功。
自注意力机制的作用
自注意力机制的作用是为序列中的每个位置(例如句子中的每个词)生成一个上下文相关的表示。
每个位置都可以对序列中其他位置的信息进行加权“关注”,从而根据这些关注权重动态生成当前位置的上下文表示。
这种机制能够处理长距离依赖问题,使得模型可以捕捉到句子中任意两个词之间的关系,而不需要通过递归的方式逐层传播信息。
自注意力机制的计算步骤
1.生成查询、键、值向量
在 Transformer 中,自注意力机制的每个输入元素都会通过一个线性变换生成三个向量:查询(Query)、键(Key)和值(Value)。
其中:
-
X 是输入向量序列,大小为 ( n 为序列长度, 为嵌入维度)。
-
,, 是可训练的权重矩阵,将输入向量映射为不同的查询、键和值向量。
2. 计算注意力分数
自注意力的核心是计算查询与键之间的相似度,以确定每个位置在关注其他位置时的权重。
具体做法是将查询向量和键向量进行点积,并通过一个缩放因子归一化:
其中:
-
是查询和键的点积,表示查询与键的相似度。
-
是键向量的维度,用于缩放,避免内积值过大导致 softmax 输出的梯度过小。
3. 计算注意力权重
注意力分数通过 softmax 函数进行归一化,得到每个位置的注意力权重。
这一步确保权重和为1,使得输出能够更具稳定性,并可以看作是序列中每个位置对其他位置的依赖程度。
4. 生成上下文向量
将注意力权重应用到值向量上,计算出每个位置的上下文表示。
最终输出为所有值向量的加权和:
这样,每个位置的输出就是一个包含了整个序列上下文信息的向量表示。
下面,我们来看一个具体的示例
假设我们有一个由三个词表示的输入句子:“The cat sat”。为简单起见,每个词将有一个维度为 d=4 的嵌入向量。
我们将这些嵌入表示如下:
**步骤 1,**通过线性变换获得 Q、K 和 V
我们需要三组权重矩阵 、、 将输入嵌入转换为查询 (Q)**、**键 (K)和值 (V) 矩阵,每个矩阵的维度为 d×d。
为简单起见,我们定义:
每个词的转换如下
计算这些,我们得到
步骤2
计算注意力分数并应用 Softmax 函数 ,从而获得注意力得分
现在,我们逐行应用 softmax 函数来获得注意力权重。
**步骤3,**计算值的加权和(上下文向量)
现在,将这些注意力权重乘以 V 矩阵。
计算每一行:
多头自注意力(Multi-Head Self-Attention)
在Transformer中,自注意力机制通过多个头(Multi-Head)进行扩展,使模型能够关注不同的子空间。
具体来说,多头自注意力会重复上面的过程多次(通常为 8个或更多头),每个头在不同的查询、键和值矩阵上独立计算出一个输出,最后将所有头的输出连接起来。
其中每个头是:
通过多头自注意力,模型可以更灵活地捕捉输入序列中不同维度的关系。
class MultiHeadAttention: def __init__(self, num_heads, d_model): self.num_heads = num_heads self.d_model = d_model self.depth = d_model // num_heads # Define the layers for key, query, and value self.wq = np.random.rand(d_model, d_model) # Query self.wk = np.random.rand(d_model, d_model) # Key self.wv = np.random.rand(d_model, d_model) # Value def split_heads(self, x): # Split the input into multiple heads x = x.reshape((x.shape[0], x.shape[1], self.num_heads, self.depth)) return np.transpose(x, (0, 2, 1, 3)) def scaled_dot_product_attention(self, q, k, v): # Calculate the attention scores and apply softmax matmul_qk = np.matmul(q, k.transpose(-2, -1)) d_k = k.shape[-1] scaled_attention_logits = matmul_qk / np.sqrt(d_k) attention_weights = self.softmax(scaled_attention_logits) output = np.matmul(attention_weights, v) return output def forward(self, x): q = np.dot(x, self.wq) k = np.dot(x, self.wk) v = np.dot(x, self.wv) q = self.split_heads(q) k = self.split_heads(k) v = self.split_heads(v) attention_output = self.scaled_dot_product_attention(q, k, v) return attention_output
自注意力机制的优势
-
并行计算
自注意力可以在计算时关注整个序列,并行化效率高,相比RNN大幅提升了训练速度。
-
捕捉长距离依赖
与 RNN 相比,自注意力机制能够直接计算序列中任意两个位置的相关性,对长序列有良好的表现。
-
增强表达能力
多头机制使模型能够在不同的子空间中找到不同的依赖关系,提升了模型的表达力。
最后
—
今天的分享就到这里。如果觉得近期的文章不错,请点赞,转发安排起来。
AI大模型学习路线
如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!
扫描下方csdn官方合作二维码获取哦!
这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
100套AI大模型商业化落地方案
大模型全套视频教程
200本大模型PDF书籍
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
LLM面试题合集
大模型产品经理资源合集
大模型项目实战合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
