回归神经网络RNN(Recurrent Neural network)

RNN不同于前馈神经网络,被认为具有记忆能力。其输入被看作一个序列,形如 xt(x1,x2,x3...) 其数学模型如下:
ht=h(W1ht1+U2xt+b1)
yt=f(Vht+b2)
这里 ht 表示在t时的状态, yt 表示在t时的输出,h和f是非线性函数,常用sigmoid函数 f(x)=11+ex ,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 = dhtdht1dht1W+dhtdW (4) 注意等式右边是将W和 ht1 看成不相关的变量
以此类推:
dht1dW = dht1dht2dht2W+dht1dW (5) 以此类推并将其代入前面式子的右边就可以得到:
dhtdW=tk=1dhtdhkdhkdW (6)
将(6)代入(3)就得到:
detdW=tk=1detdytdytdhtdhtdhkdhkdW
这里很容易得到:
dhtdhk=tj=k+1dhjdhj1
推导完成。

上面BPTT算法会遇到导数逐渐消失或趋于无穷大的问题,LSTM是很好的解决方案 。

你可能感兴趣的:(深度学习,RNN)