RNN 循环神经网络
1.为什么需要RNN?
一般的神经网络都只能单独的处理一个个输入,前一个输入和下一个输入,前后没有关联。
但是,在某些任务情况下,前面的输入和后面的输入是有关系的,因此我们需要更好的处理序列之间的信息问题。
举个例子:以NLP中的非常基础的词性标注任务来说,我 (NN) 发出(VV) 邀请(NN)
很明显,一个句子中,前一个单词对于当前单词的词性预测有很大的影响。就像邀请这个词,可以是动词也可以是名词。但由于前面“发出”是一个动词,那么“邀请”作为名词的概率就远高于动词。
2.RNN 结构
这是RNN模型中的一个非常简单的图,用于方便初学者理解。
-
X是一个向量,代表输入层的值。
-
U是输入层到隐藏层的权重矩阵。
-
S是一个向量,代表隐藏层的值(这里只画了一个结点,你可以想象这一层有多个结点,结点数与向量S的维度相同)
-
V是隐藏层到输出层的权重矩阵。
-
O也是一个向量,代表输出层的值。
相较于一般的神经网络,主要多了W,那么W究竟是什么?
在前面,我们提到了RNN循环神经网络,可以将前一个输入,与下一个输入相关联起来。因此,这里就不难理解了。
在RNN循环神经网络中,隐藏层的值不仅取决于输入层的值x,而且还取决于上一次隐藏层的值S。
- 因此,权重矩阵W将隐藏层上一次的值,作为这次输入的权重。(当然,初始值为0)
循环层和全连接层的区别就是循环层多了一个权重矩阵 W。
下面,给出这个抽象图所对应的具体的图
把上面的图展开,循环神经网络也可以画成下面这个样子
在时刻t的时候,隐藏层St接受到输入的值Xt后,输出Ot。
同时从这个图,可以比较直观的看到,隐藏层St的值,不仅仅取决于Xt的值,而且还有上一个时刻t-1时,隐藏层的值St-1。在这两个因素叠加后,才能最终得到隐藏层St的值。
3.RNN 公式
如果反复把第2个式子,代入到第1个式子当中,将得到:
从上面可以看出,循环神经网络的输出值,是受前面历次输入值Xt、Xt-1、Xt-2、Xt-3…所影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。