博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2.4时序卷积网络TCN:因果膨胀卷积、残差连接和跳过连接
阅读量:3950 次
发布时间:2019-05-24

本文共 7043 字,大约阅读时间需要 23 分钟。

文章目录

对于序列问题(Sequence Modeling)的处理方法,通常采用RNN或者LSTM,例如处理一段视频/音频,往往会沿着时间方向(时序)进行操作。通常CNN网络都被认为适合处理图像数据而不适合处理sequence modeling问题,这主要由于其卷积核大小的限制,不能很好的抓取长时的依赖信息。而今年来,由于RNN及LSTM这类模型的瓶颈,越来越多的人开始发现其实CNN对于这种序列问题的处理是被大大低估了,CNN建立的model要比之前人们之前用的RNN要好很多,而且简洁。

时序卷积网络(TCN),是用于序列建模任务的卷积神经网络的变体,结合了 RNN 和 CNN 架构。对 TCN 的初步评估表明,简单的卷积结构在多个任务和数据集上的性能优于典型循环网络(如 LSTM),同时表现出更长的有效记忆。

TCN由因果膨胀卷积核残差块组成,实现没有从未来到过去的信息泄漏,并且网络查看非常远的过去以做出预测的能力,

问题描述

对音频进行生成,一个音频 x = { x 1 , … , x T } \mathbf{x}=\left\{x_{1}, \ldots, x_{T}\right\} x={

x1,xT}的联合概率化为条件概率的乘积,如下:
p ( x ) = ∏ t = 1 T p ( x t ∣ x 1 , … , x t − 1 ) (1) \large \color{green}{p(\mathbf{x})=\prod_{t=1}^{T} p\left(x_{t} \mid x_{1}, \ldots, x_{t-1}\right)}\tag{1} p(x)=t=1Tp(xtx1,,xt1)(1)
因此,每个音频样本 x t x_{t} xt都是基于之前所有时间步的样本。

条件概率分布是由一堆卷积层建模的。网络中没有池化层,模型的输出与输入具有相同的时间维度。该模型通过一个softmax层输出下一个值 x t x_{t} xt的分类分布,并对其进行优化,使数据的对数似然值最大化。由于对数似然是易于处理的,可以调整验证集上的超参数,并且可以很容易地测量模型是过拟合还是欠拟合。

因果卷积(causal Convolutions)

因果卷积可以解决序列问题。

image-20210621212016921

图 1 : 因 果 卷 积 层 堆 叠 的 可 视 化 \large \color{green}{图1:因果卷积层堆叠的可视化} 1

如图1所示,模型在时间步 t t t时发出的预测 p ( x t + 1 ∣ x 1 , … , x t ) p\left(x_{t+1} \mid x_{1}, \ldots, x_{t}\right) p(xt+1x1,,xt) 不能依赖于任何未来的时间步 x t + 1 , x t + 2 , … , x T x_{t+1}, x_{t+2}, \ldots, x_{T} xt+1,xt+2,,xT。每一层的输出都是由前一层对应未知的输入及其前一个位置的输入共同得到,并且如果输出层和输入层之前有很多的隐藏层,那么一个输出对应的输入就越多,并且输入和输出离得越远。

对于图像,与因果卷积等价的是mask卷积,它可以通过构造mask张量并在应用它之前对该mask与卷积核进行逐项相乘来实现。对于文本等一维数据,可以通过将普通卷积的输出移动几个时间步来更容易实现这一点。

在训练时,对所有时间步长的条件预测可以并行进行,因为ground truth x \mathrm{x} x的所有时间步长都已知。当模型测试时,预测是连续的:在每个样本被预测后,它被反馈到网络来预测下一个样本。

因果卷积通常比rnn训练得更快,特别是当应用于非常长的序列时。因果卷积的问题之一是,它们需要许多层,或大的filter来增加卷积的感受野。例如,在图1中,感受野仅为 5 ( = 5(= 5(= #layers + + + filter length − 1 ) . -1) . 1).。而卷积层数的增加就带来:梯度消失,训练复杂,拟合效果不好的问题。

所以就有了膨胀卷积,将感受野增加一个数量级。

膨胀因果卷积( dilated convolution)

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

图 2 : 膨 胀 的 因 果 卷 积 层 堆 叠 的 可 视 化 \color{green}{图2:膨胀的因果卷积层堆叠的可视化} 2:

图2描绘了膨胀1、2、4和8的膨胀因果卷积。

与普通卷积相比,膨胀卷积可以有效地使网络在更粗的尺度上运行。这类似于池化或跨越式卷积,但这里的输出与输入具有相同的大小。

一种特殊情况,膨胀系数1的膨胀卷积就是标准卷积了。堆叠膨胀卷积使网络仅用几层就能拥有非常大的感受野。训练过程,每一层的膨胀倍数达到一个极限,然后重复,即

1 , 2 , 4 , . . . , 512 , 1 , 2 , 4 , . . . , 512 , 1 , 2 , 4 , . . . , 512. 1, 2, 4, . . . , 512, 1, 2, 4, . . . , 512, 1, 2, 4, . . . , 512. 1,2,4,...,512,1,2,4,...,512,1,2,4,...,512.
看图3更清楚.

在这里插入图片描述

图 3 : 膨 胀 的 因 果 卷 积 训 练 过 程 \color{green}{图3:膨胀的因果卷积训练过程} 3

门控激活

使用门控激活单元

z = tanh ⁡ ( W f , k ∗ x ) ⊙ σ ( W g , k ∗ x ) (2) \large \color{green}{\mathbf{z}=\tanh \left(W_{f, k} * \mathbf{x}\right) \odot \sigma\left(W_{g, k} * \mathbf{x}\right)}\tag{2} z=tanh(Wf,kx)σ(Wg,kx)(2)
其中 ∗ * 表示卷积运算符, ⊙ \odot 表示元素级的乘法运算符, σ ( ⋅ ) \sigma(\cdot) σ()是sigmoid函数, k k k是层索引, f f f g g g分别表示卷积核和门, W W W是可学习的参数。

残差连接和跳过连接

图 4 : 残 差 连 接 和 跳 过 连 接 \color{green}{图4:残差连接和跳过连接} 4:

残差连接和参数化跳过连接在整个网络中使用,保持网络稳定,以加快收敛速度,并能够训练更深入的模型。在图4中,展示了模型的残差块,它在网络中被多次堆叠。

条件生成

给定一个额外的输入 h \mathrm{h} h, 可以模拟给定输入的音频的条件分布 p ( x ∣ h ) p(\mathbf{x} \mid \mathbf{h}) p(xh)。Eq.(1)变成

p ( x ∣ h ) = ∏ t = 1 T p ( x t ∣ x 1 , … , x t − 1 , h ) (3) \large \color{green}{p(\mathbf{x} \mid \mathbf{h})=\prod_{t=1}^{T} p\left(x_{t} \mid x_{1}, \ldots, x_{t-1}, \mathbf{h}\right)}\tag{3} p(xh)=t=1Tp(xtx1,,xt1,h)(3)
通过在模型上添加条件,引导网络生成具有所需特性的音频。例如,在多扬声器设置中,可以通过向模型提供扬声器标识作为额外输入来选择扬声器。类似地,对于TTS,提供关于文本的信息作为额外的输入。

以两种不同的方式对模型施加条件:全局条件作用和局部条件作用。全局条件反射的特征是一个单独的潜在表示 h \mathrm{h} h,它影响所有时间步长的输出分布,例如,一个嵌入在TTS模型中的扬声器。Eq.(2)的激活函数现在为:

z = tanh ⁡ ( W f , k ∗ x + V f , k T h ) ⊙ σ ( W g , k ∗ x + V g , k T h ) (4) \large \color{green}{\mathbf{z}=\tanh \left(W_{f, k} * \mathbf{x}+V_{f, k}^{T} \mathbf{h}\right) \odot \sigma\left(W_{g, k} * \mathbf{x}+V_{g, k}^{T} \mathbf{h}\right)}\tag{4} z=tanh(Wf,kx+Vf,kTh)σ(Wg,kx+Vg,kTh)(4)

其中 V ∗ , k V_{*, k} V,k是一个可学习的线性投影,并且向量 V ∗ , k T h V_{*, k}^{T} \mathbf{h} V,kTh在时间维度上广播。

对于局部条件反射,有第二个时间序列 h t h_{t} ht,可能具有比音频信号更低的采样频率,例如TTS模型中的语言特征。我们首先使用转置卷积网络(学习的上采样)对这个时间序列进行变换,将其映射为一个新的时间序列 y = f ( h ) \mathbf{y}=f(\mathbf{h}) y=f(h),其分辨率与音频信号相同,然后在激活单元中使用如下:

z = tanh ⁡ ( W f , k ∗ x + V f , k ∗ y ) ⊙ σ ( W g , k ∗ x + V g , k ∗ y ) (5) \large \color{green}{\mathbf{z}=\tanh \left(W_{f, k} * \mathbf{x}+V_{f, k} * \mathbf{y}\right) \odot \sigma\left(W_{g, k} * \mathbf{x}+V_{g, k} * \mathbf{y}\right)}\tag{5} z=tanh(Wf,kx+Vf,ky)σ(Wg,kx+Vg,ky)(5)
其中 V f , k ∗ y V_{f, k} * \mathbf{y} Vf,ky现在是 1 × 1 1 \times 1 1×1卷积。

TCN

TCN基于两个原则:网络产生与输入相同长度的输出,以及不存在从未来的泄漏。

  • 为了实现第一点,TCN采用了一维全卷积网络(FCN)架构,每个隐层与输入层长度相同,和补零填充到长度(kernel size 1)保持后续层与以往相同的长度。
  • 为了实现第二点,TCN使用了因果卷积,即时间 t t t的输出只与时间 t t t的元素以及前一层的元素卷积。

因果卷积只能随网络深度的大小获取线性大小感受野 ,解决方案是采用膨胀卷积,以实现指数级大的感受野。

对于一个输入 x ∈ R n \mathbf{x} \in \mathbb{R}^{n} xRn 的一维序列和一个卷积核 f : { 0 , … , k − 1 } → R f:\{0, \ldots, k-1\} \rightarrow \mathbb{R} f:{

0,,k1}R,对序列中的元素 s s s的膨胀卷积运算 F F F被定义为
F ( s ) = ( x ∗ d f ) ( s ) = ∑ i = 0 k − 1 f ( i ) ⋅ x s − d ⋅ i (6) \large \color{green}{F(s)=\left(\mathbf{x} *_{d} f\right)(s)=\sum_{i=0}^{k-1} f(i) \cdot \mathbf{x}_{s-d \cdot i}}\tag{6} F(s)=(xdf)(s)=i=0k1f(i)xsdi(6)
其中 d d d是膨胀因子, k k k是卷积核大小, s − d ⋅ i s-d \cdot i sdi表示过去的方向。因此,膨胀相当于在每两个相邻的卷积核之间引入一个固定步长。当 d = 1 d=1 d=1时,膨胀卷积简化为普通卷积。使用更大膨胀可以使顶层的输出代表更大范围的输入,从而有效地扩展了卷积神经网络的感受野。

两种方法来增加感受野:选择更大的个卷积核尺寸 k k k和增加膨胀因子 d d d,其中一个这样的层的有效历史是 ( k − 1 ) d (k-1) d (k1)d。在使用膨胀卷积时,通常会随着网络的深度指数增加 d d d(即,在网络的 i i i层上, d = O ( 2 i ) d=O\left(2^{i}\right) d=O(2i))。这确保了在有效历史记录中有一些感受野能够命中每个输入,同时也允许使用深度网络获得非常大的有效历史记录。

  • 残差连接

残差块由网络 F \mathcal{F} F 和输入 x \mathrm{x} x 组成:

o =  Activation  ( x + F ( x ) ) (7) \large \color{green}{o=\text { Activation }(\mathbf{x}+\mathcal{F}(\mathbf{x}))}\tag{7} o= Activation (x+F(x))(7)

由于TCN的感受野依赖于网络深度 n n n、卷积核大小 k k k和膨胀因子 d d d,因此更深层和更大的TCN的稳定就变得很重要。例如,在预测可能依赖于规模为 2 12 2^{12} 212的历史数据和高维输入序列的情况下,可能需要一个多达12层的网络。

更具体地说,每一层都由多个用于特征提取的卷积核组成。因此,在设计TCN模型时,使用一个通用残差块来代替卷积层。

image-20210622104250336

图 5 : 左 : T C N 残 差 块 。 当 残 差 的 输 入 和 输 出 具 有 不 同 的 维 数 时 , 添 加 1 x 1 卷 积 。 右 : 一 个 T C N 内 的 残 差 连 接 的 例 子 。 蓝 线 是 残 差 函 数 中 的 卷 积 核 , 绿 线 是 映 射 。 \color{green}图5:左: TCN残差块。当残差的输入和输出具有不同的维数时,添加1x1卷积。\\ 右:一个TCN内的残差连接的例子。蓝线是残差函数中的卷积核,绿线是映射。 5:TCN1x1TCN线绿线

TCN的残差块如图5:左所示。在残差块内,TCN有两层扩展的膨胀因果卷积和激活函数ReLU。对于归一化,应用了权重归一化到卷积的卷积核。此外,在每一个膨胀因果卷积后添加一个dropout进行正则化:在每一个训练步骤中,整个通道被置零。

然而,在标准的ResNet中,输入直接添加到残差函数的输出中,而在TCN(以及一般的convnet)中,输入和输出可以有不同的宽度。为了解决不同的输入输出宽度,使用一个额外的 1   ∗ 1 1 \ * 1 1 1卷积来确保加法 ⊕ \oplus 接收到相同形状的张量(见图 5 ) 5) 5)

总结

TCN的优点

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

(2)灵活的感受野。TCN的感受野的大小受层数、卷积核大小、膨胀系数等决定。可以根据不同的任务不同的特性灵活定制。

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

(4)内存更低。RNN在使用时需要将每步的信息都保存下来,这会占据大量的内存,TCN在一层里面卷积核是共享的,内存使用更低。

TCN的缺点

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

(2)论文中描述的TCN还是一种单向的结构,在语音识别和语音合成等任务上,纯单向的结构还是相当有用的。但是在文本中大多使用双向的结构,当然将TCN也很容易扩展成双向的结构,不使用因果卷积,使用传统的卷积结构即可。

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

向的结构,不使用因果卷积,使用传统的卷积结构即可。

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

转载地址:http://udyzi.baihongyu.com/

你可能感兴趣的文章
iOS-截屏,从相册选择图片,制作磨砂效果图片
查看>>
iOS-截取字符串中两个指定字符串中间的字符串
查看>>
数据库-数据库操作(使用FMDB)
查看>>
FMDB介绍以及在 swift 中的数据库操作
查看>>
iOS运行时机制(附Demo演练)
查看>>
宽字符串输出问题
查看>>
将整数转换为宽字符串
查看>>
在类中定义enum实现整数常量功能
查看>>
suse11通过安装最新内核可以上网的经验
查看>>
SUSE静态配置IP成功上网
查看>>
通过sleep让程序等待外部条件改变
查看>>
通过等待键盘输入让程序等待外部条件改变
查看>>
通过限制循环次数来避免死循环
查看>>
ADO连接字符串
查看>>
字符数组的位置决定程序能否成功执行--不明白
查看>>
拷贝代码时没有仔细检查,导致误修改了函数参数
查看>>
MySQL批量导入数据SQL语句(CSV数据文件格式)
查看>>
ADO连接Oracle
查看>>
遍历Windows系统中所有进程的名字(*.exe)
查看>>
进程看门狗
查看>>