循环神经网络(RNN)原理
1.RNN怎么来的?
卷积神经网络与人工神经网络的前提假设都是:元素之间是相互独立的,输入与输出也是独立的,如猫和狗。
现实世界中,很多元素都是相互连接的,一个人说了:我喜欢旅游,其中最喜欢的地方是云南,以后有机会一定要去.这里填空,人应该都知道是填“云南“。因为我们是根据上下文的内容推断出来的,但机会要做到这一步就相当得难了。因此,就有了现在的循环神经网络
本质是**:像人一样拥有记忆的能力。**因此,他的输出就依赖于当前的输入和记忆。
2.RNN的网络结构及原理
网络结构如下:
每个圆圈可以看作是一个单元,每个单元做的事情一样,因此可以折叠呈左半图的样子。用一句话解释RNN,就是一个单元结构重复使用。
当前时刻的输出是由记忆和当前时刻的输入决定的,神经网络最擅长做的就是通过一系列参数把很多内容整合到一起,然后学习这个参数,因此就定义了RNN的基础。
RNN是一个序列到序列的模型,假设应该是”人”的概率比较大。
因此,我们可以做这样的定义:
。因为我们当前时刻的输出是由记忆和当前时刻的输入决定的,就像你现在大四,你的知识是由大四学到的知识(当前输入)和大三以及大三以前学到的东西的(记忆)的结合,RNN在这点上也类似,神经网络最擅长做的就是通过一系列参数把很多内容整合到一起,然后学习这个参数,因此就定义了RNN的基础: 函数,其实这个函数是神经网络中的**函数,但为什么要加上它呢? 举个例子,假如你在大学学了非常好的解题方法,那你初中那时候的解题方法还要用吗?显然是不用了的。RNN的想法也一样,既然我能记忆了,那我当然是只记重要的信息啦,其他不重要的,就肯定会忘记,是吧。但是在神经网络中什么最适合过滤信息呀?肯定是**函数嘛,因此在这里就套用一个**函数,来做一个非线性映射,来过滤信息,这个**函数可能为tanh,也可为其他。RNN中的结构细节:
1.可以把在很多情况下都是不存在的,因为很多任务,比如文本情感分析,都是只关注最后的结果的。就像考研之后选择学校,学校不会管你到底怎么努力,怎么心酸的准备考研,而只关注你最后考了多少分
3.RNN的改进1:双向RNN
双向RNN需要的内存是单向RNN的两倍,因为在同一时间点,双向RNN需要保存两个方向上的权重参数,在分类的时候,需要同时输入两个隐藏层输出的信息。
4.RNN的改进2:深层双向RNN
深层双向RNN 比双向RNN多了几个隐藏层,相对于普通DNN隐藏层可能有上百层之多,而RNN有3层就算多了,因为有时间维度,网络会变得相当大,即使只有很少的隐藏层。 通常会在输出层:y,加上比较深的层,但是这些层在水平方向上并不相连。
深层常见的一种结构图:
我们用上标 来表示第
层,按图中的上下顺序给出计算公式:
4.1 Pyramidal RNN
其他类似的网络还有Pyramidal RNN:
有一个很长的输入序列,这是一个双向的RNN,上图是谷歌的W.Chan做的一个测试,它原先要做的是语音识别,要用序列到序列的模型做语音识别,序列到序列就是输入一个序列然后就输出一个序列。
由图,上一层的两个输出,作为当前层的输入,如果是非常长的序列的话,每一层的序列都比上一层要短,但当前层的输入也会随之增多,貌似看一起相互抵消,运算量并没有什么改进。
但我们知道,对于一层来说,它是从前往后转的,比如要预测一个股市的变化,以天为单位,假如要预测明天的股市变化,你就要用今天,以及今天之前的所有数据,我们暂时无法只用昨天的数据,不用今天的数据,预测明天的数据,也即是说,预测必须具有连续性。
但每一层的 运算是可以并行的,从这个角度看,运算量还是可以接受的,特别在原始输入序列较短的时候还是有优势的。