RNN 的中间隐藏状态有啥用处?

Posted

技术标签:

【中文标题】RNN 的中间隐藏状态有啥用处?【英文标题】:What is a good use of the intermediate hidden states of an RNN?RNN 的中间隐藏状态有什么用处? 【发布时间】:2021-05-29 21:29:02 【问题描述】:

所以我以三种不同的能力使用了 RNN/LSTM:

    多对多:使用最后一层的每个输出来预测下一层。可能是分类或回归。 多对一:使用最终隐藏状态执行回归或分类。 一对多:获取潜在空间向量,可能是 LSTM 编码器的最终隐藏状态,并使用它来生成序列(我以自动编码器的形式完成了此操作)。

在这些情况下,我都没有使用中间隐藏状态来生成最终输出。在 #1 情况下只有最后一层输出,在 #2 和 #3 情况下只有最后一层隐藏状态。然而,PyTorch nn.LSTM/RNN 返回一个包含每一层最终隐藏状态的向量,所以我假设它们有一些用途。

我想知道这些中间层状态的一些用例是什么?

【问题讨论】:

【参考方案1】:

没有明确要求您只使用最后一层。您可以针对序列中的每个位置(或者在最后,如果您对整个序列进行分类)将所有层输入到最终分类器 MLP。

作为一个实际示例,请考虑使用 ELMo 架构来生成上下文化(即令牌级)词嵌入。 (论文:https://www.aclweb.org/anthology/N18-1202/)表示是多层 biRNN 的隐藏状态。 论文中的图 2 显示了不同层在有用性方面的差异,具体取决于任务。作者建议低层编码语法,而高层编码语义。

【讨论】:

我指的是堆叠 RNN 意义上的层。对于长度为T 的输入,带有N 层的RNN 会为您提供两个输出:首先,[1, T] 中每个时间步t 的层Noutput。二是h_n,也就是向量[h_T_1, ..., h_T_N]。这是从 1 到 N 的每一层的最终隐藏状态。我相信这是约定,正如 PyTorch 文档的这个可视化表示所说明的那样:***.com/a/48305882/3696204 所以我要问的是具体h_n = [h_T_1, ... , h_T_N] 你能编辑吗你的回答让我知道我们在同一页上。 是的,这是使用该术语的自然方式。我对流行的词嵌入方法 ELMo 的评论适用于这种情况。 好的,所以你的答案成立?在我继续之前,我只是想确保我们说的是同一种语言。 是的!我们是。我删除了答案的不相关的后半部分。 太棒了,谢谢艾莉亚。我已将您链接的论文添加到我不断增长的“要阅读的论文”书签文件夹中。

以上是关于RNN 的中间隐藏状态有啥用处?的主要内容,如果未能解决你的问题,请参考以下文章

PyTorch LSTM 中的“隐藏”和“输出”有啥区别?

在 Tensorflow 中生成特殊输出词后如何停止 RNN?

LSTM VS RNN改进

CA-RNN论文读取

几句话总结一个算法之RNNLSTM和GRU

为啥RNN在隐藏和输出之间没有权重?