学完了吴恩达的序列模型第一周的课,之前也用过各种库,但是对模型内部了解不深,宏观认识也不够,就总结一下以加深印象。
循环序列模型及应用场景分类
传统的神经网络模型往往需要相同维度的输出和输入,而在自然语言处理中,句子或词语的构成往往长短不一;此外由于语言的先后顺序对于语义的理解十分重要,所以采用循环序列模型能够更好的捕捉词语先后顺序的联系。
不同的RNN类型
在下面的命名实体识别例子中,Tx = Ty。但是在很多RNN模型中,Tx是不等于Ty的。根据Tx与Ty的关系,RNN模型包含以下几个类型:
- Many to many: Tx=Ty 人名识别,实体识别
- Many to many: Tx≠Ty 机器翻译
- Many to one: Tx>1,Ty=1 文本分类,情感分类
- One to many: Tx=1,Ty>1 语音生成,文本生成
- One to one: Tx=1,Ty=1
下面命名实体识别为例总结RNN基础模型
循环序列模型
本文主要对循环序列模型进行总结,并对应用场景进行分类
1. RNN
2. LSTM
3. GRU
RNN模型的前项传播
循环神经网络(RNN)是专门用来解决序列模型问题的。RNN模型结构如下:
序列模型从左到右,依次传递,此例中,Tx=Ty。 x<t> x < t > 到 y<t> y < t > 之间是隐藏神经元。 a<t> a < t > 会传入到第t+1个元素中,作为输入。其中, a<0> a < 0 > 作为初始向量,一般为零向量。对于每个t时刻的的输出 y<t> y < t > ,总是和上一时刻的激活值 a<t−1> a < t − 1 > 和当前时刻的输入值 x<t> x < t > 有关。
RNN模型包含三类权重系数由下图所示:分别是Wax,Waa,Wya。且不同元素之间同一位置共享同一权重系数。
在命名实体识别中,对于t时刻的激活值
at
a
t
RNN内部的运算采用公式如下图:
a<t>=tanh(Wax∗Xt+Waa∗at−1+ba)
a
<
t
>
=
t
a
n
h
(
W
a
x
∗
X
t
+
W
a
a
∗
a
t
−
1
+
b
a
)
进行计算。
对于当前时刻的输入是否是一个实体,通常进行softmax计算概率分布得出。
对于一般问题,RNN的正向传播(Forward Propagation)过程为:
a<t>=g(Waa⋅a<t−1>+Wax⋅x<t>+ba)
a
<
t
>
=
g
(
W
a
a
⋅
a
<
t
−
1
>
+
W
a
x
⋅
x
<
t
>
+
b
a
)
y<t>=g(Wya⋅a<t>+by)
y
<
t
>
=
g
(
W
y
a
⋅
a
<
t
>
+
b
y
)
其中,g(⋅)表示激活函数,不同的问题需要使用不同的激活函数。
RNN模型的反向传播
针对上面识别人名的例子,经过RNN正向传播,单个元素的Loss function为:
L<t>(y^<t>,y<t>)=−y<t>log y^<t>−(1−y<t>)log (1−y^<t>)
L
<
t
>
(
y
^
<
t
>
,
y
<
t
>
)
=
−
y
<
t
>
l
o
g
y
^
<
t
>
−
(
1
−
y
<
t
>
)
l
o
g
(
1
−
y
^
<
t
>
)
则该所有元素的Loss function为:
L(y^,y)=∑Tyt=1L<t>(y^<t>,y<t>)
L
(
y
^
,
y
)
=
∑
t
=
1
T
y
L
<
t
>
(
y
^
<
t
>
,
y
<
t
>
)
对于Waa,Wax,ba求偏导数来进行更新
存在的缺陷
缺陷1
得一提的是,以上所述的RNN为单向RNN,即按照从左到右顺序,单向进行,y^只与左边的元素有关。但是,有时候y^也可能与右边元素有关。例如下面两个句子中,单凭前三个单词,无法确定“Teddy”是否为人名,必须根据右边单词进行判断。
He said, “Teddy Roosevelt was a great President.”
He said, “Teddy bears are on sale!”
为了解决上述问题,有一种更为复杂的结构叫做Bi-RNN(双向RNN)我们在未来会加以讨论和总结。
缺陷2
- 梯度爆炸
- 梯度消失
对于梯度爆炸,可以简单的将所计算的梯度进行区间限制。
梯度消失,指的是在反向传播过程中,梯度计算为0无法更新参数的情况。在rnn中,如果序列较长,计算的梯度又接近于0,就会出现这种情况。
对于梯度消失,RNN没有什么好的办法,因此有大神创造了LSTM模型来解决梯度消失的问题,下一篇将对LSTM进行总结。
参考:https://blog.youkuaiyun.com/red_stone1/article/details/79446105