前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【TS深度学习】递归神经网络

【TS深度学习】递归神经网络

作者头像
VachelHu
发布2021-07-28 17:44:18
7320
发布2021-07-28 17:44:18
举报
文章被收录于专栏:时序人

点击蓝字

关注我们

#TSer#

时间序列知识整理系列,持续更新中 ⛳️

赶紧后台回复"讨论"加入讨论组交流吧 ?

在前面的文章中,我们介绍了循环神经网络,它可以用来处理包含序列结构的信息。然而,对于诸如树结构、图结构等更复杂的结构,循环神经网络就无能为力了。本文介绍一种更为强大、复杂的神经网络:递归神经网络 (Recursive Neural Network, RNN),以及它的训练算法BPTS (Back Propagation Through Structure)。顾名思义,递归神经网络(巧合的是,它的缩写和循环神经网络一样,也是RNN)可以处理诸如树、图这样的递归结构

递归神经网络是啥

因为神经网络的输入层单元个数是固定的,因此必须用循环或者递归的方式来处理长度可变的输入。循环神经网络实现了前者,通过将长度不定的输入分割为等长度的小块,然后再依次输入到网络中,从而实现了神经网络对变长输入的处理。

一个典型的例子是,当我们处理一句话时,我们可以把一句话看作是词组成的序列,然后,每次向循环神经网络输入一个词,如此循环直至整句话输入完毕,循环神经网络将产生对应的输出。如此,我们就能处理任意长度的句子了。如下图所示:

然而,有时候把句子看做是词的序列是不够的,比如下面这句话『两个外语学院的学生』:

上图显示了这句话的两个不同的语法解析树。可以看出来这句话有歧义,不同的语法解析树则对应了不同的意思。一个是『两个外语学院的/学生』,也就是学生可能有许多,但他们来自于两所外语学校;另一个是『两个/外语学院的学生』,也就是只有两个学生,他们是外语学院的。为了能够让模型区分出两个不同的意思,我们的模型必须能够按照树结构去处理信息,而不是序列,这就是递归神经网络的作用。当面对按照树/图结构处理信息更有效的任务时,递归神经网络通常都会获得不错的结果。

递归神经网络可以把一个树/图结构信息编码为一个向量,也就是把信息映射到一个语义向量空间中。这个语义向量空间满足某类性质,比如语义相似的向量距离更近。也就是说,如果两句话(尽管内容不同)它的意思是相似的,那么把它们分别编码后的两个向量的距离也相近;反之,如果两句话的意思截然不同,那么编码后向量的距离则很远。如下图所示:

从上图我们可以看到,递归神经网络将所有的词、句都映射到一个2维向量空间中。句子『the country of my birth』和句子『the place where I was born』的意思是非常接近的,所以表示它们的两个向量在向量空间中的距离很近。另外两个词『Germany』和『France』因为表示的都是地点,它们的向量与上面两句话的向量的距离,就比另外两个表示时间的词『Monday』和『Tuesday』的向量的距离近得多。这样,通过向量的距离,就得到了一种语义的表示。

尽管递归神经网络具有更为强大的表示能力,但是在实际应用中并不太流行。其中一个主要原因是,递归神经网络的输入是树/图结构,而这种结构需要花费很多人工去标注。想象一下,如果我们用循环神经网络处理时间序列,那么我们可以直接把时间序列作为输入。然而,如果我们用递归神经网络处理时间序列,我们就必须把每个时间序列标注为结构化的形式,这无疑要花费非常大的精力。近年来,随着时间序列分析面向多维化发展,数据的之间关联属性越来越丰富,递归神经网络也迎来的新的发展。

我们已经基本了解了递归神经网络是做什么用的,接下来,我们将探讨它的算法细节。

递归神经网络的前向计算

接下来,我们详细介绍一下递归神经网络是如何处理树/图结构的信息的。在这里,我们以处理树型信息为例进行介绍。

递归神经网络的输入是两个子节点(也可以是多个),输出就是将这两个子节点编码后产生的父节点,父节点的维度和每个子节点是相同的。如下图所示:

C1和C2分别是表示两个子节点的向量,P是表示父节点的向量。子节点和父节点组成一个全连接神经网络,也就是子节点的每个神经元都和父节点的每个神经元两两相连。我们用矩阵表示这些连接上的权重,它的维度将是d X 2d,其中,d表示每个节点的维度。父节点的计算公式可以写成:

在上式中,tanh是激活函数(当然也可以用其它的激活函数),b是偏置项,它也是一个维度为d的向量。如果读过前面的文章,相信大家已经非常熟悉这些计算了,在此不做过多的解释了。

然后,我们把产生的父节点的向量和其他子节点的向量再次作为网络的输入,再次产生它们的父节点。如此递归下去,直至整棵树处理完毕。最终,我们将得到根节点的向量,我们可以认为它是对整棵树的表示,这样我们就实现了把树映射为一个向量。在下图中,我们使用递归神经网络处理一棵树,最终得到的向量P3,就是对整棵树的表示:

式1就是递归神经网络的前向计算算法。它和全连接神经网络的计算没有什么区别,只是在输入的过程中需要根据输入的树结构依次输入每个子节点。

需要特别注意的是,递归神经网络的权重W和偏置项b在所有的节点都是共享的。

递归神经网络的训练

递归神经网络的训练算法和循环神经网络类似,两者不同之处在于,前者需要将残从根节点反向传播到各个子节点,而后者是将残从当前时刻向传播到初始时刻。

下面,我们介绍适用于递归神经网络的训练算法,也就是BPTS算法。

01

误差项的传递

首先,我们先推导将误差从父节点传递到子节点的公式,如下图:

误差函数E定义为相对于父节加权输入的导数,即:

其中父节点的加权输入为:

在上面的公式中表示父节点p的第i个分量表子节点的第i个分量表子节点的第i个分量表示子节的第k个分量到父节点p的第i个分量的的权重。根据上面展开后的矩阵乘法形式,我们不难看出,对于子节来说,它会影响父节点所有的分量。因此,我们求误差函数E的导数时,必须用到全导数公式,也就是:

有了上式,我们就可以把它表示为矩阵形式,从而得到一个向量化表达:

上式看上去可能会让人晕菜,从下图,我们可以直观的看到底是啥。首先我们把W矩阵拆分为两个矩,如下图所示:

现在,我们是子节的加权输入是子节点c的激活函数,则:

这样,我们得到:

如果我们将不同子节对应的误差连接成一个向。那么,上式可以写成:

上式就是将误差项从父节点传递到其子节点的公式。注意,上式中也是将两个子节点的加权输入连在一起的向量。

有了传递一层的公式,我们就不难写出逐层传递的公式。

上图是在树型结构中反向传递误差项的全景图,反复应用式2,我们不难算出:

在上面的公式中表示取向属于节点p的部分。

02

权重梯度的计算

根据加权输入的计算公式:

其中表示第l层的父节点的加权输入表示第l层的子节点是权重矩阵是偏置项。将其展开可得:

那么,我们可以求得误差函数在第l层对权重的梯度为:

上式是针对一个权重的公式,现在需要把它扩展为对所有的权重项的公式。我们可以把上式写成矩阵的形式(在下面的公式中,m=2n):

式3就是第l层权重项的梯度计算公式。我们知道,由于权是在所有层共享的,所以和循环神经网络一样,递归神经网络的最终的权重梯度是各个层权重梯度之和。即:

接下来,我们求偏置的梯度计算公式。先计算误差函数对第l层偏置的梯度:

把上式扩展为矩阵的形式:

上式是第l层偏置项的梯度,那么最终的偏置项梯度是各个层偏置项梯度之和,即:

03

权重更新

如果使用梯度下降优化算法,那么权重更新公式为:

其中是学习速率常数。把式4带入到上式,即可完成权重的更新。同理,偏置项的更新公式为:

把式6带入到上式,即可完成偏置项的更新。

这就是递归神经网络的训练算法BPTS。由于我们有了前面几篇文章的基础,相信读者们理解BPTS算法也会比较容易。

小结

我们在系列文章中已经介绍了循环神经网络和递归神经网络,在训练时都使用了监督学习(Supervised Learning)作为训练方法。在监督学习中,每个训练样本既包括输入特征X,也包括标记Y,即样本

印象中,卷积神经网络擅长于处理图片类数据,近年来很多研究者们在探寻卷积网络在处理序列类数据的可能性,一种强大且可并行计算的网络,时序卷积网络(TCN),呼之欲出。下一章将和大家聊聊,这一强大且时髦的序列网络到底拥有什么样的魔力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 时序人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档