深度学习(三):详解循环神经网络RNN,含公式推导

循环神经网络简介

循环神经网络(recurrent neural network, RNN)源自1982年由Saratha Sathasivam提出的霍普菲尔德网络。霍普菲尔德网络因为实现困难,在提出时并且没有被合适地应用。该网络结构也于1986年后被全连接神经网络以及一些传统的机器学习算法所取代。然而:

  • 传统的机器学习算法非常依赖于人工提取的特征,使得基于传统机器学习的图像识别、语音识别以及自然语言处理等问题存在特征提取的瓶颈;
  • 基于全连接神经网络的方法也存在参数太多、无法利用数据中时间序列信息等问题。

随着更加有效的循环神经网络结构被不断提出,循环神经网络挖掘数据中的时序信息以及语义信息的深度表达能力被充分利用,并在语音识别、语言模型、机器翻译以及时序分析等方面实现了突破。

1. 原理

RNN的主要用途是处理和预测序列数据在全连接神经网络或CNN模型中,网络结构都是从输入层到隐含层再到输出层,层与层之间是全连接或部分连接的,但每层之间的节点是无连接的。考虑这样一个问题,如果要预测句子的下一个单词是什么,一般需要用到当前单词以及前面的单词,因为句子中前后单词并不是独立的。比如,当前单词是“很”,前一个单词是“天空”,那么下一个单词很大概率是“蓝”。RNN的来源就是为了刻画一个序列当前的输出与之前信息的关系。从网络结构上,RNN会记忆之前的信息,并利用之前的信息影响后面结点的输出。也就是说,RNN的隐藏层之间的结点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。

下图展示了一个典型的RNN。在每一时刻 t ,RNN会针对该时刻的输入结合当前模型的状态给出一个输出,并更新模型状态。从下图中可以看到,RNN的主体结构 A 的输入除了来自输入\large x_{t},还有一个循环的边来提供上一时刻的隐藏状态(hidden state)\large h_{t-1}。在每一个时刻,RNN的模块A在读取了\large x_{t}\large h_{t-1}之后会生成新的隐藏状态\large h_{t},并产生本时刻的输出\LARGE o_{t},由于模块A中的运算和变量在不同时刻是相同的,因此RNN络理论上可以被看作是同一神经网络结构被无限复制的结果。正如卷积神经网络在不同的空间位置共享参数,循环神经网络是在不同时间位置共享参数,从而能够使用有限的参数处理任意长度的序列。

将完整的输入输出序列展开,可以得到下图所展示的结构。在图中可以更加清楚地看到RNN在每一个时刻会有一个输入\large x_{t},然后根据RNN前一时刻的状态\large h_{t-1}计算新的状态\large h_{t},并输出\LARGE o_{t}。RNN当前的状态\large h_{t}, 是根据上一时刻的状态\large h_{t-1}和当前的输入\large x_{t}共同决定的。在时刻 t,状态\large h_{t-1}浓缩了前面序列\large x_{0},x_{1},...,x_{t-1}的信息,用于作为输出\LARGE o_{t}的参考。由于序列的长度可以无限延长,维度有限的h状态不可能将序列的全部信息都保存下来,因此模型必须学习只保留与后面任务\large o_{t},o_{t+1},...相关的最重要的信息。

循环网络的展开在模型训练中有重要意义。从图中可以看到,RNN对长度为N的序列展开之后,可以视为一个有N个中间层的前馈神经网络。这个前馈神经网路没有循环链接,因此可以直接使用反向传播算法进行训练,而不需要任何特别的优化算法。这样的训练方法称为“沿时间反向传播” (Back-Propagation Through Time),是训练循环神经网络最常见的方法。

  • 14
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值