系列文章,请多关注
Transformer家族1 – Transformer详解和源码分析
Transformer家族2 – 编码长度优化(Transformer-XL、Longformer)
Transformer家族3 – 计算效率优化(Adaptive-Span、Reformer、Lite-Transformer)
Transformer家族4 – 通用性优化(Universal-Transformer)
Transformer家族5 – 推理加速(Faster-Transformer、TurboTransformers)
NLP预训练模型1 – 综述
1 背景
之前讲Transformer的时候,也提到过它的通用性的缺点。相比于RNN,Transformer不是图灵完备的,虽然大多数任务都是吊打RNN,但在某些看起来极为简单的任务上,却表现很差,比如字符串拷贝等。这个问题其实也不算大,但谷歌还是给出了他的解决方案,也就是Universal Transformer。这篇看看就好了,个人感觉实际应用中作用有限。
2 Universal-Transformer
论文信息:2018年7月,谷歌,ICLR2019
论文地址 https://arxiv.org/abs/1807.03819
代码和模型地址 https://github.com/tensorflow/tensor2tensor
2.1 为什么需要Universal-Transformer
主要的出发点是原版Transformer不是图灵完备的,有些很简单的任务表现很差,比如字符串拷贝。序列任务还是比较偏好于迭代和递归变换,RNN正好满足了这一点,而Transformer不满足。这一点文章称作归纳偏置(Inductive Bias)。深度学习的归纳偏置是什么?
2.2 实现方案
模型结构
如上所示为Universal-Transformer的结构,仍然为一个基于multiHead self-attention的seq2seq,几点不同
- 引入了时间步step,从而实现了循环递归。除了第一次是原始信息作为输入,之后都是由前一个step的输出作为后一个的输入。
- Feed-forward换成了Transition函数。根据task不同,可选择separable convolution分解卷积和fully-connected neural network全连接神经网络。
- 时间和位置编码,TimeStep embedding和Position embedding,新引入了TimeStep embedding,二者的编码公式和Transformer中的位置编码很像,如下
Adaptive Computation Time(ACT) 自适应计算时间
前人已经提到过ACT了,作者在模型中引用了。序列问题中,有些词语比其他的更模糊。他们需要进行更多次的计算。Universal-Transformer利用了ACT机制,可以对每个token设置自适应计算时间。模型会动态调整每个位置所需的计算steps。当某个位置停止计算后,直接copy它的隐状态到下一step。当所有位置都停止计算后,整个过程才停止。
如上,不同位置token所需的计算steps是不同的。
2.3 实验结果
字符串任务
字符串复制、翻转、添加操作的效果。可以发现
- Transformer效果确实比较差,比LSTM差很多。这也验证了Transformer通用性确实有些问题,也就是本文的出发点
- Universal-Transformer效果很好,超过LSTM很多,成功解决了原版Transformer的问题
机器翻译
机器翻译上的结果,Universal-Transformer的BLEU比原版Transformer提高了0.9%
系列文章,请多关注
Transformer家族1 – Transformer详解和源码分析
Transformer家族2 – 编码长度优化(Transformer-XL、Longformer)
Transformer家族3 – 计算效率优化(Adaptive-Span、Reformer、Lite-Transformer)
Transformer家族4 – 通用性优化(Universal-Transformer)
Transformer家族5 – 推理加速(Faster-Transformer、TurboTransformers)
NLP预训练模型1 – 综述