精华内容
下载资源
问答
  • GCN (Graph Convolutional Network) 图卷积网络解析

    万次阅读 多人点赞 2019-04-16 11:37:33
    目的:图卷积网络近两年大火,博主实习需要用到。接下来几个月就会在图卷积网络上做很多东西。这篇是刚开始对图卷积网络的学习,所以会广泛参考相关论文与网上的技术博客,总结归纳,希望提炼出有用的知识,加深对于...

    目的:图卷积网络近两年大火,博主实习需要用到。接下来几个月就会在图卷积网络上做很多东西。这篇是刚开始对图卷积网络的学习,所以会广泛参考相关论文与网上的技术博客,总结归纳,希望提炼出有用的知识,加深对于图卷积网络的理解。重要内容链接会贴出方便大家学习,也很欢迎大家跟我探讨或者分享心得。对于复杂的公式与繁杂的推证,博主希望尽可能理解其意义,对于难以理解的或者暂时没有时间推证的可以先记下其结论,方便后续推证以及对方便对图卷积网络的运用。概览尽可能解释清楚重要的概念及相关知识,方便后续更深入的理解。

    结论:除了推证繁杂之外,图卷积的结论非常简洁易懂,物理意义很明确。

    可参考代码:https://github.com/Megvii-Nanjing/ML_GCN  这个代码之中的GCN的代码

    目录

    一、CNN与GCN

    1.1处理数据结构不同

    1.2 特征提取

    卷积提取特征

    空域方法vertex domain

    频域方法spectral domain

    二、图卷积理论基础

    2.1 图的拉普拉斯矩阵

    2.2 傅立叶变换

    2.3 这两种变换的关系

    2.4 GCN最重要结论

    三、图卷积Graph convolution

    3.1 傅立叶与卷积的性质

    3.2 图的傅立叶变换的矩阵形式

    3.3 图卷积Graph convolution

    3.4 图卷积网络

    3.5 卷积层公式

    3.6 图卷积网络公式


    一、CNN与GCN

    这部分我们介绍下GCN的由来,为了处理图Graph的神经网络。同时引出用图来处理的方法。

    1.1处理数据结构不同

    欧几里得结构:CNN处理的数据是矩阵形式,就是以像素点排列成的矩阵为基础。称为Euclidean Structure,欧几里得结构。

    拓扑结构(图结构):GCN处理的数据是图结构,即Non Euclidean Structure非欧几里得结构,拓扑结构。如社交网络连接,信息网络等等。对于Non euclidean structure的数据,卷积神经网络就没有用了。

    1.2 特征提取

    https://www.zhihu.com/question/54504471

    卷积提取特征

    对于卷积神经网络CNN,图片中提取特征,可以采用卷积的方式提取特征。但是对于拓扑结构,只能用其他方法来提取特征。

    对图的特征提取分为vertex domain(spatial domain)空域和spectral domain频域。

    对于图结构的提取信息,也可以用谱聚类的方法,我们暂不讨论:https://www.cnblogs.com/pinard/p/6221564.html

    空域方法vertex domain

    vertex domain(spatial domain),很直观,直接用相应顶点连接的neighbors来提取特征。

    Learning Convolutional Neural Networks for Graphs  http://proceedings.mlr.press/v48/niepert16.pdf

    频域方法(谱方法)spectral domain

    这个就是GCN,即图卷积网络所采用的方法。

    GSP(graph signal processing)图形信号处理的方法,即在图上进行信号处理的变换,如傅立叶变换或者拉普拉斯变换,进而进行图的卷积,从而提取图的特征。博主本科是通信工程出身,因此对傅立叶变换、拉普拉斯变换等等这种信号处理的方式还是挺熟悉的。理解上障碍没有那么大,简而言之就是将相应的信号转换到另一个域去分析,从而获得更好的分析结果。如果不懂的话可以去查阅相应的《信号与系统》或者傅立叶变换,拉普拉斯变换这些方面的知识。

    GSP(graph signal processing)图形信号处理,顾名思义就是将图当做信号,然后运用信号处理的方法去分析与处理Graph的特征。借助于图的拉普拉斯矩阵的特征值和特征向量来研究Graph的性质.

    二、图卷积理论基础

    简单而言,只要弄懂两个工具,一个是Laplace, 一个是Fourier,就懂了图卷积,并且除了推证比较繁杂之外,图卷积的结论非常简洁。

    在GCN之中,拉普拉斯变换和傅立叶变换起到了非常重要的作用。其中涉及非常多矩阵论、高等代数、信号处理的知识。我们不可能从底层一步一步的推导出公式,只能按照top-down的方法,尽量理解与运用其成型的结论。

    2.1 图的拉普拉斯矩阵

    对于图 G=(V,E),其Laplacian 矩阵的定义为 L=D-A

    • L为拉普拉斯矩阵Laplacian matrix
    • D为对角度矩阵Degree matrix,对角线上的元素是顶点的度,即该元素链接的元素的个数
    • A为邻接矩阵 Adjacency matrix ,即表示任意两个顶点之间的邻接关系,邻接则为1,不邻接则为0
    • 这个结论是个重要的结论,我们暂不具体推证,只是理解一下其中的物理意义。

    物理意义:这个矩阵描述图的拉普拉斯矩阵与图的性质之间的关系。拉普拉斯矩阵与图的性质满足L=D-A 这种矩阵关系,其中图G=(V,E)的性质,体现在图的邻接矩阵A和图的度矩阵D上。

    在理解了这个的基础上,还有其他的几种拉普拉斯矩阵,上面这种拉普拉斯矩阵只是其中的一种,下面几种拉普拉斯矩阵在不同的任务中有不同的运用。具体怎么用以后用到再说。

    • Combinatorial Laplacian  L=D-A
    • Symmetric normalized Laplacian  
    • Random walk normalized Laplacian 

    通过上面的公式的物理意义,我们知道了,图的性质可以表示在拉普拉斯矩阵之中,即图的性质可以通过拉普拉斯矩阵体现出来。这样,我们将图的分析,可以变为对拉普拉斯矩阵的分析。

    这节的重点就是: 图的性质——图的拉普拉斯矩阵的性质,之间的对应关系,以及拉普拉斯矩阵如何求得。

    2.2 傅立叶变换

    https://zhuanlan.zhihu.com/p/54505069

    拉普拉斯矩阵与傅立叶变换是GCN的两大理论基础。做过信号处理的会比较熟悉傅立叶变换。如果不熟悉也没关系,简单来说,傅立叶变换就是通过傅立叶变换,将一个域的信号转换到另一个域,便于我们分析与运算。

    傅立叶变换的定义:,就是一种变换方式,将信号由t域变换到w域。

    为什么要引入傅立叶变换?因为傅立叶变换具有一定的性质,就是原域进行卷积,相当于频域相乘:

    即一个域相乘,相当于另一个域卷积;一个域卷积,相当于另一个域相乘。算图域卷积相当于傅立叶域相乘,那先对图和卷积核做傅立叶变换后相乘,再傅立叶反变换回来,就得到了图域卷积。

    2.3 傅立叶变换与拉普拉斯矩阵的关系

    傅立叶变换与拉普拉斯矩阵的关系:传统傅立叶变换的基,就是拉普拉斯矩阵的一组特征向量。这个具体推证我们不具体推证,但是这也是一个重要的结论,这在描述一种转化的关系,从求傅立叶变换的基得这个问题转换到求拉普拉斯矩阵的特征向量这个问题。

    用公式描述就是下面这样,我们可以记下结论并且理解其中的物理意义:

    再写清晰一点,就是

    • U就是L的特征向量,也是傅立叶变换的基,,也是正交矩阵
    • L的特征值组成的对角矩阵:
    • 结论:拉普拉斯矩阵的特征向量是傅立叶变换的基

    通过这个结论,图的傅立叶变换就写成了另一种形式

    图的傅立叶变换就变为:

    • 图的第i个点上的signal为f(i)
    • 图x表示为
    • 互为对偶向量u_{l} 的的对偶向量(线性代数的知识)
    • 其中u_{l}^{*} 是矩阵 U^{T} 的第 l 行,u_{l} 是矩阵 U 的第 l

    问题的转换:傅立叶变换的基——拉普拉斯矩阵的特征向量——拉普拉斯矩阵的谱分解(特征分解)

    图的傅立叶变换——图的傅立叶变换的矩阵形式

    2.4 GCN最重要结论

    因此,依据前面这些结论,我们得出了最重要的结论,图的傅立叶变换的矩阵形式:

    针对图x的傅立叶变换,写作傅立叶变换基乘以图(傅立叶变换基也是拉普拉斯矩阵的特征向量们)

    用前面复杂的傅立叶变换以及拉普拉斯变换的种种性质,我们得到了一个简洁而且非常重要的结论。就是上面这个公式,图的傅立叶变换。

    同理,反傅立叶变换

    反傅立叶变换的矩阵形式

    理解了前面这些结论,这几个公式简洁明了,也是GCN的理论基础。

    三、图卷积Graph convolution

    前面得到了两个特别简洁的结论,结合起来,就是图卷积的理论。

    3.1 傅立叶与卷积的性质

    傅立叶变换的性质中相当重要的结论就是:

    即一域卷积,相当于另一域相乘。其中的逻辑关系等价:图域卷积——频域相乘。中间的桥梁就是傅立叶变换与反傅立叶变换。

    3.2 图的傅立叶变换的矩阵形式

    ,这个就是我们前面得到的简洁明了的公式:图的傅立叶卷积的矩阵相乘形式,其中U既是傅立叶变换的基底,也是拉普拉斯矩阵的特征向量。

    此公式写清晰一点,就是:

    • graph上的N维向量为f,每个顶点为f(i)
    • l 个特征向量的第 i 个分量为,这个既是傅立叶变换的基也是拉普拉斯矩阵的特征向量
    • 特征值频率为 \lambda_l
    • 复数空间的内积采用了 u_l^*(i) ,也就是特征向量 u_l的共轭wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    3.3 图卷积Graph convolution 

    结合上面3.1与3.2的内容,我们得出图卷积最重要的结论: 

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​ 

    • g就是 filter函数,也就是卷积核
    • 图x表示为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​​,即图在每一点上面的信号
    • U即是傅立叶变换的基,也是拉普拉斯矩阵的特征向量

    其中理论基础为:算图域卷积相当于傅立叶域相乘,那先对图和卷积核做傅立叶变换后相乘,再傅立叶反变换回来,就得到了图域卷积。 

    傅 立叶变换和反傅立叶变换可以写成矩阵相乘的形式,那么对应的图卷积就写成了矩阵乘形式。

    我们就得到了图卷积经典论文中的公式 Semi-supervised classification with graph convolutional networks, ICLR2017  , https://arxiv.org/pdf/1609.02907.pdf

    3.4 图卷积网络 

    https://blog.csdn.net/chensi1995/article/details/77232019

    接下 来已经可以看懂对应论文了:

    Semi-supervised classification with graph convolutional networks, ICLR2017  , https://arxiv.org/pdf/1609.02907.pdf

    图x与卷积核进行卷积可以写成, 

    • 第一个等号的等价,就是上面3.3的公式。
    • U^{T}g​​ 看做是 g_{\theta}(\Lambda)​​ 一个laplacian特征值的函数,参数为 \theta​​
    • 第二个等号的等价在于 特征向量与矩阵相乘等于特征向量与特征值多项式​​相乘。

    为了省去大量求特征值特征 向量这些运算,我们只对filter函数做近似,这步就是一个为了减少算法复杂度的近似:

    ​,也是 ​

    • 其中 T_{k}​​ 是Chebyshev多项式,K=1就是用切比雪夫多项式进行一阶近似。
    • 可以把 g_{\theta}(\Lambda)​​ 简单看成是 \Lambda​​ 的多项式。

    原因:  U\Lambda^{k}U^{T}=(U\Lambda U^{T})^{k}=L^{k}

    卷积也可描述为: ​​

    • 其中Ux​​为图x的傅立叶域
    • 其中\text{diag}(\theta)​​与Ux​​相乘即表示 Fourier Domain 上面的点乘
    • 反向乘以U^{\top}​​ 即从傅立叶域在回到源域

    3.5 卷积层公式

    设定K=1 ,则卷积层简化为

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    • \tilde{A}=A+I_{N}​,这就是一个代数,为了公式简洁这样指代。注意,A是前面提到的邻接矩阵。
    • \tilde{D}_{ii}=\sum_{j}^{}\tilde{A}_{ij}​,则L=​,这个是高等代数中的知识。
    • 邻接矩阵获得的代码如下:
    def gen_adj(A):
        D = torch.pow(A.sum(1).float(), -0.5)
        D = torch.diag(D)
        adj = torch.matmul(torch.matmul(A, D).t(), D)
    return adj

    则卷积公式简化为wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    再加上激活层:

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    • H即层,上标是层数
    • W为权值矩阵
    • 得出了GCN之中的公式。
    # 图卷积层的定义
    def forward(self, input, adj):
        support = torch.matmul(input, self.weight)
        output = torch.matmul(adj, support)
        if self.bias is not None:
            return output + self.bias
        else:
            return output
    
    #两层图卷积的定义
        def forward(self, feature, inp):
            feature = self.features(feature)
            feature = self.pooling(feature)
            feature = feature.view(feature.size(0), -1)
    
    
            inp = inp[0]
            adj = gen_adj(self.A).detach()
            x = self.gc1(inp, adj)
            x = self.relu(x)
            x = self.gc2(x, adj)
    
            x = x.transpose(0, 1)
            x = torch.matmul(feature, x)
            return x

    为什么小x换为了大X,且θ换为了W,交换了位置?

    关于这点,可以参考原论文。小x与大X,θ与W可以看作一一对应的关系,其中类似于滑窗变换一样的操作。类似于,三维卷积可以看作两个滑窗后的大矩阵相乘。

    3.6 图卷积网络公式

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    • 隐层的feature maps的数量为H,输入层数量为C,输出层为F
    • 其中A为下面3.4中提到的symmetric adjacency matrix,wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
    • 权重wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​为输入层到隐层的权值矩阵
    • 同理,权重wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​为隐层到输出层的权值矩阵

    这个公式跟BP有点像,只不过比BP多了一个稀疏的adj matrix A

    展开全文
  • 在本文中,我们将详细探讨时域卷积网络(TCN)所包含的基本构建块,以及它们如何结合在一起创建一个强大的预测模型。使用我们的开源Darts TCN实现,我们展示了只用几行代码就可以在真实数据集上实现准确预测。 以下对...

    CNN经过一些简单的调整就可以成为序列建模和预测的强大工具

    尽管卷积神经网络(CNNs)通常与图像分类任务相关,但经过适当的修改,它已被证明是进行序列建模和预测的有价值的工具。在本文中,我们将详细探讨时域卷积网络(TCN)所包含的基本构建块,以及它们如何结合在一起创建一个强大的预测模型。使用我们的开源Darts TCN实现,我们展示了只用几行代码就可以在真实数据集上实现准确预测。

    以下对时间卷积网络的描述基于以下论文:https://arxiv.org/pdf/1803.01271.pdf。本文引用用(*)表示。

    动机

    到目前为止,深度学习背景下的序列建模主题主要与递归神经网络架构(如LSTM和GRU)有关。S. Bai等人(*)认为,这种思维方式已经过时,在对序列数据进行建模时,应该将卷积网络作为主要候选者之一加以考虑。他们能够表明,在许多任务中,卷积网络可以取得比RNNs更好的性能,同时避免了递归模型的常见缺陷,如梯度爆炸/消失问题或缺乏内存保留。此外,使用卷积网络而不是递归网络可以提高性能,因为它允许并行计算输出。他们提出的架构称为时间卷积网络(TCN),将在下面的部分中进行解释。为了便于理解TCN体系结构及其Darts实现,本文将尽可能使用与库中看到的相同的模型参数名称。

    基本模型

    概述

    TCN是时域卷积网络(Temporal Convolutional Network)的简称,它由具有相同输入和输出长度的扩张的、因果的1D卷积层组成。下面几节将详细介绍这些术语的实际含义。

    一维卷积网络

    一维卷积网络以一个三维张量作为输入,也输出一个三维张量。我们的TCN实现的输入张量具有形状(batch_size、input_length、input_size),输出张量具有形状(batch_size、input_length、output_size)。由于TCN中的每一层都有相同的输入和输出长度,所以只有输入和输出张量的第三维是不同的。在单变量情况下,input_size和output_size都等于1。在更一般的多变量情况下,input_size和output_size可能不同,因为我们可能不希望预测输入序列的每个组件。

    单个1D卷积层接收一个shape的输入张量(batch_size, input_length, nr_input_channels)并输出一个shape张量(batch_size, input_length, nr_output_channels)。为了了解单个层如何将其输入转换为输出,让我们看一下批处理的一个元素(对批处理中的每个元素都进行相同的处理)。让我们从最简单的例子开始,其中nr_input_channels和nr_output_channels都等于1。在这种情况下,我们看到的是一维输入和输出张量。下图显示了输出张量的一个元素是如何计算的。

    我们可以看到,要计算输出的一个元素,我们需要查看输入的一系列长度为kernel_size的连续元素。在上面的例子中,我们选择了一个3的kernel_size。为了得到输出,我们取输入的子序列和相同长度的已学习权值的核向量的点积。输出的下一个元素,相同的应用程序,但kernel_size-sized窗口的输入序列是由一个元素转移到正确的(对于本预测模型,stride 总是设置为1)。请注意,相同的一组内核权重将被用来计算每输出一个卷积层。下图显示了两个连续的输出元素及其各自的输入子序列。

    为了使可视化更简单,与核向量的点积不再显示,而是对每个具有相同核权重的输出元素发生。

    为了确保输出序列与输入序列具有相同的长度,将应用一些零填充。这意味着在输入张量的开始或结束处添加额外的零值项,以确保输出具有所需的长度。后面的部分将详细解释如何做到这一点。

    现在让我们看看有多个输入通道的情况,即nr_input_channels大于1。在本例中,上述过程对每个单独的输入通道都重复,但每次都使用不同的内核。这将导致nr_input_channels中间输出向量和kernel_size * nr_input_channels的一些内核权重。然后将所有中间输出向量相加,得到最终输出向量。在某种意义上,这相当于与一个形状的输入张量(input_size, nr_input_channels)和一个形状的内核张量(kernel_size, nr_input_channels)进行2D卷积,如下图所示。它仍然是一维的因为窗口只沿着一个轴移动,但是我们在每一步都有一个二维卷积因为我们使用的是一个二维核矩阵。

    对于本例,我们选择nr_input_channels等于2。现在,我们使用nr_input_channels by kernel_size内核矩阵沿着nr_input_channels宽系列长度input_length来代替在一维输入序列上滑动的核向量。

    如果nr_input_channels和nr_output_channels都大于1,那么对每个具有不同内核矩阵的输出通道重复上述过程。然后将输出向量堆叠在一起,得到一个形状的输出张量(input_length, nr_output_channels)。本例中的内核权重数等于kernel_sizenr_input_channelsnr_output_channels。

    nr_input_channels和nr_output_channels这两个变量取决于该层在网络中的位置。第一层是nr_input_channels = input_size,最后一层是nr_output_channels = output_size。所有其他层将使用由num_filters提供的中间通道号。

    因果卷积

    对于因果关系,对于{0,…,input_length - 1}中的每一个i,输出序列的第i个元素可能只依赖于索引为{0,…,i}的输入序列中的元素。换句话说,输出序列中的元素只能依赖于输入序列中在它之前的元素。如前所述,为了确保一个输出张量与输入张量具有相同的长度,我们需要进行零填充。如果我们只在输入张量的左侧填充零,那么就可以保证因果卷积。要理解这一点,请考虑最右边的输出元素。假设输入序列的右边没有填充,它所依赖的最后一个元素就是输入的最后一个元素。现在考虑输出序列中倒数第二个输出元素。与最后一个输出元素相比,它的内核窗口向左移动了1,这意味着它在输入序列中最右边的依赖项是输入序列中倒数第二个元素。根据归纳,对于输出序列中的每个元素,其在输入序列中的最新依赖项与其本身具有相同的索引。下图展示了一个input_length为4,kernel_size为3的示例。

    我们可以看到,在两个条目的左填充为零的情况下,我们可以获得相同的输出长度,同时遵守因果关系规则。事实上,在没有扩展的情况下,维持输入长度所需的零填充条目的数量总是等于kernel_size - 1。

    扩张

    预测模型的一种理想质量是输出中特定条目的值取决于输入中所有先前的条目,即索引小于或等于其自身的所有条目。当接受野(指影响输出的特定条目的原始输入的一组条目)的大小为input_length时,就可以实现这一点。我们也称其为“完整的历史记录”。正如我们以前看到的,一个传统的卷积层在输出中创建一个依赖于输入的kernel_size项的条目,这些条目的索引小于或等于它自己。例如,如果我们的kernel_size为3,那么输出中的第5个元素将依赖于输入中的元素3、4和5。当我们将多个层叠加在一起时,这个范围就会扩大。在下面的图中我们可以看到,通过kernel_size 3叠加两层,我们得到的接受野大小为5。

    一般而言,具有n层且kernel_size为k的一维卷积网络的接收场r为

    为了知道需要多少层才能完全覆盖,我们可以将接受野大小设为input_length l,然后求解层数n(非整数值需要进行四舍五入):

    这意味着,kernel_size固定,完整的历史覆盖所需的层数是线性的输入长度的张量,这将导致网络变得非常深非常快,导致模型与大量的参数,需要更长的时间来训练。此外,大量的层已被证明会导致与损失函数梯度相关的退化问题。在保持层数相对较小的情况下,增加感受野大小的一种方法是向卷积网络引入膨胀概念。

    卷积层上下文中的膨胀是指输入序列的元素之间的距离,该元素用于计算输出序列的一个条目。 因此,传统的卷积层可以看作是dilated为1的扩散层,因为1个输出值的输入元素是相邻的。 下图显示了一个dilated为2的扩散层的示例,其input_length为4,kernel_size为3。

    与dilated-1扩散的情况相比,该层的接收场沿5而不是3的长度扩展。更普遍地,具有内核大小k的d扩散层的接收场沿1 + d的长度扩展。 *(k-1)。 如果d是固定的,那么仍然需要输入张量的长度为线性的数字才能实现完全的接收场覆盖(我们只是减小了常数)。

    这个问题可以通过在层中向上移动时d的值呈指数增加来解决。 为此,我们选择一个常数dilation_base整数b,它将使我们根据其下的层数i来计算特定层的膨胀d,即d = b ** i。 下图显示了一个网络,其中input_length为10,kernel_size为3,dilation_base为2,这将导致3个膨胀的卷积层完全覆盖。

    这里我们只显示影响输出最后一个值的输入的影响。同样,只显示最后一个输出值所必需的补零项。显然,最后的输出值依赖于整个输入覆盖率。实际上,给定超参数,input_length最多可以使用15,同时保持完全的接收野覆盖。一般来说,每增加一层,当前接受野宽度就增加一个d*(k-1)值,其中d计算为d=b**i, i表示新层下面的层数。因此,给出了基b指数膨胀时TCN的感受场宽度w、核大小k和层数n为

    然而,根据b和k的值,这个接受野可能会有“洞”。考虑以下网络,其dilation_base为3,内核大小为2:

    接受野的范围确实大于输入的大小(即15)。然而,接受野是有洞的;也就是说,在输入序列中有输出值不依赖的条目(如上面红色所示)。为了解决这个问题,我们需要将内核大小增加到3,或者将膨胀基数减小到2。一般来说,对于没有孔的感受野,核的大小k至少要与膨胀基b一样大。

    考虑到这些观察结果,我们可以计算出我们的网络需要多少层才能覆盖整个历史。给定核大小k,膨胀基b,其中k≥b,输入长度l,为了实现全历史覆盖,必须满足以下不等式:

    我们可以求解n,得到所需的最小层数

    我们可以看到,在输入长度方面,层数现在是对数的,而不是线性的。这是一个显著的改进,可以在不牺牲接受野覆盖率的情况下实现。

    现在,唯一需要指定的是每一层所需的零填充项的数量。假设膨胀基为b,核大小为k,当前层以下有i个层,则当前层所需的补零项数p计算如下:

    基本TCN概述

    给定input_length, kernel_size, dilation_base和覆盖整个历史所需的最小层数,基本的TCN网络看起来像这样:

    预测

    到目前为止,我们只讨论了‘输入序列’和‘输出序列’,而没有深入了解它们之间是如何相互关联的。在预测方面,我们希望预测未来时间序列的下一个条目。为了训练我们的TCN网络进行预测,训练集将由给定时间序列的等大小子序列对(输入序列、目标序列)组成。目标序列将是相对于其各自的输入序列向前移动一定数量output_length的序列。这意味着长度input_length的目标序列包含其各自输入序列的最后(input_length - output_length)元素作为第一个元素,位于输入序列最后一个条目之后的output_length元素作为它的最后一个元素。在预测方面,这意味着该模型所能预测的最大预测视界等于output_length。使用滑动窗口的方法,许多重叠的输入和目标序列可以创建出一个时间序列。

    模型的改进

    S. Bai等人(*)建议对基本的TCN体系结构进行一些添加,以提高本节将讨论的性能,即残差连接、正则化和激活函数。

    残差块

    我们对之前介绍的基本模型做的最大的修改是将模型的基本构建块从简单的一维因果卷积层改为由相同膨胀因子和残差连接的2层组成的残差块。

    让我们从基本模型中考虑一个膨胀系数d为2、内核大小k为3的层,看看这是如何转化为改进模型的剩余块的。

    变为

    这两个卷积层的输出将被添加到残差块的输入中,从而产生下一个块的输入。对于网络的所有内部块,即除了第一个和最后一个之外的所有内部块,输入和输出通道宽度是相同的,即num_filters。由于第一个残块的第一卷积层和最后一个残块的第二卷积层可能有不同的输入和输出通道宽度,所以可能需要调整残差张量的宽度,这是通过1x1卷积来完成的

    此更改会影响对完整覆盖所需的最小层数的计算。现在我们必须考虑需要多少残差块才能实现接收域的完全覆盖。在TCN中添加一个残差块所增加的接受野宽度是添加一个基本因果层时的两倍,因为它包含两个这样的层。因此,扩张基为b的TCN的感受场总大小r、k≥b的核大小k和剩余块数n可计算为

    这保证了最小的残差块数n为input_length l的完整历史覆盖

    激活,规范化、正规化

    为了使我们的TCN不仅仅是一个过于复杂的线性回归模型,需要在卷积层的顶部添加激活函数来引入非线性。ReLU激活被添加到两个卷积层之后的残差块中。

    为了规范化隐含层的输入(抵消了梯度爆发的问题),权值规范化应用于每一个卷积层。

    为了防止过拟合,在每个剩余块的每个卷积层之后通过dropout引入正则化。下图显示了最终的剩余块。

    第二个ReLU单元中的星号表示该层存在于除最后一层之外的所有层中,因为我们希望最终输出也能够具有负值(这与本文中概述的体系结构不同)。

    模型

    下图显示了我们最终的TCN模型,其中l等于input_length,k等于kernel_size,b等于dilation_base,k≥b,并且对于完整的历史覆盖n为最小数量的残差块,其中n可以从其他值计算得出 如上所述。

    示例

    让我们看一个示例,该示例说明如何使用Darts库使用TCN架构预测时间序列。

    首先,我们需要一个时间序列来训练和评估我们的模型。 为此,我们使用了Kaggle数据集,其中包含来自西班牙的每小时能源生产数据。 更具体地说,我们选择预测“河流上游水电”的产量。 此外,为了使问题的计算量减少,我们将每天的平均能源生产量取平均以获得每日的时间序列。

    from darts import TimeSeries
    from darts.dataprocessing.transformers import MissingValuesFiller
    import pandas as pddf = pd.read_csv('energy_dataset.csv', delimiter=",")
    df['time'] = pd.to_datetime(df['time'], utc=True)
    df['time']= df.time.dt.tz_localize(None)df_day_avg = df.groupby(df['time'].astype(str).str.split(" ").str[0]).mean().reset_index()value_filler = MissingValuesFiller()
    series = value_filler.transform(TimeSeries.from_dataframe(df_day_avg, 'time', ['generation hydro run-of-river and poundage']))series.plot()
    

    我们可以看到,除了每年的季节性之外,每月还会定期出现能源生产中的“峰值”。 由于TCN模型支持多个输入通道,因此我们可以在当前时间序列中添加其他时间序列分量,以对当月的当前日期进行编码。 这可以帮助我们的TCN模型更快地收敛。

    series = series.add_datetime_attribute('day', one_hot=True)
    

    现在,我们将数据分为训练和验证组件并执行标准化。

    from darts.dataprocessing.transformers import Scalertrain, val = series.split_after(pd.Timestamp('20170901'))scaler = Scaler()
    train_transformed = scaler.fit_transform(train)
    val_transformed = scaler.transform(val)
    series_transformed = scaler.transform(series)
    

    现在是时候创建和训练我们的TCN模型了。 注意,上面对体系结构的描述中出现的所有变量名都可以用作Darts TCN实现的构造函数的参数。 由于我们要执行每周预测,因此output_length参数设置为7。 在训练模型时,我们仅将训练系列的第一部分指定为target_series,因为我们不想预测我们之前添加的助手时间序列。 我们尝试了几种不同的超参数组合,但是大多数值是任意选择的。

    from darts.models import TCNModelmodel = TCNModel(
        input_size=train.width,
        n_epochs=20, 
        input_length=365,
        output_length=7, 
        dropout=0, 
        dilation_base=2, 
        weight_norm=True,
        kernel_size=7,
        num_filters=4,
        random_state=0
    )model.fit(
        training_series=train_transformed,
        target_series=train_transformed['0'],
        val_training_series=val_transformed,
        val_target_series=val_transformed['0'], verbose=True
    )
    

    为了评估我们的模型,我们希望使用7天的预测范围在验证集中的许多不同时间点测试其性能。 为此,我们使用了Darts的历史回测功能。 请注意,该模型为每个前提提供了新的输入数据,但从未对其进行过重新训练。 为了节省时间,我们将跨度设置为5。

    pred_series = model.backtest(
        series_transformed,
        target_series=series_transformed['0'],
        start=pd.Timestamp('20170901'), 
        forecast_horizon=7,
        stride=5,
        retrain=False,
        verbose=True,
        use_full_output_length=True
    )
    

    让我们根据地面真实数据点将TCN模型的历史预测预测可视化,并计算R2得分。

    from darts.metrics import r2_score
    import matplotlib.pyplot as pltseries_transformed[900:]['0'].plot(label='actual')
    pred_series.plot(label=('historic 7 day forecasts'))
    r2_score_value = r2_score(series_transformed['0'], pred_series)plt.title('R2:' + str(r2_score_value))
    plt.legend()
    

    有关更多详细信息和其他示例,请在GitHub上查看 https://github.com/unit8co/darts/blob/develop/examples/TCN-examples.ipynb

    结论

    在大多数情况下,序列建模中的深度学习仍与递归神经网络架构广泛相关。 但是研究表明,在预测性能和效率方面,TCN可以在许多任务中胜过这些类型的模型。 在本文中,我们探讨了如何通过简单的构建块(例如一维卷积层,膨胀和残差连接)理解这种有前途的模型,以及它们如何融合在一起。 此外,我们成功地应用了TCN体系结构的当前Darts实现来预测实际时间序列。

    作者:Francesco Lässig

    deephub翻译组

    展开全文
  • CNN卷积网络简介

    万次阅读 2019-11-05 14:11:06
    CNN卷积网络 CNN卷积网络的结构 输入层: 输入层是32×32 RGB图像。 注:有必要计算每一层输出的图片大小。 卷积层: 卷积层的核心在于卷积核与激活函数。 卷积层最主要的作用是寻找与卷积核匹配的特征,因为与卷积...

    CNN卷积网络

    CNN卷积网络的结构

    在这里插入图片描述

    输入层: 输入层是32×32 RGB图像。
    注:有必要计算每一层输出的图片大小。

    卷积层: 卷积层的核心在于卷积核与激活函数。
      卷积层最主要的作用是寻找与卷积核匹配的特征,因为与卷积核符合(卷积核权重较大的位置)的话,卷积后该区域的值也就越大,也就是说,feature map的值越大,表示该处特征越明显。
    在这里插入图片描述
      激活函数的作用是使模型具有非线性性。缺少激活函数的模型是一个线性模型,这样无法模拟任意函数,模型的各层与一个线性函数的效果是一样的。
      激活函数一般选择sigmoid, tanh, relu函数。(深层网络选用relu较多,因为relu可以将部分神经元的输出置0,造成网络的稀疏性,可以缓解过拟合的问题)

    在这里插入图片描述
    在这里插入图片描述
    pool层
      池化层(也叫下采样层)一般用maxpool。
      池化层的作用在于提取重要特征,忽视较小的特征(前面卷积可以通过数字大小决定与特征的符合程度),大幅降低权重参数,减小计算成本。
    在这里插入图片描述
    全连接层
      全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。与池化和卷积不同,它是全局操作,它从前一层获取输入,并全局分析所有前一层的输出。然后将所有特征进行各种可能的组合,用于数据分类。
      先将上一层卷积层的输出展平,扩展成1通道的向量X,然后再对这个向量通过权重W变到Y = W*X, 然后用激活函数非线性化, 经过几个这样的全连接层后,最后一层输出为各个类别的概率.
    在这里插入图片描述

    CNN的每一层都有什么作用?

    卷积层: 关注局部,参数共享,作用是检测特征。
    激活层: 对卷积层经过线性运算的结果赋予非线性特征,否则深度学习的层数没有实际意义。
    池化层: 提取重要特征,忽视较小的特征(前面卷积可以通过数字大小决定与特征的符合程度),大幅降低权重参数,减小计算成本。
    dropout层: 训练后,神经网络的权重与训练样本太过匹配,导致对测试集的效果不好,即过拟合。dropout层是为了解决过拟合的问题。

    参考资料:
    [1]relu函数的意义https://blog.csdn.net/wangkun1340378/article/details/74517252
    [2]maxpool的意义https://blog.csdn.net/pangjiuzala/article/details/71840947
    [3]全连接层https://blog.csdn.net/weixin_41055137/article/details/81174443

    展开全文
  • 卷积网络笔记

    千次阅读 2018-02-08 15:28:46
    卷积网络笔记 卷积网络也叫做卷积神经网络,是一种专门用来处理类似具有网格结构的数据的神经网络。例如时间序列数据(可以认为在时间轴上有规律的一维网格数据)、图像数据(可以认为二维的像素网格数据)。 ...

    卷积网络笔记

    卷积网络也叫做卷积神经网络,是一种专门用来处理类似具有网格结构的数据的神经网络。例如时间序列数据(可以认为在时间轴上有规律的一维网格数据)、图像数据(可以认为二维的像素网格数据)。
    卷积神经网络在许多应用中发挥着巨大的作用,比如图像领域。所以我在学习深度学习过程中,根据自己的理解写下此文,以加深对自己的理解。

    1、卷积运算

    在通常的形式中,卷积是对两个函数的一种数学运算,类似如下:

    s(t)=x(a)w(at)dts(t)=∫x(a)w(a−t)dt

    也可以简化为:
    s(t)=(xw)(t)s(t)=(x∗w)(t)

    在卷积网络的术语中,函数xx通常被称为输入函数,ww被称为核函数,ss是输出函数,也可以叫做特征映射。
    由于很多应用中,数据都是离散的,比如图片和文本。这样时刻tt只能取整数值,如果定义xxww都定义在整数时刻tt上,就可以定义离散形式的卷积:
    s(t)=a=+x(a)w(ta)s(t)=∑a=−∞+∞x(a)w(t−a)

    在实际运用中,输入的通常是多维数据,核函数通常是由训练学习所得到的多位数组参数。tensorflowtensorflow中都管这些多维数组叫做张量。
    例如,我们处理图片的时候,输入的是一个二维数组II,核函数也是一个二维数组记为KK,则卷积公式为:
    s(i,j)=mnI(m,n)K(im,jn)s(i,j)=∑m∑nI(m,n)K(i−m,j−n)

    由于卷积函数是可以交换的,我们也可以写作:
    s(i,j)=mnI(im,jn)K(m,n)s(i,j)=∑m∑nI(i−m,j−n)K(m,n)

    卷积运算的可交换性的出现是因为我们将核函数相对于输入函数进行了翻转。但是对于神经网络来说翻转却并不是卷积一个重要的性质,许多神经网络库中会出现一个相关函数,称为互相关函数,函数如下:
    s(i,j)=mnI(i+m,j+n)K(m,n)s(i,j)=∑m∑nI(i+m,j+n)K(m,n)

    一般的书中会出现下图的卷积函数计算,其计算方式就是如上面公式的描述。
    这里写图片描述

    2、卷积运算的优点

    卷积运算通过三个重要的思想来帮助改进机器学习系统:稀疏交互,参数共享,等变表示。另外,卷积提供了一种输入数据大小可变的处理方法,后文会讲解。

    2.1 稀疏交互

    传统的神经网络使用全连接(矩阵运算),进行输入数据和输出数据之间的连接。其中,参数矩阵中每一个单独的参数都描述了一个输入单元和一个输出单元之间的链接,假设输入单元的数目为 mm,输出单元的数目为nn,则进行转换的参数矩阵数目为mnm∗n。当mmnn非常大的时候,必然带来一个非常大的内存开销。
    但是卷积神经网络核函数的存在,我们只需要检测当前时刻核函数所覆盖的范围内,假设核函数的宽度为kk,输出单元的宽度为nn,则需要的参数矩阵数目为knk∗n,一般情况下,核函数的宽度要远小于输入函数的宽度,这不仅减少了模型参数存储的需求,还增快了统计效率。
    这里写图片描述

    这里写图片描述
    从上图可以看出,处于卷积更深的单元,要比处于浅层单元的接受域更大。处于更深层次的卷积单元,能直接或间接的接受全部或者大部分原始图像特征。

    2.2 参数共享

    参数共享是指在一个模型的多个函数中使用相同的参数。在传统的神经网络中,每一个参数仅仅使用一次,对应着固定的输入和输出神经元,比如参数wi,jwi,j表示第ii个输入神经元和第jj个输出神经元之间的连接权重。而卷积神经网络中的参数共享保证了我们只需要学习到一个卷积核函数,而不是像全连接神经网络一样在每个位置都学习一个卷积核函数。这虽然没有改变前向传播的计算时间,但是它显著的减少了参数的数目。

    2.3 等变表示

    3、池化

    池化函数是使用某一位置相邻元素的统计值来代替当前值的函数,例如最大池化函数使用相邻元素的最大值来代替当前值。其他常用的池化函数有:平均池化函数、L2L2范数、以及距中心距离的加权平均函数。
    不管采用什么样的池化函数,当输入做少许平移的时候,池化函数能帮助输入的表示近似不变。平移的不变性是指当我们对输入进行少量的平移时,经过池化函数后的大多数输出并不会发生变化。
    这里写图片描述
    为什么池化函数有这个特性了?这是因为池化函数只对周围的统计值比较敏感,而对具体的位置并不关心。
    因为池化综合反映了全部邻居的反馈,这使得池化单元少于探测单元成了可能,我们可以通过综合池化区域的kk个像素来实现。下图给出了一个例子,上层的圣经元数目相比下层的神经元数目少了约3倍。
    这里写图片描述
    在很多任务中,池化对处理不同大小的输入具有重要作用。例如我们想对不同大小的图片进行分类,分类层的输入必须是固定大小,而这通常可以调整池化层区域的偏置大小来实现,这样分类层总是能收到相同数量的统计特征,而不必考虑最初的输入大小,当然如果最初的输入大小小于分类层的大小也是不行的。

    4、填充(Padding)

    在任何卷积网络中都一个重要的性质,那就是能能够隐含的对输入边界进行填充(填充值可能为0,可能为边界值)使得它加宽。如果没有这个性质,表示的宽度在每一个卷积层都会相应的缩减。假设表示层的宽度为mm,卷积核的宽度为kk,则经过卷积后新的卷积层宽度为:

    mk+1m−k+1

    要想维持表示层的宽带,面临着一个二选一的局面:要么选择表示层的宽度迅速衰减,要么使用一个尺寸较小的卷积核。
    由于填充的存在,只需要硬件支持,神经网络就能包含任意多的卷积曾,这是因为卷积层的运算没有改变下一级的结构。但是输入像素中靠近边界的部分相比于中间部分对于输出像素的影响更小(因为边界像素部分卷积值是Padding的),这可能会导致边界像素存在一定程度的欠表示。

    5、后记

    卷积神经网络的原理还是比较好理解的,它极大的减少了传统神经网络的参数存储空间和计算的复杂度,并且在很多应用中取得了极大的成功。在后面几章中,我们会继续接受卷积神经网络以及卷积核的选择。

    展开全文
  • TCN时间卷积网络介绍

    万次阅读 2018-12-11 20:20:08
    TCN, Temporal Convolutional Network,时间卷积网络,是一种能够处理时间序列数据的网络结构,论文还评为2018年10大论文。 1. 模型 输入: x0,x1,...,xt{x_0, x_1,..., x_t}x0​,x1​,...,xt​; 输出:y0,y1,...,...
  • 卷积网络FCN与卷积神经网络CNN的区别

    万次阅读 多人点赞 2018-06-05 13:59:34
    背景CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题。神经网络大神Jonathan Long发表了《Fully ...全卷积网络 Fully Convolutional NetworksCNN 与 FCN...
  • 可变形卷积网络

    千次阅读 2017-05-19 19:14:58
    可变形卷积网络--Deformable Convolutional Networks 专栏 | MSRA视觉组最新研究:可变形卷积网络 深度学习方法(十三):卷积神经网络结构变化——可变形卷积网络deformable convolutional networks MSRA微软...
  • 卷积网络

    千次阅读 2017-12-27 20:18:05
    概念概念相信对卷积网络不太陌生的人都知道,几个著名的网络LeNet-5,AlexNet,VGGNet,GoogLeNet,它们在重复了数次“卷积-池化”后,最后总要Flatten一下,得到一个长向量,然后用MLP,最后再softmax也好,SVM也好...
  • 卷积网络 FCN 详解

    万次阅读 多人点赞 2018-07-11 17:59:15
    原文链接:全卷积网络 FCN 详解背景CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题。神经网络大神Jonathan Long发表了《Fully Convolutional Networks for Semantic...
  • 卷积网络GCN理解

    千次阅读 2019-06-12 17:31:23
    卷积网络(Graph Convolutional Network,GCN)是近年来逐渐流行的一种神经网络结构。不同于只能用于网格结构(grid-based)数据的传统网络模型 LSTM 和 CNN,图卷积网络能够处理具有广义拓扑图结构的数据,并深入...
  • 四、全卷积网络FCN详细讲解(超级详细哦)

    万次阅读 多人点赞 2019-07-27 20:57:53
    四、FCN全卷积网络+upsampling上采样+opencv图像金字塔(超级详细哦)1、全卷积网络(FCN)的简单介绍1.1、CNN与FCN的比较1、上采样理论2、OpenCV图像金字塔 1、全卷积网络(FCN)的简单介绍 1.1、CNN与FCN的比较 ...
  • 深度学习之卷积网络

    千次阅读 2017-10-04 15:45:58
    本文介绍了卷积网络的三个重要思想,稀疏连接,参数共享,等变表示。介绍了卷积和池化,以及输出维度和参数量的计算。
  • 卷积网络的进化史

    千次阅读 2018-06-22 18:08:01
    这篇文章是对卷积网络进化过程的详细描述,非常的全面,思路清晰,转自https://tracholar.github.io/machine-learning/2017/07/23/cnn-evalution.html, 留作学习资料学习卷积网络有一段时间了,对卷积网络的演变...
  • 基于属性图卷积网络的属性级情感分类
  • 深度学习中的卷积网络简介

    千次阅读 2018-10-04 08:44:13
    卷积网络(convolutional network)也叫做卷积神经网络(convolutional neural network, CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维...
  • 卷积网络架构对比

    千次阅读 2018-04-11 23:18:26
    卷积网络领域有几个有名字的架构。最常见的是: LeNet。卷积网络的第一个成功应用是由Yann LeCun在20世纪90年代开发的。其中最著名的是用于读取zip编码,数字等的LeNet架构。 本文的主要内容是通过更多地依赖...
  • 提供可视化使得卷积神经网络不同卷积层单元激活最大化的一些图片或者图片块,理解深度卷积网络到底在学习什么
  • 深度学习笔记(27) 经典卷积网络

    万次阅读 2019-06-27 08:34:25
    经典卷积网络、LeNet-5、AlexNet、VGGNet
  • 卷积网络(Graph Convolutional Network)

    万次阅读 多人点赞 2017-08-16 10:55:48
    图简介,图卷积网络的出现。 图(graph)是一种数据格式,它可以用于表示社交网络、通信网络、蛋白分子网络等,图中的节点表示网络中的个体,连边表示个体之间的连接关系。许多机器学习任务例如社团发现、链路预测...
  • 卷积网络详细介绍(一)

    万次阅读 多人点赞 2018-11-09 19:17:24
    在图上进行机器学习是一项困难的任务,因为它的...这篇文章是关于如何用图卷积网络(GCNs)对图进行深度学习的系列文章中的第一篇。本文翻译自Tobias Skovgaard Jepsen写在Medium上的介绍文章,已经获得其本人的许可。
  • FCN 全卷积网络

    千次阅读 2018-06-13 16:20:45
    卷积网络 Fully Convolutional NetworksCNN ​ 通常CNN网络在卷积层之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。​ FCN 对图像进行像素级的分类,从而解决了...
  • TCN-时间卷积网络

    万次阅读 多人点赞 2019-06-03 14:42:01
    二、时序卷积神经网络 2.1 因果卷积(Causal Convolution) 2.2 膨胀卷积(Dilated Convolution) 2.3 残差链接(Residual Connections) 三、讨论和总结 1. TCN的优点 2. TCN的缺点 参考论文:An Empirical ...
  • 卷积网络循环网络结合-CNN+RNN

    万次阅读 多人点赞 2017-09-01 09:29:16
    卷积网络循环网络结合-CNN+RNN1. CNN+RNN相同点 都是传统神经网络的扩展; 前向计算产生结果,反向计算进行模型的更新; 每层神经网络横向可以多个神经元共存,纵向可以有多层神经网络连接。 不同点 CNN进行空间扩展...
  • 深度卷积网络详细解释

    万次阅读 2018-06-21 18:51:44
    深度卷积网络 涉及问题:1.每个图如何卷积: (1)一个图如何变成几个? (2)卷积核如何选择?2.节点之间如何连接?3.S2-C3如何进行分配?4.16-120全连接如何连接?5.最后output输出什么形式?①各个层解释: ...
  • 抽样方法的改进似乎像人类进化一样永无休止 — David 9 CVPR 2017机器视觉顶会今年6月21号才举办,但是2016年11月就投稿...(很可能被收录哦~)我们暂且翻译为:可变形卷积网络。 这是一种对传统方块卷积的改
  • 从群等变卷积网络到球面卷积网络 计划把自己原po在知乎专栏上的文章改进搬过来,最近忙论文先放着。 https://zhuanlan.zhihu.com/p/34042888 本文试图介绍论文Group Equivariant Convolutional Networks的基本...
  • 卷积网络中的通道(Channel)和特征图

    万次阅读 多人点赞 2018-10-02 11:15:14
    卷积网络中的通道(Channel)和特征图 冬天到了,动物们又进入了交配...哦不,冬眠的季节。 每天被冻得什么都不想干,只想吃饭睡觉数星星。Orz 今天介绍卷积网络中一个很重要的概念,通道(Channel),也有叫特征...
  • 关于图卷积网络GCN的一点理解

    千次阅读 2019-05-12 21:01:05
    卷积网络GCN 图卷积网络研究的对象是图数据,研究的模型是卷积神经网络。 1. 为什么会出现图卷积神经网络? 普通卷积神经网络研究的对象是具备Euclidean domains的数据,Euclidean domains data数据最显著的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,000
精华内容 22,400
关键字:

卷积网络