18.2 增量式模型优化 611
18.2 增量式模型优化
机器翻译的训练数据不是一成不变的。系统研发人员可以使用自有数据训练得
到基础的翻译模型(或初始模型)。当应用这个基础模型时,可能会有新的数据出现,
例如:
• 虽然应用的目标领域和场景可能是研发系统时无法预见的,但是用户会有一定
量的自有数据,可以用于系统优化。
• 系统在应用中会产生新的数据,这些数据经过一些筛选和修改也可以用于模型
训练。
这时就产生一个问题,能否使用新的数据让系统变得更好?简单直接的方式是,
将新的数据和原始数据混合重新训练系统,但是使用全量数据训练模型的周期很长,
这种方法的成本很高。而且,新的数据可能是不断产生的,甚至是流式的。这时就需
要一种快速、低成本的方式对模型进行更新。
增量训练就是满足上述需求的一种方法。第十三章已经就增量训练这个概念展
开了一些讨论,这里重点介绍一些具体的实践手段。本质上,神经机器翻译中使用的
随机梯度下降方法就是典型的增量训练方法,其基本思想是:每次选择一个样本对
模型进行更新,这个过程反复不断执行,每次模型更新都是一次增量训练。当多个
样本构成了一个新数据集时,可以把这些新样本作为训练数据,把当前的模型作为
初始模型,之后正常执行机器翻译的训练过程即可。如果新增加的数据量不大(比
如,几万个句对),训练的代价非常低。
然而,新的数据虽然能代表一部分的翻译现象,但是如果仅仅依赖新数据进行
更新,会使模型对新数据过分拟合,从而无法很好地处理新数据之外的样本。这也
可以被看做是一种灾难性遗忘的问题
[1171]
,即:模型过分注重对新样本的拟合,丧失
了旧模型的一部分能力。在实际系统开发中,有几种常用的增量训练方法:
• 数据混合
[1172]
。在增量训练时,除了使用新的数据,再混合一定量的旧数据,混
合的比例可以根据训练的代价进行调整。这样,模型相当于在全量数据的一个
采样结果上进行更新。
• 模型插值
[618]
。在增量训练之后,将新模型与旧模型进行插值。
• 多目标训练
[1006, 1173, 1174]
。在增量训练时,除了在新数据上定义损失函数之外,可
以再定义一个在旧数据上的损失函数,这样确保模型可以在两个数据上都有较
好的表现。也可以在损失函数中引入正则化项,使新模型的参数不会偏离旧模
型的参数太远。
图18.1给出了上述方法的对比。在实际应用中,还有很多细节会影响增量训练的
效果,比如,学习率大小的选择等。另外,新的数据积累到何种规模可以进行增量训
练也是实践中需要解决的问题。一般来说,增量训练使用的数据量越大,训练的效
果越稳定。但是,这并不是说数据量少就不可以进行增量训练,而是如果数据量过