RNN,GRU,LSTM
2019-08-29 17:17:15
问题描述:比较RNN,GRU,LSTM。
问题求解:
- 循环神经网络 RNN
传统的RNN是维护了一个隐变量 ht 用来保存序列信息,ht 基于 xt 和 ht-1 来计算 ht 。
ht = g( Wi xt + Ui ht-1 + bi )
yt = g( Wo ht + bo )
- 门控循环神经网络 GRU
门控循环神经网络(Gated Recurrent Unit,GRU)中引入了门控机制。
Update:Γu = g( Wu xt + Uu ht-1 + bu )
ht~ = g( Wc xt + Uc ht-1 + bc ) -Candidate
ht = Γu * ht~ + Γf * ht-1
【注】实际使用中还会加入重置门,可以看成计算了 ht-1 和 xt 之间的相关性
Γr = g( Wr xt + Ur ht-1 + br )
ht~ = g( Wc xt + Γr Uc ht-1 + bc )
- 长短期记忆网络 LSTM
长短期记忆网络(Long Short Term Memory,LSTM)是循环神经网络的最知名和成功的扩展。由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,在实际的任务中往往不达预期。LSTM可以对有价值的信息进行长期记忆,从而减小循环神经网络的学习难度,因此在语音识别,NER,语言建模等问题中有着广泛的应用。
与传统的循环神经网络对比,LSTM仍然是基于xt 和 ht-1 来计算 ht ,只不过对计算的内部流程进行更加精心的设计。
LSTM中引入了cell memory称为 ct ,ht 由 cell memory生成。
LSTM在前向传播的时候不仅传递 ht ,而且还传递 cell memory,cell memory实际形成了一个信息的流通的highway。
LSTM中加入了三个门更新门(也有称为输入门) Γu,遗忘门 Γf,输出门 Γo。这里的门的概念可以理解为相关性,本质是三个权重。
Update:Γu = g( Wu xt + Uu ht-1 + bu )
Forget:Γf = g( Wf xt + Uf ht-1 + bf )
Output:Γo= g( Wo xt + Uo ht-1 + bo )
这三个门都是作用在cell memory上的,那么cell memory怎么计算呢?
ct~ = g( Wc xt + Uc ht-1 + bc )
ct = Γu * ct~ + Γf * ct-1
计算完成 ct 后,就可以根据输出门来求 ht 了。
ht = Γo * ct
RNN,GRU,LSTM的更多相关文章
- NLP教程(5) - 语言模型、RNN、GRU与LSTM
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- Recurrent Neural Network系列4--利用Python,Theano实现GRU或LSTM
yi作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORK ...
- 【pytorch】关于Embedding和GRU、LSTM的使用详解
1. Embedding的使用 pytorch中实现了Embedding,下面是关于Embedding的使用. torch.nn包下的Embedding,作为训练的一层,随模型训练得到适合的词向量. ...
- 太深了,梯度传不下去,于是有了highway。 干脆连highway的参数都不要,直接变残差,于是有了ResNet。 强行稳定参数的均值和方差,于是有了BatchNorm。RNN梯度不稳定,于是加几个通路和门控,于是有了LSTM。 LSTM简化一下,有了GRU。
请简述神经网络的发展史sigmoid会饱和,造成梯度消失.于是有了ReLU.ReLU负半轴是死区,造成梯度变0.于是有了LeakyReLU,PReLU.强调梯度和权值分布的稳定性,由此有了ELU,以及 ...
- LSTM梳理,理解,和keras实现 (一)
注:本文主要是在http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 这篇文章的基础上理解写成,姑且也可以称作 The understan ...
- 自己动手实现深度学习框架-7 RNN层--GRU, LSTM
目标 这个阶段会给cute-dl添加循环层,使之能够支持RNN--循环神经网络. 具体目标包括: 添加激活函数sigmoid, tanh. 添加GRU(Gate Recurrent U ...
- 简易机器学习代码(LR,Kmeans,NN,RNN)
Logistic Regression 特别需要注意的是 exp 和 log 的使用. sigmoid 原始表达式为 1 / (1+exp(-z)),但如果直接使用 z=-710,会显示 overfl ...
- 使用LSTM做电影评论负面检测——使用朴素贝叶斯才51%,但是使用LSTM可以达到99%准确度
基本思路: 每个评论取前200个单词.然后生成词汇表,利用词汇index标注评论(对 每条评论的前200个单词编号而已),然后使用LSTM做正负评论检测. 代码解读见[[[评论]]]!embeddin ...
- 三步理解--门控循环单元(GRU),TensorFlow实现
1. 什么是GRU 在循环神经⽹络中的梯度计算⽅法中,我们发现,当时间步数较⼤或者时间步较小时,循环神经⽹络的梯度较容易出现衰减或爆炸.虽然裁剪梯度可以应对梯度爆炸,但⽆法解决梯度衰减的问题.通常由于 ...
随机推荐
- 码海拾遗:strstr()、strcmp()和strcpy()实现
1.strstr()实现 原型:char * strstr(const char * str1, const char * str2) 说明:判断str2是否为str1的子串,如果是则返回str2第一 ...
- Golang: chan定义问题(7)
通常都是定义读写双向的 chan,定义单向 chan 问题. 专栏的介绍可以参考 <GotchaGolang专栏>,代码可以看<宝库-Gotcha>. 通过 只写 chan 传 ...
- 手写实现vue的MVVM响应式原理
文中应用到的数据名词: MVVM ------------------ 视图-----模型----视图模型 三者与 Vue 的对应:view 对应 te ...
- C#连接Informix数据库
最近在工作中遇到了需要连接Informix数据库的问题,在通过研究后发现了可以通过多种方式实现,我选择的是通过IBM Informix .NET Provider.该方式需要引用IBM.Data.In ...
- 上周 GitHub 热点速览 vol.09:手撕 LeetCode 一日 star 破两千
作者:HelloGitHub-小鱼干 摘要(用于 公众号/博客园等地方):上周 GitHub 趋势榜相较上上周就如同前故事一般,跌到不行,无论是新晋开源小项,还是坚挺老项目,Star 增长量都不如之前 ...
- dubbo与trivial超时机制的深入思考
说在前面 trivial是根据之前设计的RPC框架而来的(还在增进当中),其中较为不同的一个点为,在客户端去掉了业务线程池,因为既然都要等待,不必要再加一层. 进入正题 有在网上看到这样的信息,“之前 ...
- ODI学习资料
ODI12.2.1.4入门指南:https://docs.oracle.com/en/middleware/fusion-middleware/data-integrator/12.2.1.4/ind ...
- AI:拿来主义——预训练网络(二)
上一篇文章我们聊的是使用预训练网络中的一种方法,特征提取,今天我们讨论另外一种方法,微调模型,这也是迁移学习的一种方法. 微调模型 为什么需要微调模型?我们猜测和之前的实验,我们有这样的共识,数据量越 ...
- 深度解析互联网大厂面试难题自定义@EnableXX系列
深度解析互联网大厂面试难题自定义@EnableXX系列 其实是一个@Import的设计技巧 创建注解@EnableXX(任何名称注解都行,只是这个名字好一些) XXConfiguration类不能 ...
- CSS的常用单位 %和 vw vh 和 box-sizing:border-box; 和flex简介
一.% 理解: %号是CSS中的常用单位,它是相对于父容器而言的.如:一个父容器的宽是100px,给它的子元素一个10%,那么子元素的宽就是100px的10% 10px. 效果图: (利用%设置了li ...