transformer框架概述

导语 transformer这个模型是Attention is all you need ( Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin) 这篇论文提出的网络框架,发表在NIPS 2017上,本文大致梳理下这个网络的框架结构,和它的一些应用场景。希望有什么错误或者遗漏的地方各位大神可以指出。

1. 框架概述

    首先以机器翻译作为例子,比如说给定一个英文句子,想要让机器把它翻译成德文。transformer这个网络与传统的seq2seq模型类似(详细了解请看这里 https://blog.csdn.net/Irving_zhang/article/details/78889364),由encoder和decoder组成,encoder负责将英文的句子表示成嵌入表达式,一般每个单词由一个向量来表示,向量的维度是一个超参数,由人为设定,并且对上下文的语境进行一个向量表征。为了得到这个句子上下文语义的向量表征,seq2seq模型采用的是Long Short-term Memory(LSTM),对上下文的记忆存在隐藏状态当中,对LSTM的详细模型请看这篇文章(https://blog.csdn.net/hust_tsb/article/details/79485268)。decoder与encoder类似,也是由LSTM组成,它的主要功能是根据encoder得到的上下文信息,对翻译之后的句子在每个time step进行概率分布的预测,并且在每个time step选取概率最大的词作为输出,或者用beam search扩大搜索域。

但是transformer的基础网络框架并不由LSTM等循环神经网络组成,也不像ConvS2S或者ByteNet那样由卷积神经网络组成,它是由self attention的运算单元组成,self attention的具体计算方式我们后面会提到,它可以得到句子当中任意距离的两个单词之间的表征关系,不再像LSTM那样受限于过长的序列长度,也不像卷积神经网络那样受限于receptive field。一个宏观的网络框架如图1所示。

图1. encoder-decoder框架

    encoder和decoder分别由6层网络构成,encoder的输出会作为decoder的输入,这个和seq2seq当中的attention机制类似。图二是这个网络更加细致的展开。

图2. 框架剖析

2. encoder和decoder组成

    现在让我们来看看每一层encoder和decoder分别是怎么样组成的。每层encoder由两小层组成,第一层是self attention,第二层是feed forward。每层decoder由三小层组成,self attention层和feed forward层,与encoder相同,还有一个encoder-decoder attention层,这一层的目的是让每个decoder time step将注意力放在输入序列不同的位置上,和seq2seq中的attention机制相同。图3表示了encoder和decoder的这种连接关系。

图3. encoder-decoder的结构

3. multi-head self attention

    我们来看看self attention机制是怎么组成的。对于每一个输入单词有一个词向量的表示,假设为512维,一句话就可以别表示成一个矩阵,将这个矩阵通过三个参数矩阵QM,KM,VM映射到低维向量空间,比如说64维,得到三个低维向量空间中句子信息的表示,分别用Q,K,V来表示,Q代表query,K代表key,V代表value。将Q与K做矩阵乘法得到的矩阵A代表了这句话当中每个单词与其他位置上的单词的匹配程度,可以看做是score。然后对A矩阵进行scale,比如对每个元素除以根号下key向量的维度,目的是防止内积的结果太大,导致训练时进入梯度为0的区域。在decoder阶段,可以选择性的加入mask,目的是让当前时刻的输出不会被这个时刻以后的信息所影响。在这之后对每个单词的向量表示做softmax运算,使得矩阵乘法得到的score(scale以后)变成概率分布,再用这个概率分布在V矩阵上进行信息提取,类似于加权平均,所以跟当前位置的词匹配的其他位置的词会有更大的影响。self attention名字的由来就是因为Q,K,V都是从同一个句子的嵌入表示得来的,得到的新的向量表示是在本句话中对其他位置的信息匹配与抽取。multi-head的意思是可以同时并行地学习h组不同的QM,KM,VM矩阵,以学习到不同语义的表征关系,比如说一组矩阵学习的是这句话的情感联系,另一组矩阵学习的对命名实体更加细粒度的映射。图4是self attention的矩阵运算法。图5是multi-head attention的示意图。

图4. self attention矩阵运算法

图5. multi-head attention的示意图

4. 位置嵌入表达

    在对输入信息的表征中,除了常用的词向量,还有对于位置信息的嵌入表达。嵌入表达式如图6所示。从公式可以看出,每个位置的向量表征都可以用其他位置向量表征的线性组合来表示,这样就可以让每个位置的单词关注一些相对位置上面的词,而不像LSTM一样随着序列变长导致信息遗忘。正弦余弦公式还有一个好处,就是可以对任意长的序列进行编码,而不受句子长度的限制。图7是嵌入表达式的视觉表达。

图6. 位置嵌入表示式

图7. 嵌入表达式的视觉表达

5. 其他模型细节

    在self attention和feed forward层都有做residual,简单来说就是self attention和feed forward运算后把输入和输出进行相加,保留了更加粗粒度的信息表征。residual过后是layer normalize,是为了防止过拟合和梯度消失。图8是一层网络的详细结构。网络的输出是全连接层之后接softmax,对生成的翻译文本进行概率分布的预测,损失函数用的是cross-entropy。

图8. 一层网络的详细结构

6. 应用场景

transformer被提出后,被成功运用到了NLP的各个领域,比如语言模型,情感分析,文本摘要,语言翻译,甚至在图像领域也有了贡献,原作者将transformer应用在了图像生成领域上,取得了不错的效果,叫做image transformer,有兴趣的读者可以研究下参考文献中的[5]。

7. 小结

    本文章介绍了transformer的基本框架结构和应用场景,参考了这篇blog (https://jalammar.github.io/illustrated-transformer/),写的非常详细,图也是参考的这篇blog,想要有更加直观和细节的了解可以看一下,里面有非常多的图片讲解。还想提一下Google的一个开源项目Tensor2Tensor,这里面融入了不同的深度网络模型,包括transformer,来实现各种不同的NLP和CV的任务,有兴趣的读者可以去GitHub( https://github.com/tensorflow/tensor2tensor)逛逛。

8. 参考文献

[1] https://jalammar.github.io/illustrated-transformer/

[2] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in Neural Information Processing Systems. 2017: 5998-6008.

[3] https://blog.csdn.net/Irving_zhang/article/details/78889364

[4] https://blog.csdn.net/hust_tsb/article/details/79485268

[5] Parmar N, Vaswani A, Uszkoreit J, et al. Image Transformer[J]. arXiv preprint arXiv:1802.05751, 2018.

[6] https://github.com/tensorflow/tensor2tensor

原文发布于微信公众号 - 腾讯知文(tencent_wisdom)

原文发表时间:2018-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

深度学习必知必会25个概念

导语:很多人认为深度学习很枯燥,大部分情况是因为对深度学习的学术词语,特别是专有名词很困惑,即便对相关从业者,亦很难深入浅出地解释这些词语的含义。本文编译自An...

3085
来自专栏AI研习社

杂谈CNN:如何通过优化求解输入图像

机器学习和优化问题 很多机器学习方法可以归结为优化问题,对于一个参数模型,比如神经网络,用 y=f(x;θ) 来表示的话,训练模型其实就是下面的参数优化问题...

3593
来自专栏ml

关于梯度下降算法的的一些总结

目录:  1. 前言  2. 正文   2.1 梯度      2.2 梯度下降算法          2.2.1 批量梯度下降算法          2.2....

37011
来自专栏机器之心

ECCV 2018 | UBC&腾讯AI Lab提出首个模块化GAN架构,搞定任意图像PS组合

作者:Bo Zhao、Bo Chang、Zequn Jie、Leonid Sigal

1001
来自专栏大数据文摘

辨别真假数据科学家必备手册:深度学习45个基础问题(附答案)

2838
来自专栏机器之心

谷歌云大会教程:没有博士学位如何玩转TensorFlow和深度学习(附资源)

机器之心原创 作者:吴攀、李亚洲 当地时间 3 月 8 日-10 日,Google Cloud NEXT '17 大会在美国旧金山举行。谷歌在本次大会上正式宣布...

43911
来自专栏专知

【前沿】FAIR何恺明等人与UC伯克利最新论文提出分割利器(Learning to Segment Every Thing)

【导读】Facebook FAIR实验室与UC伯克利大学合作提出《Learning to Segment Every Thing》在ICCV 2017 最佳论文...

4547
来自专栏机器之心

教程 | 如何估算深度神经网络的最优学习率

3605
来自专栏AI科技评论

深度 | 用于大规模行人重识别的行人对齐网络

1.Motivation 近年来,对行人重识别(person re-ID)问题的研究也越来越多了。类比于自然语言处理(nlp)的话,大家或者集中于语义层面的设计...

3888
来自专栏AI科技大本营的专栏

干货 | 闲说CNN:通过优化求解输入图像

? 作者 | 达闻西 整理 | AI100(rgznai100) 机器学习和优化问题 很多机器学习方法可以归结为优化问题,对于一个参数模型,比如神经网络,...

3315

扫码关注云+社区