LSTM/GRU网络一般几层好?

是需要根据具体问题分析?(数据量大用多层?etc.),我看到很多Github源码都是单层LSTM/bi-LSTM,比较少见有2层及以上的。求大神解答
关注者
44
被浏览
128,075
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

其实有时候也挺无奈的。LSTM/GRU有个比RNN好的一点是能有特征数据的传递,避免RNN在时间序列上出现信息丢失的情况。

但是好处也就是这么多,带来的问题也不少,隐藏的问题也有。

LSTM和GRU首先带来的麻烦就是内存开销和时间开销的增加,因为基于时间序列,所以很难进行并行优化,时间开销随着神经元数量增加越来越失控,同时内存开销也会变得非常大。如果单纯看效果,LSTM和GRU发挥确实不错,但是从个人设备能力来说,其实大型的LSTM或者GRU模型,算起来很吃力。

其次,在很多时序处理的模型上,LSTM和GRU层数不能过多,层数的增加会带来时间开销和内存开销的指数级增长,接着,你会体验到层与层之间的梯度消失——这就是最致命的一点。当层数超过了三层,层与层之间的梯度消失情况变得非常明显,再加上是时序模型,导致靠近输入层的LSTM层或者GRU层更新迭代放缓,收敛效果和效率急剧下降,甚至非常容易进入局部最小的困境。

一般做时序模型,大多数情况一层LSTM/GRU足够,因为在输入和输出上我们会有很多方法来降低数据复杂度,从而提高训练效率,如果数据量实在是过于庞大,单从扩增一层的神经元已经不够,两层也差不多就已经够了,因为两层的LSTM和GRU已经能把时序数据压缩成高度“浓缩”的数据,再加深层数只能带来信息压缩过程中的信息丢失以及训练过程中的梯度消失。


最近很多人给这个回答点赞,但是我不得不提当初回答这个问题的时候,自己的阅历还是太浅(

一层的LSTM/GRU对于很多NLP任务来说是无法完成任务的,对于类似文本摘要、关键词提取之类的模型,LSTM/GRU实际上都有较为深的层数,并且训练时也采取了一些办法来防止过拟合以及梯度消失,如果觉得训练速度慢,请一定一定要考虑使用硬件加速的方案(使用GPU加速)。另外在做NLP任务时,一定要记得先进行word embedding,这个操作会让训练的效果更上一个层次。

编辑于 2022-06-14 19:57 ・IP 属地江苏