【深度学习】Self-Attention 原理与代码实现

article/2025/10/14 22:56:27

1.Self-Attention 结构

        在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的。

2. Q, K, V 的计算

        Self-Attention 的输入用矩阵X进行表示,使用线性变阵矩阵W_{q}W_{k}W_{k}经过计算得到QKV 计算如下图所示,注意 X, Q, K, V 的每一行都表示一个单词。

Q=Linear(X_{Embedding} )=X_{Embedding} *W_Q

K=Linear(K_{Embedding} )=K_{Embedding} *W_K

V=Linear(V_{Embedding} )=V_{Embedding} *W_V

3.Self-Attention 的计算

3.1 计算公式

        得到矩阵 Q, K, V之后就可以计算 Self-Attention 的值了,计算的公式如下:

3.2 计算相关系数 

        公式中计算矩阵QK每一行向量的内积,为了防止内积过大,因此除以d_{k}的平方根。Q*K^{T}后,得到的矩阵行列数都为 nn 为句子单词数,这个矩阵可以表示单词之间的 attention 强度。

        得到 Q* K^{T}之后,使用Softmax对矩阵的每一行都进行归一化,计算当前单词相对于其他单词的相关系数(attention值)。

3.3 相关系数相乘

        图中 Softmax 矩阵的第 1 行表示单词 1 与其他所有单词的 attention 系数,最终单词 1 的输出Z_{1}等于所有单词的v值根据 attention 系数相乘后加在一起得到,如下图所示:

3.4 self-attention的输出        

        得到 Softmax 矩阵之后可以和V相乘,得到最终的输出Z

 4.self-attention的代码实现

from math import sqrtimport torch
import torch.nn as nnclass SelfAttention(nn.Module):def __init__(self, dim_q, dim_k, dim_v):super(SelfAttention, self).__init__()self.dim_q = dim_qself.dim_k = dim_kself.dim_v = dim_v#定义线性变换函数self.linear_q = nn.Linear(dim_q, dim_k, bias=False)self.linear_k = nn.Linear(dim_q, dim_k, bias=False)self.linear_v = nn.Linear(dim_q, dim_v, bias=False)self._norm_fact = 1 / sqrt(dim_k)def forward(self, x):# x: batch, n, dim_q#根据文本获得相应的维度batch, n, dim_q = x.shapeassert dim_q == self.dim_qq = self.linear_q(x)  # batch, n, dim_kk = self.linear_k(x)  # batch, n, dim_kv = self.linear_v(x)  # batch, n, dim_v#q*k的转置 并*开根号后的dkdist = torch.bmm(q, k.transpose(1, 2)) * self._norm_fact  # batch, n, n#归一化获得attention的相关系数dist = torch.softmax(dist, dim=-1)  # batch, n, n#attention系数和v相乘,获得最终的得分att = torch.bmm(dist, v)return att

图reference:Transformer模型详解(图解最完整版) - 知乎 (zhihu.com)


http://chatgpt.dhexx.cn/article/YOfRm9tL.shtml

相关文章

Self -Attention、Multi-Head Attention、Cross-Attention

Self -Attention Transformer结构图 上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的,可以看到 Encoder block 包含一…

Attention Rollout

问题陈述 从图1a中的原始attention可以看出,只有在最开始的几层,不同位置的attention模式有一些区别,但是更高层中的attention权重更加一致。这表示随着模型层数的增加,嵌入的内容变得更加情境化,可能都带有类似的信息…

Attention可视化

Attention matrix: https://github.com/rockingdingo/deepnlp/blob/r0.1.6/deepnlp/textsum/eval.py plot_attention(data, X_labelNone, Y_labelNone)函数 #!/usr/bin/python # -*- coding:utf-8 -*-""" Evaluation Method for summarization tas…

Attention机制

文章目录 一、Attention机制是什么?二、推荐论文与链接三、self-attention 一、Attention机制是什么? Attention机制最早在视觉领域提出,九几年就被提出来的思想,真正火起来应该算是2014年Google Mind发表了《Recurrent Models o…

Attention详解

1.背景知识 Seq2Seq模型:使用两个RNN,一个作为编码器,一个作为解码器。 编码器:将输入数据编码成一个特征向量。 解码器:将特征向量解码成预测结果。 缺点:只将编码器的最后一个节点的结果进行了输出&am…

浅析NLP中的Attention技术

Attention(注意力机制)在NLP、图像领域被广泛采用,其显而易见的优点包括: (1)从context中捕捉关键信息; (2)良好的可视性和可解释性。 我们常用QKV模型来理解Attention&…

Attention 机制

文章目录 Attention 的本质是什么Attention 的3大优点Attention 的原理Attention 的 N 种类型 转载来源:https://easyai.tech/ai-definition/attention/ Attention 正在被越来越广泛的得到应用。尤其是 BERT 火爆了之后。 Attention 到底有什么特别之处&#xff1f…

详解Transformer中Self-Attention以及Multi-Head Attention

原文名称:Attention Is All You Need 原文链接:https://arxiv.org/abs/1706.03762 如果不想看文章的可以看下我在b站上录的视频:https://b23.tv/gucpvt 最近Transformer在CV领域很火,Transformer是2017年Google在Computation an…

Attention 一综述

近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中。随着注意力机制的深入研究,各式各样的attention被研究者们提出,如单个、多个、交互式等等。去年6月,google机器翻译…

从Attention到Bert——1 Attention解读

下一篇从Attention到Bert——2 transformer解读 文章目录 1 Attention的发展历史2015-2017年 2 Attention的原理3 Multi-Head Attention4 Self-Attention为什么需要self-attention什么是self-attention 5 Position Embedding 最早,attention诞生于CV领域&#xff0…

Attention UNet

Attention UNet论文解析 - 知乎Attention UNet论文地址: https://arxiv.org/pdf/1804.03999.pdf 代码地址: https://github.com/ozan-oktay/Attention-Gated-NetworksAttention UNet在UNet中引入注意力机制,在对编码器每个分辨率上的特征与解…

attention

文章目录 Attention基本的Attention原理参考 Hierarchical Attention原理实践参考 Self Attentionother Attention Attention Attention是一种机制,可以应用到许多不同的模型中,像CNN、RNN、seq2seq等。Attention通过权重给模型赋予了区分辨别的能力&am…

史上最小白之Attention详解

1.前言 在自然语言处理领域,近几年最火的是什么?是BERT!谷歌团队2018提出的用于生成词向量的BERT算法在NLP的11项任务中取得了非常出色的效果,堪称2018年深度学习领域最振奋人心的消息。而BERT算法又是基于Transformer&#xff0…

一文看懂 Attention(本质原理+3大优点+5大类型)

Attention 正在被越来越广泛的得到应用。尤其是 BERT 火爆了之后。 Attention 到底有什么特别之处?他的原理和本质是什么?Attention都有哪些类型?本文将详细讲解Attention的方方面面。 Attention 的本质是什么 Attention(注意力&a…

史上最直白之Attention详解(原理+代码)

目录 为什么要了解Attention机制Attention 的直观理解图解深度学习中的Attention机制总结 为什么要了解Attention机制 在自然语言处理领域,近几年最火的是什么?是BERT!谷歌团队2018提出的用于生成词向量的BERT算法在NLP的11项任务中取得了非常…

关于Attention的超详细讲解

文章目录 一、动物的视觉注意力二、快速理解Attention思想三、从Encoder-Decoder框架中理解为什么要有Attention机制四、Attention思想步骤五、Self-Attention5.1 Self-Attention的计算步骤5.2 根据代码进一步理解Q、K、V5.3 再来一个例子理解 六、缩放点积中为什么要除以根号d…

浅聊古代————汉朝

文章目录 西汉西汉建立:汉高祖刘邦西汉灭亡:王莽篡汉新朝建立:王莽篡汉改新新朝灭亡:绿林赤眉起义 东汉东汉建立:起义军刘秀东汉灭亡:曹丕篡汉 西汉 西汉建立:汉高祖刘邦 刘邦被项羽封为汉王。…