TCN时间卷积网络——解决LSTM的并发问题
TCN是指时间卷积网络,一种新型的可以用来解决时间序列预测的算法。在这一两年中已有多篇论文提出,但是普遍认为下篇论文是TCN的开端。
论文名称:
An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
作者:Shaojie Bai 1 J. Zico Kolter 2 Vladlen Koltun 3
自从TCN提出后引起了巨大反响,有人认为
时间卷积网络(TCN)将取代RNN成为NLP或者时序预测领域的王者。
William Vorhies给出的原因如下:
RNN耗时太长,由于网络一次只读取、解析输入文本中的一个单词(或字符),深度神经网络必须等前一个单词处理完,才能进行下一个单词的处理。这意味着 RNN 不能像 CNN 那样进行大规模并行处理。
并且TCN的实际结果也要优于RNN算法。
所以本教程未来几次更新将集中介绍TCN的算法含义与代码解读。
2
什么是TCN?
TCN中涉及到了最简单的CNN和RNN,此处暂不赘述。还涉及到了一维卷积,扩张卷积,因果卷积,残差卷积的跳层连接等其他知识点。为了能够更准确的了解,我们将结合论文逐步介绍每个部分。
一维卷积


以下图为例:图中的输入的数据维度为8,过滤器的维度为5。那么卷积后输出的数据维度为8−5+1=4
如果过滤器数量为1,输入数据的channel数量变为,即输入数据维度为8×32。这里channel的概念相当于自然语言处理中的embedding,而该输入数据代表8个单词,其中每个单词的词向量维度大小为32。在这种情况下,过滤器的维度由5变为5×32,最终输出的数据维度仍为4。
如果过滤器数量为n,那么输出的数据维度就变为4×n。
其实可以看出模型基本上与二维卷积相同,非常容易理解。
扩张卷积
扩张卷积与普通的卷积相比,除了卷积核的大小以外,还有一个扩张率(dilation rate)参数,主要用来表示扩张的大小。
扩张卷积与普通卷积的相同点在于,卷积核的大小是一样的,神经网络中的参数数量不变。
两者区别区别在于扩张卷积具有更大的感受野。感受野是卷积核在图像上看到的大小,例如3×3卷积核的感受野大小为9。
例如下图是普通卷积,卷积核的感受野为3×3=9。


例如下图是扩张卷积,卷积核的感受野为7×7=49


下次更新将介绍因果卷积,残差卷积的跳层连接,并结合论文讲解TCN。
TCN
上次初步介绍了TCN,时间卷积网络,一种新型的可以用来解决时间序列预测的算法。TCN中涉及到了一维卷积,扩张卷积,因果卷积,残差卷积的跳层连接等其他知识点。
每天三分钟之Pytorch编程-5:RNN的新对手TCN(1)
上次也介绍了一维卷积和扩张卷积。
需要补充的是扩张卷积的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。
下面来介绍因果卷积,残差卷积的跳层连接
因果卷积
因果卷积的理解可以认为是:不管是自然语言处理领域中的预测还是时序预测,都要求对时刻t 的预测yt只能通过t时刻之前的输入x1到xt-1来判别。这种思想有点类似于马尔科夫链。
残差卷积的跳层连接
微软的残差网络 ResNet 就是经典的跳层连接(skip-connection),如下图所示。


上一层的特征图 x 直接与卷积后的 F(x)对齐加和,变为 F(x)+x (特征图数量不够可用 0 特征补齐,特征图大小不一可用带步长卷积做下采样)。
这样在每层特征图中添加上一层的特征信息,可使网络更深,加快反馈与收敛。
但是 ResNet 也有明显的缺陷:无法证明把每一层特征图硬连接到下一层都是有用的;并且实验证明把 ResNet 变深,不如把 ResNet 变宽, 即到了一定深度,加深网络已经无法使 ResNet 准确度提升了(还不如把网络层像 Inception 那样变宽)。
全卷积网络
时间卷积网络也用到了全卷积网络,全卷积网络(FCN)是在下篇论文中提出的:
论文 : Fully Convolutional Networks for Semantic Segmentation
FCN与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类不同,FCN可以接受任意尺寸的输入,采用卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到与输入相同的尺寸,再进行预测。
TCN时间卷积网络
下面将介绍时间卷积网络中的一维卷积,扩张卷积,因果卷积,残差卷积的跳 层连接是如何体现的,以及之间的关联。


(a)图为空洞系数 d=1, 2, 4、卷积核大小 k=3 的扩张卷积,感受野能覆盖输入序列中的所有值。


上式即为扩张卷积的计算公式,d为扩展系数。


(b)为 TCN 残差块,当残差输入和输出有不同的维度,会往其中添加一个 1x1 的卷积。
(c)为 残差连接的示例,蓝线为残差函数中的卷积核,绿线为恒等映射。
TCN 的卷积层结合了扩张卷积与因果卷积两种结构。使用因果卷积的目的是为了保证前面时间步的预测不会使用未来的信息,因为时间步 t 的输出只会根据 t-1 及之前时间步上的卷积运算得出。
可以看出,TCN的卷积和普通的一维卷积非常类似,只不过最大的不同是用了扩张卷积,随着层数越多,卷积窗口越大,卷积窗口中的空孔会越多。
值得一提的是在 TCN 的残差模块内(即图b)有两层扩张卷积和 ReLU 非线性函数,且卷积核的权重都经过了权重归一化。此外TCN 在残差模块内的每个空洞卷积后都添加了 Dropout 以实现正则化。
论文中跳层连接时直接将下层的特征图跳层连接到上层,这样的话对应的通道数channel不一致,所以不能直接做加和操作,于是,为了两个层加和时特征图数量,即通道数数量相同,作者通过用1×1卷积进行元素合并来保证两个张量的形状相同。
总结来讲,时间卷积网络是:
同时用到一维因果卷积和扩张卷积作为标准卷积层,并将每两个这样的卷积层与恒等映射可以封装为一个残差模块(包含了relu函数)。再由残差模块堆叠起深度网络,并在最后几层使用全卷积层代替全连接层。
由于TCN涉及内容较多,所以本次更新简要介绍整体框架,下次将着重对其中部分细节解释,并开始详解代码。
TCN时间卷积网络——解决LSTM的并发问题的更多相关文章
- 时空卷积网络TCN
1.写在前面 实验表明,RNN 在几乎所有的序列问题上都有良好表现,包括语音/文本识别.机器翻译.手写体识别.序列数据分析(预测)等. 在实际应用中,RNN 在内部设计上存在一个严重的问题:由于网络一 ...
- 卷积网络训练太慢?Yann LeCun:已解决CIFAR-10,目标 ImageNet
原文连接:http://blog.kaggle.com/2014/12/22/convolutional-nets-and-cifar-10-an-interview-with-yan-lecun/ ...
- 基于TensorFlow解决手写数字识别的Softmax方法、多层卷积网络方法和前馈神经网络方法
一.基于TensorFlow的softmax回归模型解决手写字母识别问题 详细步骤如下: 1.加载MNIST数据: input_data.read_data_sets('MNIST_data',one ...
- 新手教程之:循环网络和LSTM指南 (A Beginner’s Guide to Recurrent Networks and LSTMs)
新手教程之:循环网络和LSTM指南 (A Beginner’s Guide to Recurrent Networks and LSTMs) 本文翻译自:http://deeplearning4j.o ...
- PRML读书会第五章 Neural Networks(神经网络、BP误差后向传播链式求导法则、正则化、卷积网络)
主讲人 网神 (新浪微博:@豆角茄子麻酱凉面) 网神(66707180) 18:55:06 那我们开始了啊,前面第3,4章讲了回归和分类问题,他们应用的主要限制是维度灾难问题.今天的第5章神经网络的内 ...
- keras搭建密集连接网络/卷积网络/循环网络
输入模式与网络架构间的对应关系: 向量数据:密集连接网络(Dense层) 图像数据:二维卷积神经网络 声音数据(比如波形):一维卷积神经网络(首选)或循环神经网络 文本数据:一维卷积神经网络(首选)或 ...
- OverFeat:基于卷积网络的集成识别、定位与检测
摘要:我们提出了一个使用卷积网络进行分类.定位和检测的集成框架.我们展示了如何在ConvNet中有效地实现多尺度和滑动窗口方法.我们还介绍了一种新的深度学习方法,通过学习预测对象边界来定位.然后通过边 ...
- 最全面的图卷积网络GCN的理解和详细推导,都在这里了!
目录 目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral doma ...
- ACNet:用于图像超分的非对称卷积网络
编辑:Happy 首发:AIWalker Paper:https://arxiv.org/abs/2103.13634 Code:https://github.com/hellloxiaotian/A ...
随机推荐
- Jmeter做压力测试
1)首先双击bin/jmeter.bat 2)创建Thread Group 3)配置HTTP Request 4)配置Aggregate Report 5)配置并发数和并发时间 6)点击绿色按钮,执行 ...
- python:时间格式转化
1.获取秒级时间戳与毫秒级时间戳.微秒级时间戳 import time import datetime t = time.time() print (t) #原始时间数据 print (int(t)) ...
- PHP ob_gzhandler的理解
PHP ob_gzhandler的理解那么对于我们这些没有开启mod_deflate模块的主机来说,就只能采用ob_gzhandler函数来压缩了,它的压缩效果和mod_deflate相比,相差很小, ...
- Keyboarding
题目描述 思路 一开始想先写一个bfs,目标字符串要加上一个'*',表示这是一个换行符,然后一个字母一个字母的找,每次重置一下vis数组,bfs返回的结果再加上1,表示要打印这个字母,结果第一个样例没 ...
- ETCD服务
ETCD 简介 ETCD是一个开源的.分布式的键值对数据存储系统,由Go语言实现,用于存储key-value键值对,同时不仅仅是存储,主要用途是提供共享配置及服务发现,使用Raft一致性算法来管理高度 ...
- delphi xe10 FMX 启动参数
关于 Delphi Xe10 FMX 启动参数 需要在启动窗口前来调用 也就是在bar文件修改 如果参数多可以用json来 uses system.SysUtils; var param: stri ...
- 配置linux命令行界面的 文件显示颜色
在linux命令行界面下使用ls命令时,有时会看见显示的文件会有不同的颜色,因为linux的文件没有后缀名这个概念(Windows系统中的文件会有后缀名,从而可以将文件标识为不同类型),显示不同的颜色 ...
- C# 历遍对象属性
今天有个网友问如何历遍对象的所有公共属性,并且生成XML.采用序列化方式的话比较简单,我写个手工解析的例子,这样能让初学者更加理解也比较灵活,记录一下吧或许会有人用到. 对象模型: public cl ...
- zbar android sdk源码编译
zbar,解析条码和二维码的又一利器,zbar代码是用c语言编写的,如果想在Android下使用zbar类库,就需要使用NDK将zbar编译成.so加载使用,zbar编译好的Android SDK可以 ...
- Python调用Matlab2014b引擎
用惯Python的你,是不是早已无法忍受matplotlib那丑陋无比的图以及蛋疼无比部署依赖? 当当当当,Matlab2014b的Python Engine API现已加入豪华午餐. 上次写了一篇文 ...