之前介绍的全连接神经网络和卷积神经网络的模型中,网络结构都是从输入层到各隐藏层再到输出层,层与层之间是全连接(或者部分连接)的,但每层之间的节点是无连接的。
全连接神经网络结构图:
考虑到这样一个问题,如果想预测句子的下一个单词是什么,一般需要用到当前单词和它前面的单词,因为句子中前后单词并不是独立的。例如,当前单词是“很”,前一个单词是“天空”,那么下一个单词很大概率是“蓝”。循环神经网络的来源就是为了刻画一个序列当前的输出与之前历史信息的关系。
从网络结构上,循环神经网络会记忆之前时刻的信息,并利用之前时刻的信息影响后面节点的输出。也就是说,循环神经网络的隐藏层之间的节点是有连接的,隐藏层的输入不仅包括输入层的输出,还包含上一时刻隐藏层的输出。
循环神经网络结构简图:
按时间展开后为:
(注:图中并未显示激活函数)
其中,t 是时刻, x 是输入层, s 是隐藏层(St表示t时刻的状态)。
U是输入x的权重,矩阵W就是隐藏层上一次的值作为这一次的(部分)输入的权重。隐藏层的计算公式为(f为激活函数):
o 是输出层,其计算公式为:
其中V是当前状态的权重,g是激活函数。
由上述两式递归可得:
可见,当输出o和所有输入序列x0,x1,... x(t-1), xt的信息都有关系。
由于各个权重和激活函数在不同的时刻是相同的,因此循环神经网络可以被看做是同一神经网络结构被无限复制的结果。正如卷积神经网络在不同的空间位置共享参数,循环神经网络是在不同的时间位置共享参数,从而能够使用有限的参数处理任意长度的序列。
需要指出的是,理论上循环神经网络可以支持任意长度的序列,然而在实际训练过程中,如果序列过长,一方面会导致优化是出现梯度消失或梯度爆炸问题,另一方面,展开后的前馈神经网络会占用过大的内存,所以在实际中一般都会规定一个最大长度,当输入序列长度超过规定长度后会对输入序列进行截断。
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!