RNN
相对于CNN,RNN可以记录历史信息,使其在解决序列问题方面很有用处,其被广泛应用于语音识别,语言模型,翻译和图像标注等。

RNN网络具有记忆前序状态的功能。
展开后的模型如下:

长期依赖问题
加入说“云在天空”,根据“云在”推出“天上”比较容易。

即根据x0,x1,...,可以预测h3
然而,如果说“小强出生在中国,…,他的母语是中文”,如果要推到“中文”,则要向前看很远,要能到出生地,这时的RNN如下:

这样的难度比较大,通常不这么做了。衍生出两种比较常用的RNN变种模型,LSTM和GRU。
标准的LSTM
LSTM(long short term memory )网络可以解决长时间依赖问题。

标准的RNN神经元模型
LSTM神经元模型
LSTM核心
其核心是状态,σ是sigmoid函数。从左向右,从下向上看,首先xt经过sigmoid函数,sigmoid在逻辑回归(分类问题)提过,其输出值介于0~1之间,该值的意义就是到底有多少xt通过和前面的神经元状态相乘,这反应的是当前输入对状态的影响。

如果上述ft等于1,则意味这前一个神经元Ct−1的信息全部保留,接下来是增加新的信息。

两者的混合就是ft决定遗忘多少Ct−1,而it∗C^t是向Ct−1中增加新的信息。

接下来是确定输出量了。

输出取决于神经单元的状态。
GRU
GRU(gated Recurrent Units)于2014被首次提出,是LSTM的一个简单化的变种。

a)i,f,o分别是输入,遗忘和输出门,c是记忆单元值,c^是新的记忆单元值;b)r,z是复位和更新门,h,h^是输出和备用输出。
对于LSTM推导如下

it⊙jt是对应元素相乘,LSTM的输出通常取ht,ct是记忆单元的状态,通常只存在于记忆单元本身,遗忘门ft是得LSTM能够轻松重置状态。
设第j个LSTM记忆单元的在t时刻的状态是cjt,则LSTM的输出hjt是:
hjt=ojt⊙tanh(cjt)
ojt是输出门:
ojt=σ(WxoXt+Whoht−1+bo)j
其中
σ是sigmoid函数。
记忆单元
cjt通过部分遗忘之前的状态和增加新的状态进行更新。
cjt=fjt⊙cjt−1+ijt⊙jjt fjt=σ(Wxfxt+Whfht−1+bf)j jjt=tanh(Wxjxt+Whjht−1+bj)j ijt=σ(Wxixt+Whiht−1+bi)j
GRU推导

t时刻GRU的输出hjt是前一个时刻输出hjt−1和备用输出h^jt的线性插值。
hjt=zjt⊙hjt−1+(1−zt)j⊙h^jt
zjt=σ(Wxzxt+Whzht−1+bz)j
备用输出和传统循环网络计算方法类似。
h^jt=tanh(Wxhxt+Whh(rr⊙ht−1)+bh)j
其中rt是复位门集合,⊙是点乘,
rjt=σ(Wxrxt+Whrht−1+br)j
语言模型
这是RNN的一个应用实例,基于谷歌tensorflow官网。目标是为每一句话给定一个概率。其根据历史的单词序列,估计下一个最有可能出现的单词。使用PTB(penn Tree bank)数据集