基础循环神经网络
基础循环神经网络,RNN
循环神经网络,Recurrent Neural Network,RNN
循环神经网络,多用于处理序列数据,如语音识别、音乐生成、情感分类、机器翻译等
Basic RNN(循环神经网络)与DNN(前馈神经网络)的区别
——前馈神经网络不考虑上下文的信息,对于一个特定的输入,会给出固定的输出;前一阶段的输出间并不会对后一阶段产生影响
——循环神经网络具有记忆功能,捕获(考虑)历史时刻的信息;t时刻的输出会重新输入到隐藏层中,作为t+1时刻的输入
对于不同的训练样本,RNN的输入输出的序列长度往往是非固定的
且RNN在文本序列的不同位置学习到的特征是不共享的,这是由于RNN网络的记忆功能使得在t时刻学习到的特征往往包含有t时刻前的一些信息
下图是DNN与RNN结构上区别的简单体现:
关于命名实体识别的问题
命名实体识别,即对于一句话中的主体(主语)进行识别。简单的说,将数据集中名字设为1,非名字设为0。放置进网络中训练,使得RNN能够将输入的语句中的实体识别出来
注意:在生成文本语料库的过程中,对于单词or单个汉字等无明显联系的元素,我们常常使用具有正交特性的独热码(one-hot)来对其进行编码
其实现特点有:从左到右扫描序列数据;每个时间步共享参数(为减少不必要的计算量,该网络设置有Whx,Whh,Wyh三套参数,每一个时间步下的参数权值共享)。
计算过程如下:
h
<
t
>
=
g
(
W
h
h
h
<
t
−
1
>
+
W
h
x
x
<
t
>
+
b
h
)
=
g
(
W
h
[
h
<
t
−
1
>
,
x
<
t
>
]
+
b
h
)
h^{<t>} = g(W_{hh}h^{<t-1>}+W_{hx}x^{<t>}+b_h)=g(W_{h}[h^{<t-1>},x^{<t>}]+b_h)
h<t>=g(Whhh<t−1>+Whxx<t>+bh)=g(Wh[h<t−1>,x<t>]+bh)
y
^
<
t
>
=
g
2
(
W
y
h
<
t
>
+
b
y
)
\hat{y}^{<t>} = g_2(W_yh^{<t>}+b_y)
y^<t>=g2(Wyh<t>+by)
注
:
W
h
=
[
W
h
h
;
W
h
x
]
,
[
h
<
t
−
1
>
+
x
<
t
>
]
=
[
h
<
t
−
1
>
x
<
t
>
]
T
注:W_h = [W_{hh};W_{hx}],[h^{<t-1>}+x^{<t>}]=[h^{<t-1>} \ \ x^{<t>}]^T
注:Wh=[Whh;Whx],[h<t−1>+x<t>]=[h<t−1> x<t>]T
注意:两个过程的激活函数并不相同
在h的计算中,选取tanh作为激活函数;在输出的过程中,二分类中,选取sigmoid作为激活函数,在多分类中,选取softmax作为激活函数
关于其损失函数的计算,我们使用交叉熵损失函数,对每一步的预测值和真值分别计算,再作求和。
不同结构的RNN网络
Many to many
对于输入输出序列长度相等的情况,即时间步Tx = Ty,例如命名实体识别问题,我们使用前文中提到的网络结构。
对于输入输出的时间步不等的情况,即Tx != Ty,例如机器翻译问题,我们将输入与输出分隔开,类似于编码器和解码器的形式
Many to one
常见于情感分类问题
One to many
常见于音乐生成问题、图像加字幕问题
音乐生成:
图像加字幕:
双向循环神经网络——Bi-directional RNN
其优势在于,既能够获取历史数据的信息,也能够获取未来数据的信息
其缺陷在于,只有在获取完整的序列信息时才能进行预测,而不能进行实时的处理
深层循环神经网络——Deep RNN
类似于深层前馈神经网络,设置多个隐藏层
在长程RNN训练中出现的问题
在训练过程中,使用BPTT方法进行反向传播。所谓BPTT,即Back Propagation Through Time,随时间反向传播。当时间步过长时,会展现出一些问题。
RNN的训练过程中,损失函数取值的分布,要么极为平坦,要么极为陡峭,这导致训练过程比较困难
下面我们来看一下反向传播过程中,网络参数Wyh,Whh,Whx的更新情况。
看长式子很累是吧,那我们化简一下~
可以看到,在较多的连乘中,若频繁出现较小(较大)的权值,则导致在长程循环神经网络中,极易产生梯度消失(爆炸)的问题。
需要注意的是,sigmoid和tanh两个激活函数的导数均是[0,1]区间内的值,故而激活函数仅会产生梯度消失的现象。当梯度消失出现,即参数层不再更新,这一层变为了单纯的映射层。
三个问题:
(1)梯度爆炸
(2)梯度消失
(3)记忆容量
解决措施:
(1)梯度爆炸:梯度削减
(2)梯度消失:
选取更好的激活函数
改变传播结构
(3)记忆容量:引入门控机制来控制信息的积累速度。这里是指净积累速度,即选择性吸取新信息、选择性遗忘已有信息。这部分的内容,我们会在后面的LSTM和GRU模块中涉及。