Transformer的模型架构
首先建立一个概念,Transformer由两部分组成,编码器Encoder和解码器Decoder。
Encoder:读取输入语句并生成其representation。
Decoder:参考Encoder生成的输入语句的representation,逐词生成输出语句。
论文中的Transformer的架构图是长这个样子的,左边是Encoder,右边是Decoder:
为了方便理解它的交互方式,可以把它看成这个样子:
有了一个整体性概念以后,接下来关注Encoder和Decoder部分:
- Encoder:Encoder部分目的比较单纯,就是从原始句子中提取特征。
- Decoder:Decoder部分则功能相对比较多,除了特征提取功能外,还包含语言模型功能,以及用attention机制表达的翻译模型功能。
当用Transformer做特征抽取时,实际上指的只是Transformer 的Encoder部分,Bert所用的Transformer就是如此。
decoder介绍可以看这里,接下来重点关注一下Encoder的内部细节。
俊林大神的示意图
Encoder = Multi-head self attention+Skip connection+LayerNorm+FF - Multi-head self attention:Transformer的核心所在,Illustrated: Self-Attention
- Skip connection:大名鼎鼎的残差连接,解决梯度问题。
- LayerNorm:对上一层的输出做归一化,缓解过拟合,模型优化之Layer Normalization
- FF:前馈神经网络,即MLP
看张俊林老师的文章,发现这么一句话: “这里需要强调一下,尽管Transformer原始论文一直重点在说Self Attention,但是目前来看,能让Transformer效果好的,不仅仅是Self attention,这个Block里所有元素,包括Multi-head self attention,Skip connection,LayerNorm,FF一起在发挥作用。为什么这么说?[2]”
目前不太明白,懂了再来填坑
缺陷
Transformer主要存在以下几点不足:
-
缺少Recurrent Inductive Bias:
学习算法中Inductive Bias可以用来预测从未遇到的输入的输出(参考[10])。对于很多序列建模任务(如需要对输入的层次结构进行建模时,或者在训练和推理期间输入长度的分布不同时),Recurrent Inductive Bias至关重要。EMNLP 2018 上的一个工作[9]对这一点进行了实证。 -
Transformer是非图灵完备的:
非图灵完备通俗的理解,就是无法解决所有的问题(详情可以看这里)。 -
transformer缺少conditional computation:
transformer在encoder的过程中,所有输入元素都有相同的计算量,比如对于“I arrived at the bank after crossing the river”, 和”river”相比,需要更多的背景知识来推断单词”bank”的含义,然而transformer在编码这个句子的时候,无条件对于每个单词应用相同的计算量,这样的过程显然是低效的。 -
不能很好的处理超长输入:
理论上来说,attention可以关联两个任意远距离的词,但实际中,由于计算资源有限,仍然会限制输入序列的长度,超过这个长度的序列会被截断
参考:
网友评论