2018年人工智能十佳论文之一:TCN
论文地址:An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
项目地址:TCN的github链接
对于大多数 深度学习研究者而言,序列建模任务等价于RNN。但是最近的研究表明,在音频合成以及机器翻译等任务上,CNN的表现胜过RNN。对于新的序列建模任务,RNN还是CNN,该如何选择? 作者通过对用于RNN性能的标准任务来评估CNN的性能。结果证实,简单的CNN结构在不同的任务以及数据集上的性能优于LSTM这类典型的RNN模型。作者认为,应该重新考虑序列任务与RNN、CNN之间的联系,甚至是将CNN作为序列建模任务的起点。(作者在文中将其记做TCN)
近期的研究者发现,在音频合成、单词级语言建模以及机器翻译等任务上的性能精度高于传统认为的最优解决方案的LSTM以及GRU,作者思考CNN在序列建模上的成功是针对特定领域呢,还是它在所有序列建模任务上表现都很好?
作者设计一系列序列建模任务来评估,包含复调音乐建模、单词级和字符级语言建模任务以及压力测试任务等。结果表明。CNN架构它在音频处理领域的成功并不局限于这些领域。
除此之外,尽管循环神经网络具有长期记忆的能力,但是CNN架构(文中的TCN)表现出更加长期的记忆能力。
背景部分主要是讲 序列建模领域的研究进展,包括对RNN的改进,对LSTM的改进等等,到后来对LSTM加入卷积操作等等,这里不详谈。
我们首先描述卷积序列预测的一般架构。我们的目标是将卷积网络设计中的最佳实践提炼为一个简单的架构,它可以作为一个方便而强大的起点。我们将提出的体系结构称为时间卷积网络(TCN),并强调我们采用这个术语并不是作为一个真正的新体系结构的标签,而是作为一个简单的描述一系列体系结构的术语。TCNs的显著特点是:1)结构上的卷积是因果关系,即没有从未来到过去的信息泄漏;2)体系结构可以获取任意长度的序列,并将其映射到相同长度的输出序列,就像使用RNN一样。除此之外,我们强调如何构建非常长的有效历史规模(即通过结合非常深的网络(用剩余层增强)和膨胀的卷积,网络能够看到非常遥远的过去并做出预测
我们的体系结构借鉴了最近的卷积序列数据体系结构(van den Oord et al., 2016;Kalchbrenner等,2016;Dauphin等,2017;Gehring等人,2017a;例如,TCN比wavenet (van den Oord et al., 2016)简单得多(没有跨层的跳过连接、条件设置、上下文叠加或门控激活)。
与Dauphin等人(2017)的语言建模体系结构相比,TCNs不使用门控机制,内存更长。
对于某一个输入序列{ X 0 , X 1 , X 3 , . . . , X t − 1 , X t , X t + 1 , X t + 2 {X_0,X_1,X_3,...,X_{t-1},X_t,X_{t+1},X_{t+2}} X0,X1,X3,...,Xt−1,Xt,Xt+1,Xt+2},希望预测一些相应的输出{ Y 0 , Y 1 , Y 2 , . . . , Y t − 1 , Y t , Y t + 1 , Y t + 2 Y_0,Y_1,Y_2,...,Y_{t-1},Y_t,Y_{t+1},Y_{t+2} Y0,Y1,Y2,...,Yt−1,Yt,Yt+1,Yt+2}。如果我们将这样一个问题试做序列问题,其中最关键的一点是,假如要预测 t t t时刻的输出,那么我们只能使用 t t t时刻之前的记录作为输入,如{ X 0 , X 1 , X 3 , . . . , X t − 1 , X t {X_0,X_1,X_3,...,X_{t-1},X_t} X0,X1,X3,...,Xt−1,Xt},也就是找到一个从输入到输出的映射,表示如下:
对于每个时刻的输出,都计算与真实值之间的差异,并且尽可能的减少这个差异,也即最小化这个损失函数:
上述的模型类似于自回归预测,但是不同于机器翻译等问题,因为在机器翻译、机器推理等问题中,均以所有时刻的取值作为输入。
文中的做法是:
因果卷积只是个叫法,保证t时刻的输出只与前一层t时刻以及更早的元素进行卷积。(我感觉就是传统的卷积操作)
回顾一下以前模型中VGG里面说2个3 * 3
的filter
等价于一个5 * 5
的filter
、3个3 * 3
的filter
等价于一个7*7
的filter
。假如这3个filter相邻,最后得到的感受野大小即是7 * 7
,计算公式是:receptive field = (filter_size -1) * num+1 = (3-1)*3+1
但这种做法存在的问题是,如果整个网络需要记录非常多的信息,那么势必会导致网络模型的深度急剧增加。为此作者的做法是使用Dilated Convolution。
一个简单的因果卷积只能用网络深度的线性大小来回顾历史。这使得将上述因果卷积应用于序列任务非常困难,特别是对于需要长期记忆的问题,如机器翻译、逻辑推理等。
作者的做法是采用dilated convolution
,又称膨胀卷积、空洞卷积
,下称膨胀卷积
,能够以指数形式增加感受野,对于一维的输入序列 X X X、卷积核 f : f: f:{ 0 , 1 , 2 , . . . , k − 1 {0,1,2,...,k-1} 0,1,2,...,k−1},膨胀卷积操作可表示为:
其中d
是膨胀系数,k
是卷积核大小, X s − d ⋅ i X_{s-d·i} Xs−d⋅i代表过去的数据。
看公式看不太明白,在文末解释dilated convlution
ResNet
中的快速通道使得模型学习差异信息,这一点在深层网络中十分有效且十分必要。p
这有效地允许层学习对标识映射的修改,而不是整个转换,这已多次被证明有利于非常深入的网络。对于本文中的TCN模型,如果想要使模型记录非常多的历史信息,就要求模型最后的感受野足够的大,感受野大小又依赖于网络深度、滤波器大小以及扩张系数。例如预测可能依赖于 2 12 2^{12} 212的历史记录以及高纬度的输入序列,那么则需要多大12层的网络,所以TCN采用了ResNet
构架。
其中包含每一个Residual block模块包含两层Dilated conv,ReLU
,BN操作采用weight normalization
,此外在激活函数之后还使用spatial dropout
。
而对于ResNet
中可能存在的输入输出的长度不一致时,增加了1*1 conv
以确保元素内积得到同样大小的tensor。
TCN包含以下优点:
同样的TCN也有以下两个缺点:
包含如下模型序列任务:
实验中所使用的扩张系数为 d = 2 i d=2^i d=2i,其中 i i i是第 i i i层。模型中使用Adam optimizer
并且设置learning rate=0.002
实验结果表明,TCN模型的性能明显优于LSTMs和GRUs等一般的递归体系结构。并且针对于卷积神经网络与循环神经网络的长期记忆能力,在实际应用中,RNN的无限记忆的优势并不存在。与之相比,相同大小的TCN模型表现出更加出色的长期记忆。
传统的卷积操作存在一些缺点,较为著名的是 up-sampling 和 pooling layer 。
主要包含:
想了想,这里还是另起一篇文章系统讲述卷积、反卷积、空洞卷积。