解码器在 Transformer 中的作用?

数据挖掘 变压器 注意机制 编码器
2022-02-09 23:12:54

我了解Attention Is All You Need论文中使用的编码器-解码器架构的机制。我的问题是关于解码器角色的更高层次的问题。假设我们有一个句子翻译任务:Je suis ètudiant -> I am a student

编码器接收Je suis ètudiant作为输入并生成编码器输出,理想情况下应该嵌入句子的上下文/含义。

解码器接收这个编码器输出和一个输入查询(Iamastudent)作为其输入并输出下一个词(amastudentEOS)。这是对每个单词逐步完成的。

现在,我是否正确理解解码器正在做两件事?

  1. 找出输入查询和编码器嵌入之间的关系,即查询与输入句子Je suis ètudiant的关系如何
  2. 通过 masked attention 机制找出当前查询与先前查询的关系。因此,当查询是student时,解码器会处理已经出现的相关单词(我是 a)。

如果这不是正确的思考方式,有人可以给出更好的解释吗?

另外,如果我有时间序列的分类或回归任务,我需要解码器吗?我认为只有编码器就足够了,因为模型的输出中没有上下文。

2个回答

是的,您对解码器角色的理解是正确的。

但是,您在这里使用“查询”虽然在技术上有些正确,但似乎有点奇怪。您将部分解码的句子称为“查询”。虽然部分解码的句子实际上在第一个多头注意力块中用作查询,但在从解码器的概念级别描述内容时,人们通常不会将其称为“查询”。

关于在分类或回归任务中需要解码器:当模型的输出是序列时使用解码器。如果模型的输出是单个值,例如对于分类任务或单值回归任务,编码器就足够了。如果你想预测一个时间序列的多个值,你可能应该使用一个解码器,它不仅可以让你根据输入,还可以根据部分生成的输出值。

关于你最后一个问题的更多细节。您的问题是序列分类练习。不需要解码器。您可以使用密集层来预测标签。您甚至可以在预测标签时使用编码器的所有隐藏状态输出而不是最后一个输出来添加类似“注意”的功能

参见例如:https ://stackoverflow.com/questions/63060083/create-an-lstm-layer-with-attention-in-keras-for-multi-label-text-classification/64853996#64853996