机器学习(六)循环神经网络
参考:https://zhuanlan.zhihu.com/p/123211148 https://zhuanlan.zhihu.com/p/24018768
1.RNN
传统的神经网络并不能做到持续记忆,这应该是传统神经网络的一个缺陷。假想一下,你想让神经网络对电影中每个时间点的事件进行分类,很明显,传统神经网络不能使用前一个事件去推理下一个事件。递归神经网络可以解决这个问题。它们是带有循环的神经网络,允许信息保留一段时间。 在上图中,A 代表神经网络主体, xt 是网络输入,ht是网络输出,循环结构允许信息从当前输出传递到下一次的网络输入。这些循环让递归神经网络看起来有点神秘,然而,如果你再进一步思考一下,它与传统神经网络并没有太多不同。一个递归神经网络可以看多是一个网络的多次拷贝,每次把信息传递给他的继任者。
举个例子,有一句话是,I love you,那么在利用RNN做一些事情时,比如命名实体识别,上图中的
X
t
?
1
X_{t-1}
Xt?1?代表的就是I这个单词的向量,
X
X
X代表的是love这个单词的向量,
X
t
+
1
X_{t+1}
Xt+1?代表的是you这个单词的向量,以此类推,我们注意到,上图展开后,W一直没有变,W其实是每个时间点之间的权重矩阵,我们注意到,RNN之所以可以解决序列问题,是因为它可以记住每一时刻的信息,每一时刻的隐藏层不仅由该时刻的输入层决定,还由上一时刻的隐藏层决定,公式如下,其中
O
t
O_t
Ot?代表t时刻的输出,
S
t
S_t
St?代表t时刻的隐藏层的值:
O
t
=
g
(
V
?
S
t
)
S
t
=
f
(
U
?
X
t
+
W
?
S
t
?
1
)
O_t=g\left( V\cdot S_t \right) \\ S_t=f\left( U\cdot X_t+W\cdot S_{t-1} \right) \\
Ot?=g(V?St?)St?=f(U?Xt?+W?St?1?)
S
t
S_t
St?的值不仅仅取决于
X
t
X_t
Xt?,还取决于
S
t
?
1
S_{t-1}
St?1?
2.RNN的长期依赖问题
人门希望RNNs能够连接之前的信息到当前的任务中,例如,使用之前的图像帧信息去辅助理解当前的帧。如果RNNs可以做到这个,它们将会特别的有用,但是它们可以做到吗?这要视情况而定。 有时,我们仅仅需要使用当前的信息去执行当前的任务。例如, 一个语言模型试图根据之前的单词去预测下一个单词。如果我们试图去预测“the clouds are in the sky”,我们不需要更多的上下文信息–很明显下一个单词会是sky。在类似这种相关信息和需要它的场合并不太多的情景下,RNNs可以学习使用之前的信息。
但是,也有很多场景需要使用更多的上下文。当我们去尝试预测“I grew up in France…I speak fluent French”的最后一个单词,最近的信息表明下一个单词应该是语言的名字,但是如果我们想缩小语言的范围,看到底是哪种语言,我们需要France这个在句子中比较靠前的上下文信息。相关信息和需要预测的点的间隔很大的情况是经常发生的。不幸的事,随着间隔的增大,RNNs连接上下文信息开始力不从心了。
这里就牵扯到梯度消失和爆炸的问题,上面那个最基础版本的RNN,我们可以看到,每一时刻的隐藏状态都不仅由该时刻的输入决定,还取决于上一时刻的隐藏层的值,如果一个句子很长,到句子末尾时,它将记不住这个句子的开头的内容详细内容。
LSTM通过它的“门控装置”有效的缓解了这个问题,这也就是为什么我们现在都在使用LSTM而非普通RNN。
3.LSTM
长短期记忆网络–通畅叫做”LSTMs”–是一种特殊的RNNs, 它能够学习长期依赖。,后来在很多人的努力下变得越来越精炼和流行。它们在大量的问题上有惊人的效果,现在被广泛的使用。LSTMs被明确的设计用来解决长期依赖问题,记住长时间段的信息是他们的必备技能,不像RNNs那么费力去做还做不好。所有的递归神经网络都有重复神经网络本身模型的链式形式。
在标准的RNNs, 这个复制模块只有一个非常简单的结构,例如一个双极性(tanh)层。 LSTMs 也有这种链式结构,但是这个重复模块与上面提到的RNNs结构不同:LSTMs并不是只增加一个简单的神经网络层,而是四个,它们以一种特殊的形式交互。 在上图中,每条线表示一个向量,从一个输出节点到其他节点的输入节点。这个粉红色圆圈表示逐点式操作,就像向量加法。黄色的盒子是学习好的神经网络的层。线条合表示联结,相反,线条分叉表示内容被复制到不同位置。
Sigmod层输出0~1之间的数字,描述了一个神经元有多少信息应该被通过。输出“0”意味着“全都不能通过”,输出“1”意味着“让所有都通过”。一个LSTM有三个这样的门限,去保护和控制神经元状态。
LSTM是RNN的一种变体,更高级的RNN,那么它的本质还是一样的,还记得RNN的特点吗,可以有效的处理序列数据,当然LSTM也可以,还记得RNN是如何处理有效数据的吗,是不是每个时刻都会把隐藏层的值存下来,到下一时刻的时候再拿出来用,这样就保证了,每一时刻含有上一时刻的信息,如图,我们把存每一时刻信息的地方叫做Memory Cell,中文就是记忆细胞,可以这么理解。 普通RNN就像一个乞丐,路边捡的,别人丢的,什么东西他都想要,什么东西他都不嫌弃,LSTM就像一个贵族,没有身份的东西他不要,他会精心挑选符合自己身份的物品。这是为什么呢?有没有思考过,原因很简单,乞丐没有选择权,他的能力注定他只能当一个乞丐,因此他没有挑选的权利,而贵族不一样,贵族能力比较强,经过自己的打拼,终于有了地位和身份,所以可以选择舍弃一些低档的东西,这也是能力的凸显。
LSTM和普通RNN正是贵族和乞丐,RNN什么信息它都存下来,因为它没有挑选的能力,而LSTM不一样,它会选择性的存储信息,因为它能力强,它有门控装置,它可以尽情的选择。如下图,普通RNN只有中间的Memory Cell用来存所有的信息,而从下图我们可以看到,LSTM多了三个Gate,也就是三个门,什么意思呢?在现实生活中,门就是用来控制进出的,门关上了,你就进不去房子了,门打开你就能进去,同理,这里的门是用来控制每一时刻信息记忆与遗忘的。
- Input Gate:中文是输入门,在每一时刻从输入层输入的信息会首先经过输入门,输入门的开关会决定这一时刻是否会有信息输入到Memory Cell。
- Output Gate:中文是输出门,每一时刻是否有信息从Memory Cell输出取决于这一道门。
- Forget Gate:中文是遗忘门,每一时刻Memory Cell里的值都会经历一个是否被遗忘的过程,就是由该门控制的,如果打卡,那么将会把Memory Cell里的值清除,也就是遗忘掉
|