人工智能之循环神经网络(RNN)
AI优化生活前言:人工智能机器学习有关算法内容,人工智能之机器学习主要有三大类:1)分类;2)回归;3)聚类。今天我们重点探讨一下循环神经网络(RNN)算法。
循环神经网络(RNN)现已成为国际上神经网络专家研究的重要对象之一。它是一种节点定向连接成环的人工神经网络,最初由Jordan,Pineda.Williams,Elman等于上世纪80年代末提出的一种神经网络结构模型。
引领循环神经网络RNN研究的主要是JuergenSchmidhuber和他的学生——其中包括SeppHochreiter,他发现了高深度网络所遇到的梯度消失问题,后来又发明了长短期记忆(LSTM)循环网络;还有Alex Graves,他目前在DeepMind任职。另外两位比较著名的研究者分别是:Felix Gers,他发明了LSTM遗忘门;Justin Bayer,他发明了可以让LSTM拓扑结构根据具体问题进行自动演化的方法。
RNN概念:
循环神经网络RNN(Recurrent NeuronNetwork)的内部状态可以展示动态时序行为。不同于前馈神经网络的是,RNN可以利用它内部的记忆来处理任意时序的输入序列,这让它可以更容易处理如不分段的手写识别、语音识别等。
循环神经网络(RNN)可以实现并行和序列计算,原则上可以计算任何传统计算机所能计算的东西。但和传统计算机不同的是,RNN与人类大脑有相似之处;人脑是一种由神经元相互联结组成的大型前馈网络,可以借由某种方式学会将长达人的一生的感觉信号输入流转换为一个有效的运动输出序列。人脑是一个杰出的模范,因为它能解决许多计算机尚且力所不及的问题。
RNN特征:
循环神经网络RNN的本质特征是在处理单元之间既有内部的反馈连接又有前馈连接。从系统观点看,它是一个反馈动力系统,在计算过程中体现过程动态特性,比前馈神经网络具有更强的动态行为和计算能力。
RNN分类:
1)完全递归网络(Fully recurrent network)
2)Hopfield网络(Hopfield network)
3)Elman networks and Jordannetworks
4)回声状态网络(Echo state network)
5)长短记忆网络(Long short term memery network)
6)双向网络(Bi-directional RNN)
7)持续型网络(Continuous-time RNN)
8)分层RNN(Hierarchical RNN)
9)复发性多层感知器(Recurrent multilayer perceptron)
10)二阶递归神经网络(Second Order Recurrent Neural Network)
11)波拉克的连续的级联网络(Pollack’s sequential cascaded networks)
RNN与FNN区别:
循环神经网络RNN和前馈神经网络FNN的最大区别在于有一个反馈循环。另外,两者的记忆模式完全不同。在定型之后,前馈神经网络会生成已学习数据的静态模型,然后接受新的样例,进行准确的分类或聚类。而循环神经网络RNN则会生成动态模型,即会随时间推移而变化的模型,即将第n-1步的输出反馈给神经网络,对第n步的输出产生影响,之后的每一步也都以此类推。这种变化可以让模型依据输入样例的上下文来进行准确的分类。
RNN模型与记忆:
循环神经网络RNN包含了决定同个序列中的前一次分类结果的隐藏状态。以后每一步,这一隐藏状态会与新一步的输入数据相加,生成一个新的隐藏状态,再得出一个新的分类结果。每个隐藏状态都会被循环利用,生成经过调整的后续隐藏状态。
人类的记忆模式同样能考虑上下文,循环利用对于过往状态的认知来恰当地解读新数据。人类会受到短期记忆和先前感觉的影响,保留了不同的“隐藏状态”。
RNN基本结构:
RNN是一种对序列数据建模的神经网络,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。下面是一个RNN模型的示例图,其中:
xt是t时刻的输入;
st是t时刻的隐状态(memory),基于上一时刻的隐状态和当前输入得到:st=f(Uxt+Wst?1),其中f一般是非线性的激活函数,在计算s0时,需要用到s?1。
ot表示t时刻的输出,ot=softmax(Vst);
在RNN中,所有层次均共享同样的参数。其反应出RNN中的每一步都在做相同的事,只是输入不同,因此大大地降低了网络中需要学习的参数。
RNN允许对向量的序列进行操作:输入可以是序列,输出也可以是序列,在最一般化的情况下输入输出都可以是序列。输出序列理解为RNN关于序列下一个状态预测的信心程度。
RNN参数训练:
循环神经网络RNN的参数训练可以通过随时间进行反向传播(Back propagation Through Time,BPTT)算法,BPTT算法是针对循环层的训练算法,包含三个步骤:
1)前向计算每个神经元的输出值;
2)反向计算每个神经元的误差项值,它是误差函数E对神经元j的加权输入的偏导数;
3)计算每个权重的梯度,最后再用随机梯度下降算法更新权重。
RNN优点:
1)分布式表达;
2)能在序列预测中明确地学习和利用背景信息;
3)具有长时间范围内学习和执行数据的复杂转换能力。
RNN缺点:
1)会造成梯度消失问题;
2)会造成梯度爆炸问题;
RNN改进方案:
1)选择其他的激活函数,比如ReLU;
2)引入改进网络结构的机制,比如LSTM,GRU;
3)自然语音处理上应用十分广的就是LSTM。
RNN应用场景:
循环神经网络RNN是一类功能强大的人工神经网络算法,特别适用于处理声音、时间序列(传感器)数据或书面自然语言等序列数据。DeepMind在自动代理玩游戏的研究中就使用了一种循环网络。
循环神经网络RNN也适用于聚类和异常状态检测。可以应用于可穿戴式设备生成的医疗保健数据、恒温器等智能设备生成的家居环境数据、股票及指数变动生成的市场数据、账户交易活动生成的个人财务数据(可用于检测欺诈或洗钱行为)等。
目前,循环神经网络RNN在自然语言处理、机器翻译、图像识别、语音识别等领域迅速得到大量应用。
RNN已在实践中证明对自然语言处理是非常成功的,如词向量表达、语句合法性检查、词性标注等。
结语:
循环神经网络RNN是一类功能强大的人工神经网络算法,其模型是目前人工神经网络应用中最为广泛的一类模型。特别适用于处理声音、时间序列(传感器)数据或书面自然语言等序列数据。DeepMind在自动代理玩游戏的研究中就使用了一种循环网络。RNN算法在人工智能之机器学习、自然语言处理、机器翻译、图像识别、语音识别、时间序列数据、股票交易数据和气象观测数据等领域有着广泛应用。