【论文阅读】An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling

1.摘要

一般而言,序列模型与循环网络(recurrent networks)关系紧密(由于RNN的循环自回归结构能较好地表达出时间序列)。而传统的卷积网络(convolutional networks)由于卷积核大小的限制,对于长时间的依赖信息不能较好地抓取。

但是,研究发现,一些特殊的卷积神经网络模型在音频合成、机器翻译等任务上效果比递归神经网络更好。那么,对于一个新的任务,怎么选取网络结构呢?

本文使用大量数据集对模型进行评估,发现简单的卷积结构在数据集的表现优于典型的循环网络(如LSTMs),并且表现出更长的有效记忆(effective memory)。

本文得到结论:循环网络和序列模型之间的关联应该被重新考虑;卷积网络是序列模型任务的自然出发点(natural starting point)。

2.知识补充

2.1时间序列

对于\{x_0,x_1,...,x_T\}输入的序列,希望预测每一时刻对应的输出\{y_0,y_1,...,y_T\};从而产生映射f:x^{T+1}->y^{T+1},其中\hat{y}是对应值,需要满足因果约束

\hat{y}仅由\{x_{0},x_{1},...,x_{t}\}决定,而不由\{x_{t+1},...,x_{T}\}决定。

学习目标:找到网络f,使得实际输出与预测之间的损失函数\{L(y_0,y_1,...,y_T,f(x_0,...,x_T))\}最小

2.2神经网络概述

基本神经网络包含:输入层、隐含层、输出层。各层之间使用权值连接,激活函数控制输出,神经网络通过学习得到各层之间的权值。

2.3 经典循环网络(RNN,LSTM,GRU)

2.3.1 RNN循环神经网络(Recurrent Neural Network)

区别于原始全连接神经网络图(如下)中,每一层之间都是相互独立的;同一层内的每个节点又是相互独立的。即每次输入与前面的输入是无关的,不能较好地处理序列信息。

在这里插入图片描述

RNN是用于处理序列数据的神经网络。基本结构图如下

在这里插入图片描述这里写图片描述

而循环神经网络,如果忽略隐藏层中的w,则与全连接神经网络结构是一致的,RNN只是在此基础上加入了一个循环的结构。循环层W按时间线展开后,得到如下输入与权重:

U是输入层到隐藏层的权重矩阵,V是隐藏层到输出层的权重矩阵,W是上一时刻的隐藏层的值传入到下一时刻的隐藏层时的权重矩阵。
Xt是t时刻的输入,是一个(x0,x1,x2…xn)的向量;St是t时刻的隐藏层的值;Ot是t时刻RNN网络的输出。网络在t时刻接受了输入Xt之后,隐藏层的值是St,输出的值是Ot。

但是St并不单单只是由Xt决定,还与t-1时刻的隐藏层的值St-1有关。所以在RNN网络中特有的循环操作是:

每个时刻t计算对应隐藏层的值,并且将该隐藏层的值传到下一时刻,实现了信息传递

注意:在同一层隐藏层中,存在参数共享:即不同时刻的W,V,U对应的值都分别相等。
可能原因:X{t-1},X{t},X{t+1}表示不同时刻的输入,但是组合在一起形成一个矩阵同时输入网络的,然后这个矩阵再通过权重矩阵U的变化。

RNN的激活函数通常是非线性的,例如,tanh or ReLU 函数。利弊分析:

tanh函数的导数始终小于1,把众多小于1的数连乘,会出现梯度消失的情况,但tanh比sigmoid函数梯度较大,收敛速度更快且引起梯度消失更慢。
ReLU函数能解决梯度消失,但是会引入梯度爆炸;但设定合适的阈值可以解决这个问题。

在这里插入图片描述

在这里插入图片描述

RNN的缺陷:当相关信息与需要信息的位置之间的距离非常大时,RNN变得无法连接相关信息。 

这种缺陷可以通过使重复模块变得复杂解决,从而得到RNN的特殊形式:LSTM 

2.3.2 LSTM长短期记忆网络(Long Short Term Memory networks)

LSTM是RNN的一种特殊形式,特点是能够学习长距离依赖关系。

所有循环神经网络都具有神经网络重复模块链的形式。在标准RNN中,这个重复模块具有非常简单的结构,例如单个tanh层LSTM也有这样的链式结构,重复模块包含四个交互层。

在上面的图中,一条线包含一个完整的向量,从一个节点的输出到另一个节点的输入。粉色圆圈表示对应元素操作,如向量加法,而黄色框是神经网络层。合并的线表示拼接,而分叉线表示其内容被复制,副本将流转到不同的位置。

在这里插入图片描述

 LSTM由三个门控制信息传递状态,红色方框对应忘记门,绿色方框对应输入门,紫色方框对应输出门。这三个门中一共包含3个sigmoid函数和2个tanh函数。

使用sigmoid函数的原因是sigmoid函数能够将输入映射到[0,1]空间中,可以根据映射之后的概率对于上一时刻传递的信息进行有选择的去除、保留和输出。sigmoid函数的值为1(门的全开状态),则代表所有的信息都被保留,sigmoid函数为0(门的全闭状态),则代表所有的信息都不被保留。

使用tanh函数是为了对数据进行处理,映射到[-1,1]的空间,当然也可以使用其他的激活函数,有研究表明在LSTM层数比较少的时候使用tanh比ReLU效果好。

各门的具体计算公式略。

LSTM可以环节梯度消失问题,LSTM需要训练的参数多,Wf,Wi,Wo,Wc,bf,bi,bo,bc,V9个参数。

2.3.3 GRU(Gate Recurrent Unit)

LSTM是RNN的一种特殊形式,特点是能够学习长距离依赖关系。

在这里插入图片描述

 原理与LSTM基本类似,有重置门、更新门。

RNN缺点:T时刻的计算依赖T-1时刻的隐层计算结果,而T-1时刻的计算依赖T-2时刻的隐层计算结果……..形成了序列依赖关系。只能先把第1时间步的算完,才能算第2时间步的结果,这就导致RNN无法并行计算的,只能按着时间步诸葛往后走。

2.4 CNN(Convolutional Nerual Network)

CNN网络结构图如下:包括输入层intput layer、卷积层CONV layer、激励层ReLU layer、池化层Pooling layer、全连接层FNN layer

在这里插入图片描述

 2.4.1输入层

目前CNN被广泛运用于计算机视觉中,因此大部分人都直接把CNN的输入层输入的数据默认为是3维数据,即平面上的二维像素点和RGB通道。

在这里插入图片描述

例如上图一张彩色图片由三张二维图片构成,每一张二维的图片又被称作是一个feature map,这里有三个feature map,输入的数据就是 6 x 6 x 3

在输入层需要对原始数据进行预处理,常见的方法有:

去均值:RGB三个维度上的数据,每一个数据点都减去他们所在维度的均值就行了

归一化:在去均值的基础上再除以一个标准差

原因:去均值和归一化都有一个很重要的原因就是可以加快梯度下降训练迭代速度,加速达到收敛

2.4.2卷积层

卷积核
卷积核有长宽深三个维度,长和宽都是人为指定的,一般常用3x3,5x5,深是输入卷积层的feature map的数量,例如输入卷积层的数据为 6x6x3 ,那么卷积核的维度可以是 3x3x3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1p1ewt7-1582742417130)(/Users/liyehong/Library/Application Support/typora-user-images/image-20200226063759963.png)]

每一张feature map 对应一张 kernel ,根据卷积核的长宽在feature map 上选定滑动窗口,然后窗口中与卷积核对应位置的数字相乘然后相加求和(如果有偏置项还要加上偏置)就得到了该滑动窗口卷积之后的结果,计算公式见图右上角。

计算完后滑动窗口向右滑动,一般滑动1,2格,也就是步长 stride,滑动得太多的话可能导致信息丢失。滑动到位置后,继续按上面步骤卷积计算下一个值。滑动到最右端无法再滑动时返回到起始侧然后向下滑动步长。

假如feature map 5x5,而设定的卷积核是2x2,每次移动步长=2,那么最后一列就取不到了?这个时候可以进行填充,padding将feature map 填充成6x6,这样就能全部取到了,这里填充全部采用0填充,不会影响卷积计算结果。

最终,将三个feature map计算得到的值相加。得到的对应的output feature map中的值,有多少个卷积核就对应着生成多少个output feature map,output feature map 又可以作为下一层卷积层的feature map输入。

2.4.3 ReLU激励层

需要对于卷积的结果进行一个非线性函数的映射,CNN一般选用ReLU激活函数,

优点:

1.解决了梯度消失的问题(在正区间)

2.计算速度快(只需要判断输入是否是大于0)

3.收敛速度快

2.4.4池化层

池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减少了一些不必要的噪音,减小过拟合。池化层主要使用两种方法:Max pooling 和 average pooling

Max pooling:各个2x2颜色区块内取最大值

average pooling:各个2x2颜色区块取均值

2.4.5全连接层

全连接层就是全连接神经网络

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9XSCBZZ-1582742417144)(/Users/liyehong/Library/Application Support/typora-user-images/image-20200226082848439.png)]

3.TCN

3.1一维卷积网络

一维卷积网络以一个三维张量作为输入,也输出一个三维张量。我们的TCN实现的输入张量具有形状(batch_size、input_length、input_size),输出张量具有形状(batch_size、input_length、output_size)。由于TCN中的每一层都有相同的输入和输出长度,所以只有输入和输出张量的第三维是不同的。在单变量情况下,input_size和output_size都等于1。在更一般的多变量情况下,input_size和output_size可能不同,因为我们可能不希望预测输入序列的每个组件。

单个1D卷积层接收一个shape的输入张量(batch_size, input_length, nr_input_channels)并输出一个shape张量(batch_size, input_length, nr_output_channels)。为了了解单个层如何将其输入转换为输出,让我们看一下批处理的一个元素(对批处理中的每个元素都进行相同的处理)。让我们从最简单的例子开始,其中nr_input_channels和nr_output_channels都等于1。在这种情况下,我们看到的是一维输入和输出张量。下图显示了输出张量的一个元素是如何计算的。

我们可以看到,要计算输出的一个元素,我们需要查看输入的一系列长度为kernel_size的连续元素。在上面的例子中,我们选择了一个3的kernel_size。为了得到输出,我们取输入的子序列和相同长度的已学习权值的核向量的点积。输出的下一个元素,相同的应用程序,但kernel_size-sized窗口的输入序列是由一个元素转移到正确的(对于本预测模型,stride 总是设置为1)。请注意,相同的一组内核权重将被用来计算每输出一个卷积层。下图显示了两个连续的输出元素及其各自的输入子序列。

为了使可视化更简单,与核向量的点积不再显示,而是对每个具有相同核权重的输出元素发生。

为了确保输出序列与输入序列具有相同的长度,将应用一些零填充。这意味着在输入张量的开始或结束处添加额外的零值项,以确保输出具有所需的长度。后面的部分将详细解释如何做到这一点。

现在让我们看看有多个输入通道的情况,即nr_input_channels大于1。在本例中,上述过程对每个单独的输入通道都重复,但每次都使用不同的内核。这将导致nr_input_channels中间输出向量和kernel_size * nr_input_channels的一些内核权重。然后将所有中间输出向量相加,得到最终输出向量。在某种意义上,这相当于与一个形状的输入张量(input_size, nr_input_channels)和一个形状的内核张量(kernel_size, nr_input_channels)进行2D卷积,如下图所示。它仍然是一维的因为窗口只沿着一个轴移动,但是我们在每一步都有一个二维卷积因为我们使用的是一个二维核矩阵。

对于本例,我们选择nr_input_channels等于2。现在,我们使用nr_input_channels by kernel_size内核矩阵沿着nr_input_channels宽系列长度input_length来代替在一维输入序列上滑动的核向量。

如果nr_input_channels和nr_output_channels都大于1,那么对每个具有不同内核矩阵的输出通道重复上述过程。然后将输出向量堆叠在一起,得到一个形状的输出张量(input_length, nr_output_channels)。本例中的内核权重数等于kernel_sizenr_input_channelsnr_output_channels。

nr_input_channels和nr_output_channels这两个变量取决于该层在网络中的位置。第一层是nr_input_channels = input_size,最后一层是nr_output_channels = output_size。所有其他层将使用由num_filters提供的中间通道号。

3.2因果卷积

因果卷积

对于{0,…,input_length - 1}中的每一个i,输出序列的第i个元素可能只依赖于{0,…,i}的输入序列中的元素(RNN?)。为了确保一个输出张量与输入张量具有相同的长度,我们需要进行零填充。如果我们只在输入张量的左侧填充零,那么就可以保证因果卷积(类似CNN中的操作)。

和传统的卷积神经网络的不同之处在于,因果卷积不能看到未来的数据,它是单向的结构,不是双向的。只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此被成为因果卷积。

预测模型的一种理想质量输出中特定条目的值取决于输入中所有先前的条目,即索引小于或等于其自身的所有条目。当接受野(指影响输出的特定条目的原始输入的一组条目)的大小为input_length时,就可以实现这一点。我们也称其为“完整的历史记录”。

一个传统的卷积层在输出中创建一个依赖于输入的kernel_size项的条目,这些条目的索引小于或等于它自己。例如,如果我们的kernel_size为3,那么输出中的第5个元素将依赖于输入中的元素3、4和5。当我们将多个层叠加在一起时,这个范围就会扩大。

在下面的图中我们可以看到,通过kernel_size 3叠加两层,我们得到的接受野大小为5。

这意味着,kernel_size固定,完整的历史覆盖所需的层数是线性的输入长度的张量。即如果要考虑时间跨度比较大的变量x,那么卷积层数就必须增加。

这将导致网络变得非常深非常快,导致模型与大量的参数需要更长的时间来训练。大量的层会导致损失函数梯度退化。在保持层数相对较小的情况下,增加感受野大小的一种方法是向卷积网络引入膨胀概念。

3.3 膨胀卷积(Dilated Convolution)

膨胀卷积d=1,2,4,8

卷积层中的膨胀是指输入序列的元素之间的距离,该元素用于计算输出序列的一个条目。

传统的卷积层可以看作是dilated为1的扩散层,因为1个输出值的输入元素是相邻的。

下图是一个dilated为2的扩散层,其input_length为4,kernel_size为3。

 与dilated=1扩散的情况相比,该层的接收场沿5而不是3的长度扩展。

更普遍地,具有内核大小k的d扩散层的接收场沿1 + d的长度扩展。如果d是固定的,那么仍然需要输入张量的长度为线性的数字才能实现完全的接收场覆盖(我们只是减小了常数)。

这个问题可以通过在层中向上移动时d的值呈指数增加来解决。 为此,我们选择一个常数dilation_base整数b,它将使我们根据其下的层数i来计算特定层的膨胀d。 下图显示了一个网络,其中input_length为10,kernel_size为3,dilation_base为2,这将导致3个膨胀的卷积层完全覆盖。

这里我们只显示影响输出最后一个值的输入的影响。同样,只显示最后一个输出值所必需的补零项。显然,最后的输出值依赖于整个输入覆盖率。实际上,给定超参数,input_length最多可以使用15,同时保持完全的接收野覆盖。

 然而,根据b和k的值,这个接受野可能会有“洞”。考虑以下网络,其dilation_base为3,内核大小为2:

 

接受野的范围确实大于输入的大小(即15)。然而,接受野是有洞的;也就是说,在输入序列中有输出值不依赖的条目(如上面红色所示)。为了解决这个问题,我们需要将内核大小增加到3,或者将膨胀基数减小到2。一般来说,对于没有孔的感受野,核的大小k至少要与膨胀基b一样大。

考虑到这些观察结果,我们可以计算出我们的网络需要多少层才能覆盖整个历史。给定核大小k,膨胀基b,其中k≥b,输入长度l,为了实现全历史覆盖,必须满足以下不等式:

 我们可以求解n,得到所需的最小层数

 

我们可以看到,在输入长度方面,层数现在是对数的,而不是线性的。这是一个显著的改进,可以在不牺牲接受野覆盖率的情况下实现。

现在,唯一需要指定的是每一层所需的零填充项的数量。假设膨胀基为b,核大小为k,当前层以下有i个层,则当前层所需的补零项数p计算如下:

3.4预测

到目前为止,我们只讨论了‘输入序列’和‘输出序列’,而没有深入了解它们之间是如何相互关联的。在预测方面,我们希望预测未来时间序列的下一个条目。

为了训练我们的TCN网络进行预测,训练集将由给定时间序列的等大小子序列对(输入序列、目标序列)组成。目标序列将是相对于其各自的输入序列向前移动一定数量output_length的序列。这意味着长度input_length的目标序列包含其各自输入序列的最后(input_length - output_length)元素作为第一个元素,位于输入序列最后一个条目之后的output_length元素作为它的最后一个元素。在预测方面,这意味着该模型所能预测的最大预测视界等于output_length。使用滑动窗口的方法,许多重叠的输入和目标序列可以创建出一个时间序列。

 基本的TCN网络如上

3.5 残差连接(Residual Connections)

将模型的基本构建块从简单的一维因果卷积层,改为由相同膨胀因子和残差连接的2层组成的残差块。

让我们从基本模型中考虑一个膨胀系数d为2、内核大小k为3的层,看看这是如何转化为改进模型的剩余块的。

这两个卷积层的输出将被添加到残差块的输入中,从而产生下一个块的输入。对于网络的所有内部块,即除了第一个和最后一个之外的所有内部块,输入和输出通道宽度是相同的,即num_filters。由于第一个残块的第一卷积层和最后一个残块的第二卷积层可能有不同的输入和输出通道宽度,所以可能需要调整残差张量的宽度,这是通过1x1卷积来完成的

此更改会影响对完整覆盖所需的最小层数的计算。现在我们必须考虑需要多少残差块才能实现接收域的完全覆盖。在TCN中添加一个残差块所增加的接受野宽度是添加一个基本因果层时的两倍,因为它包含两个这样的层。

通过简单的残差连接,一定程度上消除了深度网络部分梯度消失和爆炸的影响。并且残差连接被证明是训练深层网络的有效方法,它使得网络可以以跨层的方式传递信息。论文构建了一个残差块,由于防止出现输入处理过程中出现维度变化,或者是为原始数据增加权重,增加训练参数。如上图所示,一个残差块包含两层的卷积和非线性映射,在每层中还加入了WeightNorm和Dropout来正则化网络。
 

在这里插入图片描述

3.6最终的TCN模型

为了使我们的TCN不仅仅是一个过于复杂的线性回归模型,需要在卷积层的顶部添加激活函数来引入非线性。ReLU激活被添加到两个卷积层之后的残差块中。

为了规范化隐含层的输入(抵消了梯度爆发的问题),权值规范化应用于每一个卷积层。

为了防止过拟合,在每个剩余块的每个卷积层之后通过dropout引入正则化。下图为最终的模型

 

 4.TCN优劣分析

通过网络图可知,TCN感受野可控,并且结构简单,速度更快。

4.1优势

1.并行性。区别于RNN,需要等前一部分完成才能够进行下一步。TCN可以并行处理。
2.感受野灵活。TCN的感受野的大小受层数、卷积核大小、扩张系数等决定。可以根据不同的任务不同的特性灵活调整参数进而控制感受野。
3.梯度稳定。RNN经常存在梯度消失和梯度爆炸的问题,这主要是由同一层内不同时间段上共用参数导致的,而TCN不太存在梯度消失和爆炸问题。
4.内存更低。RNN在使用时需要将每步的信息都保存下来,TCN一层里面卷积核是共享的。

4.2缺点

1.TCN 在迁移学习方面没有那么强的适应能力。这是因为在不同的领域,模型预测所需要的历史信息量可能是不同的。因此,在将一个模型从一个对记忆信息需求量少的问题迁移到一个需要更长记忆的问题上时,TCN 可能会表现得很差,因为其感受野不够大
2.TCN是一种单向的结构,如果需要将TCN扩展成双向的结构,将因果卷积改为传统的卷积结构
3.TCN是卷积神经网络的变种,虽然使用膨胀卷积可以扩大感受野,但是仍然受到限制,不一定能够抓取到任意长度的相关信息。

4.在TSF问题的应用上,由于时间序列是一种特殊类型的序列数据。时间序列数据的下采样往往会保留数据中的大部分信息,而对于文本序列、DNA序列等一般序列数据则不然。 而现有的 TSF 工作只是简单地应用通用序列模型,而不考虑时间序列的独特属性。

5.在TSF问题中,TCN的因果卷积不是必需的,并且可以通过消除因果卷积的约束来实现更好的预测精度。(因为面对时间跨度比较大的变量x时,卷积层数增加。卷积层数的增加会带来梯度消失,训练复杂,拟合效果不好的问题。)

参考

​​​​​​RNN_机器学习/NLP/搜广推/算法开发工程/大数据-CSDN博客_rnn

史上最小白之LSTM 与 GRU详解_Tink1995的博客-CSDN博客_gru与lstm的区别

TCN论文及代码解读总结_我是chios的博客-CSDN博客_tcn代码

An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling (provenclei.github.io)

时域卷积网络TCN详解:使用卷积进行序列建模和预测_deephub-CSDN博客_tcn时间序列预测

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值