注意力对自动编码器有意义吗?

Posted

技术标签:

【中文标题】注意力对自动编码器有意义吗?【英文标题】:Does attention make sense for Autoencoders? 【发布时间】:2020-01-28 10:20:15 【问题描述】:

在自动编码器的背景下,我正在努力解决注意力的概念。我相信我理解注意力在 seq2seq 翻译方面的用法——在训练组合的编码器和解码器之后,我们可以同时使用编码器和解码器来创建(例如)语言翻译器。因为我们还在生产中使用解码器,所以我们可以利用注意力机制。

但是,如果自动编码器的主要目标主要是生成输入向量的潜在压缩表示怎么办?我说的是我们可以在训练后基本上处理模型的解码器部分的情况。

例如,如果我在没有注意的情况下使用 LSTM,“经典”方法是使用最后一个隐藏状态作为上下文向量——它应该代表我输入序列的主要特征。如果我要注意使用 LSTM,我的潜在表示必须是每个时间步的所有隐藏状态。这似乎不符合输入压缩和保留主要特征的概念。维数可能会更高。

此外,如果我需要使用所有隐藏状态作为我的潜在表示(例如在注意力的情况下) - 为什么要使用注意力?我可以使用所有隐藏状态来初始化解码器。

【问题讨论】:

你可以在大隐藏状态之后添加一个小的前馈层来降低维度 是的,但这似乎一开始就破坏了整个关注点。注意力是关于在给定上下文的情况下知道哪些隐藏状态是相关的。添加线性维度将执行静态的重要性选择。鉴于 LSTM 的递归性质,第一个隐藏层应该是解码期间递归的最佳选择。那么为什么还要使用注意力呢? 【参考方案1】:

答案很大程度上取决于您打算使用自动编码器的表示来做什么。每个自动编码器都需要使自动编码任务变得困难的东西,因此它需要丰富的中间表示来解决任务。它可能是架构中的瓶颈(如 vanilla 编码器-解码器模型的情况)或在源端添加噪声(您可以将 BERT 视为去噪自动编码器的一种特殊情况,其中一些输入标记被屏蔽)。

如果您不在源端引入任何噪声,则自动编码器将学习简单地复制输入,而不会学习任何超出输入/输出符号标识的内容——注意力将打破普通模型的瓶颈属性。标记编码器状态的情况也是如此。

有使用编码器-解码器注意力的序列到序列自动编码器(BART、MASS)。生成的噪声包括掩蔽和随机排列的令牌。他们学习的表示比来自仅编码器模型(如 BERT)的表示更适合序列到序列的任务(例如文本摘要或低资源机器翻译)。

【讨论】:

【参考方案2】:

"Attention 被提出来解决编码器-解码器模型将输入序列编码为一个固定长度向量的限制,从该向量中解码每个输出时间步。这个问题被认为是一个更大的问题解码长序列时"

https://machinelearningmastery.com/how-does-attention-work-in-encoder-decoder-recurrent-neural-networks/

在处理压缩表示可能不足的长序列时,它只是一种改进“无注意”架构的方法。

如果我要使用有注意力的 LSTM,我的潜在表示 每个时间步都必须是所有隐藏状态。这个好像不行 符合输入压缩和保持主 特点

不完全潜在表示是规范自动编码器以强制它们提取相关特征的一种方法,但这不是必要条件。过完备自编码器(具有更高维度的潜在表示 + 正则化)也可以成功地学习相关特征。

如果您想了解更多信息,可以阅读:深度学习 (Ian Goodfellow) - 第 14 章。

【讨论】:

以上是关于注意力对自动编码器有意义吗?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的 Getter 和 Setter - 改用 WillSet 和 DidSet 有意义吗?

这个 RPC xdr 副本有意义吗?

如果(!这个)返回; 在 C# 中有意义吗?

Passport js Google auth 对 JWT 有意义吗?

对动态内存进行操作,重写一个const成员函数有意义吗?

boost::strand 生产者/消费者有意义吗?