公众号关注 “视学算法”

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

来自 | 知乎

地址 | 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用来做 的计算:

我们从公式可以看出,当前时刻的候选状态 并不是完全将 用来学习,而是要先reset一下,在LSTM中计算 时候直接就用

另外一点,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

LSTM为何如此有效?相关推荐

  1. pytorch lstm crf 代码理解 重点

    好久没有写博客了,这一次就将最近看的pytorch 教程中的lstm+crf的一些心得与困惑记录下来. 原文 PyTorch Tutorials 参考了很多其他大神的博客,https://blog.c ...

  2. pytorch nn.LSTM()参数详解

    输入数据格式: input(seq_len, batch, input_size) h0(num_layers * num_directions, batch, hidden_size) c0(num ...

  3. Pytorch的LSTM的理解

    20211227 lstm和gru的区别 Pytorch实现LSTM案例学习(1)_ch206265的博客-CSDN博客_pytorch搭建lstm lstm案例 class torch.nn.LST ...

  4. pytorch lstm crf 代码理解

    好久没有写博客了,这一次就将最近看的pytorch 教程中的lstm+crf的一些心得与困惑记录下来. 原文 PyTorch Tutorials 参考了很多其他大神的博客,https://blog.c ...

  5. RNN,LSTM,GRU基本原理的个人理解重点

    20210626 循环神经网络_霜叶的博客-CSDN博客 LSTM的理解 - 走看看 重点 深入LSTM结构 首先使用LSTM的当前输入 (x^t)和上一个状态传递下来的 (h^{t-1}) 拼接训练 ...

  6. [PyTorch] rnn,lstm,gru中输入输出维度

    本文中的RNN泛指LSTM,GRU等等 CNN中和RNN中batchSize的默认位置是不同的. CNN中:batchsize的位置是position 0. RNN中:batchsize的位置是pos ...

  7. 使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...

    from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检 ...

  8. python lstm_python-Keras中LSTM的补充

    好的,所以您的问题让我开始思考,我想我已经解决了,但是什么都没有. 这是我为获取LSTM实现背后的一些见识而编写的代码段. from keras.layers import LSTM from ker ...

  9. 【直播】陈安东,但扬:CNN模型搭建、训练以及LSTM模型思路详解

    CNN模型搭建.训练以及LSTM模型思路详解 目前 Datawhale第24期组队学习 正在如火如荼的进行中.为了大家更好的学习"零基础入门语音识别(食物声音识别)"的课程设计者 ...

  10. 图解LSTM与GRU单元的各个公式和区别

    作者 | Che_Hongshu 来源 | AI蜗牛车 (ID: AI_For_Car) 因为自己LSTM和GRU学的时间相隔很远,并且当时学的也有点小小的蒙圈,也因为最近一直在用lstm,gru等等 ...

最新文章

  1. 集群的定义以及类别定义
  2. 数据改动,更新视图,类似于vue
  3. IOS上 关于状态栏的相关设置(UIStatusBar)和preferredStatusBarStyle不执行问题
  4. 谷歌浏览器的翻译功能在哪_如何在Google表格中使用AND和OR功能
  5. leetcode 218. 天际线问题
  6. JNI 之 HelloWorld
  7. 【AIX 命令学习】errpt 显示系统错误报告!
  8. C语言程序打印命令,跪求C语言程序读ID3v1信息从mp3文件并打印出来。 1)使用命令行输入一个MP3档案名称。 2)判断档案名称的分...
  9. 安全运维 - Windows系统维护
  10. linux搭建harbor与使用
  11. 阿里云|无影云桌面之初体验,只有一句真滴New Beer
  12. 开源中国众包平台派活:微信小程序任务
  13. 基于SSM的网上书城系统设计与实现
  14. 特征锦囊:特征无量纲化的常见操作方法
  15. Python学习之---杨辉三角的五种解法
  16. bilibili视频格式m4s批量转换为mp3,mp4
  17. 计算机四级网络工程师考点总结
  18. 最详细的微信小程序制作方法
  19. 2015华为南研所校园招聘笔试面试经历
  20. Unity 一键给所有按钮添加按钮音效

热门文章

  1. 【Codeforces/HDU】76A Plus and xor / 2095 find your present (2)(异或)。
  2. Python画出心目中的自己
  3. 豪赌 ARM 梦碎:63 岁孙正义的「花甲历险记」
  4. 2020年,5种将死的编程语言
  5. 关于正则表达式,这篇都讲清楚了
  6. 抗击疫情!阿里云为加速新药疫苗研发提供免费AI算力
  7. 创新工场论文入选NeurIPS 2019,研发最强“AI蒙汗药”
  8. 怎样搞定分类表格数据?有人用TF2.0构建了一套神经网络 | 技术头条
  9. Decoders对于语义分割的重要性 | CVPR 2019
  10. 近万个Python开源项目中精选Top34!