深度学习 – 循环神经网络介绍

循环神经网络在语音识别、生成图像描述、音乐合成和机器翻译等领域有着广泛的应用。

为什么需要循环神经网络?

前面章节介绍过图像分类的场景,训练卷积神经网络,对各种动物图片进行分类,输入一张动物图片,给出判断是什么动物。这类场景,各次处理之间是相互独立的。

如下图所示,神经网络处理了2次图片,t-1时刻处理了狗的图片,t时刻处理了大象图片,这2次处理相互独立,互不干扰。

图

但是,有时候我们需要获取以前的处理结果,才能进行当前处理。

这就好像读一本小说,要明白当前章节的情节,需要看过前面章节。

图

这种场景,就需要使用循环神经网络。

循环神经网络

循环神经网络(RNN)是一种常用的人工神经网络,通常用于处理序列数据,序列数据是相互依赖的(有限或无限)数据流,比如时间序列数据、信息性的字符串、对话等。

下图是一个简单的循环神经网络,它由输入层,一个隐藏层和一个输出层组成:

图

如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。

  • x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);
  • s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);
  • U是输入层到隐藏层的权重矩阵;
  • o也是一个向量,它表示输出层的值;
  • V是隐藏层到输出层的权重矩阵。

那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重。

如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:

图

现在看上去就比较清楚了,这个网络在t时刻接收到输入Xt之后,隐藏层的值是St,输出值是Ot。关键一点是,St的值不仅仅取决于Xt,还取决于St-1。

我们可以用下面的公式来表示循环神经网络的计算方法:

O_t = g(Vs_t) \tag{式1}

S_t = f(Ux_t + Ws_{t-1}) \tag{式2}

式1是输出层的计算公式,输出层是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连。V是输出层的权重矩阵,g是激活函数。

式2是隐藏层的计算公式,它是循环层。U是输入x的权重矩阵,W是上一次的值St-1作为这一次的输入的权重矩阵,f是激活函数。

从上面的公式我们可以看出,循环层和全连接层的区别就是循环层多了一个权重矩阵 W。

如果反复把式2代入到式1,我们将得到:

\begin{aligned} O_t &= g(Vs_t)\\ &= Vf(Ux_t + Ws_{t-1})\\ &= Vf(Ux_t + Wf(Ux_{t-1} + Ws_{t-2}))\\ &= Vf(Ux_t + Wf(Ux_{t-1} + Wf(Ux_{t-2} + …)))\\ \end{aligned}

从上面可以看出,循环神经网络的输出值,是受前面历次输入值Ot,是受前面历次输入值Xt,Xt-1,Xt-2,Xt-3,….影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。



浙ICP备17015664号-1 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载