一、现代RNN标准写法
实际代码中通常写成:
ht=tanh(Wxhxt+Whhht−1+bh)h_t = tanh(W_{xh}x_t + W_{hh}h_{t-1} + b_h)ht=tanh(Wxhxt+Whhht−1+bh)yt=Whyht+byy_t = W_{hy}h_t + b_yyt=Whyht+by

二、单神经元RNN
从标准的RNN公式来看,还是不理解其内部机制,论文《Learning long-term dependencies with gradient descent is difficult》中举了一个单神经元的例子,我们从这个例子出发,去理解RNN,首先其公式如下:
at=wtanh(at−1)+hta_t = wtanh(a_{t-1}) + h_tat=wtanh(at−1)+ht xt=tanh(at)x_t = tanh(a_t)xt=tanh(at)
其中,
- hth_tht是输入,不是向量,是一个具体标量数;
- ata_tat是隐藏状态,不是向量,也是一个具体的标量数;
- xtx_txt是输出,同样也是一个具体的标量数;
- www是循环权重,同样也是一个标量
这是只有1个神经元的RNN,我们通过举例子,来说明下RNN的内部具体是怎么操作的,以及其特点,假设w =2, a0 = 0,给予的输入是正值
- 输入h1=3h_1=3h1=3,a1=2∗tanh(0)+3=3a_1 = 2*tanh(0) + 3 = 3a1=2∗tanh(0)+3=3, 输出x1=tanh(3)=0.995x_1= tanh(3)=0.995x1=tanh(3)=0.995;
- 输入h2=0h_2=0h2=0,a2=2∗tanh(3)+0=1.99a_2 = 2*tanh(3) + 0 = 1.99a2=2∗tanh(3)+0=1.99, 输出x2=tanh(1.99)=0.963x_2= tanh(1.99)=0.963x2=tanh(1.99)=0.963;
- 输入h3=0h_3=0h3=0,a3=2∗tanh(1.99)+0=1.926a_3 = 2*tanh(1.99) + 0 = 1.926a3=2∗tanh(1.99)+0=1.926, 输出x3=tanh(1.926)=0.958x_3= tanh(1.926)=0.958x3=tanh(1.926)=0.958;
- 输入h4=0h_4=0h4=0,a4=2∗tanh(1.926)+0=1.918a_4 = 2*tanh(1.926) + 0 = 1.918a4=2∗tanh(1.926)+0=1.918, 输出x4=tanh(1.918)=0.957x_4= tanh(1.918)=0.957x4=tanh(1.918)=0.957;
- 输入h5=0h_5=0h5=0,a5=2∗tanh(1.918)+0=1.915a_5 = 2*tanh(1.918) + 0 = 1.915a5=2∗tanh(1.918)+0=1.915, 输出x4=tanh(1.915)=0.957x_4= tanh(1.915)=0.957x4=tanh(1.915)=0.957;
之后如果没有输入,RNN持续输出0.957左右,根据上的计算可可以知道,隐藏值a一直在1.9左右,处于tanh的饱和区,所以输出经过tanh后,输出在0.957左右。

为什么会出现恒定的输出,分析公式,
at=wtanh(at−1)+hta_t = wtanh(a_{t-1}) + h_tat=wtanh(at−1)+ht xt=tanh(at)x_t = tanh(a_t)xt=tanh(at)
如果没有输入,即ht=0h_t = 0ht=0,则at=wtanh(at−1)a_t = wtanh(a_{t-1})at=wtanh(at−1),如果系统稳定,则at=at−1=a∗a_t = a_{t-1} = a^*at=at−1=a∗,所以a∗=wtanh(a∗)a^* = wtanh(a^*)a∗=wtanh(a∗),可以得到tanh(a∗)=a∗wtanh(a^*) = \frac{a^*}{w}tanh(a∗)=wa∗
三、RNN的记忆
论文里面使用单神经元RNN是为了证明RNN具有记忆性,首先需要理解的是,什么是记忆?,深度学习中,记忆不是网络里面真的存了一个变量,而是当前状态还能反映过去发生的事情 ,为什么说RNN开始,神经网络有了记忆,先看普通神经网络:y=Wx+by=Wx+by=Wx+b,当前的输出随着当前的输入的改变而改变,当前输出只依赖当前输入的值,不依赖过去。RNN中ht=tanh(Wxhxt+Whhht−1+bh)h_t = tanh(W_{xh}x_t + W_{hh}h_{t-1} + b_h)ht=tanh(Wxhxt+Whhht−1+bh),出现了at−1a_{t-1}at−1,当前状态还依赖过去状态。
为什么论文中用单神经元RNN可以证明RNN具有记忆性,在论文中的实验里,对于单神经元RNN,只给了一个输入h1=3,a1=3h_1=3,a_1=3h1=3,a1=3,后面时刻的输入都为0,但是后面时刻的隐藏值a2,a3仍然是非零的,为什么?因为它们还保留着a1的信息,这就叫做记忆,为什么说记住了h1,因为即使到后面100个时刻,a100仍然大于0,说明输入h1>0,a100>0,当然h1<0,a100<0,这个可以自行计算,这就是过去的信息仍然存在于当前状态。
论文中提到了1bit记忆,不是说记住了h1=3的这个数值,而是记住是,是正还是负,这两种状态,所以论文中叫1 bit memory。