橦言无忌

一个不想改变世界的程序媛

ODE Transformer

前言

文章:ODE Transformer-An Ordinary Differential Equation-Inspired Model for Neural Machine Translation

essay link

ODE 跟Transformer关联的文章,第一次读文章,先看懂!

摘要

前面有文献工作发现了,残量连接网络是ODE的Euler离散解法。本文探讨Transformer和ODE数值方法之间的关系,且发现了Transformer可以描述为ODE的高阶解法,同时也带领我们设计了一种新的架构(称为 ODE Transformer),类似于在 ODE 中受到很好启发的 Runge-Kutta 方法。

作为Transformer的自然拓展,ODE Transformer容易实现,参数也更加高效。我们对三个 WMT 任务的实验证明了该模型的通用性,以及在几个强大的基线上的性能大幅改进。本文在数据集WMT14的En-De和En-Fr上分别获得了30.76和44.11的BLEU的分值,这为 WMT’14 En-Fr 任务设置了新的sota。

1,介绍

残差网络已被用作简化多层神经模型中信息流的标准方法,并取得了巨大成功。 给定输入 $y_{t}$,此类模型将深度 $t$ 处的层的输出定义为:

其中,$F(\cdot,\cdot)$ 是网络层的函数,$\theta_{t}$是参数。

有意思的是,ML中最近的工作指出上式可以理解为ODE的Euler离散方法,类似下式:

其中,$y(t)$和$\theta(t)$ 是关于 $t$ 连续的。

用这样的方式,可以将残差网络理解为ODE模块,该发现也给理解残差网络从数值优化的角度提供了新思路。之后,可以尝试在多层网络上利用Euler方法,初始值就给定为$y(0)=y_0 $ 和 $\theta (0)=\theta_0 $。

方程 (2) 的解法前提,只有当 $\theta(t) $ 沿 $t$ 缓慢变化时,才有足够低的误差界限(称之为稳定解)。 但这种假设并不总是适用于最先进的自然语言处理 (NLP) 系统,其中模型是非线性和超参的。 例如,语言建模和机器翻译系统为不同的层学习完全不同的参数,尤其是当层接近模型输入时。

此外,欧拉方法的截断误差不可忽略,因为它是真实解的一阶近似。 当更多的层被堆叠并且错误通过神经网络传播时,这些问题会使情况变得更糟。 这或许可以解释为什么最近的机器翻译 (MT) 系统无法从极深的模型中受益。

在本文中,我们继续研究 ODE 启发方法,基本思想是使用高阶更精确地对 ODE 进行数值求解,这会导致生成更大的 ODE 块,产生一系列中间近似值。 我们发现较大的 ODE 块足以等价于多个一阶解的 ODE 块,好处是显而易见的:使用较少的 ODE 块降低了在块切换中引入错误的风险,而高阶方法减少了每个 ODE 块中的近似误差。

我们的方法是参数有效的,因为$\theta(t) $在同一个 ODE 块中重复使用了,作为另一个“奖励”,可以通过学习块中不同中间近似的系数来改进模型。 我们在强 Transformer 系统中评估我们的方法,涵盖宽(和大)模型和深度模型。 它在 WMT14 En-De 和 En-Fr 测试集上获得了 30.76 和 44.11 的 BLEU 分数,该结果为 WMT14 En-Fr 任务设置了新的sota。

2,Transformer和ODE

本文从 Transformer 的描述开始,然后是它与 ODE 的关系。 我们选择 Transformer 进行讨论和实验,因为它是最近 MT(机器翻译) 评估中最先进的模型之一。

2.1 Transformer

Transformer 是编码器-解码器范式的一个例子,编码器是一堆相同的层,每层由一个自注意力块和一个前馈网络(FFN)块组成,它们都配备了残差连接和层归一化单元。 注意,术语“块”以许多不同的方式使用,在本文中指的是通过残差连接(有时称为残差块)增强的任何神经网络。

遵循 Pre-norm 架构 ,我们将块定义为

其中$LN(\cdot)$ 是层归一化函数,为了简单起见,我们去掉了$LN(\cdot)$的参数,$G(\cdot)$是 自注意力或前馈网络。 解码器具有类似的架构,在 self-attention 和 FFN 块之间有一个额外的编码器-解码器注意块。

2.2 ODE

常微分方程是变量 $t$ 的函数 $y(t)$ 及其导数的方程,ODE 的一种简单形式是定义 $y(t)$ 的一阶导数的方程,如下所示:

其中 $f(y(t),t)$ 定义了一个时间相关向量场,如果我们知道它在 $y$ 的所有点和所有时间点 $t$ 的值。 上述方程涵盖了广泛的问题,因为变量的变化由其当前值和时间变量$t$决定。

这个方程也适用于Pre-norm的Transformer块,为了记号简单,我们将$G(LN(y_t),\theta_t) $表示为一个新函数$F(y_t,\theta_t) $就有了:

将$y_t $和$\theta_t $转换成时间的连续函数$y(t)$和$\theta(t) $,重写方程(3)为:

其中,$\Delta t$表示$t$的变化,也就是常说的步长,显然,在Transformer中有$\Delta t=1$,但可以使用一个约束来适应步长$\Delta t $,就得到了:

实际上有$\lim_{\Delta t\rightarrow 0}\frac{y(t+\Delta t)-y(t)}{\Delta t}=\frac{dy(t)}{dt} $,方程(7)是方程(4)的特例,唯一的区别就是在方程(4)的右边引进了$\theta(t)$。

然后,我们说 Pre-norm Transformer 块描述了 ODE。 已经发现方程(3)与求解方程(7)中描述的 ODE 的欧拉方法具有相同的形式。 这建立了 Transformer 和 ODE 之间的关系,在给定 $F(\cdot,\cdot)$ 和学习参数 $\{\theta_t\}$ 的情况下,多块 Transformer 的前向传递是多次来运行欧拉方法。

3 ODE Transformer

在 ODE 的数值方法中,我们希望以最少的计算步骤确保 ODE 的精确解。 但是Euler方法并不“精确”,因为它是一阶方法,自然会出现局部截断误差。 如果我们多次运行它,全局误差可能会更大{全局误差就是我们通常所说的误差,$y(t)$ 与真值之间的差异。 局部误差是单步引入的误差,假设$y(t-1)$为真解,$y(t)$与其的差值}。 Transformer 显然就是这种情况,尤其是当多层神经网络在求解 ODE 时,易出现更不稳定的风险。

3.1 高阶ODE解法器

在这里,我们使用 Runge-Kutta 方法来获得 ODE 的高阶解,它们是具有不同阶精度的经典迭代方法。 正式地介绍$n$步求解的显式 Runge-Kutta 方法定义为:

其中 $ h $ 是步长,在大多数情况下可能就是 1。 $\mathrm{F}_i$ 是步骤 $t+\alpha_i h$ 处解的中间近似。

$ \alpha $、$ \beta $ 和 $ \gamma $ 是可以由 $ y_{t+1} $ 的泰勒级数确定系数,方程(10)描述了在 $n $ 步 $\{t+\alpha_1 h,…,t+\alpha_n h \}$上的解近似序列 $\{F_1,…,F_n\}$,然后对这些近似值进行插值以形成最终解,如方程(8)。

Runge-Kutta 方法直接适用于 Transformer 模块的设计,我们所需要的只是将函数 $f$ 替换为函数 $F$, 优点是函数 $F$ 在块中被重用。 此外,模型参数$\theta_t$ 可以在块内共享。(虽然我们可以区分一个块中不同步骤的参数,但我们发现它没有帮助并且使模型难以学习。) 这样,可以省略方程(10)中的$t+\alpha_i h$,用下式来计算 $F_i$:

这使得系统参数效率更高,正如我们的实验所示,高阶 Runge-Kutta 方法可以学习具有明显更小的模型和强大 NMT 系统。

Runge-Kutta 方法是通用的,例如欧拉方法就是它们的一阶特例。 对于二阶 Runge-Kutta (RK2) 块,我们有:

这也称为改进的欧拉方法,同样,我们可以将四阶 Runge-Kutta (RK4) 块定义为:

参见图2 以比较不同的 Runge-Kutta 块,需要注意的是,这里介绍的方法可以从表示细化的角度来解释。 它为函数提供了一种更新函数本身的方法,例如,Universal Transformer 使用相同的函数和相同的参数以块方式来细化输入序列的表示。 在这里,我们展示了内部块细化可以在良好的理论支持下建模。

3.2 参数学习

在我们的初步实验中,当模型很浅时,RK2 和 RK4 方法产生了有希望的 BLEU 改进,但发现对于更深层次的模型,这种改进并没有持续下去。 为了弄清楚为什么会发生这种情况,让我们从训练的角度回顾一下龙格-库塔方法,以 RK2 方法为例。 我们通过替换 $F_1$ 和 $F_2$重写方程(12),如下:

令 $\mathcal{E}$ 为训练损失,$L$ 为模型的块数,$y_{L}$ 为模型输出,$\mathcal{E}$ 在 $y_t$ 处的梯度是

其中,

从等式(29)看,$\frac{\partial \mathcal{E}}{\partial y_{t}}$ 与因子 $\frac{1}{2^{L-t}}$成正比,这导致当 $L$ 较大时梯度消失的风险更高。

这个问题在某种程度上归因于$F_i$ 的小系数,即$\gamma_1 = \gamma_2 = \frac{1}{2}$。 一个自然的想法是根据经验设置 $\gamma_i = 1$ 以消除梯度计算中小于 1 的乘积因子,尽管这在理论上并不基于标准的龙格-库塔方法。 我们用新系数重写方程(20),如下:

然后,可以求梯度为:

这个模型很容易优化,因为 $\frac{\partial \mathcal{E}}{\partial_{y_L}}$ 可以传递给没有尺度的低级块。 请注意,这里的方法是参数共享的实例。 例如,在每个 ODE 块中,我们对所有中间步骤使用具有相同参数 $\theta_t$ 和相同函数 $F$。 设置 $\gamma_i = 1$,因为 $F_i$ 以相同的比例传递到下一步。 这里我们称之为隐式参数共享。

另一种缩放 $F_i$ 的方法是在训练数据上自动学习系数(初始值 $\gamma_i = 1$),它帮助系统学习在一个块中流动 $F_i$ 的方式。 我们的实验表明,自动系数学习对于获得更好的结果是必要的。

4,实验

4.1 实验设置

我们提出的方法在三个广泛使用的基准上进行了评估:WMT’14 英语-德语 (En-De)、WMT’14 英语-法语 (En-Fr) 和 WMT’16 英语-罗马尼亚语 (En-Ro) 翻译任务。

数据集和评价

对于 En-De 任务,训练数据由大约 4.5M的标记化句子对组成,所有句子都被分割成子词单元的序列,使用共享词汇表进行了 32K 的合并操作。 我们选择 newstest2013 作为验证数据,选择 newstest2014 作为测试数据。

对于 En-Fr 任务,我们使用了 Fairseq 提供的数据集,即来自 WMT’14 的 36M 训练句子对,newstest2012+newstest2013 是验证数据,newstest2014 是测试数据。

对于 En-Ro 任务,我们复制了文章mehta2020delight的设置,分别使用 600K/2K/2K 句子对进行训练、评估和推理。

我们根据 BLEU 来衡量性能,标记化的 BLEU 分数 和 sacrebleu 都是在 En-De 和 En-Fr 任务上报。 此外,我们报告了 En-Ro 任务的标记化 BLEU 分数,En-De 和 En-Fr 的beam尺寸和长度惩罚因子分别为 4 和 0.6 ,En-Ro 为 5 和 1.3 。

训练细节

正如 li-etal-2020-shallow 的工作所建议的,我们使用相对位置表示 (RPR) 来获得更强的基线 。 所有实验都在 8 块 GPU 上进行训练,每个 GPU 上有 4,096 tokens。 对于 En-De 和 En-Fr 任务,我们采用梯度累积策略,步长分别为 2 和 8 。 我们使用了 Adam 优化器,其超参数设置为 $(0.9, 0.997)$,学习率的最大点设置为 $0.002$,以实现快速收敛。 我们将 SAN 和 FFN 合并视为默认的 ODE 块。

更多细节参见我们提供的材料。

4.2 结果

En-De 和 En-Fr 的结果

表1将 ODE Transformer 与几个最先进的系统进行了比较,RK2-block 和 RK4-block 在不同的模型容量下都大大优于基线。 例如,当深度为 6 时,RK2-block 使用基本配置获得了 0.97 的 BLEU 改进。 RK4 块在 RK2 块之上产生 +$0.17$ BLEU 点的收益, 这一观察从经验上验证了高阶 ODE 函数更有效的猜想。 当我们切换到深度模型时,RK2-block 可与 li-etal-2020-shallow 中报告的 48 层强系统相媲美,但参数显着减少,这表明我们的方法是参数有效的。

宽模型也可以受益于扩大层深度。 RK-2 ODE Transformer 在 En-De 和 En-Fr 任务上的 BLEU 分数分别为 30.76 和 44.11 ,显着超过标准 Big 模型 1.32 和 0.70 的 BLEU 分数。 这为这些任务设置了新的最先进技术,参数更少, 请注意,我们后续将报告更多关于 RK4 块的结果。

Rn-Ro 结果

表2展示了 En-Ro 任务中几个强大系统的模型参数、总训练步骤和 BLEU 分数。 同样,ODE Transformer 的性能优于这些基线。 如 mehta2020delight 中所述,他们对模型进行了高达 170 epoches 的训练,并通过 DeLight 模型获得了 34.70 的 BLEU 分数。 然而,这里的观察是完全不同的, 在 20 epoch 之后,验证的困惑度开始增加。 因此,我们的基线略逊于他们的基线,但与 lin2020towards 中报告的结果相匹配。 ODE Transformer 使用 DeLight 以更少的训练成本实现了更好的性能, 对于更大的模型(表2中的第 6 行),它获得了 35.28 的 BLEU 分数。

参数有效性

表3总结了几个高效 Transformer 变体的结果,包括 Lite Transformer 、DeLight和 Evolved Transformer的轻型版本。 正如我们预期的那样,所提出的 ODE Transformer 有望用于较小的模型。 它在 BLEU 中与 DeLight 相当,但参数少了 9M。 在相同的模型容量下,它比 DeLight 高出 0.84 BLEU 点。 这些结果表明,所提出的方法与模型容量正交,它可能为在边缘设备上部署 NMT 系统提供新的选择。

4.3 分析

在这里,我们调查一些有趣的问题。 为简单起见,在下文中,我们将具有可学习系数的 RK2-block 称为 RK2-block-v2。

BLEU 和编码深度

图 3(左)描绘了几个 ODE Transformer 变体的 BLEU 分数和不同编码器深度下的基线。当深度 $\leq 24$ 时,所有 ODE Transformer 变体都明显优于基线。而 RK2-block-v2 几乎在所有深度上都达到了最佳性能,尤其是当模型变得更深时。直观地说,与 18 层基线系统相比,6 层 RK2 块能够提供相当的性能。同样,它表明所提出的方法是参数有效的。这里的另一个发现是 RK4 块在浅层模型上表现得很好,在表 1 中观察到了类似的现象。对于更深的模型,它不如 RK2-block,尽管高阶 ODE 求解器可以获得更低的误差。这是因为当模型很深时,原始系数可能会导致反向传播中的优化问题。此外,图 3(右)将 BLEU 绘制为当隐藏大小为 256 时模型大小的函数。我们的 RK2 方法使用更少的参数显着超过了基线。

不同$F(\cdot,\cdot) $上的参数学习

正如我们所说,$F(\cdot,\cdot)$ 函数可以是子层,例如 SAN、FFN 或两者兼有 (SAN+FFN)。 如图 4 所示,高阶 ODE 与 FFN 协同相比 SAN 协同的效果更好。 一个探索可能是FFN组件的参数比SAN组件多。将 FFN 和 SAN 合并为 ODE 块的模型表现出最佳性能。

训练和验证难度

图 5 绘制了 RK 块和标准残差块的训练和验证困惑 (PPL) 曲线。 我们基于两种配置(基本模型和宽模型)比较行为。 直观地说,RK2 块在两种配置中都呈现较低的训练和验证 PPL。

梯度归一化后的可视化

为了研究所提出的 ODE Transformer 的优越性,我们在训练期间收集了几个训练有素的系统的梯度范数。 图 6 绘制了 RK2-block、RK4-block 和标准残差块(基线)的梯度范数。 正如我们所见,Pre-Norm 残差块能够使训练稳定。 由于中间近似之间的隐式参数共享,RK2-block 和 RK4-block 都提供了更丰富的信号。 并且两条学习曲线同样看起来几乎相同,这与表 1 中的结果一致。

不同ODE设计策略的比较

然后,我们对几种ODE设计模式进行了综合分析。 正如 yiping2018beyond 中所述,计算机视觉中的几个模型,例如 LeapfrogNet、PolyNet 、Multi-step Net 也可以从 ODE 角度进行解释。 相关的 ODE 函数汇总在表 4 中。 在这里,我们使用相同的代码库重新实现这些方法以进行公平比较。 我们按照基本配置将编码器深度设置为 6 ,并对 En-De 任务进行了实验。

在时间 $t$,多步欧拉方法需要先前的状态,例如 $y_{t-1}$,生成当前近似值,而不是基于当前时间状态的迭代细化。 基本上,这些方法参数效率不高,并且性能不如我们的方法。 注意,DLCL也可以看成是多步欧拉法,在deep Transformer中更具竞争力。 但是在浅基线上只有很小的改进。

从理论上讲,Backward Euler 方法在数值分析中略好于 Forward Euler 方法,但改进微乎其微。 请注意,与上述方法相比,我们的 ODE Transformer 实现了一致的 BLEU 改进。 这里的原因是这种迭代细化使参数学习更加高效和有效。 所有模型都可以在我们的附件中找到。

阶段误差量化

在这里,我们旨在量化截断误差。 但是,我们无法在 NMT 中获得每个块输出的“真实”解,因为我们主要在编码器端进行实验。相反,我们在语言建模任务上进行了实验,也就是单层模型输出与真值之间的损失 相当于没有错误传播的截断错误。

表 5 显示了 PTB 任务的 PPL。 所有 ODE Transformer 变体都显着减少了错误。 RK4-order 在两种设置上都达到了最低的 PPL。 此外,RK2 块甚至可以获得比 2 层残差块更低的 PPL。 这里的观察再次验证了我们的猜想。

5,相关工作

深度Transformer模型

最近,Deep Transformer 在机器翻译方面取得了巨大成功。 一种直接的方法是缩短从上层到下层的路径,从而缓解梯度消失或爆炸问题。 对于更深层次的模型,训练成本是不可忽略的。 为了加快训练速度,另一种方法是先训练一个浅层模型,然后逐渐增加模型深度。

除了模型架构改进之外,另一种简化优化的方法是利用精心设计的参数初始化策略,例如 depth-scale 、Lipschitz 约束 ,T-fixup 和 ADMIN 。

请注意,ODE Transformer 与上述方法是正交的,我们将在未来的工作中对这些方法进行测试。

ODE

ResNet 和 ODE 之间的关系最早由 weinan2017proposal 提出。 这为社区带来了设计有效深度架构的全新视角。 一些有见地的架构zhang2017polynet,larsson2017fractalnet,yiping2018beyond,he2019ode 也可以从ODE的角度来解释。 但是,在自然语言处理中,从 ODE 角度设计模型的研究仍然很少见。 也许与我们最相关的工作是 lu2019understanding 的工作。 他们从多粒子动态系统的角度解释了 Transformer 架构,并将夹在 FFN 中的自注意力重新定位。 与他们的工作不同,我们认为堆叠的一阶 ODE 块可能会导致误差累积,从而阻碍模型性能。 我们通过引入高阶块来解决这个问题,并展示了显著的 BLEU 改进。

6,结论

在本文中,我们探讨了 Transformer 和 ODE 之间的关系,提出了一种新的架构(ODE Transformer)来帮助模型从高阶 ODE 解决方案中受益。 实验结果表明,在模型容量相同的情况下,ODE Transformer 可以显著优于基线。 它在 WMT’14 En-De 和 En-Fr 测试数据上获得了 30.76 和 44.11 的 BLEU 分数,这为 En-Fr 任务设置了新的sota。

// 代码折叠