首页 > 其他分享 >Self-Attention

Self-Attention

时间:2023-08-27 23:12:45浏览次数:46  
标签:attention Self Attention value softmax scores 0.0000 input

Self-Attention

在Attention is all you need这篇论文中,可以看到这样一个公式:
$Attention(Q,K,V)=softmax(\frac{QK^{T}}{\sqrt{d_k} } )V$

1.定义input

在进行Self - Attention之前,我们首先定义3个1×4的input。 pytorch代码如下:

import torch

x = torch.FloatTensor([
    [1, 0, 1, 0],  # input 1
    [0, 2, 0, 2],  # input 2
    [1, 1, 1, 1]   # input 3
    ])

2.初始化权重

每个input和三个权重矩阵分别相乘会得到三个新的矩阵,分别是key(橙色),query(红色),value(紫色)。我们已经令input的shape为1×4,key、query、value的shape为1×3,因此可以推出与input相乘的权重矩阵的shape为4×3。 代码如下:

w_key = torch.FloatTensor([
    [0, 0, 1],
    [1, 1, 0],
    [0, 1, 0],
    [1, 1, 0]
    ])

w_query = torch.FloatTensor([
    [1, 0, 1],
    [1, 0, 0],
    [0, 0, 1],
    [0, 1, 1]
    ])

w_value = torch.FloatTensor([
    [0, 2, 0],
    [0, 3, 0],
    [1, 0, 3],
    [1, 1, 0]
    ])

3.计算key,query和value

现在我们计算key,query和value矩阵的值,计算的过程也很简单,运用矩阵乘法即可:

  • $key = input \times w_{key}$
  • $query = input \times w_{query} $
  • $value = input \times w_{value} $

value = input * w_value

    keys = x @ w_key
    # tensor([[0., 1., 1.],
    #         [4., 4., 0.],
    #         [2., 3., 1.]])

    querys = x @ w_query
    # tensor([[1., 0., 2.],
    #         [2., 2., 2.],
    #         [2., 1., 3.]])

    values = x @ w_value
    # tensor([[1., 2., 3.],
    #         [2., 8., 0.],
    #         [2., 6., 3.]])

即得到了数学公式中的$Q,K,V$

4.计算attention scores

例如:为了获得input1的注意力分数(attention scores),我们将input1的query(红色)与input1、2、3的key(橙色)的转置分别作点积,得到3个attention scores(蓝色)。 同理,我们也可以得到input2和input3的attention scores。

    attn_scores = querys @ keys.T

    # tensor([[ 2.,  4.,  4.],  # attention scores from Query 1
    #         [ 4., 16., 12.],  # attention scores from Query 2
    #         [ 4., 12., 10.]]) # attention scores from Query 3

对应数学公式中的:$QK^{T}$

5.对attention scores作softmax

上一步得到了attention scores矩阵后,我们对attention scores矩阵作softmax计算。softmax的作用为归一化,使得其中各项相加后为1。这样做的好处是凸显矩阵中最大的值并抑制远低于最大值的其他分量。

    from torch.nn.functional import softmax

    attn_scores_softmax = softmax(attn_scores, dim=-1)
    # tensor([[6.3379e-02, 4.6831e-01, 4.6831e-01],
    #         [6.0337e-06, 9.8201e-01, 1.7986e-02],
    #         [2.9539e-04, 8.8054e-01, 1.1917e-01]])

    attn_scores_softmax = [
    [0.0, 0.5, 0.5],
    [0.0, 1.0, 0.0],
    [0.0, 0.9, 0.1]
    ]
    attn_scores_softmax = torch.tensor(attn_scores_softmax)
    # tensor([[0.0000, 0.5000, 0.5000],
    #         [0.0000, 1.0000, 0.0000],
    #         [0.0000, 0.9000, 0.1000]])    

对应数学公式中的:$softmax(QK^{T})$

6.将attention scores与values相乘

每个score(蓝色)乘以其对应的value(紫色)得到3个alignment vectors(黄色)。在本教程中,我们将它们称为weighted values(加权值)。

    weighted_values = values[:,None] * attn_scores_softmax.T[:,:,None]
    # tensor([[[0.0000, 0.0000, 0.0000],
    #          [0.0000, 0.0000, 0.0000],
    #          [0.0000, 0.0000, 0.0000]],

    #         [[1.0000, 4.0000, 0.0000],
    #          [2.0000, 8.0000, 0.0000],
    #          [1.8000, 7.2000, 0.0000]],

    #         [[1.0000, 3.0000, 1.5000],
    #          [0.0000, 0.0000, 0.0000],
    #          [0.2000, 0.6000, 0.3000]]])

对应数学公式中的:$softmax(QK^{T})V$

7.对weighted values求和得到output

从图中可以看出,每个input生成3个weighed values(黄色),我们将这3个weighted values相加,得到output(深绿)。图中一共有3个input,所以最终生成3个output。

    outputs = weighted_values.sum(dim=0)

    # tensor([[2.0000, 7.0000, 1.5000],  # Output 1
    #         [2.0000, 8.0000, 0.0000],  # Output 2
    #         [2.0000, 7.8000, 0.3000]]) # Output 3

7. 为什么要除以$\sqrt{d_k}$?

  • 首先,$d_k$表示的是词向量的维度。我们除以$\sqrt{d_k}$ 是为了防止$ QK^{T} $值过大,导致softmax计算时上溢出(overflow)。
  • 其次,使用$d_k$可以使$ QK^{T} $的结果满足期望为0,方差为1的分布。

8. 这个公式的意义?

先从 $QK^{T}$ 看起,从几何角度看,点积是两个向量的长度与它们夹角余弦的积。如果两向量夹角为90°,那么结果为0,代表两个向量线性无关。如果两个向量夹角越小,两向量在方向上相关性也越强,结果也越大。点积反映了两个向量在方向上的相似度,结果越大越相似。
图片名称
对 $QK^{T}$进行相似度的计算后,再使用softmax归一化。最后将归一化的结果与 $ V $ 作乘法,计算的结果就是输入经过注意力机制加权求和之后的表示。

标签:attention,Self,Attention,value,softmax,scores,0.0000,input
From: https://www.cnblogs.com/Netsharp/p/17661057.html

相关文章

  • 论文解读(TAMEPT)《A Two-Stage Framework with Self-Supervised Distillation For Cros
     论文信息论文标题:ATwo-StageFrameworkwithSelf-SupervisedDistillationForCross-DomainTextClassification论文作者:YunlongFeng,BohanLi,LiboQin,XiaoXu,WanxiangChe论文来源:2023aRxiv论文地址:download 论文代码:download视屏讲解:click1介绍 动......
  • SAP login self
    importsysimportwin32com.clientimportwin32apiimportwin32guiimportwin32con#importwin32uiimporttimeimportosimportsubprocessdefLogin():sap_app=r"C:\ProgramFiles(x86)\SAP\FrontEnd\SAPgui\saplogon.exe"subproces......
  • FlashAttention算法详解
    这篇文章的目的是详细的解释FlashAttention,为什么要解释FlashAttention呢?因为FlashAttention是一种重新排序注意力计算的算法,它无需任何近似即可加速注意力计算并减少内存占用。所以作为目前LLM的模型加速它是一个非常好的解决方案,本文介绍经典的V1版本,最新的V2做了其他优化我们......
  • 【论文阅读】Self-Alignment with Instruction Backtranslation自对齐与指令反翻译
     Self-AlignmentwithInstructionBacktranslation自对齐与指令反翻译摘要:在当今的人工智能时代,语言模型的训练和优化已成为研究的热点。本文介绍了一种创新且可扩展的方法,通过为人编写的文本自动标注相应的指令,构建高质量的指令跟随语言模型。此研究的方法,被命名为“指令反......
  • python类型标注self
    起因假设有如下代码,我想标注类方法的返回值为自己本身classQueue:def__init__(self):self.items=[]defenqueue(self,item)->Queue:self.items.append(item)returnself用Queue来标注返回值类型,但是呢,运行时Python会报错Traceb......
  • python中 函数中的self是什么?
      self可视为类的实例,在使用类创建实例时,我们可能需要强制传入一些参数。所以一般在构造函数_init_里给实例的属性赋值。classStudent(obiect):def__init__(self,name,score):self.name=nameself.score=scoredefprint_score(self):......
  • 理解面向对象 谁调用基类 谁self.data里就被yaml中类 赋值
    classBaseAPI:#基类相当于动物类;登录属于继承类,相当于老虎类#属性def__init__(self,token=None):#店铺类,订单类,支付模块等都需要使用token所以过滤一下iftoken:#如果接口需要token店铺类,订单类,支付模块等都需要使用token......
  • 关于Makefile出现E325: ATTENTION报错
    前言对于新手使用Makefile,有时候使用vi命令打开Makefile会出现E325:ATTENTION报错,而只要出现了一次,之后每次使用vi命令打开相同的Makefile都会出现这个报错。原因目前我发现出现这种bug的原因有两个,还有其他可能触发这种问题的可以在评论区留言。原因一编辑文件......
  • Attention机制竟有bug?Softmax是罪魁祸首,影响所有Transformer
    前言 「大模型开发者,你们错了。」本文转载自机器之心仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理【CV技术指南】CV全栈指导班、基础入门班、论......
  • An essay to tease myself
    Sometimesbadluckcomestome,whenIamsleepingandwannaturnover,myheadbumpthewall.Comingacrossthestreetwithashabbyhat,takingashipwithbeer.ButIneveryieldtothepeoplewhoteaseme,andIamalwayswillingtobeasmallcarofmychi......