TCN(Temporal Convolutional Networks)详解

偶然的机会接触到TCN这个模型,然后就自己学习了一下并尝试实现了一下,今天根据自己的理解和认识在这里总结一下,文章最后有完整的模型结构代码。

目录

1 TCN 概况

1.1 对比 RNN 的区别

RNN 的优点:

RNN 的缺点:

TCN 的优点:

TCN 的缺点:

1.2 TCN 特点

2 TCN 结构

2.1 1D 卷积

一维 full 卷积

一维 same 卷积

一维 Valid 卷积

 2.2 因果卷积(Causal Convolution)

2.3 膨胀卷积(Dilated Convolution)

2.4 残差链接(Residual Connections)

3 模型对比结果

3.1 代码示例

1 TCN 概况

TCN 是时域卷积网络(Temporal Convolutional Network)的简称。

1.1 对比 RNN 的区别

到目前为止,深度学习背景下的序列建模主题主要与递归神经网络架构(如 LSTM 和 GRU)有关。在许多任务中,卷积网络可以取得比 RNNs 更好的性能,同时避免了递 归模型的常见缺陷,如梯度爆炸/消失问题。

RNN 的优点:

建模长期依赖关系:由于循环连接的存在,RNN 可以很好地捕捉序列中的长期依 赖关系。它可以通过将过去的信息保持在隐藏状态中来传递上下文信息。

动态长度处理:RNN 能够处理变长的序列数据,适应输入序列长度的变化。 自然地处理时间:由于 RNN 的循环性质,它天然适应处理时间序列数据。

RNN 的缺点:

难以并行化计算:由于 RNN 在每个时间步骤上依赖前一个时间步骤的输出,导致 计算难以并行化,限制了其在大规模数据上的训练和推理效率。

梯度消失和梯度爆炸问题:在训练中,RNN 的梯度信息在传播过程中可能会出现 梯度消失或梯度爆炸的问题,这会导致训练的不稳定性。

TCN 的优点:

可并行化计算:TCN 采用卷积操作,可以进行高效的并行计算,充分利用现代硬 件加速能力,适用于大规模数据处理。

捕捉局部依赖关系:TCN 通过堆叠卷积层并增大卷积核的感受野,可以有效地捕 捉序列数据中的局部依赖关系。

稳定的梯度传播:相对于 RNN,TCN 训练中的梯度传播更稳定,不容易遇到梯度消 失或梯度爆炸的问题。

TCN 的缺点:

有限的建模能力:传统的卷积操作在局部感受野内工作,因此对于较长的序列建 模和处理长期依赖关系,可能不如 RNN 表现好。但可以通过使用深层 TCN 和膨胀卷积 等技术来扩大感受野。

1.2 TCN 特点

并行计算能力:相对于传统的循环神经网络(RNN),TCN 采用卷积操作,可以进 行高效的并行计算。这使得 TCN 在大规模数据上的训练和推理方面具有优势,能够更 好地利用现代硬件的并行计算能力。

长依赖关系建模:传统的卷积操作在局部感受野内工作,导致原始的 TCN 可能对 较长的序列数据难以捕捉长期依赖关系。然而,通过使用一些技术,如深层 TCN 和膨 胀卷积(dilated convolutions),TCN 可以扩大感受野并增加信息传递的距离,从 而更有效地捕捉和建模长期依赖关系。

多尺度信息提取:TCN 可以通过堆叠多个卷积层来提取不同尺度的特征。每个卷 积层通过不同大小的卷积核对输入进行处理,从而捕捉序列数据中的不同时间范围的 特征。这种多尺度信息提取能力使得 TCN 对序列数据中的局部依赖关系更加敏感。

输入长度灵活性:TCN 与传统的 RNN 相比,更灵活地处理变长的输入序列。TCN 的输入可以是固定长度的序列数据,也可以是可变长度的序列数据。这方面的灵活性 使得 TCN 在处理不同长度的序列数据时更加便捷。

适用于各种序列建模任务:由于 TCN 的并行计算能力和长依赖关系建模能力,它 适用于各种序列建模任务,如语音识别、自然语言处理、动作识别、时间序列预测等。 它在某些任务中的性能表现可能与传统的 RNN 相当甚至更好。

2 TCN 结构

fc39b0cad9c742589eabe2c25f5ec790.png

它由具有相同输入和输出长度的扩张的、因果的 1D 卷积层组成。

2.1 1D 卷积

一维卷积分为:full 卷积、same 卷积和 valid 卷积

全卷积保留了输入序列的所有信息但计算代价较高,同卷积保留了输入序列的所 有信息且输出长度相同但计算代价相对较高,有效卷积计算代价较低但可能会丢失输 入序列的边界信息。根据具体的任务和需求,可以选择适合的卷积方式。

以一个长度为 5 的一维张量 I 和长度为 3 的一维张量 k(卷积核)为例

8f3e91a475a64a289603b3e6f82dd7be.png

一维 full 卷积

Full 卷积的计算过程是:K 沿着 I 顺序移动,每移动到一个固定位置,对应位置 的值相乘再求和,计算过程如下:

72b1c60dc78048ce908e210379ff4542.png

将得到的值依次存入一维张量 Cfull,该张量就是 I 和卷积核 K 的 full 卷积结果, 其中 K 卷积核或者滤波器或者卷积掩码,卷积符号用符号*表示,记 Cfull=I*K

97c620001c8c4d31bc24ca31eb3dcc0e.png

一维 same 卷积

f521b2d4d38449ef8d6f26d26e83724d.png

卷积核 K 都有一个锚点,然后将锚点顺序移动到张量 I 的每一个位置处,对应位 置相乘再求和,计算过程如下:

799ef2d5faeb4b1589fe91dfa72d683b.png

ed768c8d3f0742b997d4bdb4916caa4d.png

 假设卷积核的长度为 FL,如果 FL 为奇数,锚点位置在(FL-1)/2 处;如果 FL 为偶 数,锚点位置在(FL-2)/2 处。

一维 Valid 卷积

从 full 卷积的计算过程可知,如果 K 靠近 I, 就会有部分延伸到 I 之外,valid 卷积只考虑 I 能完 全覆盖 K 的情况,即 K 在 I 的内部移动的情况,计算 过 程 如下:

14c0fb4051ff47f180842e475c141bf5.png

ef2adcf876bb4cd9b717ed01d8a7a8dd.png

 三种卷积类型的关系

a5e7ccbfc72348369f04d8e71b657468.png

 2.2 因果卷积(Causal Convolution)

77b1fecebbd0437198a388cf1bf88e58.png

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

2.3 膨胀卷积(Dilated Convolution)

84ff9f78444347c4be15154e11259517.png

 如图 TCN 结构图(a)。单纯的因果卷积还是存在传统卷积神经网络的问题,即对时 间的建模长度受限于卷积核大小的,如果要想抓去更长的依赖关系,就需要线性的堆 叠很多的层。为了解决这个问题,研究人员提出了膨胀卷积。

膨胀卷积(dilated convolution)是通过跳过部分输入来使 filter 可以应用于 大于 filter 本身长度的区域。等同于通过增加零来从原始 filter 中生成更大的 filter。

2.4 残差链接(Residual Connections)

e8362fd703a34c44835ebe33d680a6ad.png

 如图 TCN 结构图(b)。 残差链接被证明是训练深层网络的有效方法,它使得网络 可以以跨层的方式传递信息。本文构建了一个残差块来代替一层的卷积。如上图所示, 一个残差块包含两层的卷积和非线性映射,在每层中还加入了 WeightNorm 和 Dropout 来正则化网络。为什么要 1×1 卷积呢?1×1 卷积是可以用来降维的 。作者直接把较 下层的特征图跳层连接到上层,对应的每个 Cell 的特征图数量(也就是通道数 channel)不一致,导致不能直接做类似 Resnet 的跳层特征图加和操作,于是,为了 两个层加和时特征图数量吻合,用 1×1 卷积做了一个降维的操作。

3 模型对比结果

3.1 代码示例

# 定义inputs层
inputs = keras.layers.Input(shape=(x_train.shape[1], x_train.shape[2]), name='inputs')

# 定义TCN网络
Conv1D_tar1 = keras.layers.Conv1D(5, 3, 1, activation='relu', padding='same', name='Conv1D_tar1')(inputs)
Dropout1 = keras.layers.Dropout(0.2, name='Dropout1')(Conv1D_tar1)

Conv1D_tar2 = keras.layers.Conv1D(5, 3, 2, activation='relu', padding='same', name='Conv1D_tar2')(Dropout1)
Dropout2 = keras.layers.Dropout(0.2, name='Dropout2')(Conv1D_tar2)

Conv1D_tar3 = keras.layers.Conv1D(5, 3, 4, activation='relu', padding='same', name='Conv1D_tar3')(Dropout2)
Dropout3 = keras.layers.Dropout(0.2, name='Dropout3')(Conv1D_tar3)

Conv1D1 = keras.layers.Conv1D(5, 3, 1, activation='relu', padding='same', name='Conv1D1')(inputs)
Conv1D2 = keras.layers.Conv1D(5, 3, 1, activation='relu', padding='same', name='Conv1D2')(Conv1D1)

# 维度变换合并
merged_Conv1D = keras.layers.Concatenate(name='merged_Conv1D', axis=1)([Conv1D2, Dropout3])

Flatten = keras.layers.Flatten(name='Flatten')(merged_Conv1D)

# 定义全连接层
dense_tar1 = keras.layers.Dense(64, activation='relu', name='dense_tar1')(Flatten)
dense_tar2 = keras.layers.Dense(24, activation='relu', name='dense_tar2')(dense_tar1)
outputs_tar = keras.layers.Dense(5, activation='relu', name='outputs_tar')(dense_tar2)

model = keras.Model(inputs=inputs, outputs=outputs_tar)

86b3ff89fee74ce59286e8e6e8039921.png

e12ef964123e4b9c87c115b9b1f11adf.png

 MAPE: 0.124     MSE: 0.700

  • 23
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
在MATLAB中实现TCN(时间卷积神经网络)模型,可以参考以下步骤: 1. 准备数据集:数据集应包含10个输入特征和3个输出变量。可以将数据集保存为MATLAB支持的格式,如MAT文件。 2. 下载TCN模型代码:可以从引用\[2\]提供的链接https://locuslab/TCN下载TCN模型的代码。 3. 配置MATLAB环境:确保你的MATLAB版本是2021b及以上。 4. 编写主程序文件:创建一个名为MainTCNM.m的主程序文件,用于加载数据集、构建TCN模型、训练模型和进行预测。你可以参考引用\[1\]中提供的模型描述来实现主程序文件。 5. 实现TCN模型:根据引用\[3\]中的描述,TCN模型的关键特点是使用扩张卷积(dilated convolutions)。你可以在主程序文件中使用MATLAB的卷积函数来实现这一特性。 6. 训练模型:使用数据集训练TCN模型。你可以使用MATLAB的深度学习工具箱中的函数来定义模型结构、设置训练参数和执行训练过程。 7. 进行预测:使用训练好的TCN模型对新的输入数据进行预测。你可以使用MATLAB的预测函数来实现这一步骤。 请注意,以上步骤仅提供了一个大致的指导,具体实现细节可能因你的数据集和需求而有所不同。建议你参考引用\[1\]和\[3\]中提供的更详细的信息,并根据你的具体情况进行调整和修改。 #### 引用[.reference_title] - *1* [回归预测 | MATLAB实现TCN(时间卷积神经网络)多输入多输出预测](https://blog.csdn.net/kjm13182345320/article/details/129106500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [回归预测 | MATLAB实现TCN时间卷积神经网络多输入单输出回归预测](https://blog.csdn.net/kjm13182345320/article/details/126195343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊仔阿大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值