赞
踩
RNN 的结构我们已经非常熟悉了,如下图所示:
RNN 是在时间上的一个循环,每次循环都会用到上一次计算的结果,虽然 RNN 每个时刻 t 都会有输出,但是最后时刻的输出实际上已经包含了之前所有时刻的信息,所以一般我们只保留最后一个时刻的输出就够了。
RNN 的优缺点:
LSTM 就是用来缓解(实际上也没有解决) RNN 中梯度消失问题的,从而可以处理 long-term sequences。
至于为什么能缓解梯度消失问题,我们先了解 LSTM 的结构,就可以发现原因了。
LSTM 结构如下:
LSTM 主要包括三个门公式
遗忘门决定上一时刻细胞状态中的多少信息可以传递到当前时刻中。
用来控制当前输入新生成的信息中有多少信息可以加入到细胞状态中。
细胞状态由两部分构成:
最后,基于更新的细胞状态,输出隐藏状态。
记忆细胞处于整个单元的水平线上,起到了信息传送带的作用,只几个含有简单的线性操作,能够保证数据流动时保持不变。
我们注意到, 首先三个门的激活函数是 sigmoid, 这也就意味着这三个门的输出要么接近于0 , 要么接近于1。这就使得 δ c t δ c t − 1 = f t \frac{\delta c_t}{\delta c_{t-1}} = f_t δct−1δct=ft, δ h t δ h t − 1 = o t \frac{\delta h_t}{\delta h_{t-1}} = o_t δht−1δht=ot 是非0即1的,当门为1时, 梯度能够很好的在LSTM中传递,很大程度上减轻了梯度消失发生的概率, 当门为0时,说明上一时刻的信息对当前时刻没有影响, 我们也就没有必要传递梯度回去来更新参数了。所以, 这就是为什么通过门机制就能够解决梯度的原因: 使得单元间的传递 δ S j δ S j − 1 \frac{\delta S_j}{\delta S_{j-1}} δSj−1δSj 为 0 或 1。
LSTM 的计算比较慢,所有有了GRU,你可以认为他是经过特殊优化提速的LSTM,但是他的表达能力也是受到限制的。
GRU 的结构如下:
这里和lstm不同的是:
如果r[t] = 1,z[t] = 1,那么gru和普通rnn的cell就是一样的。
参考链接1:LSTM如何解决梯度消失或爆炸的?
参考链接2:LSTM原理与实践,原来如此简单
参考链接3:LSTM结构理解与python实现
参考链接4:LSTM原理及实践(一):理论
参考链接5:(五)通俗易懂理解——BiLSTM
参考链接6:lstm和gru结构的再理解
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。