RNN不同于前馈神经网络,被认为具有记忆能力。其输入被看作一个序列,形如 xt(x1,x2,x3...) 其数学模型如下:
ht=h(W1ht−1+U2xt+b1)
yt=f(Vht+b2)
这里 ht 表示在t时的状态, yt 表示在t时的输出,h和f是非线性函数,常用sigmoid函数 f(x)=11+e−x ,W U V 和b是需要学习的变量。这里的关键是t时的状态是由t-1时的状态和t时的输入共同得到,也就是说理论上RNN可以记住任意长序列的输入。它和前馈神经网络相比还具有不限定长度的输入序列,比如在自然语言模型中,需要估计一个句子出现的概念,而每个句子的长度是不固定的。
和前馈神经网络一样,RNN也可以通过Backpropagation算法进行训练即BPTT算法。其目标函数所有时间点上的成本函数的和:
E=∑Tt=1et (1)
对W求倒数:
dEdW=∑Tt=1detdw (2),其中
detdW=detdytdytdhtdhtdW (3)
dhtdW = dhtdht−1dht−1W+dhtdW (4) 注意等式右边是将W和 ht−1 看成不相关的变量
以此类推:
dht−1dW = dht−1dht−2dht−2W+dht−1dW (5) 以此类推并将其代入前面式子的右边就可以得到:
dhtdW=∑tk=1dhtdhkdhkdW (6)
将(6)代入(3)就得到:
detdW=∑tk=1detdytdytdhtdhtdhkdhkdW
这里很容易得到:
dhtdhk=∏tj=k+1dhjdhj−1
推导完成。
上面BPTT算法会遇到导数逐渐消失或趋于无穷大的问题,LSTM是很好的解决方案 。