LSTM为何如此有效?

    技术2025-11-15  16

    LSTM为何如此有效?

    机器学习算法与自然语言处理前天

    公众号关注 “ML_NLP”

    设为 “星标”,重磅干货,第一时间送达!

    来自 | 知乎 作者 | 天雨粟

    https://www.zhihu.com/question/278825804/answer/402634502

    编辑 | 深度学习这件小事公众号

    本文仅作学术交流,如有侵权,请联系后台删除

    做过一点类似的工作,说说个人理解。

    LSTM处理序列问题有效的关键就是在于Gate。

    拿一个简单的情感分类问题为例:

    比如这句话,我们去除停用词,最后做Word Embedding喂给DNN。这句话里面正面词汇有2个“好”和1个“喜欢”,负面词汇有1个“没有”和1个“不”,由于正面词汇更多,DNN则会更加倾向判断积极情感;实际上这句话是个negative的情感,句子中两个”好“前面都有”没有“否定,”喜欢“前面也有”不“否定,但是DNN不存在隐层结点之间的序列学习,所以捕捉不到这种信息;

    而如果我们用一个LSTM:

    由于LSTM存在cell state的传递,如图中LSTM中链接的箭头所示,它能够捕捉到这种否定关系,从而输出正确的情感系数。

    从LSTM的公式来看(不考虑peephole),forget gate是一个经过sigmoid函数激活的单元,数值在0-1

    而我们的cell state更新公式为:

    当forget gate越接近0时,意味着对历史信息(t-1时刻)信息的丢失;而forget gate越接近于1,意味着对历史信息的更多保留。

    正如题主所说,forget gate里面大多数位置都是0,少数为1,这部分1就是它要在网络中持续保留的信息,我这里也很同意题主所说,这里gate有点类似于attention,对于我所需要的信息,我就给予高attention(对应为1),对于无用信息,我就选择不attention(对应为0)。同理,如果在某个时刻下信息较为重要,那么它对应的forget gate位置会一直保留在接近于1的数值,这样就可以让这个时刻的信息一直往下传递下去而不至于被丢失,这也是为什么LSTM能够处理长序列的原因之一。

    再说Bi-RNN,Bi-RNN我觉得从直觉上更好理解。比如我们人在看一句话时:这个人虽然很努力,但是他实在没有什么成绩。如果按照LSTM来看,它是从前往后学习,读完前半句我们可以提取的信息是:这个人很努力,看似是一个积极信息,但只有往下读才知道这句话的重点在于后面说他做不出什么成绩。而Bi-RNN很好的模拟了人的行为,即**先读完整句话。**Bi-RNN倒序进行信息的传递,那么当Bi-RNN读完“这个人虽然很努力”时,它的反向序列已经捕捉到了后半句的内容信息,因此能够做出更准确的判断。

    补充:

    应评论区@Herry同学提问,再说下GRU。简单来说,GRU比LSTM结构更加简单,只有2个gate,LSTM有3个gate,需要训练的参数更少,具体实现上也更快一点;另外,GRU中只有一个state,它把LSTM中的cell state和activation state视为了一个state。

    从公式来看,GRU的两个gate,一个是reset gate,一个是update gate。

    reset gate是对t-1时刻状态重置,它也是一个经过sigmoid激活的输出。

    随后这个reset gate用来做 c ~ \tilde{c} c~的计算:

    我们从公式可以看出,当前时刻的候选状态 c ~ \tilde{c} c~并不是完全将 c < t − 1 > c^{<t-1>} c<t1>用来学习,而是要先reset一下,在LSTM中计算 c ~ \tilde{c} c~时候直接就用

    另外一点,GRU把update gate既当做update使,又当做forget使。

    其中就相当于LSTM中的forget gate。

    而LSTM中这个forget gate是单独出来的,跟update gate没太大关系,这里只能说GRU做了合理简化,减少了一定计算量,性能上并没有牺牲太多。

    再者上面说到的,GRU里面只需要控制一个状态,它的cell state是等于activation state的,而LSTM中控制两个状态,cell state是要经过output gate以后才能得到activation state。

    最后关于它两具体的性能表现上,目前我做的模型上,基本看不出太大差别,性能都算OK。但是我一般首选LSTM,可能我先接触的LSTM的缘故吧。GRU就是相对快一点,结构简单,适合快速开发模型原型。

    关于他两性能的比较,建议可以看下论文[1412.3555] Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling


    重磅!忆臻自然语言处理-Pytorch交流群已正式成立! 群内有大量资源,欢迎大家进群学习! 添加小助手领取,还可以进入官方交流群! 注意:请大家添加时修改备注为 [学校/公司 + 姓名 + 方向] 例如 —— 哈工大+张三+对话系统。 号主,微商请自觉绕道。谢谢!

    推荐阅读: 一文搞懂BERT在NLP上的应用,详解模块代码实现细节! CS 224n 推荐阅读文献! 肝了1W字!文本生成评价指标的进化与推翻

    Processed: 0.012, SQL: 9