我正在努力理解卷积序列到序列(Conv-Seq2Seq)模型的使用。下图直接取自论文,是并行训练过程的近乎规范图。在困惑了很长一段时间之后,它对我来说似乎很直接:
- 一个包含 N 个标记的输入句子可以一步编码,因为输入句子在训练开始之前就存在,因此可以简单地并行化标记卷积。(与需要 N 步的 RNN 编码器相比)
- 在训练期间,输出语句可以类似地在解码器中并行化,因为在训练期间,整个输出语句是已知的。
- 因此,在训练过程中,注意力函数可以在下图的二维点积数组中完全并行化
- 最后,在训练过程中,注意力用于加权输入嵌入和编码,结合输出训练编码(如此)和组装的最终输出。
在网络经过训练并且评估输入序列在没有参考输出的情况下被翻译后,情况显然不是这样。我从各种资源(包括但不限于 Gehring 的会议演示文稿)中了解到,训练后的输出序列是逐个令牌生成的,其方式与早期的架构有点相似,但我找不到对该过程的清晰描述。
(我推测这是因为平行训练程序在当时非常具有革命性,以至于出版物的重点正确地放在了训练程序上。)
如果可能的话,有人可以根据训练图帮助我理解训练后生成算法吗?
我目前不自信的理解是,下面的句子将被处理如下:
- 使用默认标记字符串初始化解码器
<p> <p> <s>,这会导致(由于卷积)将单个解码器编码(因此)输入到注意力函数中,并希望生成单个标记<'Sie'>作为输出 - 使用令牌字符串重新启动解码器,
<p> <p> <s> <'Sie'>这将生成两个输入到注意力函数并希望输出<'Sie'> <'stimmen'> - 继续加长输入句子,直到生成的最终标记输出以
</s>表示句子结尾的标记结束。
如果这是一个正确的理解,有人可以确认吗?如果关闭,有人可以纠正我吗?
卷积序列到序列学习,Jonas Gehring、Michael Auli、David Grangier、Denis Yarats、Yann N. Dauphin,2017
