精华内容
下载资源
问答
  • 自注意力机制

    千次阅读 2020-03-21 08:40:39
    自注意力机制在序列模型中取得了很大的进步,另一方面,上下文信息对于很多视觉任务都很关键,如语义分割、目标检测。自注意力机制通过(key、query、value)的三元组提供了一种有效的捕捉全局上下文信息的建模方式...
    介绍

    自注意力机制在序列模型中取得了很大的进步,另一方面,上下文信息对于很多视觉任务都很关键,如语义分割、目标检测。自注意力机制通过(key、query、value)的三元组提供了一种有效的捕捉全局上下文信息的建模方式。

    attention通常可以进行如下描述,表示为将query(Q)和key-value pairs映射到输出上,其中query、每个key、每个value都是向量,输出是V中所有values的加权,其中权重是由Query和每个key计算出来的。计算方法分为三步:

    1. 计算比较Q和K的相似度,用f表示;
      在这里插入图片描述
    2. 将得到的相似度进行softmax归一化:
      在这里插入图片描述
    3. 针对计算出来的权重,对所有的values进行加权求和,得到Attention向量:
      在这里插入图片描述
      计算相似度的方法有一下4中:
      在这里插入图片描述
    query、k、v的意义

    自然语言处理领域

    以翻译为例:
    source:我 是 中国人

    target: I am Chinese

    比如翻译目标单词为 I 的时候,Q为I

    而source中的 “我” “是” “中国人”都是K,

    那么Q就要与每一个source中的K进行对齐(相似度计算);"I"与"我"的相似度,"I"与"是"的相似度;"I"与"中国人"的相似度;

    相似度的值进行归一化后会生成对齐概率值(“I"与source中每个单词的相似度(和为1)),也可以注意力值;

    而V代表每个source中输出的context vector;如果为RNN模型的话就是对应的状态向量;即key与value相同;

    然后相应的V与相应的P进行加权求和,就得到了context vetor;

    在这里插入图片描述

    可以这样进一步解释注意力机制:将source中的构成元素想象成是由一系列的数据对构成,此时给定target中的某个元素query,通过计算query和各个key的相似性或者相关性,得到每个key对应value的权重系数,然后对value进行加权求和,即得到了最终的attention数值。所以本质上attention机制是对source中元素的value值进行加权求和,而query和key用来计算对应value的权重系数。

    计算机视觉领域

    展开全文
  • 图解自注意力机制

    2020-11-25 00:15:53
    本文将通过图示和代码对自注意力机制进行透彻的解读。当然,在阅读本文之前,你可能也想了解什么是注意力机制。没有问题,同一位作者机器学习工程师 Raimi Karim 之前已经通过类似的方式解读过了:《图解神经机器...

     

    BERT 及其多种变体已经在多种语言理解任务上取得了非常出色的表现,这些架构全都基于 Transformer,而 Transformer 又使用了一种名为「自注意力」的方法。本文将通过图示和代码对自注意力机制进行透彻的解读。当然,在阅读本文之前,你可能也想了解什么是注意力机制。没有问题,同一位作者机器学习工程师 Raimi Karim 之前已经通过类似的方式解读过了:《图解神经机器翻译中的注意力机制》

     

     

    BERT、RoBERTa、ALBERT、SpanBERT、DistilBERT、SesameBERT、SemBERT、MobileBERT、TinyBERT 和 CamemBERT 有什么共同点?别说「BERT」,那不是我想要的答案。

     

    答案:自注意力(self-attention)。

     

    我们要探讨的不仅是名字里面带有「BERT」的架构,而是「基于 Transformer」的架构。基于 Transformer 的架构主要用在语言理解任务的建模中;这种架构没有使用神经网络中的循环(recurrence)来学习输入和输出之间的全局依赖关系,而是完全依靠自注意力。

     

    但自注意力背后的数学原理是怎样的呢?

     

    这就是本文所要探讨的主题。本文的主要内容是带你纵览自注意力模块中所涉及的数学运算。你在读完本文之后,应该就有能力从头开始编写自注意力模块代码了。

     

    本文的目标不是提供自注意力模块中不同数值运算和数学运算背后的直观理解和解读,也不是为了说明 Transformer 中使用自注意力的原因和方式(这方面的解释网上能找到很多)。本文也不会刻意说明注意力(attention)和自注意力的差别。

     

    自注意力是什么?

     

    你可能会想自注意力与注意力可能有相似之处,你的想法是对的!它们的概念基本一样,也有很多共同的数学运算。

     

    自注意力模块有 n 个输入,并会返回 n 个输出。这个模块中发生了什么?用门外汉的话来说,自注意力机制让每个输入都会彼此交互(自),然后找到它们应该更加关注的输入(注意力)。自注意力模块的输出是这些交互的聚合和注意力分数。

     

     

    图示

     

    下面将按照以下步骤通过图示来说明自注意力:

     

    1. 准备输入

    2. 初始化权重

    3. 推导键(key)、查询(query)和值(value)

    4. 计算输入 1 的注意力分数

    5. 计算 softmax

    6. 将分数与值相乘

    7. 对加权的值求和,得到输出 1

    8. 为输入 2 和 3 重复 4-7 步骤

     

    备注:在实践中,这些数学运算是经过向量化的,即所有输入会一起经历这样的数学运算。我们会在后面的代码章节看到这一点。

     

    第一步:准备输入

     

     

    图 1.1:准备输入。

     

    为了方便说明,我们先来 3 个输入,每个输入的维度为 4.

     

     

    Input 1: [1, 0, 1, 0] 
    Input 2: [0, 2, 0, 2]
    Input 3: [1, 1, 1, 1]
    

     

    第二步:初始化权重

     

    每个输入必须有 3 个表征(见下图)。这些表征被称为键(key,橙色)、查询(query,红色)和值(value,紫色)。在此示例中,我们设这些表征的维度为 3。因为每个输入的维度为 4,所以这意味着每组权重的形状为 4×3。

     

    备注:后面我们会看到,值的维度也就是输出的维度。

     

     

     

    图 1.2:为每个输入推导键、查询和值。

     

     

    为了得到这些表征,每个输入(绿色)都要与一组键的权重、一组查询的权重、一组值的权重相乘。在这个示例中,我们按如下方式初始化这三个权重:

     

    键的权重:

     

    [[0, 0, 1],
     [1, 1, 0],
     [0, 1, 0],
     [1, 1, 0]]
    

     

    查询的权重:

     

    [[1, 0, 1],
     [1, 0, 0],
     [0, 0, 1],
     [0, 1, 1]]
    

     

    值的权重:

     

    [[0, 2, 0],
     [0, 3, 0],
     [1, 0, 3],
     [1, 1, 0]]
    

     

    备注:在神经网络设置中,这些权重通常是较小的数值,初始化也是使用合适的随机分布来实现,比如高斯分布、Xavier 分布、Kaiming 分布。

     

    第三步:推导键、查询和值

     

    现在我们有三组权重了,我们来实际求取每个输入的键、查询和值的表征:

     

    输入 1 的键表征:

     

                   [0, 0, 1]
    [1, 0, 1, 0] x [1, 1, 0] = [0, 1, 1]
                   [0, 1, 0]
                   [1, 1, 0]
    

     

    使用同样一组权重求取输入 2 的键表征:

     

                   [0, 0, 1]
    [0, 2, 0, 2] x [1, 1, 0] = [4, 4, 0]
                   [0, 1, 0]
                   [1, 1, 0]
    

     

    使用同样一组权重求取输入 3 的键表征:

     

                   [0, 0, 1]
    [1, 1, 1, 1] x [1, 1, 0] = [2, 3, 1]
                   [0, 1, 0]
                   [1, 1, 0]
    

     

    向量化以上运算能实现更快的速度:

     

                   [0, 0, 1]
    [1, 0, 1, 0]   [1, 1, 0]   [0, 1, 1]
    [0, 2, 0, 2] x [0, 1, 0] = [4, 4, 0]
    [1, 1, 1, 1]   [1, 1, 0]   [2, 3, 1]
    

     

    图 1.3a:推导每个输入的键表征。

     

     

    通过类似的方式,我们求取每个输入的值表征:

     

                   [0, 2, 0]
    [1, 0, 1, 0]   [0, 3, 0]   [1, 2, 3] 
    [0, 2, 0, 2] x [1, 0, 3] = [2, 8, 0]
    [1, 1, 1, 1]   [1, 1, 0]   [2, 6, 3]
    

     

     

    图 1.3b:推导每个输入的值表征。

     

     

    最后还有查询表征:

     

                   [1, 0, 1]
    [1, 0, 1, 0]   [1, 0, 0]   [1, 0, 2]
    [0, 2, 0, 2] x [0, 0, 1] = [2, 2, 2]
    [1, 1, 1, 1]   [0, 1, 1]   [2, 1, 3]
    

     

     

    图 1.3c:推导每个输入的查询表征。

     

     

    备注:在实践中,可能还会为矩阵乘法的积添加一个偏置向量。

     

    第四步:计算输入 1 的注意力分数

    图 1.4:根据查询 1 计算注意力分数(蓝色)。

     

     

     

    为了求取注意力分数,我们首先求输入 1 的查询(红色)与所有键(橙色,包括其自身的键)的点积。因为有 3 个键表征(因为输入有 3 个),所以会得到 3 个注意力分数(蓝色)。

     

                [0, 4, 2]
    [1, 0, 2] x [1, 4, 3] = [2, 4, 4]
                [1, 0, 1]
    

     

     

    注意这里仅使用了输入 1 的查询。后面我们会为其它查询重复同一步骤。

     

     

    备注:上面的运算也被称为点积注意力(dot product attention),这是众多评分函数中的一个,其它评分函数还包括扩展式点积和 additive/concat,请参阅《图解神经机器翻译中的注意力机制》

     

    第五步:计算 softmax

     

    图 1.5:对注意力分数(蓝色)执行 softmax。

     

     

    对这些注意力分数(蓝色)进行 softmax:

     

    softmax([2, 4, 4]) = [0.0, 0.5, 0.5]
    

     

    第六步:将分数与值相乘

     

    图 1.6:通过将值(紫色)与分数(蓝色)相乘,推导加权的值表征(黄色)。

     

     

    每个输入的经过 softmax 的注意力分数(蓝色)与其对应的值(紫色)相乘。这会得到 3 个对齐向量(alignment vector,黄色)。在本教程中,我们称之为加权值(weighted value)。

     

    1: 0.0 * [1, 2, 3] = [0.0, 0.0, 0.0]
    2: 0.5 * [2, 8, 0] = [1.0, 4.0, 0.0]
    3: 0.5 * [2, 6, 3] = [1.0, 3.0, 1.5]
    

     

    第七步:对加权的值求和,得到输出 1

     

    图 1.7:对所有加权值(黄色)求和得到输出 1(深绿色)。

     

     

    将所有加权值(黄色)按元素求和:

     

      [0.0, 0.0, 0.0]
    + [1.0, 4.0, 0.0]
    + [1.0, 3.0, 1.5]
    -----------------
    = [2.0, 7.0, 1.5]
    

     

    所得到的向量 [2.0, 7.0, 1.5](深绿色)是输出 1,这是基于输入 1 的查询表征与所有其它键(包括其自身的)的交互而得到的。

     

    第八步:为输入 2 和 3 重复 4-7 步骤

     

    现在已经完成了对输出 1 的求解,我们再为输出 2 和输出 3 重复步骤 4-7。我相信现在你完全能自己完成这些计算了。

    图 1.8:为输入 2 和 3 重复之前的步骤。

     

     

    备注:因为使用了点积评分函数,所以查询和键的维度必须总是一致。但是,值的维度可能不同于查询和键。由此造成的结果是所得输出的维度与值的维度一致。

     

    代码

     

    下面是用 PyTorch 写的代码。PyTorch 是一个使用 Python 的常用深度学习框架。为了在代码中享受 @ 算子、.T 和 None 索引方法的 API 的便利,请确保你使用的是 Python 3.6 或更新版本以及 PyTorch 1.3.1。请跟随以下步骤,直接将代码复制到 Python/IPython REPL 或 Jupyter Notebook 中。

     

    第一步:准备输入

     

     

     第二步:初始化权重

     

     

    第三步:推导键、查询和值

     

     

    第四步:计算注意力分数

     

     

    第五步:计算 softmax

     

     

    第六步:将分数与值相乘

     

     

    第七步:对加权值求和

     

     

    备注:PyTorch 已经为这些运算提供了一个 API,即 nn.MultiheadAttention。但是,这个 API 需要你输入键、查询和值的 PyTorch 张量。此外,这个模块的输出会经过一次线性变换。

     

     

    扩展用于 Transformer

     

    那么,接下来又如何呢?Transformer!实际上我们正处于深度学习研究和高计算资源齐头并进的激动人心的时代。Transformer 源自论文《Attention Is All You Need》https://arxiv.org/abs/1706.03762,最早是为神经机器翻译而生的。在此基础上,研究者继续向前——组合、分拆、添加和扩展,最后将 Transformer 扩展到了更多语言任务上。

     

    这里我简要说说我们可以怎样将自注意力扩展用于 Transformer 架构:

     

    • 在自注意力模块内:维度、偏置;

    • 自注意力模块的输入:嵌入模块、位置编码、截断、掩码;

    • 添加更多自注意模块:多头、层堆叠;

    • 自注意力模块之间的模块:线性变换、层归一化

     

    参考和相关文章

     

    • https://arxiv.org/abs/1706.03762

    • https://jalammar.github.io/illustrated-transformer/

    • https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3

     

    原文链接:https://towardsdatascience.com/illustrated-self-attention-2d627e33b20a

    展开全文
  • 基于自注意力机制的双向分层语义模型
  • Self-Attention Generative Adversarial Networks (SAGAN,自注意力机制GAN) 论文、代码 DeOldify 是用于着色和恢复旧图像及视频的深度学习项目 代码资源
  • 自注意力机制的理解

    千次阅读 2019-05-03 11:50:32
    自注意力机制的本质是计算跟自己相关的序列;target序列与source序列是一样的; 自注意力机制的目的是为了计算编码层输入序列的representation与编码层输入序列的reprenentation;换句话说是用来计算序列的...

    自注意力机制的本质是计算跟自己相关的序列;target序列与source序列是一样的; 

    自注意力机制的目的是为了计算编码层输入序列的representation与编码层输入序列的reprenentation;换句话说是用来计算序列的representation;更直接来说,就是用来得到sentence representaions

     

    展开全文
  • 本文提出了一种基于自注意力机制的sentence embedding,自注意力机制是区别于注意力机制的,他可以减少对外部信息的依赖,只依靠自己的额输入来生成对应的注意力权重,他的权重主要是基于内部的相关性。 我们使用...

    论文:ICLR2017-A structured self-attentive sentence embedding

    梗概:

             本文提出了一种基于自注意力机制的sentence embedding,自注意力机制是区别于注意力机制的,他可以减少对外部信息的依赖,只依靠自己的额输入来生成对应的注意力权重,他的权重主要是基于内部的相关性。

             我们使用一个2-D的矩阵来表征一个句子,矩阵中的每一行代表句子的一个部分,从而可以更好的反映句子的不同特征,可以更好的进行之后的训练。

    与之前的联系,实际上看到sentence embedding 我们能想到很多,比如之前的word embedding,比如RNN-encoder-decoder,普通的RNN-encoder-decoder最后输出的隐藏变量C便是一种sentence embedding,但是当句子比较长时,这会导致长时依赖问题,同时也无法很好的反映句子的特点,后来又提出取所有encoder隐藏变量求平均的方式,但这样过于粗糙。最后提出结合输出序列,作为额外输入,根据输出单词和对应输入序列的相似度,作为注意力权值,从而构建注意力机制。但是,有些工作是没有SMT那样的额外信息输入的,只会输入一个句子或单词序列,所以我们这里提出自注意力机制。

    具体模型:

             模型主要分为两个部分,分别为双向LSTM和自注意力模块,双向LSTM负责生成单词序列各个时间点的隐藏向量,而自注意力模块负责生成对应的权重矩阵。

             这里的双向LSTM分别取左右两个隐向量,表示当前单词是由左右两个单词决定的,更好的反映了单词之间依赖性,也说明当前的隐向量会更好的反映整体的上下文信息,更有利于后面的自注意力机制,最后的输出公式为:

             这个a便是一个权值向量,size为n,H为所有的隐向量作为输入。具体的计算过程为:

             Size(Ws1*HT)=(da,2u)*(2u,n)=(da,n)

             Size(Ws2)*(da,n)=(1,da)*(da,n)=(1,n)

             这个a便是我们最后要得到的权重向量,a与H相乘,也就得到了最终的句向量。

             同时,我们要注意一下Ws2,很明显他不属于网络的一部分,这是一个需要学习的向量,他和过网络后的H相乘,得到一个相似度向量,也就是权值向量a,我们都知道自注意力机制的关键便是找到context vector,也就是这里的Ws2,他的意义代表的是当前序列的整体的上下文信息,感性来说就是每个词向量与上下文的相似度,训练的目标便是得到的Ws2,在test过程中Ws2便是最重要的点。

             因此,我们需要进行多次注意力机制的判定,从而关注句子的不同部分,解决方法便是将ws2向量变为一个Ws2矩阵,也就是说我们定义了多个context vector,最终的结果为:

             Ws2为一个r*da的矩阵,表示我们要从sentence中提取r个特征,实际上在运算过程中就相当于对输入的H做了r次关注操作,计算出了r个权值序列,最后将矩阵A与H相乘,得到最后的句子向量。

             这个句子向量维数为r*2u,这个句子矩阵的每一行都代表着一个句子的关注点,可以更好地表现出这个句子的特征。

    惩罚项:

             如果我们得到的r次关注权值都是相似的数,那么便会产生冗余问题,因此我们需要一个penaliztion term 保证得到的A是每一行不同的权重

    使用的方法是:

             I是单位矩阵。两个矩阵相乘为下面的公式:

            我们可以看出,因为softmax的原因,导致他们相乘求和都是小于1的,只有满足one-hot格式且相同时才会为1,而我们的目标为minimize P,并且相乘之后减去一个单位矩阵,这将会迫使矩阵A只关注句子的一个方面,将数据集中在某一项,这会使sentence embedding更加有效。

    展开全文
  • 关注微信公众号:人工智能前沿讲习回复"蒋正锴"获取PPT与视频资料视频...同时,计算机视觉的很多任务都是由于语义信息不足从而影响最终的性能。自注意力机制通过捕捉全局的信息来获得更大的感受野和上下文信息。这...
  • 0. 什么是自注意力机制     自注意力类似于注意力机制,它们从根本上共享相同的概念和许多常见的数学运算。自注意力模块根据k个输入,返回k个输出。此模块中允许输入相互交换信息,并找出他们应该更加关注哪个...
  • [ 1 ] 自注意力机制

    2020-11-28 00:20:36
    自注意力机制在序列模型中取得了很大的进步,另一方面,上下文信息对于很多视觉任务都很关键,如语义分割、目标检测。自注意力机制通过(key、query、value)的三元组提供了一种有效的捕捉全局上下文信息的建模方式...
  • (1)自注意力机制如果能够基于一组数据本身(没有传统的样本标签)给出数据之间的联系 (2)对于非文本数据(如普通的数据库表)如何能处理为注意力机制能接受的形式 如果有路过大佬能够解答,我
  • 基于情感融合和多维自注意力机制的微博文本情感分析3.1论文信息中国民航大学电子信息与自动化学院,韩萍,孙佳慧,方 澄,贾云飞计算机应用,2019年归档:WPS网盘\我的云文档\论文汇报\毕业论文\论文部分\短文本情感...
  • (多头)自注意力机制的PyTorch实现

    千次阅读 2020-11-03 22:32:21
    用于学习和复习的两份自注意力机制实现代码。 自注意力 使用了缩放点积作为打分函数,因此key和query的维数是一样的,实现很简单。 from math import sqrt import torch import torch.nn as nn class Self...
  • , SEAM对来自不同变换图像的 Class Activation Map (CAM)应用一致性正则化,为网络学习提供监督。为了进一步提高网络预测的一致性,SEAM引入了像素相关模块Pixel Correlation Module (PCM),该模块为每个像素捕获...
  • 融合自注意力机制的实体和关系的联合抽取,丁琛,徐蔚然,知识图谱目前在智能搜索、自动问答、个性化推荐等等很多自然语言处理任务得到广泛的应用,而联合抽取实体及其关系是自动构建知识
  • 基于自注意力机制的下一项推荐

    千次阅读 2018-11-15 16:27:20
    Next Item Recommendation with self-Attention摘要关键词介绍相关工作1.序列感知推荐系统(sequence-aware) ...通过自注意力机制可以在用户交互轨迹中评估每个item的相关权重,以便更好的来学习用户瞬...
  • Self Attention 自注意力机制

    千次阅读 2020-03-09 18:20:02
    self attention是提出Transformer的论文《Attention is all you need》中提出的一种新的注意力机制,这篇博文仅聚焦于self attention,不谈transformer的其他机制。Self attention直观上与传统Seq2Seq attention机制...
  • self attention(自注意力机制

    万次阅读 多人点赞 2019-09-28 19:33:18
    self attention是注意力机制中的一种,也是transformer中的重要组成部分,本文先重新回归一下注意力机制,再做进一步介绍。 正如之前说的,注意力机制的目的是根据我们的目标,去关注部分细节,而不是基于全局进行...
  • 自然语言处理中的自注意力机制(Self-attention Mechanism) 近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中,之前我对早期注意力机制进行过一些学习总结(可见...
  • 自注意力机制: https://blog.csdn.net/john_xyz/article/details/80650677
  • 基于自注意力机制的句子表示 句子表示的思路 句子由词所组成,所以一般首先将句子切分为连续的词,对词进行表示,然后将每个词的表示以各种组合方式组合起来表示句子。 常见的词的表示方法有: One-Hot 表示...
  • 本文在综述传统激活函数和注意力机制的基础上,解读了一种注意力机制下的激活函数,即自适应参数化修正线性单元(Adaptively Parametric Rectifier Linear Unit,APReLU,自适应参数化ReLU激活函数)。该文章在2019...
  • DL之self-attention:self-attention自注意力机制的简介、应用之详细攻略 目录 self-attention的简介 1、self-attention的影响 2、self-attention模块思路的8个步骤及其代码实现 self-attention的应用...
  • 论文作者:耿昕伟,王龙跃,王星,秦兵,刘挺,涂兆鹏原创作者:耿昕伟论文链接:https://www.aclweb.org/anthology/2020.acl-main.269.pdf1. 简介自注意力网络(SANs)在许多自然语言处理任务中取得显著的成功,其中...
  • 自注意力机制总结

    2020-04-09 22:38:46
    参考文献:attention is all you need Transformer结构 和seq2seq模型一样,Transformer模型中也采用了encoder-decoder结构。文章中encoder与decoder层都是由6个encoder/decoder单元堆叠在一起。...
  • 基于自注意力机制的声学模型无监督预训练方法 Speech-XLNet: Unsupervised Acoustic Model Pretraining For Self-Attention Networks 本文由清华大学与腾讯 AI Lab 合作完成,提出了一种实现声学模型无监督预训练的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,058
精华内容 423
关键字:

自注意力机制