RNN&LSTM&GRU

RNN

相对于CNN,RNN可以记录历史信息,使其在解决序列问题方面很有用处,其被广泛应用于语音识别,语言模型,翻译和图像标注等。
RNN&LSTM&GRU
RNN网络具有记忆前序状态的功能。
展开后的模型如下:
RNN&LSTM&GRU

长期依赖问题

加入说“云在天空”,根据“云在”推出“天上”比较容易。
RNN&LSTM&GRU
即根据x0,x1,...,可以预测h3
然而,如果说“小强出生在中国,…,他的母语是中文”,如果要推到“中文”,则要向前看很远,要能到出生地,这时的RNN如下:
RNN&LSTM&GRU
这样的难度比较大,通常不这么做了。衍生出两种比较常用的RNN变种模型,LSTM和GRU。

标准的LSTM

LSTM(long short term memory )网络可以解决长时间依赖问题。
RNN&LSTM&GRU

标准的RNN神经元模型

RNN&LSTM&GRU
LSTM神经元模型

LSTM核心

其核心是状态,σ是sigmoid函数。从左向右,从下向上看,首先xt经过sigmoid函数,sigmoid在逻辑回归(分类问题)提过,其输出值介于0~1之间,该值的意义就是到底有多少xt通过和前面的神经元状态相乘,这反应的是当前输入对状态的影响。
RNN&LSTM&GRU
如果上述ft等于1,则意味这前一个神经元Ct1的信息全部保留,接下来是增加新的信息。
RNN&LSTM&GRU
两者的混合就是ft决定遗忘多少Ct1,而itC^t是向Ct1中增加新的信息。
RNN&LSTM&GRU
接下来是确定输出量了。
RNN&LSTM&GRU
输出取决于神经单元的状态。

GRU

GRU(gated Recurrent Units)于2014被首次提出,是LSTM的一个简单化的变种。
RNN&LSTM&GRU
a)i,f,o分别是输入,遗忘和输出门,c是记忆单元值,c^是新的记忆单元值;b)r,z是复位和更新门,h,h^是输出和备用输出。

对于LSTM推导如下

RNN&LSTM&GRU
itjt是对应元素相乘,LSTM的输出通常取ht,ct是记忆单元的状态,通常只存在于记忆单元本身,遗忘门ft是得LSTM能够轻松重置状态。

设第j个LSTM记忆单元的在t时刻的状态是cjt,则LSTM的输出hjt是:

hjt=ojttanh(cjt)

ojt是输出门:
ojt=σ(WxoXt+Whoht1+bo)j

其中σ是sigmoid函数。
记忆单元cjt通过部分遗忘之前的状态和增加新的状态进行更新。
cjt=fjtcjt1+ijtjjt
fjt=σ(Wxfxt+Whfht1+bf)j
jjt=tanh(Wxjxt+Whjht1+bj)j
ijt=σ(Wxixt+Whiht1+bi)j

GRU推导

RNN&LSTM&GRU
t时刻GRU的输出hjt是前一个时刻输出hjt1和备用输出h^jt的线性插值。
hjt=zjthjt1+(1zt)jh^jt
zjt=σWxzxt+Whzht1+bzj
备用输出和传统循环网络计算方法类似。
h^jt=tanh(Wxhxt+Whh(rrht1)+bh)j
其中rt是复位门集合,是点乘,
rjt=σ(Wxrxt+Whrht1+br)j

语言模型

这是RNN的一个应用实例,基于谷歌tensorflow官网。目标是为每一句话给定一个概率。其根据历史的单词序列,估计下一个最有可能出现的单词。使用PTB(penn Tree bank)数据集