循环神经网络(RNN)

你曾想过文本预测算法是怎么工作的吗?语音识别软件如何辨别我们的声音?在图像分类方面,卷积神经网络像一个神秘的黑盒。而这些事情,都可以用循环神经网络(RNN)实现。循环神经网络很强大,在自然语言处理领域有着相当特别的作用。

为什么如此特别?到目前为止,我们研究的网络,标准神经网络和卷积神经网络都接受固定大小的向量作为输入,并产生固定大小的向量作为输出。

《循环神经网络(RNN)》

但是,人类的思考却不是这样的,我们不会丢弃掉所有东西从头开始,而是会应用之前获得的上下文和信息。当你阅读该文章时,你对文字的理解都会基于前面的文字,这说明我们人类是按照顺序思考的——新的输入+之前的经验形成思考。

循环神经网络也是这样的,对输入和输出序列进行操作,并将结果反馈给我们。

RNN的结构

循环神经网络的结构和人工神经网络的结构一样,不过会把输出返回给输入。用T时刻的输出来计算T+1时刻的网络输出。RNN简单结构图示:

《循环神经网络(RNN)》

这就是说输出会被送回到输入,然后在下一个时刻,和下一个输入一同使用。基本的,网络的状态是通过时间向前传播的。我们可以按照时间展开这个结构,如下所示:

《循环神经网络(RNN)》

我们可以这样理解,RNN具有“记忆”,里面存储着迄今为止计算出的信息。无论如何,从上面的图片中可以看出我们正在使用某种过程来组合前一时间的输出和当前时刻的输入,以计算当前时刻的输出。

有人可能会想序列输入或序列输出的数据很少,但重要的是要意识到即使输入/输出是固定的向量我们也可以用这种方式处理。例如,在下面的图片中,可以看到RNN如何通过学习逐层向画布添加颜色来生成数字图片:

《循环神经网络(RNN)》

RNN背后的数学原理

循环神经网络有一个简单的数学表达式:

《循环神经网络(RNN)》

从本质上讲,该等式表示网络在当前时间ht的状态可以被描述为在前一时间步长中的状态和在当前时间步长中的输入的函数。函数f通常是非线性的,例如tanh或者ReLU。当前时间步长ht中的网络状态成为下一时间步长的输入值。如果采用的是最简单的RNN形式,即使用tanh作为激活函数的RNN,可以表示如下:

《循环神经网络(RNN)》

其中,Whh是循环神经元的权重,而Wxh是输入神经元的权重。在这个例子中,考虑的只是前一个时间步长,但是一般来说,是可以观察多个时间步长的状态,这样预测会更加精确。

简化的RNN示例

RNN的数学表达式看起来好像没有想象中那么可怕。如果将数学表达式转化为代码,就能实现一个简单的RNN。这里会用时间步长(timestep)来模拟时间。x代表一个时间步长的输入;y表示RNN的输出。在类内部,将保留有关以前输入和网络状态的信息。C#实现简单RNN的代码:

《循环神经网络(RNN)》

这里注意一点,要使用Matrix类型,需要安装Mathnet。Numerics NuGet软件包。使用tanh函数将激活压缩到[-1,1]的范围。在函数调用中,将当前状态与循环神经元权重相乘,将输入与输入神经元相乘,然后两者相加(同上面的公式),然后将当前状态乘以输出权重来计算输出。

由于Python是实现神经网络的首选语言,下面使用Python来实现:

《循环神经网络(RNN)》

当然,上面的都只是简化的循环神经网络表达。这个例子只是让大家感受一下网络的状态是如何随时间保存下来的。

时间反向传播

反向传播算法是神经网络调整权重的一种方法。简而言之,在训练过程中,网络计算训练数据集的输出。然后,将计算结果和所需要的结果进行比较,并调整权重从输出层返回到输入层。更多关于反向传播算法的信息:

Backpropagation Algorithm in Artificial Neural Networks

在循环神经网络中,有一个更复杂的情况。因为,循环神经网络会多一个维度——时间,我们必须根据时间及时更新权重。这就是为什么RNN中的这个过程称为时间反向传播。

《循环神经网络(RNN)》

上图与展开RNN的表示相同,增加了更多的附加信息。展开的RNN和标准神经网络差别不大,这就是为什么RNN中的反向传播算法和标准神经网络的差别不大。唯一的区别是因为RNN要在不同层之间共享参数,所以我们要将所有时间步长的梯度进行累加。如下图:

《循环神经网络(RNN)》

通常,整个数据序列被认为是一个训练样本。这很大程度上简化了这个问题,因为可以计算每个时间步长的误差,并计算全局误差(所有误差的总和)。可以注意到,各层是相互依赖的,使用随机梯度下降来计算梯度,并将这些信息传递到前一个时刻,并用它来计算误差和梯度,以此类推。这就是如何压缩时间维并使用反向传播算法来调整权重。

总结

循环神经网络是一种非常有用的工具,具有广泛的应用,比如各种语言建模和文本生成器,还有语音识别等。当与卷积神经网络相结合时,可以用来标记图像。

《循环神经网络(RNN)》

但是,循环神经网络有一个问题。在学习长期依赖关系时有困难,就是说目前的循环神经网络不能学到相隔步长太远的依赖关系。例如,在预测单词时,有时候需要更多的上下文信息。这个问题被称为梯度消失,它可以通过特殊类型的循环神经网络——LSTM来解决。后面我们将继续讨论LSTM。

欢迎持续关注我们微信公众号(geetest_jy),还可以添加技术助理微信“geetest1024”微信,一起交流进步!

《循环神经网络(RNN)》

    原文作者:GEETEST极验
    原文地址: https://www.jianshu.com/p/1b1cdca55c84
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注