1 TCN的简单介绍
时间卷积网络(TCN)是由Shaojie Bai, J. Zico Kolter, Vladlen Koltun等学者于2018年在论文《An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling》(论文链接:TCN论文)所提出的序列建模模型。
在当时大家都把序列建模这件事与RNN当做是同一样东西,但是作者建立了一种通用的卷积模型(TCN)达成了RNN的效果并且比RNN更好,同时它结合了CNN并行性优点以及RNN长期依赖的优点。CNN的并行性也就是CNN在处理多通道时不论多少个通道,卷积核的计算是同时进行的,他不会依次进行;而在RNN中它的输出就是要求前面时刻的输出要作为此时刻的输入,也就是说此时刻的计算必须要之前时刻都计算完成了才能进行,这就弥补了RNN的缺点。而RNN的长期依赖也就是,RNN的每个输出的计算都包含了之前时刻的特征才进行计算的,而CNN是没有这样的特点的,所以说TCN相当于用CNN卷积的方式来做了RNN的事情,从而在某些方面达到了更好的效果。
2 TCN模型的两部分
在论文中,作者把TCN模型分成了两部分进行讲解,一部分叫做扩张因果卷积,一部分叫做残差块。如下图:
图中的(a)代表了扩张因果卷积,(b)代表了残差块,而©就是作者根据扩张因果卷积和残差块一起做了一个实例图。那我们接下来就分别来详细讲解一下这两部分。
2.1 扩张因果卷积
对于扩张因果卷积这部分而言,我觉得可以拆分开来:扩展、因果这是两种事情,那我们就分来开讲。
2.1.1 因果
(1)为什么要用因果?
对于因果而言,我们首先要了解到我们为什么要使用因果这个操作:序列建模任务的核心特性——假设我们有输入序列X0,X1,…Xt,并希望在每个时间点预测出对应的输出Y0,Y1,…Yt,关键约束在于,预测某个时间点t的输出Yt时,我们只能利用此前观察到的X0,X1,…,Xt。若是想要满足这样的因果性约束:Yt只依赖于X0,…Xt,而不依赖于任何未来的输入Xt+1,…XT。所以在序列建模的学习任务就是,找到网络F,使得最小化实际输出与预测值间的预期损失。
(2)如何使用因果?
在标准的卷积操作中,每个输出值都基于其周围的输入值,包括未来的时间点。但在因果卷积中,权重仅应用于当前和过去的输入值,确保了信息流的方向性,避免了未来信息泄露到当前输出中。为了实现这一点,通常会在卷积核的右侧填充零(称为因果填充),这样只有当前和过去的信息被用于计算输出。下面就是有关因果计算的公式以及我所举的实际计算例子: