当前位置:   article > 正文

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

rnn算法推导

循环神经网络简介

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

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

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

1. 原理

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

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

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

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

2. 应用

从RNN的结构特征可以很容易看出它最擅长解决与时间序列相关的问题。RNN也是处理这类问题时最自然的神经网络结构。对于一个序列数据,可以将这个序列上不同时刻的数据依次传入RNN的输入层,而输出可以是对序列中下一个时刻的预测,也可以是对当前时刻信息的处理结果(比如语音识别结果)。循环神经网络要求每一个时刻都有一个输入,但是不一定每个时刻都需要有输出。

以机器翻译为例来介绍RNN是如何解决实际问题的。RNN中每一个时刻的输入为需要翻译的句子中的单词。如图8.3所示,需要翻译的句子为ABCD,那么RNN第一段每一个时刻的输入就分别是A、B、C和Dÿ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/341951
推荐阅读
相关标签
  

闽ICP备14008679号