一文读懂深度学习:从神经元到BERT

阿里妹导读:天然语言处理领域的殿堂标志 BERT 并不是横空出世,背后有它的发展原理。今天,蚂蚁金服财富对话算法团队整理对比了深度学习模型在天然语言处理领域的发展历程。从简易的神经元到当前最复杂的BERT模型,深刻浅出地介绍了深度学习在 NLP 领域进展,并结合工业界给出了将来的 NLP 的应用方向,相信读完这篇文章,你对深度学习的总体脉络会有更加深入认识。算法

一个神经网络结构一般包含输入层、隐藏层、输出层。输入层是咱们的 features (特征),输出层是咱们的预测 (prediction)。神经网络的目的是拟合一个函数 f:features -> prediction。在训练期间,经过减少 prediction 和实际 label 的差别的这种方式,来更改网络参数,使当前的网络能逼近于理想的函数 f网络

神经元(Neural Cell)

神经网络层的基本组成成员为神经元,神经元包含两部分,一部分是上一层网络输出和当前网络层参数的一个线性乘积,另一部分是线性乘积的非线性转换。(若是缺乏非线性转换,则多层线性乘积能够转化为一层的线性乘积)函数

浅层神经网络( Neural Network )

只有一层隐藏层的,咱们称为浅层网络。性能

深度学习网络(Multilayer Perceptron)

相对于浅层网络结构,有两层、三层及以上隐藏层的咱们就能够称为深度网络。学习

在一般的理解中,一个足够宽的网络,是可以拟合任何函数的。而一个深层网络,则可以用更少的参数来拟合该函数,由于深层的神经元能够获取比浅层神经元更复杂的特征表示。测试

在图二及三所示网络,咱们称为全链接网络,也就是隐藏层的神经元会和上一层全部的神经元输出相关。和全链接网络相对应的,是只和上一层部分神经元输出链接的网络,以下文介绍的卷积网络。编码

卷积网络(CNN)

卷积网络神经元只和上一层的部分神经元输出是链接的。(在直觉上,是由于人的视觉神经元触突只对局部信息敏感,而不是全局全部信息都对同一个触突产生等价做用)spa

同一个卷积核从左到右,从上到下和输入作乘积,获得了不一样强度的输出。从直觉上来理解,卷积核对原始数据的不一样数据分布的敏感度是不同的。若是把卷积核理解为是某种 pattern,那么符合这种 pattern 的数据分布会获得比较强的输出,而不符合这种 pattern 的输出则获得弱的,甚至是不输出。翻译

一个卷积核是一个 pattern 提取器, 多个卷积核就是多个 pattern 提取器。经过多个特征提取器对原始数据作特征提取转换,就构成了一层卷积。设计

Alex Net, 由于 GPU 内存的缘由,Alex 使用了两块 GPU 对模型作了切割,本质上的卷积层是用于特征提取, 最大池化层用于提取强特征及减小参数,全链接层则是全部高级特征参与到最后分类决策中去。

循环神经网络(RNN)

CNN是对空间上特征的提取, RNN则是对时序上特征的提取。

在RNN中,x1 , x2, x3, xt 是在时序上不同的输入,而 V, U, W 三个矩阵则是共享。同时 RNN 网络中保存了本身的状态 S。 S 随着输入而改变,不一样的输入/不一样时刻的输入或多或少影响 RNN 网络的状态 S。而 RNN 网络的状态 S 则决定最后的输出。

在直觉上,咱们理解 RNN 网络是一个可模拟任何函数的一个神经网络( action ),加上同时有一份本身的历史存储( memory ),action+memory 二者让 RNN 成为了一个图灵机器。

长短时间记忆网络( LSTM )

RNN 的问题是非线性操做 σ 的存在且每一步间经过连乘操做传递,会致使长序列历史信息不能很好的传递到最后,而有了 LSTM 网络。

在 lstmcell 中, 包含了一般意义上的遗忘门(点乘,决定什么要从状态中去除),输入更新门(按位相加,决定什么要添加到状态中去),输出门(点乘,决定状态的输出是什么?)虽然看起来很复杂,本质上是矩阵的运算。

为了简化运算,后面有 lstm 的变种 GRU, 以下图:

文本卷积网络 (TextCNN)

CNN 在计算机识别领域中应用普遍,其捕捉局部特征的能力很是强,为分析和利用图像数据的研究者提供了极大的帮助。TextCNN 是2014年 Kim 在 EMNLP 上提出将 CNN 应用于 NLP 的文本分类任务中。

从直观上理解,TextCNN 经过一维卷积来获取句子中 n-gram 的特征表示。TextCNN 对文本浅层特征的抽取能力很强,在短文本领域如搜索、对话领域专一于意图分类时效果很好,应用普遍,且速度快,通常是首选;对长文本领域,TextCNN 主要靠 filter 窗口抽取特征,在长距离建模方面能力受限,且对语序不敏感。

卷积核( filter )→ n-gram 特征

文本卷积与图像卷积的不一样之处在于只在文本序列的一个方向作卷积。对句子单词每一个可能的窗口作卷积操做获得特征图( feature map )。

 

image

其中,image。对 feature map 作最大池化( max-pooling )操做,取中最大值max{c} 做为 filter 提取出的 feature。经过选择每一个 feature map 的最大值,可捕获其最重要的特征。

每一个 filter 卷积核产生一个 feature ,一个 TextCNN 网络包括不少不一样窗口大小的卷积核,如经常使用的 filter size ∈{3,4,5} 每一个 filter 的 featuremaps=100。

加强序列推理模型(ESIM)

ESIM (Enhanced Sequential Inference Model) 为短文本匹配任务中经常使用且有力的模型。它对于 LSTM 的增强主要在于:将输入的两个 LSTM 层( Encoding Layer) 经过序列推理交互模型输出成新的表征。

图片来源:paper《Enhanced LSTM for Natural LanguageInference》

如图所示,ESIM 为图的左边部分。总体网络结构其实比较明确,整条通路大体包括三个步骤。

步骤一:编码层。该步骤每一个 token 将预训练的编码经过 Bi-LSTM 层,从而获取了“新的编码”,其目的是经过 LSTM 学习每一个 token 的上下文信息。

步骤二:局部推理层。步骤二本质是一个句间注意力( intra-sentence attention )的计算过程。经过将两句在步骤一中获取的结果作 intra-sentence attention 操做,咱们在这里能够获取到一个新的向量表征。接下来对向量的先后变化进行了计算,该作法的目的是进一步抽取局部推理信息在 attention 操做的先后变化,并捕捉其中的一些推理关系,如先后关系等。

步骤三:组合推理&预测层。再次将抽取后的结果经过 Bi-LSTM,并使用Avarage&Maxpooling 进行池化(其具体操做就是分别进行 average 和 max pooling 并进行 concat),最后加上全链接层进行 Softmax 预测其几率。

ELMo

直观上来说,ELMo(Embedding from Language Model) 解决了一词多义的问题,例如询问“苹果”的词向量是什么,ELMo 会考虑是什么语境下的“苹果”,咱们应该去询问“苹果股价”里的“苹果”词向量是什么。ELMo 经过提供词级别、携带上下文信息的动态表示,能有效的捕捉语境信息。ELMo 的提出对后面的的 GPT 和 BRET有一个很好的引导和启发的做用。一个好的词向量,应知足两个特色:

  1. 可以反映出语义和语法的复杂特征。
  2. 可以准确对不一样上下文产生合适语义。

传统的 word2vec 对每一个 word 只有一个固定的 embedding 表达,不能产生携带上下文信息的 embedding,对多义词没法结合语境判断。ELMo 中的每一个单词都要先结合语境经过多层 LSTM 网络才获得最后的表达,LSTM 是为捕获上下文信息而生,于是 ELMo 能结合更多的上下文语境,在一词多意上的效果比 word2vec 要好。

ELMo 预训练时的网络结构图与传统语言模型有点相似,直观理解为将中间的非线性层换成了 LSTM,利用 LSTM 网络更好的提取每一个单词在当前语境中的上下文信息,同时增长了前向和后向上下文信息。.

预训练

给定包含 N 个词的序列image,前向语言模型经过前 k-1个词image预测第 k 个词image。在第 k 个位置,每一个 LSTM 层输出上下文依赖的向量表达image, j=1,2,…,L。顶层 LSTM 层的输出image利用交叉熵损失预测下一个位置image

image

后向语言模型对序列作反序,利用下文的信息去预测上文的词。与前向相似,给定image通过 L 层的后向深层 LSTM 网络预测获得第 j 层的隐层输出image

image

双向语言模型拼接前向语言模型和后向语言模型,构建前向和后向联合最大对数似然。

image

其中,image为序列词向量层参数,image为交叉熵层参数,在训练过程当中这两部分参数共享。

嵌入式语言模型组合利用多层 LSTM 层的内部信息,对中心词,一个 L 层的双向语言模型计算获得 2L+1 个表达集合。

Fine-tune

在下游任务中,ELMo 将多层的输出整合成一个向量,将全部 LSTM 层的输出加上normalized 的 softmax 学习到的权重 s=Softmax(w),使用方法以下所示:

直观上来说,biLMs 的较高层次的 LSTM 向量抓住的是词汇的语义信息, biLMs 的较低层次的 LSTM 向量抓住的是词汇的语法信息。这种深度模型所带来的分层效果使得将一套词向量应用于不一样任务有了可能性,由于每一个任务所须要的信息量是不一样的。另外 LSTM 的层数不宜过多,多层 LSTM 网络不是很容易 train 好,存在过拟合问题。以下图是一个多层 LSTM 用在文本分类问题的实验结果,随着 LSTM 层数增多,模型效果先增长后降低。

Transformer

曾经有人说,想要提高 LSTM 效果只要加一个 attention 就能够。可是如今attention is all you need。Transformer 解决了 NLP 领域深层网络的训练问题。

Attention 此前就被用于众多 NLP 的任务,用于定位关键 token 或者特征,好比在文本分类的最后加一层 Attention 来提升性能。Transformer 起源自注意力机制(Attention),彻底抛弃了传统的 RNN,整个网络结构彻底是由 Attention 机制组成。Transformer 能够经过堆叠 Transformer Layer 进行搭建,做者的实验是经过搭建编码器和解码器各6层,总共12层的 Encoder-Decoder,并在机器翻译中取得了 BLEU 值的新高。

整个流程的可视化如图:以N=2示例,实际Transformer的N=6。

Encoder 阶段:输入“Thinking Machines”,对应词向量,叠加位置向量 Positional Encoding,对每一个位置作 Self-Attention 获得;Add&Norm 分两步,residual connection即,layer Normalization 获得新的,对每一个位置分别作 feed forward 全链接和 Add&Norm,获得一个 Encoder Layer 的输出,重复堆叠2次,最后将 Encoder Layer 输出到 Decoder 的 Encoder-Decoder Layer 层。

Decoder 阶段:先是对 Decoder 的输入作 Masked Self-Attention Layer,而后将Encoder 阶段的输出与 Decoder 第一级的输出作 Encoder-Decoder Attention,最后接 FFN 全链接,堆叠2个 Decoder,最后接全链接+Softmax 输出当前位置几率最大的的词。

Transformer 的结构上比较好理解,主要是里边的细节比较多,如 Mult-HeadAttention, Feed Forward, Layer Norm, Positional Encoding等。

Transformer的优势:

  • 并行计算,提升训练速度。这是相比 LSTM 很大的突破,LSTM 在训练的时候 ,当前步的计算要依赖于上一步的隐状态,这是一个连续过程,每次计算都须要等以前的计算完成才能展开,限制模型并行能力。而 Transformer 不用LSTM结构,Attention 机制的每一步计算只是依赖上一层的输出,并不依赖上一词的信息,于是词与词之间是能够并行的,从而训练时能够并行计算, 提升训练速度。
  • 一步到位的全局联系捕捉。顺序计算的过程当中信息会丢失,尽管 LSTM 等门机制的结构必定程度上缓解了长期依赖的问题,可是对于特别长期的依赖现象,LSTM 依旧无能为力。Transformer 使用了 Attention 机制,从而将序列中的任意两个位置之间的距离是缩小为1,这对解决 NLP 中棘手的长期依赖问题是很是有效的。

总结对比CNN、RNN和Self-Attention:

CNN:只能看到局部领域,适合图像,由于在图像上抽象更高层信息仅仅须要下一层特征的局部区域,文本的话强在抽取局部特征,于是更适合短文本。

RNN:理论上能看到全部历史,适合文本,可是存在梯度消失问题。

Self-Attention:相比 RNN 不存在梯度消失问题。对比 CNN 更加适合长文本,由于可以看到更远距离的信息,CNN 叠高多层以后能够看到很远的地方,可是 CNN原本须要不少层才能完成的抽象,Self-Attention 在很底层就能够作到,这无疑是很是巨大的优点。

BERT

BERT (Bidirectional Encoder Representations from Transformers) 本质来说是NLP 领域最底层的语言模型,经过海量语料预训练,获得序列当前最全面的局部和全局特征表示。

BERT 网络结构以下所示,BERT 与 Transformer 的 Encoder 网络结构彻底相同。假设 Embedding 向量的维度是,输入序列包含 n 个token,则 BERT 模型一个layer 的输入是一个的矩阵,而它的输出也一样是一个的矩阵,因此这样 N 层 BERT layer 就能够很方便的首尾串联起来。BERT 的 large model 使用了 N=24 层这样的Transformer block。

目标函数

  1. Masked Language Model, MLM

MLM 是为了训练深度双向语言表示向量,BERT 用了一个很是直接的方式,遮住句子里某些单词,让编码器预测这个单词是什么。具体操做流程以下图示例:先按一个较小几率 mask 掉一些字,再对这些字利用语言模型由上下文作预测。

BERT 具体训练方法为:随机遮住15%的单词做为训练样本。

  • 其中80%用 masked token 来代替。
  • 10%用随机的一个词来替换。
  • 10%保持这个词不变。

直观上来讲,只有15%的词被遮盖的缘由是性能开销,双向编码器比单向编码器训练要慢;选80% mask,20%具体单词的缘由是在 pretrain 的时候作了 mask,在特定任务微调如分类任务的时候,并不对输入序列作 mask,会产生 gap,任务不一致;10%用随机的一个词来替换,10%保持这个词不变的缘由是让编码器不知道哪些词须要预测的,哪些词是错误的,所以被迫须要学习每个 token 的表示向量,作了一个折中。

  1. Next Sentence Prediction

预训练一个二分类的模型,来学习句子之间的关系。预测下一个句子的方法对学习句子之间关系颇有帮助。

训练方法:正样本和负样本比例是1:1,50%的句子是正样本,即给定句子A和B,B是A的实际语境下一句;负样本:在语料库中随机选择的句子做为B。经过两个特定的 token[CLS]和[SEP]来串接两个句子,该任务在[CLS]位置输出预测。

输入表示

Input:每一个输入序列的第一个 token [CLS]专门用来分类,直接利用此位置的最后输出做为分类任务的输入 embedding。

从直观上来讲,在预训练时,[CLS]不参与 mask,于是该位置面向整个序列的全部position 作 attention,[CLS]位置的输出足够表达整个句子的信息,相似于一个global feature;而单词 token 对应的 embedding 更关注该 token 的语义语法及上下文信息表达,相似于一个 local feature。

Position Embeddings: transformer 的 PositionEncoding 是经过 sin,cos 直接构造出来的,PositionEmbeddings 是经过模型学习到的 embedding 向量,最高支持512维。

Segment Embeddings:在预训练的句对预测任务及问答、类似匹配等任务中,须要对先后句子作区分,将句对输入同一序列,以特殊标记 [SEP] 分割,同时对第一个句子的每一个 token 添加 Sentence A Embedding, 第二个句子添加 Sentence BEmbedding,实验中让EA =1, EB =0。

Fine-tune

针对不一样任务,BERT 采用不一样部分的输出作预测,分类任务利用[CLS]位置的embedding,NER 任务利用每一个 token 的输出 embedding。

BERT的主要贡献有如下几个方面:

预训练的有效性:这方面来讲 BERT 改变了游戏规则,是由于相比设计复杂巧妙的网络结构,在海量无监督数据上预训练获得的BERT语言表示+少许训练数据微调的简单网络模型的实验结果取得了很大的优点。

网络深度:基于 DNN 语言模型 (NNLM,CBOW等) 获取词向量的表示已经在 NLP领域得到很大成功,而 BERT 预训练网络基于 Transformer 的 Encoder,能够作的很深。

双向语言模型:在 BERT 以前,ELMo 和 GPT 的主要局限在于标准语言模型是单向的,GPT 使用 Transformer 的 Decoder 结构,只考虑了上文的信息。ELMo 从左往右的语言模型和从右往左的语言模型实际上是独立开来训练的,共享 embedding,将两个方向的 LSTM 拼接并不能真正表示上下文,其本质还是单向的,且多层 LSTM难训练。

目标函数:对比语言模型任务只作预测下一个位置的单词,想要训练包含更多信息的语言模型,就须要让语言模型完成更复杂的任务,BERT 主要完成完形填空和句对预测的任务,即两个 loss:一个是 Masked Language Model,另外一个是 Next Sentence Prediction。

总结

咱们在作 NLU 意图分类任务中实践了以上主流模型,包括 Xgboost、TextCNN、LSTM、BERT 及 ERNIE 等,下边是在前期模型调研阶段,在选型测试数据上的对比实验,BERT 模型表现出极大的优点。

同时在咱们部署上线的过程当中,对 BERT 时耗作了测试,在压测实验数据上的测试结果供参考。针对咱们的问答query:

(1 ) BERT layer 的层数与时耗基本成线性关系,多头数目增长对时耗增长不明显;

(2) 针对短文本 query 的意图理解,更多依赖浅层语法语义特征,于是 BERT 层数对模型准召影响较小;

(3) attention 多头决定了能够从多少个角度理解 query,在咱们的实验里下降多头数比下降层数对准召的影响略大,而时耗无明显下降。

图像领域,Alexnet 打开了深度学习的大门,Resnet是图像领域深度学习的殿堂标志。

随着Transformer, Bert 兴起,网络也在往12层,24层发展,获得了 SOTA. Bert 证实了在nlp领域,深层网络的效果要优于浅层网络。

天然语言领域,Transformer 打开了深层网络的大门,BERT 也成为了天然语言处理领域的殿堂标志。


原文连接 本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索