打印 上一主题 下一主题

深度学习之RNN的改进算法(LSTM、GRU、双向RNN、Deep RNN)

[复制链接]
跳转到指定楼层
楼主
我爱你1 发表于 2019-5-16 06:09:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来源:https://www.jianshu.com/p/4ea635774690
若内容不全,可点击上述链接查看来源网页,在网页中点击红色双层向下的箭头阅读全文


1.GatedRecurrentUnit(GRU)门控循环单元

GRU改变了RNN隐藏层单元使其更好的捕捉深层连接,并改善了梯度消失问题。

相比于普通的RNN隐藏层单元,GRU增加了一个C(memorycell)记忆细胞,以增加记忆功能。

普通的RNN单元如下图所示:

简化版的GRU如下图所示:

其中---<t>表示上标:

c<t>:记忆细胞的在t时间步的值,表示是否要记忆此处的信息,GRU中c<t>=a<t>?

c^<t>:重写记忆细胞的候选值,是否采用这个值来更新c<t>取决于Γu

Γu:更新门,u=update,决定什么时候更新记忆细胞,取值范围在0~1,0表示不更新记忆细胞即保持之前的值,1表示更新记忆细胞为候选值。

完整的GRU增加了一个相关门Γr,表示c<t?1>跟新的候选值c^<t>之间的相关性。

2.LSTM(Longshorttermmemory)Unit长短时记忆单元

LSTM比之GRU更加有效。注意:LSTM中c<t>和a<t>将不再相等。

Γu:更新门(update)

Γf:遗忘门(forget)

Γo:输出门(output)

peepholeconnection窥视孔连接,将c<t?1>加入到对门的计算中,也就是门由c<t?1>,a<t?1>,x<t>共同决定。

GRU和LSTM比较:

GRU结构更简单,更有利于构建深层的RNN,LSTM功能更强大。

3.BidirectionalRNN双向循环神经网络(BRNN)

此网络结构使得在序列的某点,既可以获得之前的信息,也可以获得之后的信息。

以一个人名实体识别的例子来说明,下面两句话,判断Teddy是不是一个人名,只有前面的信息是不足够的

图中最下面x<1>x<4>x<1>x<4>表示输入的前四个单词,紫色框表示的是正向循环层,绿色框是反向循环层,正向循环和反向循环构成一个无环图,都属于正向传播,各值计算顺序如下:

a?<1>?a?<2>?a?<3>?a?<4>?a←<4>?a←<3>?a←<2>?a←<1>

所有的激活值都计算完毕之后,就可以计算预测值了:

y^<t>=g(wy[a?<t>,a←<t>]+by)

其中各单元可以是标准RNN单元,也可以是GRU单元、LSTM单元,对于NLP问题来说基于LSTM单元的BRNN用的比较多。

BRNN缺点:需要完整序列的数据才能预测。对于语音识别来说,也就是必须等到讲话的人讲完,才能预测,这并不能满足我们的需求,所以语音识别通常用其他更复杂的模型,而BRNN较广泛的应用于NLP问题。

4.DeepRNN

对于RNN来说一般很少像CNN那样堆叠很多层,3层对RNN来说就已经非常庞大了。如果需要堆叠多层,一般会删去水平连接。(以下是有三个隐层的网络)

某个RNN单元可以是标准RNN单元,也可以是GRU单元、LSTM单元甚至BRNN单元,可以自由设置。

微信公众号
返回顶部 返回列表