深度学习:RNN学习

在深度学习里经常听到CNN、RNN、概率图模型、深度信念等奇怪的词汇,刀哥最近一段时间就来说道一下。

什么是RNN呢?

循环神经网络是1986年Rumelhart等人提出的用于出来序列数据的神经网络,一般认为它可以拓展到更长的序列,大部分循环神经网络都是序列可变长的。

我们来看一下RNN需要应对的问题,假设存在一个时间序列的函数前一刻的输出结果影响下一刻的输出。

这种问题可在以下方面上容易遇到:

1.自然语言处理

2.机器翻译

3.语音识别

4.实时三维重建

遇到这种问题要怎么解决呢?

首先我们先把时间序列的函数关系搞清楚:

s^{(t)}=f(s^{(t-1)},\Theta )

在一个有限长序列中,前一时刻的结果影响下一时刻。假设我们在这种规律下加入输入:

s^{(t)}=f(s^{(t-1)},x^{t};\Theta )

理论上说,这是最简单的前馈循环神经网络。

说完基本概念,我们来说说RNN的几种基本类型:

1.每个时间步都有输出,并且隐藏单元之间有循环链接的循环网络。

2.每个时间不都产生一个输出,只有当前时刻的输出到下一个时刻的隐藏单元之间有循环链接的循环网络。

3.隐层单元之间存在循环链接,但读取整个序列后产生单个输出的循环网络。

深度学习:RNN学习_第1张图片

这个图是第一种类型的图,第二种类型是从输出直接进入下一个时间的输出,即把h^{t-1}\rightarrow h^{t}变为O^{t-1}\rightarrow h^{t}.

第三种类型是没有前面的输出,只输出最后一个。

这种方式的转变相对于NN来说是比较容易理解到,值得注意的一点是所有序列共享一套权值。

当然,在对其训练的过程中一般也是使用反向传播的方式,在RNN中是BPTT(时间序列的反向传播)。

这是最基本的RNN模型,它能做的事情比较少也并不强大,真正强大的是RNN针对各种应用场景的改进。

接下来我们来了解一下LSTM网络(long short term memory)也叫长短期记忆法,这是在RNN的基础上进行一些改进产生的。

他和RNN的区别在于他设置了一个三扇门的结构,分别叫做输入门、遗忘门和输出门,分别决定输入什么、丢弃什么和输出什么。那么为什么要这么做呢?

主要是一个长序依赖问题,普通的RNN存在一个比较严重的问题就是最前面的信息在传递过程中到后面的信息量就比较少了,或者说是感知力有所下降,因此LSTM网络才应运而生。

LSTM网络具体做了一下几件事情:

(为了便于理解,我们先把三扇门当成三种函数和一些储存结构)

1.首先RNN在循环的传递过程中是把上一个时间节点的信息直接当成输入传递给下一个节点,这是造成长序依赖问题的原因。

为了解决这个问题,LSTM采用细胞节点来进行信息传递,传递过程中,各个节点的信息是叠加的,所以损失比较小。

重要的一点是通过遗忘门函数对个点信息做了权重,门函数的输入是上一个节点的隐层输出,输出是一个0-1的权值。

2.其次是这次细胞节点的值是输入门函数的输出和遗忘门函数对上次节点的输入点乘。

3.最后是输出门函数输出是这次节点的隐层输出。

在这种结构下,信息在比较少损失的情况下得到了长期依赖。

2015谷歌通过基于CTC 训练的 LSTM 程序大幅提升了安卓手机和其他设备中语音识别的能力,也是从那时起各种语音智能应运而生,蓬勃发展开来。这里刀哥叙述的既没有公式推导,也没有给出形象的图示进行讲解,比较差劲,但是思想是将清楚了。如果还没尽兴,刀哥推荐一篇论文,将的非常好。

[1]A. Graves. Supervised Sequence Labelling with Recurrent Neural Networks. Textbook, Studies in Computational Intelligence, Springer, 2012.

你可能感兴趣的:(RNN)