Transformer系列专题(一)——self-attention自注意力机制如何计算

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

自注意力机制的原理相当于一个词在其上下文中的联系,即将这一个词赋予这一句话中将每个词乘以不同的权重,即是这一个词对上下文的关系程度。
I am a student将本句话中的a对上下文的关系程度即为,将上下的词分别乘以不同的权重赋予到a词中,这就是a对上下问的关系程度。
接下来详细介绍自注意力机制如何计算?


一、总述

  • input输入thinking和machines两个词作为样例
  • 先对输入经过Embedding编码得到词向量
  • 想得到当前词语上下文的关系,可以当作是加权
  • 最后构建三个矩阵分别来查询当前词跟其他词的关系,以及特征向量的表达。

在这里插入图片描述

二、如何计算self-attention

  • 三个需要训练的矩阵
    • Q:query,要去查询的
    • K:key,等着被查的
    • V:value,实际的特征信息

在这里插入图片描述

即设X矩阵有x1和x2两个向量,经过各自的权重矩阵相乘后得到各自的特征矩阵。
在这里插入图片描述

  • q与k的内积表示有多少匹配度
  • 输入两个向量得到一个分值
  • K:key,等着被查的
  • V:value,实际的特征信息

在这里插入图片描述

  • 其中上述的q1 × \times ×k1和q1 × \times ×k2内积的结果分别为第一个词和第一个词的匹配程度和第一个词与第二个词的匹配程度,这两个都是对第一个词的计算不是第二个的。

三、softmax归一处理

  • softmax函数是一种将多分类问题转化为每一类是多少概率的函数,范围在 0 − 1 0-1 01
  • 首先回忆一下以前的softmax。softmax又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值就是
    在这里插入图片描述
    在这里插入图片描述
    那么在本文中softmax的计算和作用如下:
  • 将第二步的最终得分经过softmax就是最终上下文结果
  • Scaled Dot-Product Attention 不能让分值随着向量维度的增加而增大
  • 本文的计算公式如下:
    在这里插入图片描述
  • 最后输出结果如下图:
    计算一句话中一个词与本句话中所有词的关系程度也就是内积然后进行softmax归一化,将得到的这个词对每个词的关系概率乘以各自的V向量最终输出本词的Attention Value。
    在这里插入图片描述

Attention整体计算流程

  • Attention计算流程
  • 每个词的Q都会跟每一个K计算得分
  • Softmax后得到整个的加权结果(假设下面的词的维度为64维)
  • 此时每个词看的不只是它前面的序列而是整个输入序列
  • 同以时间计算出所有词的表示结果
    在这里插入图片描述
### Self-Attention机制概述 Self-Attention机制是种广泛应用于自然语言处理任务的技术,尤其在Transformer架构中得到体现。这种机制允许模型通过计算输入序列中不同位置之间的相互影响来捕捉全局依赖关系[^1]。 具体来说,在传统的循环神经网络(RNN)结构里,信息按顺序逐个传递并累积;而Self-Attention则打破了时间维度上的线性约束,使得任意两个token可以直接建立关联。这不仅提高了并行化程度,还增强了对于长距离依赖的学习能力。 #### 工作原理 在个典型的Self-Attention实现中,每个输入向量会被映射成三个新的向量——Query(查询),Key(),Value()[^3]: ```python import torch.nn as nn class MultiHeadedAttention(nn.Module): def __init__(self, h, d_model, dropout=0.1): super(MultiHeadedAttention, self).__init__() assert d_model % h == 0 # We assume d_v always equals d_k self.d_k = d_model // h self.h = h self.linears = clones(nn.Linear(d_model, d_model), 4) self.attn = None self.dropout = nn.Dropout(p=dropout) def forward(self, query, key, value, mask=None): ... ``` 接着利用这些向量组合形成注意力分数矩阵,并据此调整原始特征表示。最终输出的结果保留了原有时序特性的同时也融入了来自其他位置的重要信息。 #### 特点对比 相比于RNN系列方法(如LSTM),Self-Attention具有以下几个显著优势[^2]: - **无方向性**:不像RNN那样受限于单向或双向传播路径; - **高效性**:能够在次操作中完成整个序列内部节点间的交互运算; - **灵活性**:更容易扩展到多头形式以增强表达力; - **可解释性强**:可以通过可视化工具直观展示词语间的关系强度分布情况。 尽管如此,值得注意的是,两者并非完全对立的选择,而是各有适用场景。例如当面对非常规长度变化较大的文本片段时,基于门控单元设计的LSTM可能仍具备定竞争力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法小白(真小白)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值