文章目录
循环神经网络
循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。和前馈神经网络相比,循环神经网络更加符合生物神经网络的结构。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上。循环神经网络的参数学习可以通过随时间反向传播算法来学习。随时间反向传播算法即按照时间的逆序将错误信息一步步地往前传递。当输入序列比较长时,会存在梯度爆炸和消失问题,也称为长期依赖问题。为了解决这个问题,人们对循环神经网络进行了很多的改进,其中最有效的改进方式引入门控机制。
循环神经网络RNN
循环神经网络通过使用带自反馈的神经元,能够处理任意长度的时序数据。
给定一个输入序列
x
1
:
T
=
(
x
1
,
x
2
,
.
.
.
,
x
t
,
.
.
.
,
x
T
)
x_1:T = (x_1, x_2, . . . , x_t, . . . , x_T )
x1:T=(x1,x2,...,xt,...,xT),循环神经网络通过下面公式更新带反馈边的隐藏层的活性值ht:
其中
h
0
=
0
,
f
(
⋅
)
h_0 = 0,f(·)
h0=0,f(⋅) 为一个非线性函数,也可以是一个前馈网络。
简单循环网络SRN
SRN是一个非常简单的循环神经网络,只有一个隐藏层的神经网络。
在一个两层的前馈神经网络中,连接存在相邻的层与层之间,隐藏层的节点之间是无连接的。而简单循环网络增加了从隐藏层到隐藏层的反馈连接。
假设在时刻
t
t
t 时,网络的输入为
x
t
x_t
xt,隐藏层状态(即隐藏层神经元活性值)为
h
t
h_t
ht 不仅和当前时刻的输入
x
t
x_t
xt 相关,也和上一个时刻的隐藏层状态
h
t
−
1
h_{t_-1}
ht−1 相关。
其中
z
t
z_t
zt 为隐藏层的净输入,
f
(
⋅
)
f(·)
f(⋅) 是非线性激活函数,通常为Logistic函数或Tanh函数,
U
U
U 为状态-状态权重矩阵,
W
W
W 为状态-输入权重矩阵,
b
b
b 为偏置。上述公式经常直接写为
如果我们把每个时刻的状态都看作是前馈神经网络的一层的话,循环神经网络可以看作是在时间维度上权值共享的神经网络。按时间展开的循环神经网络如下:
参数学习
循环神经网络的参数可以通过梯度下降方法来进行学习。
以随机梯度下降为例,给定一个训练样本
(
x
,
y
)
(x, y)
(x,y),其中
x
1
:
T
=
(
x
1
,
⋅
⋅
⋅
,
x
T
)
x_1:T = (x_1, · · · , x_T )
x1:T=(x1,⋅⋅⋅,xT) 为长度是
T
T
T 的输入序列,
y
1
:
T
=
(
y
1
,
⋅
⋅
⋅
,
y
T
)
y_1:T = (y_1, · · · , y_T )
y1:T=(y1,⋅⋅⋅,yT) 是长度为
T
T
T 的标签序列。即在每个时刻
t
t
t,都有一个监督信息
y
t
y_t
yt,我们定义时刻t 的损失函数为
其中
g
(
h
t
)
g(h_t)
g(ht) 为第
t
t
t 时刻的输出,
L
L
L 为可微分的损失函数,比如交叉熵。那么整个序列上损失函数为
整个序列的损失函数
L
L
L 关于参数
U
U
U 的梯度为
即每个时刻损失
L
t
L_t
Lt 对参数
U
U
U 的偏导数之和。
循环神经网络中存在一个递归调用的函数f(·),因此其计算参数梯度的方式和前馈神经网络不太相同。在循环神经网络中主要有两种计算梯度的方式:随时间反向传播(BPTT)和实时循环学习(RTRL)算法。
随时间反向传播算法BPTT
随时间反向传播(Backpropagation Through Time,BPTT)算法的主要思想是通过类似前馈神经网络的错误反向传播算法来进行计算梯度。
BPTT算法将循环神经网络看作是一个展开的多层前馈网络,其中“每一层”对应循环网络中的“每个时刻”。这样,循环神经网络就可以按照前馈网络中的反向传播算法进行计算参数梯度。在“展开”的前馈网络中,所有层的参数是共享的,因此参数的真实梯度是将所有“展开层”的参数梯度之和。
实时循环学习算法RTRL
与反向传播的BPTT算法不同的是,实时循环学习(Real-Time RecurrentLearning,RTRL)是通过前向传播的方式来计算梯度。
假设循环神经网络中第
t
+
1
t+1
t+1 时刻的状态
h
t
+
1
h_{t+1}
ht+1 为
两种算法比较 RTRL算法和BPTT算法都是基于梯度下降的算法,分别通过前向模式和反向模式应用链式法则来计算梯度。在循环神经网络中,一般网络输出维度远低于输入维度,因此BPTT算法的计算量会更小,但是BPTT算法需要保存所有时刻的中间梯度,空间复杂度较高。RTRL算法不需要梯度回传,因此非常适合用于需要在线学习或无限序列的任务中。
长期依赖问题
循环神经网络在学习过程中的主要问题是长期依赖问题。
改进方案:
基于门控的循环神经网络
为了改善循环神经网络的长期依赖问题,一种非常好的解决方案是在公式(6.50)的基础上,引入门控机制来控制信息的累积速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息。这一类网络可以称为基于门控的循环神经网络(Gated RNN)。本节中,主要介绍两种基于门控的循环神经网络:长短期记忆网络和门控循环单元网络。
长短期记忆网络LSTM
LSTM是循环神经网络的一个变体,可以有效地解决简单神经网络的梯度爆炸或消失问题。
门控循环单元网络GRU
门控循环单元(Gated Recurrent Unit,GRU)网络是一种比LSTM网络更加简单的循环神经网络。
RNN文本分类
用于文本分类的单向RNN结构
引入双向LSTM进行分类,网络框架是:embedding layer—>Bi-LSTM layer—>concat output—>FC layer —> softmax层
BiLSTM
BiLSTM multilayers
Recurrent Convolutional Neural Networks(RCNN)
RCNN网络结构
首先,构造CNN的卷积层,卷积层的本质是一个BiRNN模型,通过正向和反向循环来构造一个单词的下文和上文,如下式:
得到单词的上下文表示之后,用拼接的方式来表示这个单词,如下式:
将该词向量放入一个单层神经网络中,得到所谓的潜语义向量(latent semantic vector),这里卷积层的计算结束了,时间复杂度仍是O(n)。接下来进行池化层(max-pooling),即将刚刚得到的所有单词的潜语义向量中每个维度上最大的值选出组成一个新的向量,这里采用max-pooling可以将向量中最大的特征提取出来,从而获取到整个文本的信息。池化过程时间复杂度也是O(n),所以整个模型的时间复杂度是O(n)。得到文本特征向量之后,进行分类。
RCNN灵活地结合RNN和CNN构造了新的模型,利用了两种模型的优点,提升了文本分类的性能。这也提供了一种研究思路,因为每一种model都有其鲜明的优点和无法回避的缺点,如何利用别的model的优点来弥补自身model的缺点,是改进model的一种重要思路。
Text-RNN文本分类
RCNN文本分类
参考资料
TextRNN用于文本分类
text-classification-cnn-rnn
Recurrent Convolutional Neural Networks for Text Classification
论文随便读:Recurrent Convolutional Neural Networks forText Classification
RCNN文本分类与tensorflow实现
神经网络与深度学习