LSTM 神经网络设计,双向输出结果需要折叠吗?

2022-06-27 18:08:13 +08:00
 Richard14

前几天在 v2 发了个 DL 相关的帖子受到很多帮助。最近又遇到一个问题是,如果我想跑一个自行设计的网络结构,如果以 LSTM 输出结果接线性层那么前者应该输出单层,但如果想接到 cnn 上是否要要把输出结果转换成双层呢?

比如 batch_size 设置为 32 ,一个句子有 20 个词,一个词有 8 个维度表示,那么一个 LSTM 层的输出结构应该类似以下:

tensor([32, 20, 8]) -> (转换成[32, 8, 20]) -> nn.LSTM(20, 64) -> tensor([32, 8, 64])

但是因为分析句子,双向分析似乎是比较合理的,那么当把 nn.LSTM 设置为双向后,它的输出结果会变成[32,8,128],这时候如果再接入 1dCNN 的话,感觉 CNN 的窗口捕捉不太符合人类逻辑?

所以有必要转换成[32,8,2,64],或者转换成[32,16,64]这种的吗? LSTM 的输出结果一般认为还有序列特性吗?还是完全无法理解的高维信息?

569 次点击
所在节点    问与答
4 条回复
rpman
2022-06-27 18:12:50 +08:00
恭喜你发现了 bidirectional LSTM
然后你还会发现 highway LSTM
然后你还会发现怎么改都不如 Attention
然后发现 Transformer
Richard14
2022-06-27 18:16:42 +08:00
@rpman 没有啥发现不发现的吧,现在就是在按顺序学习,但是没有老师学得不好。1L 忘说了,位置编码对情感分析类任务应该是效果更好的,但是我觉得序列任务 lstm 肯定还是有用处不能不了解,所以这贴里不讨论位置编码相关的。。
rpman
2022-06-27 18:47:47 +08:00
@Richard14 正经回答吧
你这里 1dCNN 是接在 timestep 上,是否 concat 双向 embedding 对结果并没有影响
rpman
2022-06-27 18:53:28 +08:00
双向 RNN 说是双向,但它只能 look forward 或者 look backward 。
要更 general 就只能堆叠层数,但 RNN 在 timestep 上的 dependency 非常影响性能,LSTM 更是搓得不行。印象里当年就没超过 4 层的。
既然你要做分析句子,早日放弃 RNN 早日获得新生。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862530

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX