百度
360搜索
搜狗搜索

transformer详解,为何Transformer论文作者声称“Attention is all you need”?详细介绍

本文目录一览: Transformer详解,输入部分(词嵌入、位置编码)

由图可知:
inputs和带标签的输入分别进encoder和decoder
Positional Encoding
线性层
softmax层
由N个编码器堆叠而成
每个编码器有两个子层相连接
第一个子层->多头 自注意力机制 和规范化层以及一个残差连接
第二个子层->全连接层和规范化层以及一个残差连接
由N个解码器堆叠而成
每个编码器有三个子层相连接
第一个子层->一个多头 自注意力机制 层和规范化层以及一个残差连接
第二个子层->多头 注意力机制 和规范化层以及一个残差连接
第三个子层->全连接层和规范化层以及一个残差连接
目的是为了将目标文本的 数字表示 ->向量表示,为了在高维空间捕捉词汇间的关系
效果如下
在Transformer编码器中没有针对词汇位置信息的处理,故需要在embedding层后加入位置编码器,将 词汇位置不同可能会产生不同语义的信息 加入到嵌入张量中(embedding),用来弥补位置信息的缺失。

为何Transformer论文作者声称“Attention is all you need”?

详解Transformer (论文Attention Is All You Need). 正如论文的题目所说的,Transformer中抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。. 更准确地讲,Transformer由且
摘要。主流的序列转换模型都是基于复杂的循环神经网络或卷积神经网络,且都包含一个encoder和一个decoder …
1 Introduction(简介)RNN,LSTM,GRU,Gated Recurrent Neural Networks 在序列建模和转换任务上,比如语言 …
2 Background(背景)减少序列计算的目标也成就了 Extended Neural GPU [16],ByteNet[18],和ConvS2S[9] …
3 Model Architecture(模型结构)大多数有竞争力的序列转换模型都有encoder-decoder结构构。这 …
transformer 的并行化主要体现在self- attention 模块上,在encod er 端其可以并... 论文 名: Attention Is All You Need 论文 作者:Ash is h Vaswani 等期刊/会议名
在Attention is all you need论文中提出的Transformer。它的一个TensorFlow实现可以作为Tensor2Tensor包的一部分。哈佛大学的NLP小组创建了一个使用PyTorch实现注释该论文的指南。在...
2019年11月16日论文《Attention Is All You Need》简称Transformer,作者Ashish Vaswani(Google Brain),经典的自注意力论文。 2. 摘要 ...
惠达卫浴的产品不错,家里是前年购买的,当时是花洒和马桶一起买的,到现在用了2年多了,花洒还和新的差不多

为什么说Transformer的注意力机制是相对廉价的?注意力机制相对更对于RNN系列及CNN系列算法有何优势?

基于注意力机制的构造与基于RNN的不同,基于RNN的是在时间步上串联(在每个time step只能输入一个token),而基于注意力机制的是类似于桶状结构(一起将数据输入到模型中去)
QA形式对自然语言处理中注意力机制(Attention)进行总结,并对Transformer进行深入解析。
二、Transformer(Attention Is All You Need)详解1、Transformer的整体架构是怎样的?由哪些部分组成?2、Transformer Encoder 与 Transformer Decoder 有哪些不同?3、Encoder-Decoder attention 与self-attention mechanism有哪些不同?4、multi-head self-attention mechanism具体的计算过程是怎样的?5、Transformer在GPT和Bert等词向量预训练模型中具体是怎么应用的?有什么变化?
一、Attention机制剖析
1、为什么要引入Attention机制?
根据通用近似定理,前馈网络和循环网络都有很强的能力。但为什么还要引入注意力机制呢?
计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离以来问题,信息“记忆”能力并不高。
可以借助人脑处理信息过载的方式,例如Attention机制可以提高神经网络处理信息的能力。
2、Attention机制有哪些?(怎么分类?)
当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只 选择一些关键的信息输入进行处理,来提高神经网络的效率。按照认知神经学中的注意力,可以总体上分为两类:
聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;
显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意——基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看作是自下而上的基于显著性的注意力机制。
在人工神经网络中,注意力机制一般就特指聚焦式注意力。
3、Attention机制的计算流程是怎样的?
Attention机制的实质:寻址(addressing)Attention机制的实质其实就是一个寻址(addressing)的过程,如上图所示:给定一个和任务相关的查询Query向量 q,通过计算与Key的注意力分布并附加在Value上,从而计算Attention Value,这个过程实际上是Attention机制缓解神经网络模型复杂度的体现:不需要将所有的N个输入信息都输入到神经网络进行计算,只需要从X中选择一些和任务相关的信息输入给神经网络。
注意力机制可以分为三步:一是信息输入;二是计算注意力分布α;三是根据注意力分布α 来计算输入信息的加权平均。step1-信息输入:用X = [x1, · · · , xN ]表示N 个输入信息;
step2-注意力分布计算:令Key=Value=X,则可以给出注意力分布
我们将 称之为注意力分布(概率分布), 为注意力打分机制,有几种打分机制:
step3-信息加权平均:注意力分布 可以解释为在上下文查询q时,第i个信息受关注的程度,采用一种“软性”的信息选择机制对输入信息X进行编码为:
这种编码方式为软性注意力机制(soft Attention),软性注意力机制有两种:普通模式(Key=Value=X)和键值对模式(Key!=Value)。
软性注意力机制(soft Attention)4、Attention机制的变种有哪些?
与普通的Attention机制(上图左)相比,Attention机制有哪些变种呢?
变种1-硬性注意力:之前提到的注意力是软性注意力,其选择的信息是所有输入信息在注意力 分布下的期望。还有一种注意力是只关注到某一个位置上的信息,叫做硬性注意力(hard attention)。硬性注意力有两种实现方式:(1)一种是选取最高概率的输入信息;(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。硬性注意力模型的缺点:
硬性注意力的一个缺点是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。硬性注意力需要通过强化学习来进行训练。——《神经网络与深度学习》变种2-键值对注意力:即上图右边的键值对模式,此时Key!=Value,注意力函数变为:
变种3-多头注意力:多头注意力(multi-head attention)是利用多个查询Q = [q1, · · · , qM],来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分,然后再进行拼接:
5、一种强大的Attention机制:为什么自注意力模型(self-Attention model)在长距离序列中如此强大?
(1)卷积或循环神经网络难道不能处理长距离序列吗?
当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列,如图所示:
基于卷积网络和循环网络的变长序列编码从上图可以看出,无论卷积还是循环神经网络其实都是对变长序列的一种“局部编码”:卷积神经网络显然是基于N-gram的局部编码;而对于循环神经网络,由于梯度消失等问题也只能建立短距离依赖。
(2)要解决这种短距离依赖的“局部编码”问题,从而对输入序列建立长距离依赖关系,有哪些办法呢?
如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一 种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互,另一种方法是使用全连接网络。 ——《神经网络与深度学习》全连接模型和自注意力模型:实线表示为可学习的权重,虚线表示动态生成的权重。由上图可以看出,全连接网络虽然是一种非常直接的建模远距离依赖的模型, 但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。
这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(self-attention model)。由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列。
总体来说,为什么自注意力模型(self-Attention model)如此强大:利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列。
(3)自注意力模型(self-Attention model)具体的计算流程是怎样的呢?
同样,给出信息输入:用X = [x1, · · · , xN ]表示N 个输入信息;通过线性变换得到为查询向量序列,键向量序列和值向量序列:
上面的公式可以看出,self-Attention中的Q是对自身(self)输入的变换,而在传统的Attention中,Q来自于外部。
self-Attention计算过程剖解(来自《细讲 | Attention Is All You Need 》)注意力计算公式为:
自注意力模型(self-Attention model)中,通常使用缩放点积来作为注意力打分函数,输出向量序列可以写为:
二、Transformer(Attention Is All You Need)详解
从Transformer这篇论文的题目可以看出,Transformer的核心就是Attention,这也就是为什么本文会在剖析玩Attention机制之后会引出Transformer,如果对上面的Attention机制特别是自注意力模型(self-Attention model)理解后,Transformer就很容易理解了。
1、Transformer的整体架构是怎样的?由哪些部分组成?
Transformer模型架构Transformer其实这就是一个Seq2Seq模型,左边一个encoder把输入读进去,右边一个decoder得到输出:
Seq2Seq模型Transformer=Transformer Encoder+Transformer Decoder
(1)Transformer Encoder(N=6层,每层包括2个sub-layers):
Transformer Encodersub-layer-1:multi-head self-attention mechanism,用来进行self-attention。
sub-layer-2:Position-wise Feed-forward Networks,简单的全连接网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出(输入输出层的维度都为512,中间层为2048):
每个sub-layer都使用了残差网络:
(2)Transformer Decoder(N=6层,每层包括3个sub-layers):
Transformer Decodersub-layer-1:Masked multi-head self-attention mechanism,用来进行self-attention,与Encoder不同:由于是序列生成过程,所以在时刻 i 的时候,大于 i 的时刻都没有结果,只有小于 i 的时刻有结果,因此需要做Mask。
sub-layer-2:Position-wise Feed-forward Networks,同Encoder。
sub-layer-3:Encoder-Decoder attention计算。
2、Transformer Encoder 与 Transformer Decoder 有哪些不同?
(1)multi-head self-attention mechanism不同,Encoder中不需要使用Masked,而Decoder中需要使用Masked;
(2)Decoder中多了一层Encoder-Decoder attention,这与 self-attention mechanism不同。
3、Encoder-Decoder attention 与self-attention mechanism有哪些不同?
它们都是用了 multi-head计算,不过Encoder-Decoder attention采用传统的attention机制,其中的Query是self-attention mechanism已经计算出的上一时间i处的编码值,Key和Value都是Encoder的输出,这与self-attention mechanism不同。代码中具体体现:
## Multihead Attention ( self-attention) self.dec = multihead_attention(queries=self.dec, keys=self.dec, num_units=hp.hidden_units, num_heads=hp.num_heads, dropout_rate=hp.dropout_rate, is_training=is_training, causality=True, scope="self_attention")## Multihead Attention ( Encoder-Decoder attention) self.dec = multihead_attention(queries=self.dec, keys=self.enc, num_units=hp.hidden_units, num_heads=hp.num_heads, dropout_rate=hp.dropout_rate, is_training=is_training, causality=False, scope="vanilla_attention")4、multi-head self-attention mechanism具体的计算过程是怎样的?
multi-head self-attention mechanism计算过程Transformer中的Attention机制由Scaled Dot-Product Attention和Multi-Head Attention组成,上图给出了整体流程。下面具体介绍各个环节:
Expand:实际上是经过线性变换,生成Q、K、V三个向量;
Split heads: 进行分头操作,在原文中将原来每个位置512维度分成8个head,每个head维度变为64;
Self Attention:对每个head进行Self Attention,具体过程和第一部分介绍的一致;
Concat heads:对进行完Self Attention每个head进行拼接;
上述过程公式为:
5、Transformer在GPT和Bert等词向量预训练模型中具体是怎么应用的?有什么变化?
GPT中训练的是单向语言模型,其实就是直接应用Transformer Decoder;
Bert中训练的是双向语言模型,应用了Transformer Encoder部分,不过在Encoder基础上还做了Masked操作;
BERT Transformer 使用双向self-attention,而GPT Transformer 使用受限制的self-attention,其中每个token只能处理其左侧的上下文。双向 Transformer 通常被称为“Transformer encoder”,而左侧上下文被称为“Transformer decoder”,decoder是不能获要预测的信息的。

阅读更多 >>>  rainbowpie 怎么连接服务器

BART 详解

一切都得从 Transformer 说起。Transformer 左半边为 Encoder,右半边为 Decoder。我们将 Encoder 输入的句子称为 source,Decoder 输入的句子称为 target
Encoder 负责将 source 进行 self-attention 并获得句子中每个词的 representation,最经典的 Encoder 架构就是 BERT,通过 Masked Language Model 来学习词之间的关系,另外还有 XLNet, RoBERTa, ALBERT, DistilBERT 等等。但是单独 Encoder 结构 不适用于生成任务

Decoder 如下图所示,输入与输出之间差一个位置,主要是模拟在 Inference 时,不能让模型看到未来的词,这种方式称为 AutoRegressive ,常见的基于 Decoder 的模型通常是用来做序列生成的,例如 GPT, CTRL 等等。但是单独 Decoder 结构仅基于左侧上下文预测单词,无法学习双向交互

训练阶段,Encoder 端使用双向模型编码 被破坏的文本 ,然后 Decoder 采用自回归的方式计算出原始输入;测试阶段或者是微调阶段,Encoder 和 Decoder 的输入都是 未被破坏的文本

BART 使用标准的 Transformer 模型,不过做了一些改变:
BART 作者尝试了不同的方式来破坏输入:
序列分类任务中,编码器和解码器的输入相同,解码器 token 的最终隐藏状态被输入到多类别线性分类器中。BART 在解码器最后额外添加了一个 token,如下图所示,该 token 位置的输出可以被认为是该句子的 representation
由于 BART 具备自回归解码器,因此它可以针对序列生成任务进行直接微调,如问答或者文本摘要
作者采用新的随机初始化 Encoder 替换 BART 编码器的 Embedding 层。该模型以端到端的方式进行训练,即训练一个新的编码器将外来词映射到输入。新的编码器可以使用不同于原始 BART 模型的词汇。其中随机初始化 Encoder 的训练分两步,均需要将来自 BART 模型输出的交叉熵损失进行反向传播。第一步,作者冻结 BART 的大部分参数,仅更新随机初始化的 Encoder、BART 位置嵌入和 BART 编码器第一层的自注意力输入投影矩阵。第二步,作者将所有模型参数进行少量迭代训练
从上表可以看出,貌似带上 Document Rotation 或 Sentence Shuffling 效果都不是太好,可以这么理解,假如模型在训练的时候看到的句子顺序都是乱的,它可能就认为这个世界的句子顺序都是乱的,当你做测试的时候,输入的句子是正序的,可能模型就不知所措了。实际上 Text Infilling 可以看作是 Token Masking+Token Deletion,所以 Text Infilling 效果这么好也可以理解

PageTransformer函数详解

PageTransformer接口中有transformPage(View view, float position)函数,我用了一个Demo工程的日志得到以下数据。这个Demo工程的ViewPager有三个View。 (1)当有View1左滑到View2时,由transformPage函数的日志获得以下数据(注意顺序): view2的posion由1 -> 0; view1的posion由0 -> -1;
(2)当View2右滑到View1时,由transformPage函数的日志获得以下数据(注意顺序): view2的posion有0 -> 1; view1的posion由-1 -> 0; view3的posion有1 -> 2; (2)当View2右滑到View3时,由transformPage函数的日志获得以下数据(注意顺序): view2的posion有0 -> -1; view3的posion有1 -> 0; view1的posion有-1 -> -2;
其实我们在实际使用时,实现滑动效果不会考虑所有ViewPager的子item,只考虑滑动时左右两个item。 当左滑时:左View的posion将会由 0-> -1,右View的posion将会由1 -> 0; 当右滑时:左View的posion将会由 -1-> 0,右View的posion将会由 0-> 1; 其实很好理解:

为何说Transformer是目前人工智能领域工程落地实践Bayesian理论的典型?

贝叶斯神经网络(Bayesian Neural Network)通过提供不确定来回答“Why Should I Trust You?”这个问题。实现上讲,贝叶斯通过集成深度学习参数矩阵中参数的Uncertainty来驾驭数据的不确定性,提供给具体Task具有置信空间Confidence的推理结构。
一般的神经网络我们称为Point estimation neural networks,通过MLE最大似然估计的方式建立训练的目标函数,为神经网络中的每个参数寻找一个optimal最优值;而贝叶斯深度学习一种把概率分布作为权重的神经网络,通过真实数据来优化参数的概率分布,在训练的过程中会使用MAP最大后验概率集成众多的模型参数的概率分布来拟合各种不确定的情况,提供处理数据不确定性的信息表达框架。
Transformer是一个符合Bayesian深度学习网络的AI架构,尤其是其经典的multi-head self-attention机制,该机制其实采用模型集成的思想来从工程角度落地贝叶斯深度学习网络;基于Prior先验信息的正则化效果,multi-head机制所表达的信息多元化及不确定性能够提供具有高置信度区间的回答 “Why Should I Trust You?”
贝叶斯Bayesian Transformer课程片段1:线性回归及神经网络AI技术底层通用的贝叶斯数学原理及其有效性证明
贝叶斯Bayesian Transformer课程片段2:人工智能算法底层真相之MLE和MAP完整的数学推导过程概率、对数、求导等以及MLE和MAP关系详解
贝叶斯Bayesian Transformer课程片段3:语言模型Language Model原理机制、数学推导及神经网络实现
贝叶斯Bayesian Transformer课程片段4:图解Transformer精髓之架构设计、数据在训练、推理过程中的全生命周期、矩阵运算、多头注意力机制可视化等
贝叶斯Bayesian Transformer课程片段5:什么叫Bayesian Transformer,Bayesian Transformer和传统的Transformer的核心区别是什么?
贝叶斯Bayesian Transformer课程片段6:Bayesian Transformer这种新型思考模型在学术和工业界的意义是什么,为什么说Transformer中到处都是Bayesian的实现?
贝叶斯Bayesian Transformer课程片段7:贝叶斯Bayesian Transformer数学推导论证过程全生命周期详解及底层神经网络物理机制剖析

BERT详解(附带ELMo、GPT 介绍)

首先我会详细阐述 BERT 原理,然后简单介绍一下 ELMO 以及 GPT
BERT 全称为 B idirectional E ncoder R epresentation from T ransformer,是 Google 以 无监督的方式利用大量无标注文本 「炼成」的语言模型,其架构为 Transformer 中的 Encoder(BERT=Encoder of Transformer)
我在 Transformer 详解 中已经详细的解释了所有 Transformer 的相关概念,这里就不再赘述
以往为了解决不同的 NLP 任务,我们会为该任务设计一个最合适的神经网络架构并做训练,以下是一些简单的例子
不同的 NLP 任务通常需要不同的模型,而设计这些模型并测试其 performance 是非常耗成本的(人力,时间,计算资源)。如果有一个能 直接处理各式 NLP 任务的通用架构 该有多好?
随着时代演进,不少人很自然地有了这样子的想法,而 BERT 就是其中一个将此概念付诸实践的例子
Google 在预训练 BERT 时让它同时进行两个任务: 1. 漏字填空 2. 下个句子预测

对正常人来说,要完成这两个任务非常简单。只要稍微看一下前后文就知道完形填空任务中 [MASK] 里应该填 退了 ;而 醒醒吧 后面接 你没有妹妹 也十分合理(?)
接下来我会分别详细介绍论文中这两个任务的设计细节
在 BERT 中,Masked LM(Masked Language Model)构建了语言模型,简单来说,就是 随机遮盖或替换 一句话里面的任意字或词,然后让模型通过上下文预测那一个被遮盖或替换的部分,之后 做 Loss 的时候也只计算被遮盖部分的 Loss ,这其实是一个很容易理解的任务,实际操作如下:
这样做的好处是,BERT 并不知道 [MASK] 替换的是哪一个词,而且 任何一个词都有可能是被替换掉的,比如它看到的 apple 可能是被替换的词 。这样强迫模型在编码当前时刻词的时候 不能太依赖当前的词 ,而要考虑它的上下文,甚至根据上下文进行 "纠错"。比如上面的例子中,模型在编码 apple 时,根据上下文 my dog is,应该 把 apple 编码成 hairy 的语义而不是 apple 的语义
我们首先拿到属于上下文的一对句子,也就是两个句子,之后我们要在这两个句子中加一些特殊的 token: [CLS]上一句话[SEP]下一句话[SEP] 。也就是在句子开头加一个 [CLS] ,在两句话之间和句末加 [SEP] ,具体地如下图所示

阅读更多 >>>  sqlserver2008无法连接到服务器,sqlserver2008无法连接到local解决方案

可以看到,上图中的两句话明显是连续的。如果现在有这么一句话 [CLS] 我的狗很可爱 [SEP] 企鹅不擅长飞行 [SEP] ,可见这两句话就 不是连续的 。在实际训练中,我们会让这两种情况出现的数量为** 1:1**
Token Embedding 就是正常的词向量,即 PyTorch 中的 nn.Embedding() Segment Embedding 的作用是用 embedding 的信息让模型 分开上下句 ,我们给上句的 token 全 0,下句的 token 全 1,让模型得以判断上下句的起止位置,例如
Position Embedding 和 Transformer 中的不一样,不是三角函数,而是 学习出来的
BERT 预训练阶段实际上是将上述两个任务结合起来,同时进行,然后将所有的 Loss 相加,例如
BERT 的 Fine-Tuning 共分为 4 种类型,以下内容、图片均来自台大李宏毅老师 Machine Learning 课程 (以下内容 图在上,解释在下)

为什么要用CLS? 这里李宏毅老师有一点没讲到,就是为什么要用第一个位置,即 [CLS] 位置的 output。这里我看了网上的一些博客,结合自己的理解解释一下。因为 BERT 内部是 Transformer,而 Transformer 内部又是 Self-Attention, 所以 [CLS] 的 output 里面肯定含有整句话的完整信息 ,这是毋庸置疑的。但是 Self-Attention 向量中,自己和自己的值其实是占大头的,现在假设使用 的 output 做分类,那么这个 output 中实际上会更加看重 ,而 又是一个有实际意义的字或词,这样难免会影响到最终的结果。但是 [CLS] 是没有任何实际意义的,只是一个占位符而已,所以就算 [CLS] 的 output 中自己的值占大头也无所谓。当然你 也可以将所有词的 output 进行 concat,作为最终的 output

首先将问题和文章通过 [SEP] 分隔,送入 BERT 之后,得到上图中黄色的输出。此时我们还要训练两个 vector,即上图中橙色和黄色的向量。首先将橙色和所有的黄色向量进行 dot product,然后通过 softmax,看哪一个输出的值最大,例如上图中 对应的输出概率最大,那我们就认为 s=2
同样地,我们用蓝色的向量和所有黄色向量进行 dot product,最终预测得 的概率最大,因此 e=3。最终,答案就是 s=2,e=3
你可能会觉得这里面有个问题,假设最终的输出 s>e 怎么办,那不就矛盾了吗?其实在某些训练集里,有的问题就是没有答案的,因此此时的预测搞不好是对的,就是没有答案
以上就是 BERT 的详细介绍,参考以下文章
ELMo是Embedding from language Model的缩写,它通过无监督的方式对语言模型进行预训练来学习单词表示
这篇论文的想法其实非常简单,但是效果却很好。它的思路是用 深度的双向 Language Model 在大量未标注数据上训练语言模型 ,如下图所示

在实际任务中,对于输入的句子,我们使用上面的语言模型来处理它,得到输出向量,因此这可以看作是一种 特征提取 。但是 ELMo 与普通的 Word2Vec 或 GloVe 不同,ELMo 得到的 Embedding 是 有上下文信息 的
具体来说,给定一个长度为 N 的句子,假设为 ,语言模型会计算给定 的条件下出现 的概率:
传统的 N-gram 模型 不能考虑很长的历史 ,因此现在的主流是使用 多层双向 LSTM 。在时刻 ,LSTM 的第 层会输出一个隐状态 ,其中 , 是 LSTM 的层数。最上层是 ,对它进行 softmax 之后得到输出词的概率
类似的,我们可以用 一个反向 来计算概率:
通过这个 LSTM,我们可以得到 。我们的损失函数是这两个 LSTM 的 加和 :
这两个 LSTM 有各自的参数 和 ,而 Word Embedding 参数 和 Softmax 参数 是共享的
为了用于下游(DownStream)的特定任务,我们会把不同层的隐状态组合起来,具体组合的参数是根据不同的特定任务学习出来的,公式如下:
GPT 得到的语言模型参数不是固定的,它会根据特定的任务进行调整(通常是微调),这样的到的句子表示能更好的适配特定任务。它的思想也很简单,使用 单向 Transformer 学习一个语言模型 ,对句子进行无监督的 Embedding,然后 根据具体任务对 Transformer 的参数进行微调 。GPT 与 ELMo 有两个主要的区别:
这里解释一下上面提到的 单向 Transformer 。在 Transformer 的文章中,提到了 Encoder 与 Decoder 使用的 Transformer Block 是不同的。在 Decoder Block 中,使用了 Masked Self-Attention ,即句子中的每个词都只能对 包括自己在内的前面所有词进行 Attention ,这就是单向 Transformer。GPT 使用的 Transformer 结构就是将 Encoder 中的 Self-Attention 替换成了 Masked Self-Attention ,具体结构如下图所示

训练的过程也非常简单,就是将 n 个词的词嵌入 ( ) 加上位置嵌入 ( ),然后输入到 Transformer 中,n 个输出分别预测该位置的下一个词 这里的位置编码没有使用传统 Transformer 固定编码的方式,而是动态学习的
Pretraining 之后,我们还需要针对特定任务进行 Fine-Tuning。假设监督数据集合 的输入 是一个词序列 ,输出是一个分类的标签 ,比如情感分类任务
我们把 输入 Transformer 模型,得到最上层最后一个时刻的输出 ,将其通过我们新增的一个 Softmax 层(参数为 )进行分类,最后用 CrossEntropyLoss 计算损失,从而根据标准数据调整 Transformer 的参数以及 Softmax 的参数 。这等价于最大似然估计:

阅读更多 >>>  如何使用学校网络

正常来说,我们应该调整参数使得 最大,但是 为了提高训练速度和模型的泛化能力 ,我们使用 Multi-Task Learning,同时让它最大似然 和

这里使用的 还是之前语言模型的损失(似然),但是使用的数据不是前面无监督的数据 ,而是使用当前任务的数据 ,而且只使用其中的 ,而不需要标签
针对不同任务,需要简单修改下输入数据的格式,例如对于相似度计算或问答,输入是两个序列,为了能够使用 GPT,我们需要一些特殊的技巧把两个输入序列变成一个输入序列
ELMo 和 GPT 最大的问题就是 传统的语言模型是单向的 —— 我们根据之前的历史来预测当前词。但是我们不能利用后面的信息。比如句子 The animal didn’t cross the street because it was too tired 。我们在编码 it 的语义的时候需要同时利用前后的信息,因为在这个句子中, it 可能指代 animal 也可能指代 street 。根据 tired ,我们推断它指代的是 animal 。但是如果把 tired 改成 wide ,那么 it 就是指代 street 了。传统的语言模型,都 只能利用单方向的信息 。比如前向的 RNN,在编码 it 的时候它看到了 animal 和 street ,但是它还没有看到 tired ,因此它不能确定 it 到底指代什么。如果是后向的 RNN,在编码的时候它看到了 tired ,但是它还根本没看到 animal ,因此它也不能知道指代的是 animal 。 Transformer 的 Self-Attention 理论上是可以同时关注到这两个词的,但是根据前面的介绍,为了使用 Transformer 学习语言模型,必须 用 Mask 来让它看不到未来的信息 ,所以它也不能解决这个问题的

根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型。(GPT,ELMO)GPT 就是典型的自回归语言模型。ELMO尽管看上去利用了上文,也利用了下文,但是本质上仍然是自回归LM,这个跟模型具体怎么实现有关系。ELMO是做了两个方向(从左到右以及从右到左两个方向的语言模型),但是是分别有两个方向的自回归LM,然后把LSTM的两个方向的隐节点状态拼接到一起,来体现双向语言模型这个事情的。所以其实是两个自回归语言模型的拼接,本质上仍然是自回归语言模型。
自回归语言模型有优点有缺点,缺点是只能利用上文或者下文的信息,不能同时利用上文和下文的信息,当然,貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,因为融合模式过于简单,所以效果其实并不是太好。它的优点,其实跟下游NLP任务有关,比如生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的, 自回归语言模型天然匹配这个过程 。而Bert这种DAE模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,导致 生成类的NLP任务到目前为止都做不太好 。
自回归语言模型只能根据上文预测下一个单词,或者反过来,只能根据下文预测前面一个单词。相比而言,Bert通过 在输入X中随机Mask掉一部分单词 ,然后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词,如果你对Denoising Autoencoder比较熟悉的话,会看出,这确实是典型的DAE的思路。那些被Mask掉的单词就是在输入侧加入的所谓噪音。类似Bert这种预训练模式,被称为DAE LM。
这种DAE LM的优缺点正好和自回归LM反过来,它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文,这是好处。缺点是啥呢? 主要在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题 ,因为Fine-tuning阶段是看不到[Mask]标记的。DAE吗,就要引入噪音,[Mask] 标记就是引入噪音的手段,这个正常。
XLNet的出发点就是:能否 融合自回归LM和DAE LM两者的优点 。就是说如果站在自回归LM的角度,如何引入和双向语言模型等价的效果;如果站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。当然,XLNet还讲到了一个Bert被Mask单词之间相互独立的问题。

怎样使用PDFTransformer+将PDF转换为HTML_htmlcss_WEB-ITnose

日常工作中,有时需要在网上发布一些信息,遇到需要将PDF文档内容发布到网上的时候,可以选择将PDF文档转换为HTML文档格式,通过保留原文档的结构节省大量时间和精力,在此小编为大家介绍一款PDF转换HTML利器: ABBYY PDF Transformer+图文识别软件,帮助大家提高工作效率。ABBYY PDF Transformer+是一款可创建、编辑、添加注释以及将PDF文件转换为其他可编辑格式的通用工具。PDF转换为HTML步骤:步骤一:打开ABBYY PDF Transformer+软件,通过软件工具栏上的打开按钮打开要转换成HTML文档的PDF文件,软件会自动进行后台识别,等待识别完成;步骤二:指定PDF文档语言。默认情况下,程序会尝试从最常用的语言列表中选择合适的语言。 建议不要一次指定三种以上语言,这样会影响文本识别的准确度(在主工具栏上,点击编辑>首选项);步骤三:在工具栏上,点击转换为按钮,然后选择HTML文档;或者,在文件选项卡上,点击转换为向右箭头,然后选HTML文档;步骤四:若要为HTML格式调整转换设置,请参考详解ABBYY PDF Transformer+中的HTML转换设置。更多关于ABBYY PDF Transformer+或者ABBYY FineReader 12的相关内容,大家可前往ABBYY中文网检索您需要的信息。

《Attention Is All You Need》算法详解

该篇文章右谷歌大脑团队在17年提出,目的是解决对于NLP中使用RNN不能并行计算(详情参考 《【译】理解LSTM(通俗易懂版)》 ),从而导致算法效率低的问题。该篇文章中的模型就是近几年大家到处可以听到的Transformer模型。
由于该文章提出是解决NLP(Nature Language Processing)中的任务,例如文章实验是在翻译任务上做的。为了CV同学更好的理解,先简单介绍一下NLP任务的一个工作流程,来理解模型的输入和输出是什么。
首先拿CV中的分类任务来说,训练前我们会有以下几个常见步骤:
所以对于分类任务来说,模型的输入为预处理过的图片,输出为图片的类别(一般为预测的向量,然后求argmax获得类别)。
在介绍NLP任务预处理流程前,先解释两个词,一个是tokenize,一个是embedding。
tokenize 是把文本切分成一个字符串序列,可以暂且简单的理解为对输入的文本进行分词操作。对英文来说分词操作输出一个一个的单词,对中文来说分词操作输出一个一个的字。(实际的分词操作多有种方式,会复杂一点,这里说的只是一种分词方式,姑且这么定,方便下面的理解。)
embedding 是可以简单理解为通过某种方式将词向量化,即输入一个词输出该词对应的一个向量。(embedding可以采用训练好的模型如GLOVE等进行处理,也可以直接利用深度学习模型直接学习一个embedding层,Transformer模型的embedding方式是第二种,即自己去学习的一个embedding层。)
在NLP中,拿翻译任务(英文翻译为中文)来说,训练模型前存在下面步骤:
所以对于翻译任务来说,翻译模型的输入为句子每个词的one-hot向量或者embedding后的向量(取决于embedding是否是翻译模型自己学习的,如果是则输入one-hot就可以了,如果不是那么输入就是通过别的模型获得的embedding向量)组成的序列,输出为当前预测词的类别(一般为词表大小维度的向量)
知道了Transformer模型的输入和输出后,下面来介绍一下Transformer模型的结构。
先来看看Transformer的整体结构,如下图所示:
可以看出它是一个典型的seq2seq结构(encoder-decoder结构),Encoder里面有N个重复的block结构,Decoder里面也有N个重复的block结构。
可以注意到这里的embedding操作是与翻译模型一起学习的。所以Transformer模型的输入为对句子分词后,每个词的one-hot向量组成的一个向量序列,输出为预测的每个词的预测向量。
为了更好的利用序列的位置信息,在对embedding后的向量加上位置相关的编码。文章采用的是人工预设的方式计算出来的编码。计算方式如下

上式中,pos表示当前词在句子中的位置,例如输入的序列长L=5,那么pos取值分别为0-4,i表示维度的位置,偶数位置用 公式计算, 奇数位置用 公式计算。
文章也采用了加入模型训练来自动学习位置编码的方式,发现效果与人工预设方式差不多。
Encoder包含了N个重复的block结构,文章N=6。下面来拆解一个每个块的具体结构。
为了便于理解,介绍Multi-Head Attention结构前,先介绍一下基础的Scaled Dot-Product Attention结构,该结构是Transformer的核心结构。
Scaled Dot-Product Attention结构如下图所示

Scaled Dot-Product Attention模块用公式表示如下

上式中,可以假设Q\K的维度皆为 ,V的维度为 ,L为输入的句子长度, 为特征维度。
得到的维度为 ,该张量可以理解为计算Q与K中向量两两间的相似度或者说是模型应该着重关注(attention)的地方。这里还除了 ,文章解释是防止维度 太大得到的值就会太大,导致后续的导数会太小。(这里为什么一定要除 而不是 或者其它数值,文章没有给出解释。)
经过 获得attention权重后,与V相乘,既可以得到attention后的张量信息。最终的 输出维度为
这里还可以看到在Scaled Dot-Product Attention模块中还存在一个可选的Mask模块(Mask(opt.)),后续会介绍它的作用。
文章认为采用多头(Multi-Head)机制有利于模型的性能提高,所以文章引入了Multi-Head Attention结构。
Multi-Head Attention结构如下图所示
Multi-Head Attention结构用公式表示如下

上述参数矩阵为 , , , 。 为multi-head attention模块输入与输出张量的通道维度,h为head个数。文中h=8, ,
关于multi-head机制为什么可以提高模型性能
文章末尾给出了多头中其中两个头的attention可视化结果,如下所示
图中,线条越粗表示attention的权重越大,可以看出,两个头关注的地方不一样,绿色图说明该头更关注全局信息,红色图说明该头更关注局部信息。
从结构图不难看出网络加入了residual结构,所以add很好理解,就是输入张量与输出张量相加的操作。
Norm操作与CV常用的BN不太一样,这里采用NLP领域较常用的LN(Layer Norm)。(关于BN、LN、IN、GN的计算方式可以参考 《GN-Group Normalization》 )
还要多说一下的是,文章中共Add&Norm结构是先相加再进行Norm操作。
该结构很简单,由两个全连接(或者kernel size为1的卷积)和一个ReLU激活单元组成。
Feed Forward结构用公式表示如下

Decoder同样也包含了N个重复的block结构,文章N=6。下面来拆解一个每个块的具体结构。
从名字可以看出它比2.3.1部分介绍的Multi-Head Attention结构多一个masked,其实它的基本结构如下图所示
可以看出这就是Scaled Dot-Product Attention,只是这里mask是启用的状态。
这里先从维度角度考虑mask是怎么工作的,然后再解释为什么要加这个mask操作。
mask工作方式
为了方便解释,先不考虑多batch和多head情况。
可以假设Q\K的维度皆为 ,V的维度为 。
那么在进行mask操作前,经过MatMul和Scale后得到的张量维度为 。
现在有一个提前计算好的mask为 ,M是一个上三角为-inf,下三角为0的方阵。如下图所示(图中假设L=5)。
的结果如下图所示(图中假设L=5)
注意:下图中的非0区域的值不一定是一样的,这里为了方便显示画成了一样的颜色

现在Scaled Dot-Product Attention的公式如下所示

可以看出经过M后,softmax在-inf处输出结果为0,其它地方为非0,所以softmax的输出为 ,该结果为上三角为0的方阵。与 进行相乘得到结果为 。
从上述运算可以看出mask的目的是为了让V与attention权重计算attention操作时只考虑当前元素以前的所有元素,而忽略之后元素的影响。即V的维度为 ,那么第i个元素只考虑0-i元素来得出attention的结果。
mask操作的作用
在解释mask作用之前,我们先解释一个概念叫 teacher forcing 。
teacher forcing这个操作方式经常在训练序列任务时被用到,它的含义是在训练一个序列预测模型时,模型的输入是ground truth。
举例来说,对于"I Love China -> 我爱中国"这个翻译任务来说,测试阶段,Encoder会将输入英文编译为feature,Decoder解码时首先会收到一个BOS(Begin Of Sentence)标识,模型输出"我",然后将"我"作为decoder的输入,输出"爱",重复这个步骤直到输出EOS(End Of Sentence)标志。
但是为了能快速的训练一个效果好的网络,在训练时,不管decoder输出是什么,它的输入都是ground truth。例如,网络在收到BOS后,输出的是"你",那么下一步的网络输入依然还是使用gt中的"我"。这种训练方式称为teacher forcing。如下图所示
我们看下面两张图,第一张是没有mask操作时的示例图,第二张是有mask操作时的示例图。可以看到,按照teacher forcing的训练方式来训练Transformer,如果没有mask操作,模型在预测"我"这个词时,就会利用到"我爱中国"所有文字的信息,这不合理。所以需要加入mask,使得网络只能利用部分已知的信息来模拟推断阶段的流程。
decoder中的Multi-Head Attention内部结构与encoder是一模一样的,只是输入中的Q为2.4.1部分提到的Masked Multi-Head Attention的输出,输入中的K与V则都是encoder模块的输出。
下面用一张图来展示encoder和decoder之间的信息传递关系
decoder中Add&Norm和Feed Forward结构都与encoder一模一样了。
1. 从图中看出encoder和decoder中每个block的输入都是一个张量,但是输入给attention确实Q\K\V三个张量?
对于block来说,Q=K=V=输入张量
2. 推断阶段,解码可以并行吗?
不可以,上面说的并行是采用了teacher forcing+mask的操作,是的训练可以并行计算。但是推断时的解码过程同RNN,都是通过auto-regression方式获得结果的。(当然也有non auto-regression方面的研究,就是一次估计出最终结果)
参考:

网站数据信息

"transformer详解,为何Transformer论文作者声称“Attention is all you need”?"浏览人数已经达到23次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:transformer详解,为何Transformer论文作者声称“Attention is all you need”?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!