深度学习中的自动编码器和编码器/解码器之间有区别吗?


回答 1:

这是我(非正式地)如何看待这两个术语的方法。 将编码器/解码器视为一种非常通用的框架/架构设计。 在此设计中,您具有一些功能,可以将输入空间(无论它是什么)映射到另一个/潜在的空间(“编码器”)。 解码器只是补充功能,它创建从(编码器)潜在空间到另一个目标空间的映射(我们要从潜在空间解码什么)。 注意,通过简单地映射空间,并通过共享的潜在空间将它们链接起来,您可以执行以下操作,例如将英语(即英语句子)的标记序列映射到法语(即该英语句子的翻译)标记序列法语)。 在某些神经翻译模型中,您将英语序列映射到固定矢量(例如,到达标点符号时发现的用于迭代处理句子的循环网络的最后状态),然后将其解码为法语序列。

自动编码器(或传统上称为自动关联器)是编码器-解码器体系结构的特例-首先,目标空间与输入空间(即,英语输入到英语目标)相同,其次,目标等于输入。 因此,我们会将向量映射为向量(请注意,由于它们是递归自动编码器,因此仍可能是一个序列,但是在这种情况下,您并不是在预测未来,而只是在给定状态/内存和当下)。 现在,自动编码器实际上是要进行自动关联的,因此我们实质上是在尝试构建一个模型来“调用”输入,这允许自动编码器执行诸如模式完成之类的操作,因此,如果给我们的自动编码器提供部分损坏的输入,它将能够从内存中“检索”正确的模式。

同样,通常,我们构建自动编码器是因为我们对获取表示感兴趣,而不是学习预测模型(尽管有人可能会认为我们也从预测模型中获得了非常有用的表示……)。

但是简短的故事很简单:自动编码器实际上是编码器-解码器的特殊实例。 当我们想将编码器和解码器解耦以创建诸如变分自动编码器之类的东西时,这特别有用,这也使我们不必使解码器在设计上与编码器对称(即,编码器可以是2层卷积网络)而解码器可以是3层反卷积网络)。 在变分自动编码器中,潜在空间的概念变得更加清晰,因为现在我们将输入(例如图像或文档矢量)真正映射到潜在变量,从中我们可以重构原始/相同的输入(例如图像)或文档向量)。

我还认为滥用术语会造成很大的混乱。 如今,ML员工尤其倾向于混用单词(有些单词使声音听起来更酷或找到流行语来吸引读者/资助者/成名/荣耀/等),但这可能部分是由于人工神经网络被称为“深度学习” ;-) [因为最终,每个人​​都希望钱能继续工作]


回答 2:

确实。

编码器-解码器体系结构具有一个编码器部分,该部分接收输入并将其映射到潜在空间。 解码器部分占用该潜在空间并将其映射到输出。 通常,这会产生更好的结果。 自动编码器仅将x作为输入,并尝试将x(现在为x_hat)重建为输出。

通常,用例是不同的。 自动编码器通常会在无人监督的学习情况下使用,因为如我们所见,不需要标签,只需要数据。 编码解码器体系结构通常以更通用的方式使用,正如您在SegNet论文中以及在NMT中所引用的那样。