打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
NLP中的变形金刚
userphoto

2019.11.29

关注
1.前言

上回讲了当前DNN中较为较为广泛应用的一种算法机制——Attention Mechanisms,此机制在模型可解释性和模型优化方面均取得了不错的效果。那么今天,我们来进一步了解attention算法在自然语言中的更深层次的应用。本次我们介绍下自然语言处理的“变形金刚”——Transformer模型,该算法是近一年都比较热门的bert系列算法的基础。

2.Transformer模型

上回提到的attention机制可以认为是对RNN模型的一种进阶优化,其基础仍为RNN算法,针对RNN模型,存在一些不足的地方:

  1. 有一定的长期依赖问题:虽然利用门限等方法得到了有效的缓解,但是此问题依旧存在,并且句子越长,此问题越严重;

  2. RNN有很大的性能问题:主要表现在训练阶段,如在RNN的前向计算中,每个隐藏状态Ht的计算,需要依赖Ht-1,Ht-2,...,无法做到像CNN那样的并行计算,尤其当数据量很大的情况下,此问题更为严重。


所以,如何更好的抽取文本的上下文信息,以及如何更好的提高计算性能,google的大神们在2017年提出了transformer算法,其利用self-attention的方法,完全摒弃掉RNN的结构,仅依赖attention的方式,构建了一种seq2seq的模型,可用于机器翻译等领域,取得了不错的效果,模型基本框架如图1所示:

图1 transformer模型架构图

我们来具体看下transformer是如何计算的:

  1. 输入层:transformer输入包括两部分:每个词的embedding+位置encoding向量,使用时,将其整合在一起输入到模型中;

  2. encoder和decoder层:encoder和decoder层的核心是利用attention的方式对输入进行编码和解码,此外两者中均加入残差网络的结构。

  3. 输出层:输出时,从左到右,先把右侧位置的元素遮挡掉,利用mask的attention方式进行训练预测。

为了更好的了解该算法,我们分为以下几个部分重点介绍:
第一部分:multi-head Attention

Transformer中的attention部分,使用的为Multi-head Attention的方式。
Multi-head Attention是基于一种Scaled Dot-Product Attention计算方法,每次计算时,将后者重复计算多次,叠加在一起,从而保证每个输入能够提取足够的上下文信息。
那么Scaled Dot-Product Attention又是如何计算呢?下面即为该算法的示意图,具体计算步骤如下:
  1. 对于每个输入单词X1,X2,给定Wq,Wk,Wv三个矩阵,将x1和x2与这三个矩阵进行相乘,得到六个向量:q1、q2、k1、k2、v1、v2。其中这三个矩阵先随机初始给定,后面随模型训练不断迭代优化。

  2. 针对每一个单词,如第一个单词thinking,拿其q1与其他输入单词的k向量进行点乘得到各个score,s1=q1 * k1 ,s2=q1 * k2;
  3. 对每个score进行归一化,保证梯度的稳定,同时除以sqrt(dk),其中dk为向量q,k,v的长度;
  4. 利用softmax激活函数将score转化为权重w1,w2
  5. 加权求和得到各x的输出z,如z1=w1 * v1 + w2 * v2 

然后将上述计算步骤重复h次,将得到的h个小矩阵拼接在一起,利用一个简单的线性变换,得到每个输入的最终表达,这就是Multi-head attention的整体计算逻辑。
图2 Multi-Head Attention框架图

此处我们可以利用每次计算的权值w1,w2...来可视化查看输入的每个词之间的相关性,权重越大,说明相关性越强。
由于attention计算多次,每个attention层提取的词语之间的意义会有所不同,图3中可以看到第5个attention层中it与the、animal相关系较强,由此可以对模型优化提供指导意见。
图3 transformer模型input词语相关性图

第二部分:Add & Norm

除去基础的attention单元外,transformer还有众多的add &norm层,该层计算逻辑如图4所示,主要分为两部分:

  1. Add层:此处采用残差网络的设置,将原输入X与经attention计算得到的Z进行叠加,从而保证梯度不会消失,避免模型退化的发生;
  2. LayerNorm层:将数据标准化为均值为0,方差为1的数据,这样可以减小数据的偏差,规避训练过程中梯度消失或爆炸的情况。

图4 transformer模型add&norm层框架图

第三部分:Feed Forward层

模型中的前向反馈层,采用一种Position-wise feed-forward方法,具体公式如下:
此处计算方式比较容易理解,先对输入加一个全连接网络,之后拼接一个relu激活函数,之后再加一个全连接网络即可。

第三部分:Positional encoding

在我们之前使用CNN或者RNN模型进行文本建模时,模型内部已经考虑到序列的序列位置了,而上述的self-attention,仅可以认为是一个词袋模型,未考虑到词的位置信息。为了解决这个问题,此处在input中,除词语的embedding外,再额外添加位置编码信息,具体计算依据以下方式,主要依据sin和cos的方式锁定单词位置:

那么上述就是transformer模型的主要核心内容了,模型整体就是依据上述的几个部分进行重复、叠加与拼接。

3.展望

本文是对上次attention的后续,主要介绍了self-attention的基础理论部分,主要内容来源于google的《Attention Is All You Need》,此论文对于后续bert、gpt-2的理解具有极其重要的作用。

后期将介绍如何利用BERT预训练模型,进行文本建模实践。


本文转载自公众号:数据天团,作者丁永兵

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
学习|遍地开花的 Attention ,你真的懂吗?
一步步理解BERT
一文读懂深度学习:从神经元到BERT
从语言模型到Seq2Seq:Transformer如戏,全靠Mask
第一次见有人能把生成式AI的“自注意力机制”讲的这么通俗易懂!
两篇软文带领新手小白了解Transformer的前世今生(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服