前言
卷积神经网络CNN在图象处理领域起到了重要的作用,在自然语言处理中还要看循环神经网络RNN,RNN对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息.
为什么要发明循环神经网络
我们先来看一个NLP很常见的问题,命名实体识别,举个例子,现在有两句话:
-
第一句话:I like eating apple!(我喜欢吃苹果!)
-
第二句话:The Apple is a great company!(苹果真是一家很棒的公司!)
现在的任务是要给apple打Label,我们都知道第一个apple是一种水果,第二个apple是苹果公司,假设我们现在有大量的已经标记好的数据以供训练模型,当我们使用全连接的神经网络时,我们做法是把apple这个单词的特征向量输入到我们的模型中(如下图),在输出结果时,让我们的label里,正确的label概率最大,来训练模型,但我们的语料库中,有的apple的label是水果,有的label是公司,这将导致,模型在训练的过程中,预测的准确程度,取决于训练集中哪个label多一些,这样的模型对于我们来说完全没有作用。
问题就出在了我们没有结合上下文去训练模型,而是单独的在训练apple这个单词的label,这也是全连接神经网络模型所不能做到的,于是就有了我们的循环神经网络。
序列特性
上下文即序列特性,就是符合时间顺序,逻辑顺序,或者其他顺序就叫序列特性,举几个例子:
- 拿人类的某句话来说,也就是人类的自然语言,是不是符合某个逻辑或规则的字词拼凑排列起来的,这就是符合序列特性。
- 语音,我们发出的声音,每一帧每一帧的衔接起来,才凑成了我们听到的话,这也具有序列特性、
- 股票,随着时间的推移,会产生具有顺序的一系列数字,这些数字也是具有序列特性
循环神经网络
如下左图则为RNN,其中X是一个向量,也就是某个字或词的特征向量,作为输入层;U是输入层到隐藏层的参数矩阵;S是隐藏层的向量;V是隐藏层到输出层的参数矩阵;O是输出层的向量;不要管W,只看X,U,S,V,O就是我们的全连接神经网络结构.
W到底是什么?把左边的图按照时间线展开得到右边的图.
举个例子,有一句话是,I love you.上图中的
x
t
−
1
x_{t-1}
xt−1 代表的就是I这个单词的向量,
x
t
x_{t}
xt 代表的是love这个单词的向量,
服务器托管网
xt
+
1
x_{t+1}
xt+1 代表的是you这个单词的向量
W一直没有变,W其实是每个时间点之间的权重矩阵
RNN之所以可以解决序列问题,是因为它可以记住每一时刻的信息,每一时刻的隐藏层不仅由该时刻的输入层决定,还由上一时刻的隐藏层决定.公式如下
其中
O
t
O_t
Ot代表t时刻的输出,
S
t
S_t
St代表t时刻的隐藏层的值.值得注意的一点是,在整个训练过程中,每一时刻所用的都是同样的W.
举个例子,方便理解
假设现在我们已经训练好了一个RNN,如图,我们假设每个单词的特征向量是二维的,也就是输入层的维度是二维,且隐藏层也假设是二维,输出也假设是二维,所有权重的值都为1且没有偏差且所有激活函数都是线性函数,现在输入一个序列,到该模型中,我们来一步步求解出输出序列:
初始时
a
1
a_1
a1,
a
2
a_2
a2是没有存值的,因此初始值为0
至此,一个完整的RNN结构我们已经经历了一遍,我们注意到,每一时刻的输出结果都与上一时刻的输入有着非常大的关系,如果我们将输入序列换个顺序,那么我们得到的结果也将是截然不同,这就是RNN的特性,可以处理序列数据,同时对序列也很敏感。
RNN梯度消失
假设在t=3时刻,损失函数为
L
3
=
1
2
(
Y
3
−
O
3
)
2
L_3={1 over 2}(Y_3-O_3)^2
L3=21(Y3−O3)2
激活函数tanh导数小于1,即k时刻距离t时刻越远,则影响越小.对与“中华人民共和国”等长词的识别是很不利的
LSTM
残差网络的思路是一种解决梯度消失的方法.但在循环网络中有些词受前面影响,有些又不受前面影响.所以是一种动态残差.LSTM是RNN的一种变体,.有挑选的能力的RNN.其结构如下
对比RNN的公式
y
t
=
O
t
,
w
′
=
V
,
h
t
=
S
t
y_t=O_t,w’=V,h^t=S_t
yt=Ot,w′=V,ht=St你会发现LSTM主是相同的.区别在
其中 Z 是最为普通的输入,可以从上图中看到, Z 是通过该时刻的输入
X
t
X_t
Xt 和上一时刻存的隐藏层信息
h
t
−
1
h_{t-1}
ht−1 向量拼接,再与权重参数向量 W 点积,得到的值经过激活函数tanh最终会得到一个数值,也就是 Z ,注意只有 Z 的激活函数是tanh,因为 Z 是真正作为输入的,其他三个都是门控装置
Z
i 服务器托管网
,
Z
f
,
Z
o
Z_i,Z_f,Z_o
Zi,Zf,Zo都是在0到1之间的数值,1表示该门完全打开,0表示该门完全关闭.
聊天机器人
当前闲聊机器人有两种实现方式:基于检索 与 基于生成
-
检索这种方式,在搜索与推荐系统中通常会用的到。具体来说是衡量一种相似度.
-
收集常见问答语料
-
对主料进行分词并提取词频、词性等特征
-
针对特征输入, 根据分数的匹配函数找到相似度最高的答案
-
-
基于生成, 利用Seq2seq+Attention的训练出模型
但目前最常用的方式是将两者结合起来
即检索出来的分数小于一个零界值,则用生成的方式
Seq2seq
seq2seq 是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列.
- Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,
- Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。
如图中所展示,我们要翻译“知识就是力量。”这句话。Encoder是一套神经网络,将要翻译的话转换成向量特征,输入到Decoder中, 也即所谓的编码。然后再将该编码输入一套神经网络,最终输出“knowledge is power”。其网络结构图如下
- Encoder,一个RNN,C是RNN从输入
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
- 获得C以后,就使用另一个RNN,Decoder,来对编码C进行解码,或者说根据向量C来学习获得正确的输出。
这种Encoder-Decoder的结构其实就是一种BP深度网络, 当然也可以使用误差传播算法进去学习.
主要参考
《史上最详细循环神经网络讲解》
《从反向传播推导到梯度消失and爆炸的原因及解决方案》
《人人都能看懂的LSTM》
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net