深度自适应性Transformer

深度自适应性Transformer

论文标题:

Dept-Adaptive Transformer

Maha Elbayad, Jiatao Gu, Edouard Grave, Michael Auli

论文链接:

https://arxiv.org/pdf/1910.10073.pdf

收录情况:

Under review for ICLR2020

MT下的大模型

之前我们也讨论过当前深度学习存在的一个问题:模型无脑堆大,一般就能取得更好的效果。

大的模型可以在困难实例上表现更好,但小模型也能够在简单实例上表现不错,比如就回答一个“Thank y ou”。

另一方面,大模型的推理速度也会变慢,我们希望能够在这种模型下取得不失效果的(包括困难实例)提高推理速度。

本文提出一种深度自适应性的Transformer方法:在推理的时候,对每个生成的token,选择特定的decoder层去输出,而不是必须走到最后一层。本文贡献如下:

  • 本文提出深度自适应(depth-adaptive)的Transformer结构,能够在推理时对每个待生成的字符自动选择decoder layer去做分类;
  • 本文能够在不失效果的情况下显著提高推理速度;
  • 本文提出了多种方法去预测decoder深度,发现一个简单的Possion分类器能够取得比较好的效果。

动态计算(Dynamic Computation)

首先介绍一下要使用的符号。(x,y)表示给定的源句子-目标句子对,模型的encoder得到源句子的编码s=(s_1,s_2,……,s_{|x|}),然后对N层decoder,在时间t,接受y_t的词向量,然后依次往上传:

深度自适应性Transformer


然后传统的Transformer会在最后一层进行分类:

深度自适应性Transformer


这里有两点要注意:

  • 对每个时间t,y_t一定要经过N层decoder
  • 最后的分类器W是唯一的。

除了传统Transformer之外,一个简单的想法是,对每个字符,可以选择在中间某层1≤n≤N做分类,这称为动态计算(Dynamic Computation):

深度自适应性Transformer


同上,现在要注意的两点是:

  • y_t到达第n层就输出了,不再往上走(就算走也没意义)
  • 对每一层n,其分类器W_n是不同的(当然也可以相同,这个后面说)

好了,下面就需要对每个y_t,我们想让它在哪一层n退出(Exit)了。本文提出了两种方法(见下图):

  • 对齐训练(Aligned Training) :该方法假设当前步之前的所有隐藏层单元h^{n-1}_{1:t}都看得到,然后用它们去计算N个loss项:
深度自适应性Transformer


  • 混合训练(Mixed Training):实际上,对齐训练是不合现实的,这是因为不是所有的y_t都是在第N层输出,比如y_t可能在第n
  • 那么一个simple的想法是,上面的隐藏单元直接copy第n层的就可以了,具体见下图(b)。具体来说,我们先对句子y采样M个退出序列 。对每个序列m,公式就可以写为(省略了m):

深度自适应性Transformer


下一个问题是,怎么采样退出序列。

深度自适应性Transformer

自适应深度估计(Adaptive Depth Estimation)

本节回答上面这个问题。本文考虑了两种方法:

(1)以序列为基础(sequence-specific),即对同一个序列内的每个字符,它们都在同一层退出;

(2)以字符为基础(token-specific),一个序列内的每个字符可能在不同层退出。

为此,我们使用q_t去建模在第t步时,对应的退出层的参数分布,即q_t(n)是y_t在第n层退出的概率。这个概率使用下式优化:

深度自适应性Transformer

其中q*_t是真实分布(具体怎么优化、真实分布是什么下面讲)。所以,整体的损失就是:

深度自适应性Transformer

以序列为基础的自适应深度

在以序列为基础的自适应深度下,由于一个序列内每个字符的退出层都是一样的,所以我们不考虑下标t。我们使用下面的式子得到分布q:

深度自适应性Transformer


那么,真实分布q*又怎么得到呢?本文又提出两种方法:

  • 基于似然度(Likelihood-based): 这种方法使用整个序列的最大似然对应的退出层,并使用Dirac delta函数。
深度自适应性Transformer

此外,还可以加入一个正则项鼓励更低的退出层:

深度自适应性Transformer


  • 基于正确性(Correctness-based): 似然虽好,但不能判断最大的似然是不是正确的序列,所以,基于正确性的方法选择这样的退出层。 它是满足赋予正确字符最大分数的最低的层。
  • 具体来说,对每个层,我们计算在该层上所有正确预测的字符数,然后选择最大正确数的一层,并同样加上正则项:

以字符为基础的自适应深度

以字符为基础的自适应深度方法对每个字符,需要分别判断它们要在哪一层推测,即要得到q_tqt。本文考虑两种方法:

  • 多项分布(Multinomial):
  • 泊松二项分布(Poisson Binomial):

深度自适应性Transformer


同样地,下面要考虑真实分布q^*_tqt∗:

  • 基于似然度: 同上,在每一步tt,我们选择这样的层:在这个层退出的时候,似然得到最大:
深度自适应性Transformer

但是显然,这种方法是贪心做法,我们还想要考虑未来的字符,所以本文考虑 一个光滑化(smoothed)似然,它考虑附近的几个字符:

深度自适应性Transformer


  • 基于正确性: 和基于似然的相同,我们有:
深度自适应性Transformer


  • 基于自信度(Confidence Thresholding) :所谓自信度θn,就是当当前的输出最大得分超过它时,就以当前层n退出。换句话说,就是当前层n足够自信的时候,就把这一层作为当前字符的退出层。

下图是几种不同方法的示意图:

深度自适应性Transformer

实验

本文在数据集IWSLT'14 De-En和WMT'14 En-Fr上实验,实验设置详见论文。下表是对齐训练和混合训练的效果实验结果,实验在IWSLT De-En上进行,报告BLEU值。

深度自适应性Transformer

可以看到,对齐训练方法竟然几乎全面碾压混合训练方法,这是因为对齐训练方法不会copy其他层的hidden states。下面我们统一使用对齐训练方法。

然后,下图是在IWSLT14 De-En上速度和效果的比较图,其中C表示correctness-based oracle, LL表示Likelihood-based oracle:

深度自适应性Transformer

而下图是在WMT14 En-Fr上的比较图:

深度自适应性Transformer

从这两个图可以看到,用对齐训练方法得到的模型,在n≥2的时候,差不多就能超过baseline模型(传统Transformer),而Possion方法大体上比多项分布好。

下图是一个实例,绿色的是退出层,灰色的是概率得分。显然,大部分字符都不必走完6层,这说明加快了推理的速度。

深度自适应性Transformer

小结

本文就Transformer提出了一种深度自适应性的推理方法,能够加速推理时的速度,同时还不失效果。

在训练时,有两种策略(对齐训练和混合训练);在推理时,也有两种策略(序列为基础和字符为基础),并且各自都有选择退出层的不同方法。本文探索了以上策略,取得了比较好的结果。


分享到:


相關文章: