RNN
简介
前馈神经网络的两个局限
- 难以捕捉到数据之间长距离的依赖关系,即使CNN也只能捕捉到局部或短距离的关系
- 当训练样本输入是连续序列且长短不一时,不好处理,如一段段连续的语音、连续的文本
为了解决上述局限,提出了循环神经网络RNN的结构如下,右侧是左侧的图按照时间序列展开的结果。
RNN可以做到学习数据间长距离的关系。比如在文本分类中,它模拟了人阅读一篇文章的顺序,从前到后阅读文章中的每一个单词,将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好地理解之后的文本。
从图上可以看到,RNN本质上还是一个全连接网络,区别在于全连接网络对一整个样本往前传递,前向传递一次,而RNN对一个样本按照时间序列一部分一部分地往前传递,前向传递多次。
基本架构
上图为RNN的经典结构,网络的传递过程如下:
-
输入:在文本处理中,一个样本是一个句子
x,划分为单词
(x1,x2,...,xn),输入到隐层节点
-
隐层:接收当前轮的单词
xi 与上一轮的隐层输出
hi−1,计算
hi,输出至下一轮的隐层和当前轮的输出节点
hi=Whi−1+Uxi(1)
-
输出:接收当前轮隐层的输出
hi,计算输出
oi
oi=Vhi(2)
可以看到:
- 每一轮的权值是共享的
- 每一轮的隐层都包含了前面所有轮的信息,即记忆能力
RNN的一些变体
- 经典的RNN的结构可以理解为多个输入神经元,单个输出神经元,如输入是一串文字,输出是类别。
- 有时需要单个输入神经元,多个输出神经元的情况,则可以是如下结构。
- 有时需要多个输入神经元、多个输出神经元的情况,如机器翻译,则需要两个RNN结构,又称为Seq2Seq。
根据输入输出的不同,RNN可以有多种变体,本质上任何涉及循环的函数都可以被认为是一个循环神经网络。
RNN的BP:BPTT
RNN使用基于时间的反向传播(Back-Propagation Through Time)进行训练,本质上还是BP算法。
仍以该结构为例,需要更新的参数有
V、W、U,损失函数为
L=t=1∑TL(t)(3)
对于
V,每次只用到当前轮的信息,即
∂V∂L=t=1∑T∂V∂L(t)=t=1∑T∂o(t)∂L(t)∂V∂o(t)(4)
对于
W,需要用到历史信息,以
L(t) 对
W 求导为例,有
∂W∂L(t)=∂o(t)∂L(t)∂h(t)∂o(t)∂W∂h(t) 其中,∂W∂h(t)=h(t−1)+W∂W∂h(t−1),此处省略了激活函数的求导(5)
比如当
t=3 时,有
(注意这里不考虑激活函数时,
∂W∂h(3)=h(2),与上述符号表示有区别)
可写成连乘的形式如下,
∂W∂L(t)=k=1∑t∂o(t)∂L(t)∂h(t)∂o(t)(j=k+1∏t∂h(j−1)∂h(j))∂W∂h(k)(6)
所以对于
W 的求导同样对各个
L(t) 求导的结果求和即可,即
WL=t=1∑T∂W∂L(t)(7)
对于
U 的求导与
W 类似。
梯度消失
对于求导公式中间部分的累乘,当激活函数是
tanh 或
sigmoid 时,由于两者的导数绝对值小于1,累乘后容易导致梯度消失,从而无法学习长距离的依赖关系(距离长的梯度消失了)。针对这个问题,有2种思路——
- 选择更合适的激活函数。如ReLU,有较大的激活区域,且导数为1,避免梯度消失的发生
- 改变网络结构。使用LSTM可以解决
LSTM
LSTM,long short-term memory,长短期记忆,是RNN的一种改进。RNN由于梯度消失,只能维持短期记忆,LSTM通过引入记忆单元和门控制单元(将短期记忆与长期记忆结合),在一定程度上解决了梯度消失的问题。
具体地,RNN是一个循环的网络结构,在原来的RNN中,循环的结构如下:
LSTM在这个结构的基础上引入了记忆单元和门控制单元,如下:
在结构中的横线传播的称为记忆单元
Ct。LSTM的上述结构中包含了遗忘门、输入门、输出门。
-
遗忘门控制前一步记忆单元中的信息有多大程度被遗忘掉
Ct−1=Ct−1∗σ(f1(ht−1,xt))(8)
-
输入门控制当前计算的新状态以多大程度更新到记忆单元
Ct=Ct−1+σ(f2(ht−1,xt))∗tanh(f3(ht−1,xt))(9)
-
输出门控制当前的输出有多大程度上取决于当前的记忆单元
ht=tanh(Ct)∗σ(f4(ht−1,xt))(10)
对于激活函数的选择——
sigmoid的输出是0-1,符合遗忘和记忆的物理意义,当输入较大或较小时,其输出会非常接近1或0,从而保证该门开或关。在生成候选记忆时,使用Tanh函数,是因为其输出在-1~1之间,这与大多数场景下特征分布是0中心的吻合。此外,Tanh函数在输入为0附近相比Sigmoid函数有更大的梯度,通常使模型收敛更快。
GRU
GRU是LSTM的一个变体,将遗忘门和输入门合并为单一的更新门,同时混合了记忆单元和隐藏状态,结构如下:
-
重置门,reset gate,控制候选(candidate)状态多大程度取决于旧状态
rt=σ(f1(ht−1,xt))(11)
htc=tanh(f2(rt∗ht−1,xt))(12)
-
更新门,update gate,控制新状态由旧状态和候选状态相加的权重
zt=σ(f3(ht−1,xt))(13)
ht=(1−zt)ht−1+zthtc(14)
Reference
[1] https://blog.csdn.net/zhaojc1995/article/details/80572098
[2] 《百面机器学习》