时域卷积网络(Temporal Convolutional Network,TCN)

本文详细介绍了TCN(时域卷积网络),包括因果卷积的单向特性、膨胀卷积解决长依赖问题、残差连接增强网络深度。探讨了其优点如并行处理、灵活感受野和梯度稳定性,以及在MNIST手写数字分类中的应用。同时提到了TCN的局限性,如迁移学习适应性和单向结构。

TCN基本结构

时域卷积网络(Temporal Convolutional Network,TCN)由Shaojie Bai et al.在2018年提出的,可以用于时序数据处理,详细内容请看论文

1.因果卷积(Causal Convolution)

causalConvolution

因果卷积如上图所示。对于上一层t时刻的值,只依赖于下一层t时刻及其之前的值。与传统的卷积神经网络的不同之处在于,因果卷积不能看到未来的数据,它是单向的结构,不是双向的。也就是说,先有前因,才能有后果,它是一种严格的时间约束模型,因此被称为因果卷积。

2.膨胀卷积(Dilated Convolution)

膨胀卷积(Dilated Convolution)也被称为空洞卷积

纯净的因果卷积仍然存在传统卷积神经网络的问题,即建模时间的长短受到卷积核大小的限制。 如果想获得更长的依赖关系,需要线性的堆叠许多层。 为了解决这个问题,研究人员提出了膨胀卷积,如下图所示。
dilatedConvolution

与传统卷积不同,膨胀卷积允许在卷积期间对输入进行间隔采样,并且采样率由图中的 d d d控制。 底层的 d = 1 d = 1 d=1表示在输入的过程中对每个点进行采样,中间层的 d = 2 d = 2 d=2表示在输入过程中对每2个点采样一次作为输入。 一般来说,层级越高,d的数值越大。 因此,膨胀卷积使有效窗口的大小随着层数呈指数型增长。 通过这种方法,卷积网络可以使用较少的层,就能获得大的感受野。

3.残差连接(Residual Connections)

残差连接被证明是训练深度网络的有效方法,它允许网络以跨层方式传输信息。

ResidualConnection

论文中构造了一个残差块来替换卷积层。 如上图所示,一个残差块包含两层卷积和非线性映射,并将WeightNorm和Dropout添加到每一层用来正则化网络。

TCN总结

优点

(1)并行性。当给定一个句子,TCN可以将并行处理句子,而不需要像RNN那样顺序的处理。

(2)灵活的感受野。TCN的感受野的大小由层数、卷积核大小、扩张系数确定。可以根据不同的任务不同的特点点进行灵活定制。

(3)梯度稳定。RNN经常存在梯度消失和梯度爆炸的问题,这主要是由于在不同时间段共享参数导致的。像传统的卷积神经网络一样,TCN也不存在梯度消失和梯度爆炸的问题。

(4)内存更低。RNN在使用时需要保存每一步的信息,这会占用大量的内存,TCN的卷积内核在一个层中共享,内存使用更低。

缺点

(1)TCN 在迁移学习方面可能没有那么强的适应性。这是因为在不同的领域,模型预测所需的历史信息量可能会有所不同。因此,在将一个模型从一个需要较少内存信息的问题迁移到一个需要较长内存的问题上时,TCN 的性能可能会很差,因为其感受野不够大。

(2)论文中描述的TCN仍然是单向结构。在诸如语音识别和语音合成等任务上,纯单向结构仍然非常有用。然而,大多数文本使用双向结构。TCN可以很容易扩展为双向结构,只需使用传统的卷积结构代替因果卷积即可。

(3)TCN毕竟是卷积神经网络的一种变体。虽然使用扩展卷积可以扩大感受野,但仍然受到限制。与Transformer相比,任意长度的相关信息都可以获取的特性仍然很差。TCN在文本中的应用还有待检验。

TCN应用

MINST手写数字分类

多个特征对应一个标签,即(xi1,xi2,xi3,…xin)-yi

本地环境:

Python 3.6
IDE:Pycharm

库版本:

keras 2.2.0
numpy  1.16.2
tensorflow  1.9.0

1.下载数据集

MINST数据集

2.创建TCN.py,输入如下代码

代码参考:Keras-based TCN

# TCN for minst data
from tensorflow.examples.tutorials.mnist import input_data
from keras.models import Model
from keras.layers import add, Input, Conv1D, Activation, Flatten, Dense


# Load data 载入数据
def read_data(path):
    mnist = input_data.read_data_sets(path, one_hot=True)
    train_x, train_y = mnist.train.images.reshape(-1, 28, 28), mnist.train.labels,
    valid_x, valid_y = mnist.validation.images.reshape(-1, 28, 28), mnist.validation.labels,
    test_x, test_y = mnist.test.images.reshape(-1, 28, 28), mnist.test.labels
    return train_x,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值