张谦 王明松 刘思意
摘 要:BP神经网络通过神经元之间的相互连接,由前向传播和反向传播方式优化行为参数,在当今的人工智能领域有着广泛的应用。循环神经网络优化了传统神经网络结构,通过记忆结节的信息流动,实现对具有时间连续性的数据进行处理和预测,LSTM则改进了RNN时间和空间的效率问题,引入了门控机制,降低神经网络中信息传递的复杂度。本文阐述了RNN及LSTM网络的基本理论,并用TensorFlow框架实现了网络应用。
关键词:BP神经网络;RNN网络;LSTM
1 BP神经网络
人工神经元网络是通过众多神经元的相互连接而构成的自适应系统,具有动态自我更新的特征。BP神经网络是一种多层的前馈神经网络,其通过信号的前向传播,获取预测结果,再通过反向传播,得到相应的误差。通过这样的前向与反向流动,获取合理的权重与偏置。
2 RNN理论及实践
循环神经网络(Rerrent Neural Network, RNN),主要用于对具有时间连续性的数据进行处理和预测。在传统的神经网络模型中,网络可能有多层结构,但是层与层之间的神经元节点是孤立的,没有信息传递过程。而循环神经网络刻画了当前的状态节点与之前节点的信息关系,接收前端传来的上一时刻的信息作为重要的处理因子,进行计算输出,这使得当前状态时刻节点数据的处理更加复杂化。
在某t时刻,输入样本因素值,并伴随着样本权重集合,通过输入因素的权重集合和上一时刻t-1的状态值的计算,得到t时刻的状态值。将此刻的状态值与输出的样本权重集合作为参数,通过激活函数的作用,得到输出预测的概率值。随着时间状态变化的序列值前行,一系列神经元节点输出预测值。可见,网络的输出概率值受之前的输入样本因子的影响。
反射传播主要用于更新这些权重参数。在前向传播过程中,节点输出预测值会产生误差值,则在某t时刻,对这些参数的更新,用梯度下降法进行求得。
以下是TensorFlow实现RNN记忆节点功能的主要操作:
class RNNPoint(Layer_RNN_Cell):
#inputs表示输入到节点的要素集合,state表示上一时刻的输入集合
def call(self, input_datas, state_cell):
#用来计算[input,state] * [W,U] == [Xt,Ht-1] * W
data_input=math_ops.matmul(array_ops.concat([inputs_data,state_cell], 1), self._kernel)
data_input = nn_ops.bias_add(data_input, self._bias)
output = self._activation(data_input) #用激活函數来归一化操作
return output, output #第一个output参数返回下一时刻的输入S,另一个output作为下一层的输入
3 LSTM(Long Short Term Memory, 长短期记忆网络)理论与实践
一般结构的RNN网络中,网络节点某时刻状态与下一时刻状态之间是非线性的关系,而且相关参数都是节点之间共同拥有与使用,这会产生不可抗拒的梯度自然消失现象,同时理论的计算量巨大,导致数据训练所投入的时间和工作量呈指数增长。RNN中的节点单元无法确定信息量的价值,在记忆节点中存储很多无用的信息,而有利用价值的信息有可能被这些无用信息所侵占和排挤。为此,LSTM则将网络的状态分为内部状态和外部状态两种。LSTM 的外部状态是t时刻隐藏层的对外输出,同时也是t-1时刻隐藏层的输入,这是传统的RNN是一致的。LSTM的内部状态则引入了门机制,成为解决问题的重要关键点。
LSTM记忆节点由输入门(Input Gate)、遗忘门(Forget Gate)、输出门(Output Gate)和单元状态组成。输入门判定有多少信息量能够保存到当前时刻的记忆节点中,作为记忆节点的保存数据的阀门,过滤掉不必要的数据信息,将输入信息与上一状态输出信息,经过权重参数的调整,作为激活函数的参数,得到是否通过的决定。遗忘门决定上一时刻的节点状态有多少需要保留到当前时刻的记忆节点中,哪些信息需要被丢弃,也是经过激活函数的作用,决定能否通过。输出门控制记忆节点输出的数据量,有多少信息需要输出给外部状态。输入门和遗忘门是LSTM 保证节点记忆长期依赖的关键所在。经过激活函数sigmoid的变换后,得到一个0-1之间的一个数值,用来作为输入门的控制信号。1表示数据可以通过该门,0表示该门完全关闭。以下是TensorFlow框架实现LSTM节点的主要操作。
class BasicLSTM(Layer_RNN_Cell):
def call (self, input_data, states, scope=None):
with vs.variable_scope(scope or type(self).__name__): # 基础LSTM节点
concation = _linear([input_data, h], 4 * self._num_units, True); new_t = (c * sigmoid(f + self._forget_bias) + sigmoid(i) *self._activation(j));
new_h = self._activation(new_t) * sigmoid(o); new_sta = array_ops.concat(1, [new_t, new_h]);
return new_h, new_sta
4 小结
传统神经网络参数众多,在实践中存在着储多难题。循环神经网络优化了传统神经网络结构,通过记忆结节的信息流动,实现对具有时间连续性的数据进行处理和预测,LSTM则改进了RNN时间和空间的效率问题,引入了门控机制,降低神经网络中信息传递的复杂度。循环神经网络(RNN)解决了传统神经网络在数据中共享位置特征的难题,在语音识别、机器翻译、视频行为识别等诸多领域有着广泛的应用。
参考文献:
[1]杨丽,吴雨茜,王俊丽,等.循环神经网络研究综述[J].计算机应用, 2018,38S2):6-11.
[2]高茂庭,徐彬源.基于循环神经网络的推荐算法[J].计算机工程,2019(8).
[3]余昉恒.循环神经网络门结构模型研究[D].杭州:浙江大学,2018.
[4]朱肖颖,赖绍辉,陆科达.基于 LSTM 算法在新闻分类中的应用[J].梧州学院学报,2018,28(6):10-20.
作者简介:
王明松(1972- ),男,汉族,辽宁省营口市,讲师,硕士,软件工程理论及实践方向。
张谦(1999- ),男,汉族,河北省沧州市,软件工程专业学生,本科。
基金项目业:2020年国家级大学生创新创业训练计划项目(项目编号:202013892059)