我们是否需要在训练过程中使用波束搜索?

时间:2017-05-28 14:17:48

标签: tensorflow deep-learning

如果我们在seq2seq模型中使用波束搜索,它将提供更正确的结果。有几个tensorflow实现。 但是,通过每个单元格中的softmax功能,您无法在训练过程中使用波束搜索。那么在使用光束搜索时还有其他任何修改过的优化函数吗?

4 个答案:

答案 0 :(得分:9)

正如Oliver提到的那样,为了在训练过程中使用波束搜索,我们必须使用波束搜索优化,这在论文Sequence-to-Sequence Learning as Beam-Search Optimization中有明确提及。

我们不能在具有当前损失功能的训练过程中使用波束搜索。因为当前损耗函数是在每个时间步长上采用的对数损失。这是一种贪婪的方式。它也在本文中明确提到Sequence to Sequence Learning with Neural Networks。 在3.2节中,它已经巧妙地提到了上述情况。

enter image description here

<强> “,其中 小号 是训练集。培训完成后,我们生产tr 通过寻找最多的回答 可能根据LSTM进行翻译:“

因此,原始的seq2seq架构仅在测试时使用波束搜索。如果我们想在训练时使用这种波束搜索,我们必须使用另一种损失和优化方法,如本文所述。

答案 1 :(得分:0)

序列到序列学习作为波束搜索优化是一篇论文,描述了在训练过程中使用波束搜索所需的步骤。 https://arxiv.org/abs/1606.02960

以下问题包含可以执行波束搜索的脚本,但它不包含任何训练逻辑 https://github.com/tensorflow/tensorflow/issues/654

答案 2 :(得分:0)

我了解的是,如果损失是在单个单词级别上计算的,则没有顺序感。不好的序列(具有大部分随机单词)可能会损失与更好的序列(具有大部分相关单词)类似的损失,因为损失会以不同的方式分布在词汇表上。

答案 3 :(得分:0)

否,我们不需要在训练阶段使用波束搜索。当训练像Transformers这样的现代seq-to-seq模型时,我们使用教师强制训练机制,在该机制中,将右移的目标序列馈送到解码器端。波束搜索可以再次提高通用性,但是在训练阶段使用是不实际的。但是还有其他选择,例如使用损失函数label-smoothed-cross-entropy