赞
踩
这篇文章简单总结一下RNN与LSTM的区别。
首先,对于基本RNN来说,它能够处理一定的短期依赖,但无法处理长期依赖问题。比如句子The cat, which already ate …, was full.和句子The cats, which already ate …, were full.,两句话的差别在于主语和谓语动词的单复数,由于句子比较长,RNN就无法处理这种问题。那么RNN为什么无法处理这种问题呢?因为当序列较长时,序列后部的梯度很难反向传播到前面的序列,比如10个元素以前,这就产生了梯度消失问题。当然,RNN也存在梯度爆炸问题,但这个问题一般可以通过梯度裁剪(gradient clipping)来解决。
了解了RNN的问题后,我们再具体的看RNN和LSTM的网络结构,RNN网络结构如下图所示(按时间展开):
图中 h t h_t ht为timestep t的隐藏层状态值, x t x_t xt为输入, h t h_t ht实际上还要经过softmax或者别的函数处理得到输出 y ^ t \hat y_t y^t,这里并没有画出来。
上图中RNN单元的计算公式为:
h t = t a n h ( W h ⋅ [ h t − 1 , x t ] + b h ) h_t = tanh(W_h \cdot [h_{t-1}, x_t] + b_h) ht=tanh(Wh⋅[ht−1,xt]+bh)
由公式我们可以看到,RNN本时刻的隐藏层信息只来源于当前输入和上一时刻的隐藏层信息,没有记忆功能。
为了解决RNN的长期依赖也即梯度消失问题 ,LSTM应运而生。下面我们看一下LSTM的网络结构图:
显然,LSTM的网络结构相比于RNN复杂了很多。从微观上看,LSTM引入了细胞状态,并使用输入门、遗忘门、输出门三种门来保持和控制信息。具体的,LSTM某个timstep t的计算公式如下所示:
f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f )
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。