Convolution Network及其变种(反卷积、扩展卷积、因果卷积、图卷积)

今天,主要和大家分享一下最近研究的卷积网络和它的一些变种。

首先,介绍一下基础的卷积网络。

通过PPT上的这个经典的动态图片可以很好的理解卷积的过程。图中蓝色的大矩阵是我们的输入,黄色的小矩阵是卷积核(kernel,filter),旁边的小矩阵是卷积后的输入,通常称为feature map。

从动态图中,我们可以很明白的看出卷积实际上就是加权叠加。

同时,从这个动态图可以很明显的看出,输出的维度小于输入的维度。如果我们需要输出的维度和输入的维度相等,这就需要填充(padding)。

现在我们来看看由padding带来的不同的Conv NN。

首先,我们来看一下不填充(valid)的Conv NN。

我们可以从PPT中的这个静态的图片看出:输出维度O、卷积核的维度K和输入维度I存在如下关系(公式-1)。其中,我们假定input和kernel都是正方形的,因此,我们可以用4表示4*4的input,3表示3*3的kernel。

当input的维度和output的维度相同时,这种padding叫做same padding。同时也叫做half padding。同样,我们可以根据PPT中的图片看出在包含padding的conv时,输出维度和输入维度对应的关系(公式-2)。其中,p表示padding的维度,在此处,我们同样假定会在长和宽这两个维度进行相同数目的padding。

当我们进行k/2的padding时,我们运用刚才的公式(公式-2)可以得到如下结果。同时如果k是奇数(2n+1),则通过推导可知刚好output维度 = input 维度。

当我们对输入数据的顺序很注重的时候,因果卷积(causal conv)便可以发挥作用。

Causal最初跟随WaveNets一起提出。WaveNets是一个生成模型,主要用来生成音乐。WaveNets是利用卷积来学习t时刻之前的输入数据(音频),来预测t+1时刻的输出。也就是说,该模型输出的最后的X的概率会是如公式-3 所示。在公式-3 和PPT中的动态图片中,我们可以看出,t时刻的输出仅仅依赖于1,2,…,t-1时刻的输入,不会依赖于t+1时刻以及之后时刻的输入。这与BiLSTM的思想截然不同。

当你的模型有这种特殊要求时,便可以采用casual。

在实现上,1D的casual 主要是通过padding来实现的。在2D的casual 主要是通过mask filter map来实现的。

以下是我在CHEMDNER数据集下做的简单的实验。其中输入采用的窗口大小为11. 从图中可以明显看出,没有经过仔细调参的CNN明显弱于BiLSTM,而valid形式的CNN要好于经过padding的CNN。这可能是由于padding会带来噪音,干扰模型。

下图,展示了利用CNN来进行NLP任务的流程。可以发现一般会使用多通道的CNN来学习输入的特征,并采用不同的kernel以及pooling。

下面,我们来看一下另一种卷积,扩展卷积(dilated)。扩展卷积目前在NLP上没有应用。主要是用于图像。

Dilated conv在ICLR 2016上提出。其主要作用是在不增加参数和模型复杂度的条件下,可以指数倍的扩大视觉野(每一个输出是由视觉野大小的输入所决定的)的大小。从下图中可以看出这一效果。蓝色的矩形表示视觉野。红色的小点表示kernel。在图a中,kernel是3*3,视觉野是3*3,dilated=1;在图b中,kernel是3*3,但是视觉野是7*7,dilated=2;在图c中,kernel是3*3,但是视觉野是15*15,dilated=4. 可以看出在dilated(扩展系数)扩大时,视觉野同样扩大。

下面,我们使用1D的数据来详细看一下dilated。从下图可以看出,当dilated=2时,每一个输出,“看到了”3个输入(虽然其中2-1=1被忽略了)。当dilated=4时,“看到了”5个输入(4-1=3个被忽略了)

从上面的分析可以看出,dilated与stride非常相似。但dilated与stride可以等同吗?

答案是否定的。我们可以将dilated看成是kernel稀疏化的一种模式。而stride只是dilated的一种特例。根据不同任务,我们可以设计不同的稀疏模式。并不一定要求在宽上的稀疏个数定于长上的稀疏个数。

下图是,论文中给出的效果。该任务是场景分割。Dilated是第4列,标准答案是第5列。可以看出dilated的结果好于其他模型。

下图同样是在CHEMDNER数据集下做的实验。可以看出dilated较小时与普通CNN性能相同。但较大时性能降低。

由于dilated会稀疏化kernel,所以可能对于NER任务不太适合。但是对于文档分类、关系抽取可能效果会好一些。

下面,我们来看一下反卷积(deconvolution)

我要讲的这篇论文是在CVPR 2010上发表。

Deconv在数学上,是反转卷积的效果。在deconv时,我们仅仅知道h,需要求f和g。然而,在conv时,我们知道g,通过正向传播和方向传播来修改f来得到最好的h。

目前,deconv在实际生活中已经用于信号处理、图像处理等方面。

在deep learning上,主要用于以下三个方面。


unsupervised learning: 重构图像


CNN可视化:将conv中得到的feature map还原到像素空间,来观察特定的feature map对哪些pattern的图片敏感

l  Upsampling:上采样。

Deconv又被称为转置的卷积(transposed
conv)。

我们可以将图中conv的过程用矩阵相乘的形式写出来。其中C表示图中的第一个矩阵。X表示第二个矩阵。Y表示第三个矩阵。在公式的两边,同时乘C的转置便可得到反卷积。

由此可知,在前向传播是使用C,后向传播时使用CT便是普通的conv。反之,则是deconv。

下面,介绍一下deconv在图像重构上的应用。该任务主要是抽取图像的特征。下图是论文提供的结果。可以看出效果不错。

该任务采用的loss如图所示,是典型的重构误差+L1正则。

采用的deconv公式如下。表示重构的输入,z表示conv下的feature map,也就是我们任务的结果,f表示kernel。

旁边的图是系统的大概流程。图中F表示deconv,FT表示conv,P表示pool,U表示unpool。R表示F,U,F操作的联合。RT同理。

在一般的流程中(例如利用CNN来做图像分类时),我们首先将图像的像素点经过FT操作输入到z1层,然后通过P操作,然后得到第一层的输出。随后经过第二层的FT、P操作后,同样可以得到第二层的输出。随后,我们便可以用这个第二层的输出来做相关的任务。比如做图像分类。

但是在deconv中,我们需要反向这一个过程。在开始,假设我们的模型已经训练好了。我的任务是那手上的第二层的输出(同样假设我们已经得到),经过U操作、F操作,可以得到第一层的输出。随后再次经过相同的操作后,可以得到重构的输入。由于我们假设模型已经训练好了,故重构的输入与原始的输入相差会非常小。

下图是论文中所采用的3D pooling。与我们熟悉的2D的pooling的不同是3D
pooling首先经过2D pooling后,然后在不同的feature map之间再pool一次。所以是3D的。

而unpooling便是3D pooling 的反向过程。

经过3D pooling 和Unpooling后,可以看出结果稀疏了很多。这也是任务的需求。

介绍完大概流程,下面我们来了解一下模型如何训练。由于在deconv中f和g都不知道,所以需要固定f来最优化g和固定g来最优化f。具体来说,在本任务中,deconv中的filter,图片的feature map(z)未知,我们仅仅只知道原始的y,我们需要得到图片的z,也就是在前几页PPT中展示的图片的轮廓图。

为了便于理解,我们将使用训练好的模型称为inference,训练模型称为learning。Inference对应于固定f,最优化z。learning首先会进行inference操作后,然后再固定z,最优化f。

在inference过程中,分为三个步骤,首先在gradient step时,利用反向传播,可以得到loss对于z的梯度。用该梯度更新z。随后,在shirnkage step上,利用图示的函数来稀疏化z,其中,beta是超参。最后,在Pooling step上,经过P操作,便可以得到最后的第二层的输出。总的来说,在inference过程中,我们会重复执行这3步,直到发现最后的loss足够小。

在learning过程中,我们先经过inference后,然后再利用CG算法在固定z下,最优化f。重复经过这两步后,直到发现最后的loss足够下,则该模型已经训练好。

局部连接层(Locally-connected
layers)是conv的一个扩展。在conv中,所有的W都是共享的。但是在locally中,所有的参数并不是共享的。也就是说,在计算上,locally同样会利用W进行conv(加权叠加),但是这个W每个输入都会不一样。

Locally与conv相比,由于W不共享,因而模型能学习到更复杂的特征。同时也越容易过拟合。

下图同样是在CHEMDNER下做的实验。可以看出反卷积(transpose)微好于CNN-same。

下面介绍一下,图卷积(graph
convolution)。

我们首先不介绍graph conv的理论。我们首先介绍如何使用graph conv。

首先,我们知道图 G =(V,E),其中X表示顶点集V的特征,A表示图的结构信息,通常使用邻接矩阵。在一层的graph conv中,使用上层的输出Hl,A和本层的W作为输入,经过某种函数映射f后,便可以得到本层的输出。

下面,我们假设使用如图所示的函数σ。由于A是图的邻接矩阵,所以只有在当前点与其他点有连接的时候才会有值。这样AHW就会表示当前节点的所有邻居在上一层的输出乘以W。这样,我们通过函数σ就仅仅看到了当前点的局部连接。这与conv的局部连接非常相似。因此,我们可以从这一点来理解graph conv。同时,当我们使用多层的graph conv时,H2会利用H1的值,H1利用的是当前节点的1介邻居的信息,而H2便是利用当前节点1介和2介邻居的信息。

我们利用刚才函数的复杂版,在karate-club数据集上,随机初始化W,使用3层的graph conv,将最后的H3输出来,便可以得到如图的结果。可以看到在未训练时,节点之间的向量距离还不错(相同颜色的点距离较近)。

图中Ahat=A+I,Dhat表示Ahat节点度的对角矩阵。

在理论上,我们可以通过两种途径来解释graph
conv。

l  在频谱图理论中,卷积可以表示为矩阵的乘积。将该公式-4运用chebyshev多项式和其他的近似,我们可以得到公式-5.而公式-5 与我们刚才使用的函数σ是基本相同的。

l  W-L算法告诉我们,我们可以使用当前节点的邻居表示它。

下面来做一下总结。

总结如下图所示。其中dilated可能在文本分类、关系抽取上会取得较好效果。

时间: 06-20

Convolution Network及其变种(反卷积、扩展卷积、因果卷积、图卷积)的相关文章

译:Local Spectral Graph Convolution for Point Set Feature Learning-用于点集特征学习的局部谱图卷积

标题:Local Spectral Graph Convolution for Point Set Feature Learning 作者:Chu Wang, Babak Samari, Kaleem Siddiqi 译者:Elliott Zheng 来源:ECCV 2018 Abstract 点云的特征学习已经显示出巨大的希望,引入了有效且可推广的深度学习框架,例如pointnet ++. 然而,到目前为止,点特征已经以独立和孤立的方式被抽象,忽略了相邻点的相对布局及其特征.在本文中,我们建议

【GCN】图卷积网络初探——基于图(Graph)的傅里叶变换和卷积

[GCN]图卷积网络初探——基于图(Graph)的傅里叶变换和卷积 2018年11月29日 11:50:38 夏至夏至520 阅读数 5980更多 分类专栏: # MachineLearning 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_41727666/article/details/84622965 本文为从CNN到GCN的联系与区别——GCN从入门到精(fang)通(qi

基于图卷积网络的图深度学习

基于图卷积网络的图深度学习 先简单回顾一下,深度学习到底干成功了哪些事情! 深度学习近些年在语音识别,图片识别,自然语音处理等领域可谓是屡建奇功.ImageNet:是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库,并且被业界熟知. 我们先回顾一下,没有大数据支撑的欧式深度学习技术.对于一个字母"Z"的识别,我们通常是建立一个2D网格(点阵),如果将其中的点连接起来,定义这样的连接方式所形成的就是"Z".然后是用其他字母来测试,这个模型的正确性. 传统

[js开源组件开发]network异步请求ajax的扩展

network异步请求ajax的扩展 在日常的应用中,你可能直接调用$.ajax是会有些问题的,比如说用户的重复点击,比如说我只希望它成功提交一次后就不能再提交,比如说我希望有个正在提交的loading效果.所以我做network这个组件来扩展$.ajax,希望全中国的人民们喜欢. 这里使用到了上篇[js开源组件开发]loading加载效果 一个loading效果,但为了让它独立运行,所以没有进行引用,而是直接做了一个loading方法在里面.它的具体效果图如下: 它的实例DEMO地址请点击这里

图卷积

原文:http://tkipf.github.io/graph-convolutional-networks/ 多层图卷积网络 (GCN) with first-order filters. GCNs Part I: Definitions 给定一个网络结构G=(V,E), 1. N个节点,每个节点有D维信号或特征,即节点输入信号为N*D维矩阵, 记作X 2. 图结构表示,邻接矩阵A 3. 放入到图卷积网络中,得到输出Z,其中Z是N*F矩阵, F代表每个节点输出的特征维度 至于这个多层图卷积网络

深度学习面试题09:一维卷积(Full卷积、Same卷积、Valid卷积、带深度的一维卷积)

目录 一维Full卷积 一维Same卷积 一维Valid卷积 三种卷积类型的关系 具备深度的一维卷积 具备深度的张量与多个卷积核的卷积 参考资料 一维卷积通常有三种类型:full卷积.same卷积和valid卷积,下面以一个长度为5的一维张量I和长度为3的一维张量K(卷积核)为例,介绍这三种卷积的计算过程 一维Full卷积 Full卷积的计算过程是:K沿着I顺序移动,每移动到一个固定位置,对应位置的值相乘再求和,计算过程如下: 将得到的值依次存入一维张量Cfull,该张量就是I和卷积核K的ful

自相关函数怎么理解,为什么定义中有共轭,卷积呢。定义中的卷积,共轭有什么意义?尤其是在信号处理方面

知乎上有解答,相当经典:https://www.zhihu.com/question/24687047 简洁地解释如下: 1) 首先我们仅考虑实信号. 自相关的直观含义就是:把一个信号平移一段距离,跟原来有多相似. 于是就有了自相关的定义: 它代表了“移.乘.积”这三步操作. 如果只谈自相关,其实到此就可以结束了. 只不过,在信号处理领域中还有一个叫“卷积”的东西,在别的地方(已知线性时不变系统的冲激响应和输入,求响应)有用. 它跟自相关的定义很相似,包含了“卷.移.乘.积”四步操作: 左边有时

卷积神经网络(二):卷积神经网络CNN的BP算法

该文档参考了:http://www.cnblogs.com/tornadomeet/p/3468450.html 在此表示感谢. 一般而言,多类别神经网络的输出一般采用softmax形式,即输出层的激活函数不采用sigmoid或者tanh函数.那么神经网络的最后一层的输出则为 下面看从pooling层到卷积层的误差如何反向传播,和多层神经网络一样,可以通过层与层间的连接实现误差传播,只是计算公式变为, 其中的系数根据pooling的方法赋值,如果是mean-pooling则把pooling层的误

卷积神经网络(二)深度卷积网络:实例探究

1.经典网络: (1)LeNet-5:识别手写数字 (2)AlexNet: (3)VGG-16: 2.Residual networks(ResNets 残差网络): (1)Residual block(残差块): 多个残差块构成一个残差网络: (2)残差网络的优势: 理论上,随着神经网络的深入,训练误差会越来越小,但实际上,层数越多训练的难度越大,因此层数过多误差也会增大. 但残差网络适用于深层的神经网络,误差随着层数的增多而减小. (3)为什么残差网络性能更好? 3.网络中的网络和1*1卷积