循环神经网络(RNNs
)
1 RNN
结构
RNN(Recurrent neural network)
是为了解决什么一个问题的呢?因为一般情况下序列的信息决定事件本身。如果我们试图使用这类数据得到有用的输出,就需要一个这样的网络:能够访问一些关于数据的先前知识(prior knowledge),以便完全理解这些数据。因此,RNN
就出现了。
在最原始的情况下,RNN
的网络结构如下图:
其中,U是输入层到隐藏层的权重矩阵,o是输出层的值,V是隐藏层到输出层的权重矩阵,权重矩阵W是隐藏层上一次的值作为下一次输入的权重。然后每次来的时候都会更新权重W,如此往复循环,这或许就是循环神经网络的由来吧。
当然,我们为了方便理解RNN
的话,可以将我们RNN
网络展开:
在这个网络中,时刻t接收到输入之后,隐藏层的值是St,输出值是Ot。从网络中可以看出,St不仅取决于xt,还取决于St−1。我们可以用下面的公式来表示循环神经网络的计算方法:
Ot=g(V∗St)St=f(U∗Xt+W∗St−1)
2 双向RNN
考虑到我们的上面介绍的RNN
,其信息只能是从左往右进行传播的,这个就有点让人不舒服了。我们上学的时候,老师出的题目都是要结合上下文来进行回答,现在科技这么发达了,你怎么能只关注上文,而不关注下文呢?于是,双向RNN
的结构出现了。
BiRNN(Bi-directional RNN)
,是单向RNN
的一种扩展形式。BiBRNN
则同时关注上下文,能够利用更多的信息进行预测。结构上,BiRNN
由两个方向相反的RNN
构成,这两个RNN
连接着同一个输出层。这就达到了上述的同时关注上下文的目的。
3.RNN
的梯度消失和梯度爆炸
在上面看来,RNN
以及BiRNN
的结构似乎已经是很完美了,既能处理上文信息,也能处理下文信息,那么用它来做序列任务是完美极了吧。应该是的吧,我们拿出三个神经元,来进行分析一下:
希望您按照我的指引学完了链接上面你的内容。是不是也会惊呼一下:原来RNN
也会遇到这种问题呀,通过BPTT
算法分析了一下,其实梯度消失,梯度爆炸的问题还是很严重的。
有问题那么就有了对策,接下来就是对策:LSTM
闪亮登场。
###4. LSTM
为解决Gradient Vanish的问题,LSTM(Long short-term memory)
中出世了。我们将LSTM
内部的结构放大来看:
感觉很熟悉是不是?LSTM
其实就是将RNN
中 Hidden Layer 的一个神经元,用一个更加复杂的结构替换,称为 Memory Block。
先对其中结构进行简要介绍:
1)Input Gate, Output Gate, Forget Gate:这三个 Gate 本质上就是权值,形象点则类似电路中用于控制电流的开关。当值为1,表示开关闭合,流量无损耗流过;当值为0,表示开关打开,完全阻塞流量;当值介于(0,1),则表示流量通过的程度。而这种的取值,其实就是通过 Sigmoid 函数实现的
2)Cell:Cell 表示当前 Memory Block 的状态,对应于原始 RNN 中的 Hidden Layer 的神经元
3)Activation Function:图中多处出现了 Activation Function(小圆圈+ sigmoid 曲线的图案),对这些 Activation Function 的选择有一个通用的标准。一般,对 Input Gate, Output Gate, Forget Gate,使用的 Activation Function 是 sigmoid 函数;对于 Input 和 Cell, Activation Function 使用 tanh 函数
其具体记忆更新的方式如下:
5.GRU
GRU
(Gated Recurrent Unit)也是RNN
算法的一个变种,相比于LSTM
,它相关的记忆更新的方式发生了一些变化,我们通过分析起具体的内部结构来进行对比。
GRU
的具体结构与对应的公式如下:
其中,zt,rt分别被称为 Reset Gate 和 Update Gate。可以看出,GRU
与LSTM
有一定的相似性和区别:
区别
1)对memory 的控制
LSTM: 用output gate 控制,传输给下一个unit
GRU:直接传递给下一个unit,不做任何控制
2)input gate 和reset gate 作用位置不同
LSTM: 计算new memory c^(t)时 不对上一时刻的信息做任何控制,而是用forget gate 独立的实现这一点
GRU: 计算new memory h^(t)时利用reset gate 对上一时刻的信息 进行控制。
相似
最大的相似之处就是, 在从t 到 t-1 的更新时都引入了加法。
这个加法的好处在于能防止梯度弥散,因此LSTM和GRU都比一般的RNN效果更好。
很多实验都表明 GRU
跟 LSTM
的效果差不多,而 GRU
有更少的参数,因此相对容易训练且过拟合的问题要轻一点,在训练数据较少时可以试试。
6 Text-RNN原理
首先,我们来直接看作者提出的第三个模型:
Text-RNN的结构:降维—>BiLSTM—>concat输出—>平均—>softmax
从结构上面简单来讲,就是根据BiLSTM
做文本分类工作。
7 Recurrent Convolutional Neural Networks(RCNN)原理
RCNN结构:input—>embedding—>RNN+CNN—>max pooling—>Dense+softmax
它用左侧文本和右侧文本学习句子或文档中的每个单词表示:
表示当前单词=[left_side_context_vector,current_word_embedding,right_side_context_vector]
对于左侧文本,它使用一个循环结构,前一个单词的非线性转换和左侧上一个文本;类似于右侧文本。
_context_vector,current_word_embedding,right_side_context_vector]
对于左侧文本,它使用一个循环结构,前一个单词的非线性转换和左侧上一个文本;类似于右侧文本。