循环神经网络

循环神经网络(RNNs

1 RNN结构

RNN(Recurrent neural network)是为了解决什么一个问题的呢?因为一般情况下序列的信息决定事件本身。如果我们试图使用这类数据得到有用的输出,就需要一个这样的网络:能够访问一些关于数据的先前知识(prior knowledge),以便完全理解这些数据。因此,RNN就出现了。

在最原始的情况下,RNN的网络结构如下图:

循环神经网络

其中,U是输入层到隐藏层的权重矩阵,o是输出层的值,V是隐藏层到输出层的权重矩阵,权重矩阵W是隐藏层上一次的值作为下一次输入的权重。然后每次来的时候都会更新权重W,如此往复循环,这或许就是循环神经网络的由来吧。

当然,我们为了方便理解RNN的话,可以将我们RNN网络展开:

循环神经网络

在这个网络中,时刻t接收到输入之后,隐藏层的值是StS_tSt​,输出值是OtO_tOt​。从网络中可以看出,StS_tSt​不仅取决于xtx_txt​,还取决于St1S_{t-1}​St−1​​。我们可以用下面的公式来表示循环神经网络的计算方法:
Ot=g(VSt)St=f(UXt+WSt1) O_t=g(V*S_t) \\ S_t=f(U*X_t+W*S_{t-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,rtz_t,r_tzt​,rt​分别被称为 Reset Gate 和 Update Gate。可以看出,GRULSTM 有一定的相似性和区别:

区别
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效果更好。

很多实验都表明 GRULSTM 的效果差不多,而 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]

对于左侧文本,它使用一个循环结构,前一个单词的非线性转换和左侧上一个文本;类似于右侧文本。

上一篇:循环神经网络


下一篇:[论文阅读]阿里DIEN深度兴趣进化网络之总体解读