14.3 轻量模型 483
所谓窄网络是指将网络中某些层中神经元的数量减少。不过,直接训练这样的小模
型会造成翻译品质下降。这时会考虑使用知识蒸馏等技术来提升小模型的品质(见
第十三章)。
化简 Transformer 解码器的神经网络也可以提高推断速度。比如,可以使用平均
注意力机制代替原始 Transformer 模型中的自注意力机制
[542]
,也可以使用运算更轻的
卷积操作代替注意力模块
[509]
。前面提到的基于共享注意力机制的模型也是一种典型
的轻量模型
[540]
。这些方法本质上也是对注意力模型结构的优化,这类思想在近几年
也受到了很多关注
[545, 728, 729]
,在第十五章也会有进一步讨论。
此外,使用异构神经网络也是一种平衡精度和速度的有效方法。在很多研究中
发现,基于 Transformer 的编码器对翻译品质的影响更大,而解码器的作用会小一些。
因此,一种想法是使用速度更快的解码器结构,比如,用基于循环神经网络的解码器
代替 Transformer 模型中基于注意力机制的解码器
[460]
。这样,既能发挥 Transformer
在编码上的优势,同时也能利用循环神经网络在解码器速度上的优势。使用类似的
思想,也可以用卷积神经网络等结构进行解码器的设计。
针对轻量级 Transformer 模型的设计也包括层级的结构剪枝,这类方法试图通过
跳过某些操作或者某些层来降低计算量。典型的相关工作是样本自适应神经网络结
构,如 FastBERT
[730]
、Depth Adaptive Transformer
[731]
等,与传统的 Transformer 的解
码过程不同,这类神经网络结构在推断时不需要计算全部的解码层,而是根据输入
自动选择模型的部分层进行计算,达到加速和减少参数量的目的。
14.3.4 批量推断
深度学习时代下,使用 GPU 已经成为大规模使用神经网络方法的前提。特别
是对于机器翻译这样的复杂任务,GPU 的并行运算能力会带来明显的速度提升。为
了充分利用 GPU 的并行能力,可以同时对多个句子进行翻译,即批量推断(Batch
Inference)。
在第十章已经介绍了神经机器翻译中批量处理的基本概念,其实现并不困难,不
过有两方面问题需要注意:
• 批次生成策略。对于源语言文本预先给定的情况,通常是按句子长度组织每个
批次,即:把长度相似的句子放到一个批次里。这样做的好处是可以尽可能保
证一个批次中的内容是“满”的,否则如果句长差异过大会造成批次中有很多
位置用占位符填充,产生无用计算。对于实时翻译的情况,批次的组织较为复
杂。在机器翻译系统的实际应用中,由于有翻译时延的限制,可能待翻译句子
未积累到标准批次数量就要进行翻译。常见的做法是,设置一个等待的时间,
在同一个时间段中的句子可以放到一个批次中(或者几个批次中)。对于高并
发的情况,也可以考虑使用不同的桶(Bucket)保存不同长度范围的句子,之
后将同一个桶中的句子进行批量推断。这个问题在第十八章中还会做进一步讨
论。