精华内容
下载资源
问答
  • 深度学习——attention机制

    千次阅读 2019-03-03 17:27:23
    输出的embedding与输出的position embedding求和做为decoder的输入,经过一个Multi-HeadAttention + Add&Norm((MA-1)层,MA-1层的输出做为下一Multi-Head Attention + Add&Norm(MA-2)的query(Q)输入,MA-2层...

    一、序列编码

    目前主流的处理序列问题像机器翻译,文档摘要,对话系统,QA等都是encoder和decoder框架,
    编码器:从单词序列到句子表示
    解码器:从句子表示转化为单词序列分布


     

    1、第一个基本的思路是 RNN 层

    RNN 的方案很简单,递归式进行:

    8a394feeefe34cef647edfcfb30b9af303c39d52

    但是,这种方式会有一个问题:对于长句子的翻译会造成一定的困难,而attention机制的引入可以解决这个问题。(为什么引入注意力模型?因为没有引入注意力的模型在输入句子比较短的时候问题不大,但是如果输入的句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失很多的细节信息,所以要引入注意力机制)如下图所示:

     理解Attention模型的关键就是,由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci.而每个Ci可能对应着不同的源语句子单词的注意力分配概率分布。

    RNN+Attention:

    这里,我们可以看到,decoder得到的序列中有几个输出值,对应的语义编码c则有相同的数量,即一个语义编码ci对应一个输出yi。而每个ci就是由attention机制得到,具体公式如下:

    其中:ci:encoder序列加权得到的值; si:    ; yt:  

    Neural machine translation by jointly learning to align and translate

    这篇论文首先将注意力机制运用在NLP上,提出了soft Attention Model,并将其应用到了机器翻译上面。其实,所谓Soft,意思是在求注意力分配概率分布的时候,对于输入句子X中任意一个单词都给出个概率,是个概率分布。加入注意力机制的模型表现确实更好,但也存在一定问题,例如:attention mechanism通常和RNN结合使用,我们都知道RNN依赖t-1的历史信息来计算t时刻的信息,因此不能并行实现,计算效率比较低,特别是训练样本量非常大的时候。

    不管是已经被广泛使用的 LSTM、GRU 还是最近的 SRU,都并未脱离这个递归框架。RNN 结构本身比较简单,也很适合序列建模,但 RNN 的明显缺点之一就是无法并行,因此速度较慢,这是递归的天然缺陷。

    另外我个人觉得 RNN 无法很好地学习到全局的结构信息,因为它本质是一个马尔科夫决策过程

    2、第二个思路是 CNN 层

    其实 CNN 的方案也是很自然的,窗口式遍历,比如尺寸为 3 的卷积,就是:

    09d4159dee99ecde9e27dddc4e15a039df15827c

    基于CNN的Seq2Seq模型具有基于RNN的Seq2Seq模型捕捉long distance dependency的能力,此外,最大的优点是可以并行化实现,效率比基于RNN的Seq2Seq模型高。缺点:计算量与观测序列X和输出序列Y的长度成正比。

    CNN+Attention:

    在 FaceBook 的论文中,纯粹使用卷积也完成了 Seq2Seq 的学习,是卷积的一个精致且极致的使用案例,热衷卷积的读者必须得好好读读这篇文论。

    3、Google的大作提供了第三个思路:纯 Attention,单靠注意力就可以。

    RNN 要逐步递归才能获得全局信息,因此一般要双向 RNN 才比较好;CNN 事实上只能获取局部信息,是通过层叠来增大感受野;Attention 的思路最为粗暴,它一步到位获取了全局信息,它的解决方案是:

    01d4e0756a4f0e090f53a6e779bdb8cc91586dd5

    其中 A,B 是另外一个序列(矩阵)。如果都取 A=B=X,那么就称为 Self Attention,它的意思是直接将 xt 与原来的每个词进行比较,最后算出 yt。

    本文的创新点在于抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果,创新之处在于提出了两个新的Attention机制,分别叫做 Scaled Dot-Product Attention 和 Multi-Head Attention.

     回顾了传统的attention模型之后,我们看一下google翻译团队对attention模型的高度抽取概况。Google 给出的 Attention 的定义:

    其中因子?tp=webp&wxfrom=5&wx_lazy=1起到调节作用,使得内积不至于太大(太大的话 softmax 后就非 0 即 1 了,不够“soft”了)。此外这个定义只是注意力的一种形式,还有一些其他选择,比如 query 跟 key 的运算方式不一定是点乘(还可以是拼接后再内积一个参数向量),甚至权重都不一定要归一化,等等。

    他们将其映射为一个query和一系列<key, value>,最终得到输出attention value的过程。这里的query相当于decoder中的si-1keyvalue都来自于encoder的hj,区别在于前后状态的hj。然后计算query与keyi的相似度并与valuei进行相乘,然后求和。

    Google 的一般化 Attention 思路也是一个编码序列的方案,因此我们也可以认为它跟 RNN、CNN 一样,都是一个序列编码的层。

    上面提到的query与key之间计算相似度有许多方法,如dot、general、concat和MLP等方式,具体公式如下所示。而attention模型抽象为query、key和value之间的相似度计算,总共有3个阶段。

    第一阶段:query与keyi使用特定的相似度函数计算相似度,得到si;

    第二阶段:对si进行softmax()归一化得到ai;

    第三阶段,将ai与valuei对应相乘再求和,得到最终的attention value。

    其实对比传统的attention公式。我们可以看出,这两套公式还是很像的。红色框中的是google提出的attention,蓝色框中的是传统的attention。

    其中,是google提出的attention中未归一化之前的相似度,是传统的attention中未归一化之前的相似度。

    Attention机制:将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。

    事实上这种 Attention 的定义并不新鲜,但由于 Google 的影响力,我们可以认为现在是更加正式地提出了这个定义,并将其视为一个层地看待。

    Attention 层

    二、Transformer

    BERT大火却不懂Transformer?读这一篇就够了  https://baijiahao.baidu.com/s?id=1622064575970777188&wfr=spider&for=pc

    谷歌的这篇论文里提出的transformer模型抛弃了cnn,rnn,初次看有点一头雾水,总结了一下迷惑的地方有三个:

    • Positional embedding;(位置嵌入向量——其实类似word2vec,只不过处理的是位置信息罢了)。
    • multi-head attention; (多头注意力机制——点乘注意力的升级版本)
    • Position-wise Feed-Forward Networks(位置全链接前馈网络——MLP变形)
      现在一一分析:

    Multi-Head Attention

    这个是 Google 提出的新概念,是 Attention 机制的完善。

       

    不过从形式上看,它其实就再简单不过了,就是把 Q,K,V 通过参数矩阵映射一下,然后再做 Attention,把这个过程重复做 h 次,结果拼接起来就行了,可谓“大道至简”了。具体来说:

    3ea6c41732d2b99a5d5f49d7b6e09744663c9a90

    这里53797d704f5dd616a7d9ab28402c48b01cd593a7,然后:

    bcd491d3c1bbd02e123239491bba468596c4be5e

    最后得到一个 n×(hd̃v) 的序列。所谓“多头”(Multi-Head),就是只多做几次同样的事情(参数不共享),然后把结果拼接。

    Transformer会在三个不同的方面使用multi-headattention:

    1. encoder-decoder attention:使用multi-head attention,输入为encoder的输出和decoder的self-attention输出,其中encoder的self-attention作为 key and value,decoder的self-attention作为query
    2. encoder self-attention:使用 multi-head attention,输入的Q、K、V都是一样的(input embedding and positional embedding)
    3. decoder self-attention:在decoder的self-attention层中,deocder 都能够访问当前位置前面的位置

    Position-wise feed forward network

    Position-wise feed forward network,其实就是一个MLP 网络,1 的输出中,每个 d_model 维向量 x 在此先由 xW_1+b_1 变为 d_f $维的 x',再经过max(0,x')W_2+b_2 回归 d_model 维。之后再是一个residual connection。输出 size 仍是 $[sequence_length, d_model]$

    Positional embedding

    Transformer中没有RNN、CNN的结构,所以也就没办法得到句子中每个单词的信息,于是 Google 再祭出了一招——Position Embedding,也就是“位置向量”,将每个位置编号,然后每个编号对应一个向量,通过结合位置向量和词向量,就给每个词都引入了一定的位置信息,这样 Attention 就可以分辨出不同位置的词了。 

     Google 直接给出了一个构造 Position Embedding 的公式:

    这样做的目的是因为正弦和余弦函数具有周期性,对于固定长度偏差k(类似于周期),post +k位置的PE可以表示成关于pos位置PE的一个线性变化(存在线性关系),这样可以方便模型学习词与词之间的一个相对位置关系。

    在这个纯 Attention 模型中,Position Embedding 是位置信息的唯一来源,因此它是模型的核心成分之一。

    Position Embedding 本身是一个绝对位置的信息,但在语言中,相对位置也很重要,Google 选择前述的位置向量公式的一个重要原因如下:

    由于我们有 sin(α+β)=sinα cosβ+cosα sinβ 以及 cos(α+β)=cosα cosβ−sinα sinβ,这表明位置 p+k 的向量可以表明位置 p 的向量的线性变换,这提供了表达相对位置信息的可能性。

    结合位置向量和词向量有几个可选方案,可以把它们拼接起来作为一个新向量,也可以把位置向量定义为跟词向量一样大小,然后两者加起来

    模型整体

    Transformer也会遵循这种结构,encoder和decoder都使用堆叠的self-attention和point-wise,fully connected layers。

    Encoder: encoder由6个相同的层堆叠而成,每个层有两个子层。第一个子层是多头自我注意力机制(multi-head self-attention mechanism),第二层是简单的位置的全连接前馈网络(position-wise fully connected feed-forward network)。在两个子层中会使用一个残差连接,接着进行层标准化(layer normalization)。也就是说每一个子层的输出都是LayerNorm(x + sublayer(x))。网络输入是三个相同的向量q, k和v,是word embedding和position embedding相加得到的结果。为了方便进行残差连接,我们需要子层的输出和输入都是相同的维度。

    Decoder: decoder也是由N(N=6)个完全相同的Layer组成,decoder中的Layer由encoder的Layer中插入一个Multi-Head Attention + Add&Norm组成。输出的embedding与输出的position embedding求和做为decoder的输入,经过一个Multi-HeadAttention + Add&Norm((MA-1)层,MA-1层的输出做为下一Multi-Head Attention + Add&Norm(MA-2)的query(Q)输入,MA-2层的Key和Value输入(从图中看,应该是encoder中第i(i = 1,2,3,4,5,6)层的输出对于decoder中第i(i = 1,2,3,4,5,6)层的输入)。MA-2层的输出输入到一个前馈层(FF),经过AN操作后,经过一个线性+softmax变换得到最后目标输出的概率。
    对于decoder中的第一个多头注意力子层,需要添加masking,确保预测位置i的时候仅仅依赖于位置小于i的输出。
    层与层之间使用的Position-wise feed forward network。

    Attention 层的好处是能够一步到位捕捉到全局的联系,因为它直接把序列两两比较(代价是计算量变为 ?(n2),当然由于是纯矩阵运算,这个计算量相当也不是很严重)。

    相比之下,RNN 需要一步步递推才能捕捉到,而 CNN 则需要通过层叠来扩大感受野,这是 Attention 层的明显优势。 

    不足之处:

    1. 论文标题为 Attention is All You Need,因此论文中刻意避免出现了 RNN、CNN 的字眼,但我觉得这种做法过于刻意了。事实上,论文还专门命名了一种 Position-wise Feed-Forward Networks,事实上它就是窗口大小为 1 的一维卷积,因此有种为了不提卷积还专门换了个名称的感觉,有点不厚道。(也有可能是我过于臆测了)。 
    2. Attention 虽然跟 CNN 没有直接联系,但事实上充分借鉴了 CNN 的思想,比如 Multi-Head Attention 就是 Attention 做多次然后拼接,这跟 CNN 中的多个卷积核的思想是一致的;还有论文用到了残差结构,这也源于 CNN 网络。 
    3. 无法对位置信息进行很好地建模,这是硬伤。尽管可以引入 Position Embedding,但我认为这只是一个缓解方案,并没有根本解决问题。举个例子,用这种纯 Attention 机制训练一个文本分类模型或者是机器翻译模型,效果应该都还不错,但是用来训练一个序列标注模型(分词、实体识别等),效果就不怎么好了。那为什么在机器翻译任务上好?我觉得原因是机器翻译这个任务并不特别强调语序,因此 Position Embedding 所带来的位置信息已经足够了,此外翻译任务的评测指标 BLEU 也并不特别强调语序。 
    4. 并非所有问题都需要长程的、全局的依赖的,也有很多问题只依赖于局部结构,这时候用纯 Attention 也不大好。事实上,Google 似乎也意识到了这个问题,因此论文中也提到了一个 restricted 版的 Self-Attention(不过论文正文应该没有用到它)。它假设当前词只与前后 r 个词发生联系,因此注意力也只发生在这 2r+1 个词之间,这样计算量就是 ?(nr),这样也能捕捉到序列的局部结构了。但是很明显,这就是卷积核中的卷积窗口的概念。 

     

    以上大部分内容来源:

    https://www.jianshu.com/p/3f2d4bc126e6   论文笔记:Attention is all you need

    https://yq.aliyun.com/articles/342508?utm_content=m_39938  一文读懂「Attention is All You Need」| 附代码实现

    https://www.cnblogs.com/Ann21/p/9784444.html     关于注意力机制(《Attention is all you need》)

     

    展开全文
  • 【3D 目标检测】M3DETR

    千次阅读 2021-11-17 18:26:28
    M3DETR:Multi representation, Multi scale, Mutual relation 3D Object Detection with Transformers 一 核心思路 本文的主要思想在于将point-feature、voxel-...transformer利用multi-headattention来减少不...

    本文可以借鉴的另一篇博客:

    【3D 目标检测】PVRCNN详解(个人阅读心得并总结其他人的结论得出的文章)_JY.Wang_China的博客-CSDN博客

    M3DETR:Multi representation, Multi scale, Mutual relation 3D Object Detection with Transformers 

    一 核心思路

    本文的主要思想在于将point-feature、voxel-feature、bird-eye view通过一系列的transformer得到RoI-Align需要用到的refine特征。是anchor-based的方法。

    transformer利用multi-head attention来减少不同语义信息之间的的语义差距。本文中作者将自己的transformer方法称为M3 transformer,也就是有三个transformer,multi-representation、multi-scale、multi-relation transformer。结构草图如下所示:

    二 核心步骤

    整体框架如下图所示:

    我们的目标是在一个joint embedding space上与transformer进行multi-representation、multi-scale、multi-relation的融合。主要包含如下三大步骤:

    1、使用VoxelNet、PointNet和2D ConvNet为生成相同点云的不同embedding特征。

    2、 使用M3transformer融合这些embedding features,利用multi-representation、multi-scale feature embedding和models mutual relationships之间的相互关系。

    3、使用detection heads network进行3D detection,包括RPN和R-CNN stage。

    2.1 Multi-Representation Feature Embeddings

    原始输入点云,首先将它们编码成三个不同的embedding space,即voxel,point和bird’s-eye-view features。

    1、Points

    通常,在整个点云场景中有超过10K个original points。为了在不消耗大量内存的情况下,有效地覆盖整个点集,采用了最远点采样(FPS)算法采样n个keypoints,记为。采用PointNet++和PV-RCNN的Set Abstraction和Voxel Set Abstraction模块,在原始点云P中获取的point features,在VoxelNet中得到的特征获取的voxel特征

    2、voxel

    这里是使用简单的VoxelNet实现的,如上图中间的VoxelNet流程,最终通过下采样得到voxel features

    3、Bird’s-eye-view

    原文中说是采用VoxelNet的最后一层特征作为输入,得到BEV的features,,然后使用bi-binary interpolation方法,得到的BEV特征(这个地方在上图的下部分看着像是用每一层的voxel feature分别进行BEV得到point的BEV特征,具体做法还要参考代码。)

     2.2 Multi-representation, Multi-scale and Mutual-relation Transformer

    这个步骤的大体思路如上图所示,就是将 作为输入,输入到Transformer中得到输出特征其目的是为了在第二阶段的RoI pooling时,将这一步得到的点的特征作为精细化处理的特征。具体做法如下图所示:

     M3 transformer主要由两大部分组成,Multi-scale and Multi-representation Transformer和Multi-relation Transformer。

     1、Multi-scale and Multi-representation Transformer

     

     2、Multi-relation Transformer

     

     2.3 Detection Heads Network

     这里也就是RPN与R-CNN操作,RPN操作很常规,先选择出一些合适的proposal,之后将这些proposal输入到R-CNN网络中进行更精细化的处理。

     在R-CNN阶段,借鉴了PVRCNN的第二阶段的RoI grid pooling方法,如上图所示,使用M3 transformer得到的n个点的point features作为精细化处理的特征。

      总结 

    本文使用到transformer的方法,在PVRCNN的基础上进行改进,创新点是对transformer进行稍微的改进,效果还可以。

    参考文献

    [1] Guan T ,  Wang J ,  Lan S , et al. M3DeTR: Multi-representation, Multi-scale, Mutual-relation 3D Object Detection with Transformers.  2021.

    展开全文
  • 转存失败重新上传取消 Multi-HeadAttention:多头注意力是将Q,K,V通过一个线性映射成h个Q,K,V,然后每个都计算Scaled Dot-Product Attention,最后再合起来,Multi-HeadAttention目的还是对特征进行更全面的抽取 5、...

    作者:CHEONG

    来自:机器学习与自然语言处理

    一、Attention机制原理理解

    Attention机制通俗的说,对于某个时刻的输出y,它在输入x上各个部分上的注意力,这里的注意力也就是权重,即输入x的各个部分对某时刻输入y贡献的权重,在此基础上我们先来简单理解一下Transformer模型中提到的self-attention和context-attention

    (1) Self-attention:输入序列即是输出序列,即计算自身的attention,计算序列对其本身的attention权重

    (2) Context-attention:即是encoder-decoderattention,如在机器翻译模型中即计算encoder序列中的每个词对decoder序列各个词的attention权重

    二、Attention计算方式

    1620uploading.4e448015.gif转存失败重新上传取消1620

    1、Content-base attention

    论文:Neural Turing Machines

    论文链接:https://arxiv.org/pdf/1410.5401.pdf

    attention相似度的度量使用的是余弦相似度:

    1620uploading.4e448015.gif转存失败重新上传取消1620

    2、Additive attention

    论文:Neural Machine Translation By JointlyLearning to Align and Translate

    论文链接:https://arxiv.org/pdf/1409.0473.pdf

    下面有对这篇论文中的attention实现过程详细介绍,这里不做介绍

    3、Location-Baseattention、General attention、Dot-Productattention

    论文:Effective Approaches toAttention-based Neural Machine Translation

    论文链接:https://arxiv.org/pdf/1508.04025.pdf

    下面有对这篇论文中的attention实现过程详细介绍,这里不做介绍

    4、ScaledDot-Product attention

    论文:Attention is all you need

    论文链接:https://arxiv.org/pdf/1706.03762.pdf

    大家熟悉的Transformer中提到的Attention机制,下面有介绍

    三、Attention发展历程及演变

    1、seq2seq中引入attention机制

    首先attention机制常用在seq2seq模型中,下图一是传统的seq2seq,输出y对输入序列x1,x2,x3...没有区分,没有辨识度,下图二中我们引入了attention机制,每个输出的词y受输入X1,X2,X3...影响的权重不同,这个权重便是由Attention计算,因此可以把Attention机制看成注意力分配系数,计算输入每一项对输出权重影响大小

    1620uploading.4e448015.gif转存失败重新上传取消1620

    (Learning Phrase Representations using RNN Encoder–Decoderfor Statistical Machine Translation论文截图)

    1620uploading.4e448015.gif转存失败重新上传取消1620

    (NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN ANDTRANSLATE论文截图)

    介绍一下上图中attention实现过程

    (1) 首先利用双向RNN结构得到隐层状态(h1, h2, …, hn)

    (2) 如当前已经decoder到隐层St-1,接下来计算每一个输入位置hj对当前位置i的影响

    1620uploading.4e448015.gif转存失败重新上传取消1620

    这里attention的计算方式可以有很多种,点乘形式、加权点乘形式或求和形式

    (3) 对eij进行softmax将其normalization得到attention权重分布,如下所示

    1620uploading.4e448015.gif转存失败重新上传取消1620

    (4) 利用aij进行加权求和得到相应的context vector

    1620uploading.4e448015.gif转存失败重新上传取消1620

    (5) 计算最终输出

    1620uploading.4e448015.gif转存失败重新上传取消1620

    1620uploading.4e448015.gif转存失败重新上传取消1620

    2、SoftAttention和Hard Attention

    (Show, Attend and Tell: Neural Image Caption Generation withVisual Attention论文提出)

    Softatttention是参数化的,是可导的可嵌入到模型中直接训练,上述seq2seq中的即是soft attention;Hard attention是一个随机的过程,为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度,目前更多的研究和应用还是更倾向于使用Soft Attention,因为其可以直接求导,进行梯度反向传播,大致了解一下即可

    3、GlobalAttention和Local Attention

    1620uploading.4e448015.gif转存失败重新上传取消1620

    (EffectiveApproaches to Attention-based Neural Machine Translation截图)

    上左图是Global Attention,右图是Local Attention

    全局Attention和局部attention存在共同之处,例如在翻译模型的解码阶段都是将LSTM的顶层隐藏状态ht作为输入,目标是活得一个上下文向量ct来捕获源信息帮助预测当前单词,两种方式不同便在于对上下文向量ct的获取方式不同,但其后步骤是共享的,即首先由上下文信息和隐藏层信息获得注意力隐层状态:

    1620uploading.4e448015.gif转存失败重新上传取消1620

    然后再通过注意力隐层状态通过softmax获得预测分布

    1620uploading.4e448015.gif转存失败重新上传取消1620

    下面介绍一下全局Attention和局部Attention对上下文向量ct的获取

    (1) Global Attention

    全局Attention在计算上下文向量ct时考虑编码器所有的隐层状态,attention向量是通过比较当前目标隐藏状态ht和每个源隐藏状态hs得到:

    1620uploading.4e448015.gif转存失败重新上传取消1620

    ht和hs之间的计算方式可以采用如下几种:

    1620uploading.4e448015.gif转存失败重新上传取消1620

    当前也可以通过基于location的方式计算attention得分:

    1620uploading.4e448015.gif转存失败重新上传取消1620

    (2) Local Attention

    全局Attention的缺点在于对每个目标单词必须关注源序列中的所有单词,消耗资源因此局部Attention的思想是对每个目标单词只选择一部分源单词进行预测上下文向量ct,具体来说,在时刻t 模型首先为每个目标单词生成一个对齐位置pt。上下文向量ct 通过窗口[pt -D,pt +D] 内的源隐藏状态集合加权平均计算得到;D 根据经验选择。8 与全局方法不同,局部对齐向量at 是固定维度的,即∈ℝ2D+1

    1620uploading.4e448015.gif转存失败重新上传取消1620

    1620uploading.4e448015.gif转存失败重新上传取消1620

    4、Transformer中Attention

    简单说一下Transformer中使用的Scaled Dot-Product Attention和Multi-Head Attention,详细内容可参见博主之前写的文章:Transformer模型细节理解及Tensorflow实现Transformer 模型的 PyTorch 实现

    1620uploading.4e448015.gif转存失败重新上传取消1620

    (Attention is all your need论文截图)

    ScaledDot-Product Attention:通过Q,K矩阵计算矩阵V的权重系数

    1620uploading.4e448015.gif转存失败重新上传取消1620

    Multi-HeadAttention:多头注意力是将Q,K,V通过一个线性映射成h个Q,K,V,然后每个都计算Scaled Dot-Product Attention,最后再合起来,Multi-HeadAttention目的还是对特征进行更全面的抽取

    5、Attention组合使用相关论文

    (1) Hierarchical Attention Networks for Document Classification

    (2) Attention-over-Attention Neural Networks for ReadingComprehension

    (3) Multi-step Attention: Convolutional Sequence to SequenceLearning

    (4) Multi-dimensional Attention: Coupled Multi-Layer Attentionsfor Co-Extraction of Aspect and Opinion Terms

    6、Attention应用领域

    (1) 机器翻译

    (2) 蕴含关系推理

    (3) 文本摘要生成

    四、Attention实例分析

    首先看在Encoder-Decoder中引入Attention机制,如机器翻译

    1620uploading.4e448015.gif转存失败重新上传取消1620

    1620uploading.4e448015.gif转存失败重新上传取消1620

    每个输出的词Y受输入X1,X2,X3,X4影响的权重不同,这个权重便是由Attention计算

    因此可以把Attention机制看成注意力分配系数,计算输入每一项对输出权重影响大小

    下面一张图给出了Attention机制在机器翻译中实际权重计算过程

    1620uploading.4e448015.gif转存失败重新上传取消1620

    首先由原始数据经过矩阵变化得到Q、K、V向量,如下图

    1620uploading.4e448015.gif转存失败重新上传取消1620

    以单词Thinking为例,先用Thinking的q向量和所有词的k向量相乘,使用下面公式:

    1620uploading.4e448015.gif转存失败重新上传取消1620

    这种得到每个单词对单词Thinking的贡献权重,然后再用得到的权重和每个单词的向量v相乘,得到最终Thinking向量的输出

    1620uploading.4e448015.gif转存失败重新上传取消1620

    Attention中缩放的目的是为了加速神经网络的计算

    五、Attention机制实现分析

    1、HierarchicalAttention Network中的注意力机制实现

    1620uploading.4e448015.gif转存失败重新上传取消1620

    HAN结构包含了Word encoder、Word attention、Sentence encoder、Sentence attention,其中有word attention和sentence attention

    解释:h是隐层GRU的输出,设置w,b,us三个随机变量,先一个全连接变换经过激活函数tanh得到ui,然后在计算us和ui相乘,计算softmax输出a,最后得到权重a之后再和h相乘,得到最终经过注意力机制的输出v,下左图是word attention计算公式,下右图是sentece attention计算公式

    1620uploading.4e448015.gif转存失败重新上传取消1620

    HAN中Attention实现核心代码如下:

    1620uploading.4e448015.gif转存失败重新上传取消1620

    attention中mask的作用,下面看一下mask一种实现

    1620uploading.4e448015.gif转存失败重新上传取消1620

    通过将超过seq_length的部分mask称False,然后将mask为False的部分弄成无穷小,这样在反向传播时无穷小倒数为0,防止消息逆向传播

    下面也是mask的一种实现方式,下面通过add和mul两种方式实现上面所说的mask

    1620uploading.4e448015.gif转存失败重新上传取消1620

    2、Transformer中Multi-Head Attention实现

    可参见之前的文章:Transformer模型细节理解及Tensorflow实现

    展开全文
  • 举个例子,比如我们有8个“Multi-headAttention”,输入一个“X”会计算出8个权重Attention输出的矩阵。那这8个矩阵怎么用呢?我们还需要把8个矩阵拼起来,然后用一个降维矩阵对它进行矩阵操作,把它压缩到一个我们...

    于恒:直播间的朋友大家好!欢迎大家来到本次AI科技大本营公开课,我是本次讲师于恒。

    在讲课开始之前先简短的做个自我介绍,我是博士毕业于中国科学院计算技术研究所,方向是机器翻译的方向,目前在阿里巴巴翻译平台担任翻译模型组负责人,主要是为阿里巴巴的跨境电商贸易提供丰富的语言支持,让跨境贸易没有语言障碍。

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    今天非常高兴受到CSDN AI科技大本营的邀请,给大家分享自己在机器翻译方面的研究和工作。大家可以看到我PPT下面的几个 LOGO,我们翻译团队是属于阿里巴巴机器智能技术实验室,中间是阿里翻译的 Logo和我们的口号“Translate and Beyond”。

     

    这次分享的题目是“Transformer新型神经网络在机器翻译中的应用”。

     

    关注AI的同学最近应该会看到,机器翻译是一个比较活跃的领域,很多大公司都争先推出了自己的机器翻译服务,包括还有一些机器翻译的硬件已经在市场上投放,比如翻译笔。

     

    产业的兴旺离不开背后技术的巨大进步,从今天的课程当中,我会给大家介绍背后技术的神秘面纱,然后对Transformer这个神经网络做深入的解析。

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    神经网络机器翻翻译是目前比较主流的机器翻译方法,它是“Sequence to Sequence”model,也就是端到端的翻译框架。如左图所示,我们输入一个待翻译的句子,通过神经网络编码器,去把这个句子的信息编码成中间状态,就是这个图中红色的部分,它用数值的隐层来表示。经过中间状态、经过神经网络解码器去生成对应的翻译,是编码、解码的过程。翻译的知识和参数都是由神经网络自动进行学习的,它省去了之前传统方法之前的人工干预模块,使整个翻译过程统一化,并且简洁。

     

    随着深度学习发展带来的红利,这个翻译模型的性能有显著提升。如右图所示,这是谷歌翻译当时Release的数据,传统的是基于短语的翻译系统,翻译的性能远低于基于神经网络的翻译,就是那根绿色的线。并且神经网络的翻译在某些语项上是接近人类的水平。我们还可以注意到,在“英语到西语”、“英语到法语”,同样是拉丁语系的翻译上,神经网络的翻译和human的gap比较小,在“英语到汉语”这两者语言差异比较大的、翻译难度大的语种上gap比较大,所以神经网络仍然有比较大的进步空间。这是目前神经网络目前翻译的总体质量情况。

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    它背后的技术是怎样呢?从这个图可以大概看出来传统的基于RNN的“Sequece to Sequence”model是怎么运行的,这个例子是一个“英文到中文”的翻译,英文“Economicgrowth has slowed down in recent years”通过这个循环的RNN神经网络去逐词读入源端的句子,最终把它编码成红色那个点隐层的信息,根据这个隐层的信息输入到另外一个目标端的循环神经网络,然后逐词生成中文的翻译“近几年经济发展变慢了。</s>”这里的</s>是一个句子结束符的表示,生成的过程在句子末尾添加这样一个标志表示翻译过程结束了。

     

    传统的RNN神经网络结构是可以处理任意长度的输入,它非常适合于自然语言的建模,所以它在一段时间内占据了整个神经网络中的主流。随着学术的发展,我们也会看到RNN有些不足,它的缺点主要有两点:第一点,RNN序列的特性导致其非常难以并行化,从上图可以看出,如果把RNN展开来是一个序列型的网络,比如我要得到X4的结果时,必须先计算出X0-X3的结果,这样的串行关系使它的并行度非常低。举一个例子,谷歌的GNMT的神经网络系统,它是需要96块GPU卡训练一周的时间才能完成一个模型的训练。96块GPU卡对于一个研究机构或者小公司来说是个巨大的开销,基本是负担不起的,并且还要训练一周的时间,所以RNN特性使整体模型训练速度非常慢、成本非常高。

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    另外在RNN训练中,RNN的网络结构对于长距离和层级化的依赖关系难以建立,比如句法信息、指代信息的关系,由于它只是一个单一的序列 ,所以它很难对这些关系进行建模。举个例子,“The dog didn’t cross street because it wastoo tired”,当我们看到“tired”的时候知道这个it指dog 。如果把最后一个词换了,“The dog didn’t cross street because it was too wide”,这时候如果是人看了这句话就很容易发现it 指的是street,因为street because it was wide,不可能是dog too wide。对于人来说很简单,但是机器要分清楚指代关系是非常难的。如果将这个句子翻译成法文或者德文的话,法文、德文对于dog和street翻译所用的格是不一样的。所以在GNMT或者传统的翻译处理中,这些case时基本是做不对的,如果做对了可能也是蒙的,这是RNN一个比较显著的局限性。

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    基于以上RNN的缺陷,我们肯定希望有更好的神经网络去代替它。我们期望是这样的:第一,它是可以高度并行化的网络。RNN的特点导致我们要抛弃RNN的结构,实现速度成倍的提升。并且我们需要能够捕捉层次化的信息,就需要建立一个很深层的神经网络,而不是单层的一个序列的LSTM的网络。并且我们需要能够对指代信息丰富的上下文进行建模,这需要Self-Attention、Multi-head Attention这样的技术。左边这个演示的是Transformer整体的训练过程,在Encoding的部分简单可以看到,每个词是很并行化处理的过程。在Encoding之后Decoding是根据深层神经网络当中的输入不断逐词解码,最终生成翻译。

     

    这引出我们今天讲座的主题,将会分四个部分对Transformer进行解析

     

    • 第一,对网络结构进行解析;
    • 第二,对在机器翻译中的应用进行介绍;
    • 第三,因为我是从阿里翻译过来的,所以我会从工业实践的角度对Transformer进行介绍。我们最近参加了WMT2018全球机器翻译评测,拿到了比较好的结果。
    • 最后,从评测的结果对Transformer的表现进行分析。

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    ▌一、对网络结构进行解析

     

    Transformer这个网络命名,Transformer在英文翻译过来有变形金刚的意思,我想当时作者也是希望借助强大的变形金刚赋予这个网络更强的力量。

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    如果我们用放大镜高维度解析这个网络,拆开之后它仍然是“Sequence to Sequence”框架进行的,它分Encoder和Decoder两部分。我们再进一步细化的话,这个图包含很多信息。首先,我们看到Encoder有6层,Decoder也有6层,为什么要有多个层?从Encoder的角度,低层的Encoder是表层的词法信息,逐步向上进行抽象之后,在上层将表示抽象语义信息。Encoder部分还在最上层连了几条线到每个Encoder的部分,这就是刚才谈到Attention的部分,Decoder的网络中和Encoder也有信息传递和交互的。最后一个特点是Decoder和Encoder画的大小是一样的,因为它们层的维度大小是一样的。这个图表达了以上这些信息。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    多层的神经网络结构能够对句子层级化信息进行建模,如果我们更精细的去看每一层的结构,就会发现这样的情况:Encode分两个子网络部分,第一个是Self-Attention,第二个部分是Feed Forward,大家比较熟悉,就是传统的前馈神经网络,我们摒弃了传统的并行化比较低,而且比较简单且高度并行化的前馈神经网络。

     

    Self-Attention是自注意力机制层,表征句子当中不同位置词之间的关系,是我们前面提到的it和street 或dog之间的依赖关系。Decoder层比Encoder层多一个子网络,就是Encoder-Decoder Attention,它是源端到目标端的注意力机制,对源端词到目标端的助理机制,不是源端到目标端词的依赖关系,用到翻译里是说这个源端待翻译的词和源端生成翻译词之间的依赖关系。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    我们如果进一步对Encoder部分进行细化,它长成这样。我们输入代翻译词是“Thinking Machines”,先会去查找这两个词分别表示成词向量的形式,再经过Self-Attention层得到Attention的输出,再经过Feed Forward自动生成Encoder1的输出,Encoder1的输出作为Encoder2的输入,这样以此类推,6层一直拼到上面去。在整个Encoder网络中,Feed Forward是大家比较熟悉的部分,但应该大多数观众的情况并不太了解Attention,因为它是神经网络机器翻译中提出的概念,在其他的网络这种概念并不常见。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    下面我们对Attention这个概念给大家进行进一步剖析,什么是Attention?从语言学的角度,它是表示词与词之间的关联关系,像下图所示,这是一个Self-Attention的示意,它这个it会和其他位置的词发生关系,颜色越深的是说关系越紧密,从中图中看到它很正确的关联到了animal它实际指代的一个词。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    从机器学习的角度,这个Attention是神经网络隐层之间一个相似度的表示,什么是Self-Attention?就是表示句子内部词与词之间的关联关系,就像这里的it到animal,可以用于指代消解等问题。什么是“Encoder-DecoderAttention”?就是编码序列和解码中词与词的关联关系,以机器翻译为例,它是表征翻译中源端到目标端可能互译词之间的对应关系。这个也比较好理解,比如你在翻译一个词的时候,源端每个词的贡献度是不一样的,它表示这种不同的注意力的关系。传统的Attention,就是RNN、LSTM网络中也是有Attention的,但是Attention的计算方式是相对简单的,蓝色是编码器的序列,红色是解码器的序列,当解码器序列当中的一个隐层是Attention的时候,它会这个层与Encoder每个层之间的相似度,然后通过这个相似度作为位置对Encoder每一层进行加权,生成Ct,Ct就是整个Attention的输入。这是一个比较简单的Attention计算,但是它的表现能力是非常有限的。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    我们在Transformer中提出一种扩展性更高、并行度更高的Attention计算方式,它把Attention看作一个基于内容的查询的过程,content based query,它会设置3个vector:QueryVector、Key Vector、Value Vector。并且每一个Vector都是通过它的input embedding和权重的矩阵相乘得到的。我们利用这个Q、K、V进行各种数值的计算,最终得到Attentionscore。这个计算过程是相对复杂的。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    我们用一个例子来给大家演示一下具体的Attention是怎么计算的。如果我们计算“Thinking”这个词,用Self-Attention的话,首先会用它的Query Vector乘以K的向量,如果计算和第二个位置的attention是乘以T2的矩阵得到一个score,这个score再去和它维度的平根根进行相除,这个相除有数学上的含义,能够使它回传的梯度更加稳定,除完后得到一个数值进行softmax,所有Attention都是正数并且相加之和等于1,这是从数学正确上考虑,并且最终得到概率这个值是去定义每一个词在当前位置的表现力。Softmax之后,我们会用softmax得到的乘以它Value的矩阵,这样实际得到Attention的值,最后会把不同位置得到Attention的score加到一起,形成当前位置Attention的Vector,就是Z1,加上逐词计算的话就得到所有位置的Attention。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    刚才说到的是一个基于向量之间的运算,但是根据提到Transformer系统是一个高度并行化的系统,所以我们有一个很好的并行策略,就是基于将Vector计算变成基于矩阵的运算,因为我们在Encoder时所有的词都是并行计算,我们把所有词的词响亮拼在一起形成矩阵,用这个矩阵和它的Q、K、V的权重矩阵进行相乘,方便得到Q、K、V矩阵,Q、K、V矩阵用一个公式表示数值操作,就得到Attention的矩阵,这是一个高度并行化的操作,可以通过一步运算直接完成的,这个在GPU上很容易、速度很快。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    这是Attention的一种计算方法,我们对计算方法进行了拓展,提出了“Multi-head Attention”的方式,就是“多头”Attention,我们设置多个Q、K、V矩阵和它实际值的矩阵。它这样设计是有两种好处,第一种好处是它的可训练参数更多,能提升模型能力,去考虑到不同位置的Attention,另一个好处是对于这个Attention赋予了多个子空间。这个从机器学习的角度来说,首先参数变多了,拟合数据的能力变强了。从语言学是这样的,不同的子空间可以表示不一样的关联关系,比如一个子空间是表示指代的Attention,另一个子空间可以表示依存的Attention,另一个子空间表示其他句法信息的Attention,它能够综合表示各种各样的位置之间的关联关系,这样极大的提升了Attention的表现能力,这是传统的RNN、LSTM系统当中所不具备的,也是最终实验时会对性能有巨大影响的一个工作

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    举个例子,比如我们有8个“Multi-headAttention”,输入一个“X”会计算出8个权重Attention输出的矩阵。那这8个矩阵怎么用呢?我们还需要把8个矩阵拼起来,然后用一个降维矩阵对它进行矩阵操作,把它压缩到一个我们能够相对接受的大小,对于信息进行压缩,这样可以避免后面矩阵操作维度过大导致整个开销比较大。所以它最终会压缩到一个比较小的维度。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    以上就是Transformer当中Attention机制的计算,从Big picture来看,它分几个部分:第一个部分是我们找到输入的句子,第二个部分去生成它的词向量的表示,并把它拼在一起,拼成matrices,这个matrices去和Q、K、V的权重矩阵进行数值运算,得到Q、K、V三个矩阵的数值,三个矩阵的数值通过之前的公式得到Multi-head Attention的值,Multi-head Attention拼在一起,通过一个降维矩阵,最终压缩到我们觉得比较合适的一个维度,来作为Attention子网络的输出。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    以上是Attention的主要内容,当然,Transformer还有其他的网络,也可以给大家介绍一下。“Positional Encoding”是对于这个序列中每一个位置进行建模

     

    刚刚提到完全并行的矩阵操作时,大家可能会有一个疑问:这个不是一种指代模型吗?之间位置不考虑了,但不同位置在翻译中是很重要的关系,就是哪个词在哪个词前面,前后关系有非常大的意义。我们通过这个“Positional Encoding”去对位置进行建模。具体的时间、方法,我们对每一个词的embedding会加一个基于位置的embedding,S1会加一个T1,这个T1是和它的位置相关,位置就是编码第0个位置、第1个位置,依次打下去。这个T是根据这个公式计算的,这个公式是数学上选择比较好的一个公式,并且它和实际的Position是相关的。举个例子,如图所示,这个三个词的句子,每个位置的positionEncoding的数值大概是这样的,它通过这个数值加到原始的embedding上面,使这个embedding天然具有了它的位置的信息,在后面建模过程中我们会考虑每个词位置的信息。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    另外一个是直连层网络“Residual connection”,了解的同学知道“Residual connection”是对于较为深层的神经网络有比较好的作用,比如网络层很深时,数值的传播随着weight不断的减弱,“Residual connection”是从输入的部分,就是图中虚线的部分,实际连到它输出层的部分,把输入的信息原封不动copy到输出的部分,减少信息的损失。“layer-normalization”这种归一化层是为了防止在某些层中由于某些位置过大或者过小导致数值过大或过小,对神经网络梯度回传时有训练的问题,保证训练的稳定性,这是神经网络设计当中两个比较常用的case,基本在每个子网络后面都要加上“layer-normalization”、加上“Residual connection”,加上这两个部分能够使深层神经网络训练更加顺利。这是另一个主要的细节。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    小结一下,刚才对神经网络做了比较详细的解释,它如下图所示,图里面画了两层的Encoder和Decoder,曾底层的词的输入到embedding的输入,X1、X2,加上“Positional Encoding”的输入,输入到第一个Encoder当中,经过self-Attention层,直连的“Residual connection”和归一化层,得到的输出再去输入到前馈神经网络中,前馈神经网络出来之后再经过直连层和归一化层,这样就完成了一个Encoder部分,再以这个输入到第二个Encoder之后,它会把第二个Encoder的输出作为第一个Decoder的输入,也是依次进行上面的过程。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    这个图中有一个细节需要大家注意,目标端的Attention注意力机制是一个masked注意力机制,为什么?比如在机器翻译当中,在源端能够看到所有的词,但如果你目标端生成翻译时是自左上右,生成翻译时能够看到前面已经生成词的信息,看不到后面层的,这是目标端Attention和源端Attention比较大的区别,所以在目标端所有的Attention都是加Masked的,这个Masked相当于把后面不该看到的信息屏蔽掉,这是Transformer network的小结。

     

    ▌二、基于Transformer的机器翻译系统

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    Transformer的网络是怎么用到机器翻译里的?Encoder端是源端的法语句子,目标端是英语的句子,随着时序的不断进行,每次生成一个词的翻译,最终它会生成一个<EOS>的符号,这个符号表示整个解码过程结束了。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    它是怎么生成每一个词的翻译呢?因为我们知道Decoder最上层的输入也是一个隐层,是2048或者1024的隐层。那么这个隐层是怎么对应到输出的那个词呢?后面的网络是这样的。首先,我们对每种语言会有一个固定的词表,比如这个语言到底有多少个词,比如中文里有2万词、3万词、5万词。对网络隐层会先过一个线性的投射层,去把它投射到一个词表大小的向量维度,形成一个词表大小向量,我们在这个向量基础上做softmax,把它转成概率。譬如是3万的词,去选取里面概率最大的那个词作为我们实际的输出,这里面第五位是最大的,它会输出一个am,这样就达到了通过Encoder输出隐层来去实际生成一个词翻译的效果。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    另外一个部分是神经网络优化目标,在神经网络训练的过程中是需要平行语料的,所谓平行语料是源端和目标端都需要有。我们训练的目标是使神经网络生成这个翻译的概率分布尽量去贴合实际参考答案的概率分布。右边这个图我们希望它生成的概率分布,对于那个句子在第一个Position的时候希望i的概率是最大的,第二个希望am是最大的,以此类推。但这是训练好的,一开始训练时是随机处理化的概率分布,经过几千万句子的不断训练,会得到这样一个比较好的分布。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    它的训练优化目标是概率的交叉熵cross entropy,以crossentropy作为梯度更新的优化目标。(上图)左边这个图优化目标的loss相当于它训练的轮数,因为是entropy,所以是稳定下降的过程。相应的,翻译的评价目标Bleu值是匹配度加权的分数,Bleu值越高越好,它随着训练过程的进行会有一个逐步向上升的过程。训练的优化目标就是这样的,通过交叉熵的优化来达到Bleu,就能翻译效果优化的过程。

     

    我们看看Transformer的结果是什么样的,回到最开始的例子,用Trans网络对于句子的Attention进行了分析。得到了比较有意思的结果,(下图)左边这个句子,当最后一个词是too tired的时候,it所对应到的注意力机制最多的部分是animal,这是它对应到正确的部分,如果最后一个词是wide的时候它对到street是最多的。这样就非常有意思,Attention其实确实能够建模到比较难的指代消解问题,这也是比较好的,超越之前RNN和STLM的,就是Attention表示能力更强。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    (上图)右边这个表是列出谷歌公布的数据,基于RNN的GNMT和Transformer的比较,在bleu值上Transformer有比较明显的提升,并且它在训练的时间上面只需要8块GPU卡,训练4.5天就可以达到一个比较好的模型,而传统的基于RNN需要90块GPU卡训练6天才,效果还不如Transformer的翻译系统。这相比原来的RNN有一个非常显著的提升,是目前工业界、学术界对于机器翻译来说最好的智能网络。

     

    刚才对Transformer有了详尽的介绍,下面说一下Transformer在阿里翻译当中的表现。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    ▌三、Transformer在阿里翻译中的工业化实践

     

    刚刚提到工业化实践,最大的一个问题是大数据,传统的实验室环境是几十万、几百万的语料,但对阿里这样大规模电商场景的机器翻译是需要很多语料的,需要上亿平行语料的训练,但对这么多平行语料用单GPU卡训练非常慢,基本是训不出来的。

     

    第一个需要解决如何使用分布式训练,就是多机多卡的方式来去训练Transformer。但是Transformer的特点是对于训练超参数非常敏感的网络,我们当时尝试了各种各样的训练方法,试了异步梯度更新、同步梯度更新等不同的分布式训练策略。我们最终发现是基于同步的Adam,对于多机多卡是得到性能最稳定的一个更新方式

     

    这种方式在谷歌开源的那个Transformer系统和其他比较开源的Transformer系统中,大多数都是用这样的方式来进行多机多卡训练的。这个背后理论上也没有很好的解释为什么这个对于Transformer是更好的,主要是通过大量的实验去得到的一个结果,大家如果有多机多卡的训练需求,最好考虑基于同步梯度更新的Adam算法

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    另外一个是跟机器翻译很相关的问题,通常GPU显存有固定的大小,比较差的卡是4个G、几个G,好的卡可能有12个G、24个G。对于Transformer而言,有些人做过实验,你如果训练时开更大Batch size,训练的效果会更好。这就带来一个问题,你如果想开大的Batch size的话,一个句子里面的长度就会很有限,因为你显存就那么大。假设长度设成40的话,那我Batch能开400或者500,如果我要开到800 Batch的话,能容纳的句子长度就会变小。这是一个搏弈的问题,因为硬件的限制导致你不得不做这个Tradeoff。

     

    之前我们在TensorFlow低版本的时候都是不支持,只能用刚刚的方法。但是从tensorflow1.5以后,它引入了一个“Dynamic Batching”的机制,这是tensorflow的更新带来的变化,它会把原来写死的固定长度的图,用图中循环的方式表述,这样它可以支持动态的计算图,了解tensorflow的同学会比较清楚。通过用了这种机制之后,我们可以动态的改变这个batchsize,好处是当我们训练这个句长比较长的时候,就可以动态的把batch size缩小 。这样可以在训练的时候覆盖更长的句子,长的句子在翻译的案例中都有,比如电商描述或者新闻都有很长的句子,这样我们就能得到更多的训练语料,训练语料使用更加充分,对我们生产时性能得到很大的提升。

     

    另外一个是“Moving average”机制,这个可能也是比较专业的一个说法,它能保证训练的稳定性。它主要的做法是,在训练比如5000个保持一个模型,中间模型有一个滑动的窗口,每次计算时会把窗口内所有的模型进行平均化。这个平均化有几个作用:第一个作用是可以避免脏数据带来的某个点梯度更新很差的情况,它每次都是多个模型去做平均化,这样模型更加稳定,另外,借助专家系统的机制,把多个模型的结果组合在一起,它得到的性能也会有一定的提升。需要指出的一点是,如果你训练当中用了这个策略,生成模型之后再用“Moving average”的时候性能是打折扣的,因为训练当中已经用了“Movingaverage”机制,把这部分的性能释放出来一些了。但总体上我们推荐使用“Moving average”机制,这样会使整个训练更加稳定。

     

    提升模型鲁棒性的算法“Dropout”,这是机器学习或者神经网络中比较常见的机制,但是在真实场景中非常好用的一个机制。Dropout是在每层神经网络中随机屏蔽掉一些单元的神经输入,一般Droput是0.1,我们会屏蔽掉10%的输入,因为屏蔽掉10%的信息,模型需要学得更好,它的鲁棒性更加好。我们也做了相关的实验,黄色的线是基线系统,蓝色的线是Dropout,加入了Dropout时一开始模型训练得比较慢一些,但训练时间长了之后由于鲁棒性的提升,最后的曲线是会在那个之上的,最终收敛的性能也比那个更好。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    这是在训练过程中的一个小的改进,主要是我们在大数据生产时,如何训练数亿级别语料规模的Transformer的重要手段。

     

    ▌四、Transformer在WMT2018全球机器翻译评测中的表现

     

    大家不知道这个评测或者对机器翻译不熟悉的话,我可以给大家介绍一下。这个评测是国际公认的顶级翻译赛事之一,也是各大科技公司与学术结构展示自身翻译实力的一个平台,2018年有很多霍普金斯大学、爱丁堡大学、亚琛工业大学、马里兰大学、微软、腾讯等很多机构参与,我们也取得了比较好的成绩。阿里巴巴翻译团队在WMT2018上“英文到中文”、“英文到俄罗斯语”、“英文到土耳其语”5个语项上获得了第一名的成绩,这个图也是最终比赛的冠军图。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    从这个竞赛可以反映出一个特点,就是Transformer在2018年竞赛中已经获得非常普遍的认同,80%以上的系统都是采用Transformer,这是个非常惊喜的改变。在2017年WMT评测时大多数系统是基于RNN和LSTM的系统,包括最终获得冠军的系统也是基于这个的。仅仅过了一年时间,各大机构都争先使用的Transformer。这个是系统描述的图,参赛的几个系统当中大多数都有Transformer的关键词,还有一些其他一些基于RNN等系统是凤毛麟角的。所以Transformer网络在机器翻译领域已经受到广泛的认可。

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    这里给大家推荐几个比较好用的基于开源的机器翻译Transformer系统,在开源时代方便大家更好的学习,你有足够的语料,通过这些开源的机器翻译工具也可以搭建一个性能比较好的机器翻译引擎。主要推荐三个,第一个是Marian,是爱丁堡大学公开的开源工具,非常好用;第二个是 Nematus,也是爱丁堡大学开发的;第三个是 Sockeye,是亚马逊推出的机器翻译工具。感兴趣的同学可以去网上下载并使用这些工具去学习,看它里面的代码是如何实现的。

     

    回到竞赛的部分,Transformer从竞赛的角度有哪些经验?我这里分享了几点,做评测跟做工程很不一样,评测是限定的数据级,在限定的数据级上达到极致的效果,我觉得有四点:

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    • 第一,精细的数据过滤和筛选,不会投入大量的精力用于基础语料集合确定,主办方会给你一个语料集合,但这个语料集合里有一些噪音或者不好的语料,怎么通过各种规则、分类模型选择或者基于n-gram过滤等等,去选择一个比较好的技术语料集合,这是花大力气做的,因为如果底层技术都不好的话,训练出来的上层建筑肯定是不行的。

     

    • 第二,相信统计的力量。这是神经网络模型一个新的特点,成绩比较好的单位都训练很多模型,并且用很多策略训练不同的模型,最终用这些不同的模型去进行Ensemble learning或者进行组合,最终输出一个最好的系统。比如阿里可能会做100多个系统,采用Ensemble learning的方式。这也是成本越来越大的问题,为了达到更好的性能,我们需要介入更多GPU资源支持更多模型的训练,最后去达到这种微小几个点的性能提升。

     

    • 第三,尽量用更多参数去合数据和领域,因为它的数据和领域都是很限定的,所以你需要去用更多的方法、更多的策略去拟合策略,比如Modelfine-tuning的策略,做微调的策略,你可以筛选更适合这个领域或者更拟合这个开发测试集的数据,去对你的model去进行fine-tuning。另外,还可以做global features去做Re-ranking,Re-ranking也是对性能有一定提升的点,你在翻译时可能只看到部分信息,但是当你的翻译都生成之后,可以提取更多双语的信息,去对开发集调一个更好的模型。

     

    • 第四,尽可能用更多信息,因为主办方提供双语料的同时会提供大量的单语料,单语料可以有不同的方式,比如用Back-Translation的方式把它翻译回来,然后加入到你的模型里作为伪语料,伪的生成的双语语料加入到翻译系统里去训练,并且还可以去训练一个大规模的n-gram语言模型或者神经网络模型,最终加到Re-ranking模块里去调性能。

     

    主要就这四点,其他的信息也期待WMT在后面Release出来的paper,我们会在文章里详细进行介绍。今天我们就结束了整个的介绍内容。

     

    ▌五、总结

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    Transformer新型神经网络的主要特点:

     

    • 第一,并行化。并行化程度非常高。
    • 第二,深度神经网络,可以表征层次化的信息。
    • 第三,有复杂的Attention机制,可以表征指代消解或者各种不同词与词之间的依赖关系。
    • 第四,性能非常好。

     

    工业实践方面提出了:Synchronous Adam,Dynamic batching,Moving average,Dropout。四项比较实用的、值得尝试的方向。

     

    竞赛经验方面:多模型ensemble,Fine-tuning,re-ranking,back-Translation这样一些竞赛比较适用的方法。也是从多维度给大家展现了Transformer的全貌。

     

    ▌六、对外思考和对目前Transformer问题的思考,我们还有哪些地方缺失了?

     

    Transformer新型神经网络在机器翻译中的应用 | 百万人学AI

     

     

    这是我参考微软刘教授的报告,我读完他的报告之后比较认同的几个观点:

     

    第一个问题,我们在训练过程中提到优化目标是最大概率的优化目标,但是我们实际在去评价翻译质量时是用bleu去衡量的,这样等于优化目标和衡量的目标是不一致的,这样会带来一个显然的问题,就是优化目标和实际目标之间总是会存在差异的。给大家推荐两个可能的解决方案:第一个是MRT,ACL2015年提出的工作,把bleu值加入到神经网络优化目标方向之中。第二个是NAACL2018年的工作,利用GAN网络,用对抗网络的形式去对优化目标进行表示,这样也是能够使训练的优化目标和实际的评价目标能够一致的一种方式。

     

    第二个问题,它还是需要大量的平行语料的数据,也就是标注数据。这个是对于一些小语种语言,比如东南亚的小语种平行语料是很稀缺的资源,如何对这些资源稀缺的语言搭建更好的翻译系统呢?目前有两个方向,一个是Unsupervised neural machineTranslation,这个做得比较好的是Facebook,目前走得比较远,它是利用完全非平行单语的语料去训练机器翻译系统,目前性能还不足够好,但它仍然在发展过程中。另外,微软也提出基于dual learning方法,也是通过非平行语料,通过dual learning的方式提升性能,也是一个比较值得尝试的工作。

     

    第三个问题,它在生成翻译过程中是依赖知识搜索的。这个问题在于搜索是需要减值的,减值的标准是概率的大和小,但你在训练时是没有这个概念的,你的训练时是根本不会考虑到beam search的问题,但是在实际解码时对beam search模型是未知的,那在训练过程中如何把你搜索的过程也建模进去,这是一个比较好的方向。当时刘老师提到他想用AlphaGo基于reward计算的方式在模型训练的阶段去训练这个网络,你在每步beam search的时候它会给你计算一个reward,通过这个reward来进行减值,这样可以把训练和解码两者结合到一起,是个更好的解决方案。

     

    第四个问题,由于Transformer它Attention的数据运算是比较复杂的,在生成翻译解码的阶段比较慢的,这是由于Attention的构造而导致的。这里给大家推荐的是基于AverageAttention Network(Zhang,ACL2018),它巧妙的改变了Attention的结构,最后可以很高效的计算出目标端的Attention,在性能不受损或受微小损失情况下有2-3倍的性能提升。未来期待更多能在Transformer上改进的工作,把神经网络推向更高的位置。

     

    ▌七、Q&A

     

    以上是本次讲座的主要内容,现在是问答环节。

     

    Q:为什么Conv Seq2Seq 不如Self-Attention?

     

    A: Conv Seq2Seq是基于CNN的一个比较新的工作,是Facebook提出来的,这个众说纷纭,它在CNN上是比较好的,在性能上大家也都试过,大部分反馈不如谷歌提出的Self-Attention。从我个人观点来说,它在Attention计算上不然Transformer,所以它可能掺杂这个部分。

     

    另外,Facebook没有投入更多人力去优化这个,而Transformer从一开始到后面迭代了很多版本,一开始性能可能不是那么好,但后来谷歌持续投入、维护、不断升级,从去年6月份提出开始一直到12份都有代码的更新 ,包括其他的像发电报大学也都跟踪这个方向,众人拾柴火焰高,大家不断投入这个领域,能够把这个越做越好。

     

    Q:Transformer中三个地方用到的Attention能不能分开讲一讲每个地方的输入输出?

     

    A: 这个是刚才给大家Miss掉的地方。回到之前的Attention计算方式的部分,看这个主要的图,是Encoder的部分用的是Self-Attention的部分,decoder用了Self-Attention和一个Decoder Attention,这确实是三个地方用到。第一个地方在Encoder端的输入是加了“Positional Encoding”的word embedding,直接输入到这个了Self-Attention里,输出是刚才提的的z矩阵,再输入到Feed Forward network里。

     

    Decoder的部分也是一样,之前每次生成的词作为输入,然后加到PositionalEncoding之后输入到Self-Attention里,Encoder就是Self-Attention的输入。

     

    Q:问了一个和阿里相关的:“阿里做电商描述训练的时候,如何解决领域内数据不足的问题”?

     

    A:这是个比较具体的问题,首先,电商场景是阿里的一个重要场景,我们做电商时会收集一部分电商类的数据,阿里巴巴内部也有淘宝比较丰富的数据。有了这个以后会有基于n-gram或者基于分布式的筛选模块,基于这些之前互联网上收集到的大规模语料库中筛选相关的句子,得到充足的领域内的语料,领域内的训练语料应该越多越好。

     

    Q:推荐一下深度学习、机器翻译方面的好书。

     

    这个可以给大家推荐最近邓老师和清华大学刘老师合作发表的一部英文书,叫《Deep Learning in Natural Language Processing》,邓老师是语音识别方向的大牛,任老师是机器翻译、自然语言处理方面的大牛,这本书是2018年最新出版的,这本书会包含最新的机器翻译、神经网络内容,大家有兴趣的话可以考虑一下。

    展开全文
  • In the Decoder layer\textbf{In the Decoder layer}In the Decoder layer   在 DecoderLayerDecoder LayerDecoderLayer中, Multi−Head attentionMulti{-}Head\,attentionMulti−Headattention与 ...
  • 第一层是Multi-HeadAttention,所谓多头可以理解为有多组注意力权重,则每个位置可得到多个目标向量,然后将这多个目标向量拼接成一个向量即为该层输出,这可能是作者认为词与词之间会存在多种相关关系吧。...
  • 整体框架2.Attention结构2.1Attention定义2.2 ScaledDot-ProductAttention(缩放点积注意力)2.3 Multi-HeadAttention(多头注意力机制)3.1 PositionEmbedding(位置嵌入)3.2 Position-WiseFeed-forwardNetworks...
  • 除了与每个编码器层中的相同两个子层之外,解码器还插入第三个子层(Encoder-Decoder Attention层),该层对编码器堆栈的输出执行Multi-HeadAttention。与编码器类似,我们在每个子层再采用残差连接,然后进行层标准...
  • Encoder 由若干相同的 layer 堆叠组成,每个 layer 主要由多头注意力(Multi-HeadAttention)和全连接的前馈(Feed-Forward)网络这两个 sub-layer 构成。 Multi-Head Attention 在这里用于实现 Self-Attention,...
  • 输入:encoder输出的word embedding与输出的position embedding求和做为decoder的输入 第一个Multi-HeadAttention + Add&Norm命名为MA-1层,MA-1层的输出做为下一MA-2层的 Q Q Q输入,MA-2层的 K K K和 V V V输入...
  • 编解码器有一种特别的结构:Multi-HeadAttention的输出接到Feed-forward layer之间有一个子层:residual connection和layer normalization(LN),即残差连接与层归一化。残差连接是构建一种新的残差结构,将输出...
  • 深度迁移学习十八问

    2020-03-09 16:08:55
    图5: 基于attention的seq2seq BERT使用multi-head attention机制, multi-head的输出是如何拼接在一起的?维度大小是多少? 答:mutli-head attention的计算过程如下图所示: 图6: Multi-head attention计算过程 ...
  • 深度解读机器翻译

    千次阅读 2020-03-07 12:08:19
    除了与每个编码器层中的相同两个子层之外,解码器还插入第三个子层(Encoder-Decoder Attention层),该层对编码器堆栈的输出执行Multi-HeadAttention。与编码器类似,我们在每个子层再采用残差连接,然后进行层标准...
  • Multi-HeadAttention 在这里用于实现 Self-Attention,相比于简单的 Attention 机制,其将输入进行多路线性变换后分别计算 Attention 的结果,并将所有结果拼接后再次进行线性变换作为输出。参见图2,其中 Attention...
  • • encoder self-attention(黑框):使用 multi-head attention,输入的Q、K、V都是一样的(input embedding and positional embedding) • encoder-decoderattention(黄框):使用multi-headattention,输入...
  • 输入:encoder输出的word embedding与输出的position embedding求和做为decoder的输入 第一个Multi-HeadAttention + Add&Norm命名为MA-1层,MA-1层的输出做为下一MA-2层的 QQQ输入,MA-2层的 KKK和 VVV输入(从图...
  • Deep Transition RNMT, GRU, Multi-Head Attention 5 GitHub源码 https://github.com/fandongmeng/StackedDTMT 6 论文PDF https://arxiv.org/pdf/1812.07807 二、相关背景   Encoder-...
  • =Value,注意力函数变为 变种3-多头注意力:多头注意力(multi-headattention)是利用多个查询Q = [q1, · · · ,qM],来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分,然后再进行拼接 ...
  • 2.1.3多头注意力   多头注意力(Multi-HeadAttention)是利用多个查询=[1,⋯,],来并行地从输入信息中选取多组信息。每个注意力关注输入信息的不同部分。 其中⊕表示向量拼接。 2.1.4结构化注意力   在之前介绍...
  • 举个例子,比如我们有8个“Multi-headAttention”,输入一个“X”会计算出8个权重Attention输出的矩阵。那这8个矩阵怎么用呢?我们还需要把8个矩阵拼起来,然后用一个降维矩阵对它进行矩阵操作,把它压缩到一个我们...
  • 举个例子,比如我们有8个“Multi-headAttention”,输入一个“X”会计算出8个权重Attention输出的矩阵。那这8个矩阵怎么用呢?我们还需要把8个矩阵拼起来,然后用一个降维矩阵对它进行矩阵操作,把它压缩到一个我们...
  • Transformer会在三个不同的方面使用multi-headattention: 1.encoder-decoder attention:使用multi-head attention,输入为encoder的输出和decoder的self-attention输出,其中encoder的self-attention作为 key and...
  • QANET 分析以及解释

    千次阅读 2018-10-11 19:13:14
    ,而不是传统的卷积操作,并且具有较好的记忆功能和很好的泛化能力,具体解释(解释),核的大小是7,核的个数是d=128,一个block的卷集层数是4,对于self——attention层,采用的是multi-headattention机制(解释)...
  • 这里只介绍Bert里面的pretrain和finetune。 Google在NAACL 2018发表的论文中提出了BERT,采用了预训练-...Decode模型,网络中用到了Multi-HeadAttention的模型,在bert中是个很重要的单元。 Bert的预训练 Bert的输入表.
  • 该模块的第一个注意力层为带屏蔽的多头自注意力层(maskedmuti-headattention),目的是在推导过程中屏蔽未来输入。该模块的第二个注意力层和前馈神经网络与Encoder模块中的结构几乎完全一样,唯一的区别是,Decoder...
  • Multi-label zero-shot learning with structured knowledge graphs The more you know: Using knowledge graphs forimage classification Few-shot learning with graph neural networks ( 2 ) NLP 相关任务: ...
  • 提出了多头注意力(Multi-headedattention)机制方法,在编码器和解码器中大量的使用了多头自注意力机制(Multi-headedself-attention)。 context vector计算的是输入seq、目标seq间的关联,同时也成了限制模型性能...
  • 一个编码器层包含五个组成部分: {1.PositionalEncoding2.MultiHeadAttention3.Add&Norm4.FeedForward5.Add&Norm\begin{cases} 1. Positional Encoding \\ 2.Multi-Head Attention \\ 3. Add \&Norm\\4....

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

multi-headattention