如何理解双向循环神经网络?用在分类问题时是否无意义?

2021-11-21 03:40:30 +08:00
 Richard14

如题,看了一些双向 rnn ( lstm )的文章,以我的理解,rnn 每层的最终 output 应该表示的是当前时刻(序列)的状态。那么在进行一些比如情感分析,或分类,等等对一个序列进行定性的问题时,双向 rnn 是否没有意义?因为其输出应该代表最后一个状态,正向 rnn 已经有了,反向 rnn 的话最后一个状态反过来说只是一个初始值?

2554 次点击
所在节点    Python
5 条回复
SorryChen
2021-11-21 05:47:31 +08:00
因为很多时候,当前不仅和之前有关,也和之后有关。举个形象的例子,比如做完形填空, 我 __ 球,如果你只看一个我,你怎么知道空填什么呢,如果双向 LSTM 你就可以知道后面是球,所以应该填“打”。
eternitym31
2021-11-21 10:26:06 +08:00
业务中分类问题双向 LSTM 确实效果一般,序列标注问题这种吃上下文语义的提升比较大。
lqf96
2021-11-21 13:07:07 +08:00
其实 transformer 也分单向和双向模型,前者就是 gpt ,后者就是 bert 以及衍生出的一系列 mlm 模型...另外单向和双向模型拼接在一起就可以得到 seq2seq model ,比如 bart 或者 t5 ,或者通过构造特殊的 attention mask 也可以实现一个 transformer stack 的 seq2seq model (unlm v1/v2)
lqf96
2021-11-21 13:07:34 +08:00
总之学术界这边 lstm 和 rnn 给我的感觉都是上古的东西了...
sleeepyy
2021-11-22 13:15:37 +08:00
> 那么在进行一些比如情感分析,或分类,等等对一个序列进行定性的问题时,双向 rnn 是否没有意义?因为其输出应该代表最后一个状态,正向 rnn 已经有了,反向 rnn 的话最后一个状态反过来说只是一个初始值?

这里应该是 lz 有误解,当用 BiLSTM 做分类的时候,通常采用两个方向的结尾的 h 拼接作为表示,即 [h_R_3 || h_L_0], 而非 lz 所理解的 [h_R_3 || h_L_3]

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

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

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

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

© 2021 V2EX