V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Richard14
V2EX  ›  问与答

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

  •  
  •   Richard14 · 2022-06-27 18:08:13 +08:00 · 625 次点击
    这是一个创建于 891 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天在 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 的输出结果一般认为还有序列特性吗?还是完全无法理解的高维信息?

    4 条回复    2022-06-27 18:53:28 +08:00
    rpman
        1
    rpman  
       2022-06-27 18:12:50 +08:00
    恭喜你发现了 bidirectional LSTM
    然后你还会发现 highway LSTM
    然后你还会发现怎么改都不如 Attention
    然后发现 Transformer
    Richard14
        2
    Richard14  
    OP
       2022-06-27 18:16:42 +08:00
    @rpman 没有啥发现不发现的吧,现在就是在按顺序学习,但是没有老师学得不好。1L 忘说了,位置编码对情感分析类任务应该是效果更好的,但是我觉得序列任务 lstm 肯定还是有用处不能不了解,所以这贴里不讨论位置编码相关的。。
    rpman
        3
    rpman  
       2022-06-27 18:47:47 +08:00
    @Richard14 正经回答吧
    你这里 1dCNN 是接在 timestep 上,是否 concat 双向 embedding 对结果并没有影响
    rpman
        4
    rpman  
       2022-06-27 18:53:28 +08:00   ❤️ 2
    双向 RNN 说是双向,但它只能 look forward 或者 look backward 。
    要更 general 就只能堆叠层数,但 RNN 在 timestep 上的 dependency 非常影响性能,LSTM 更是搓得不行。印象里当年就没超过 4 层的。
    既然你要做分析句子,早日放弃 RNN 早日获得新生。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3962 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:21 · PVG 18:21 · LAX 02:21 · JFK 05:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.