原文:https://arxiv.org/abs/1805.09461?context=stat.ML
简单的seq2seq模型
seq2seq模型训练步骤:
对于每个输入序列 input 和输出序列 output :
- 在 上运行 encoding,并获得 encoder 的最终状态 。
- 将 传入第一个 decoder,并获得采样的输出序列 。
- 根据式(3)计算损失并更新模型参数。
测试步骤:
对于每个输入序列 input 和输出序列 output :
- 使用训练过的模型通过式(4)采样输出
- 通过一个度量,例如:ROUGE 等来评估模型
seq2seq模型的两个问题
- 暴露偏差(exposure bias)
- 训练和测试的度量不一致
1 暴露偏差
两个主要原因:
- 训练时最小化的是交叉熵损失,而测试时用的是离散度量。
- 由于训练时使用了 teacher forcing 的方式,decoder 的训练依赖于真实值 ,而在测试阶段,真实值是没有的。
teacher forcing: teacher forcing 是一种训练技术,我们训练集中正确的输出反馈到 h(t+1),当模型部署后,真正的输出通常是未知的。这时,我们将模型的输出近似等于正确的输出,反馈给模型。
为了避免这个问题,我们可以采用计划抽样法(scheduled sampling method)。
计划抽样法
我们先使用交叉熵预训练模型,然后慢慢将真实值替换成模型本身的 action。我们以概率 用真实值,以概率 用模型自身的 action。当 时,为式(3),即全用真实值。当 时,为式(5),即全用自身的 action。
2 训练和测试的度量不一致
我们训练时使用的交叉熵误差,而测试时使用的是不可微的度量,例如:BLEU 和 ROUGE,这就会导致训练目标和测试目标不匹配,结果不一致。
这两个问题都可以通过强化学习来处理。
网友评论