如何理解深度学习中的deconvolution networks?

谭旭 https://www.zhihu.com/question/43609045/answer/132235276

研究各种涮法,清汤的,麻辣的

杨军

等 76 人赞同了该回答

最近详细看了一下deconvolutional network相关文章,其实deconv的用处还挺广的,涉及到visualization/pixel-wise prediction/unsupervised learning/image generation都会用到deconv的结构。比如Deconvolutional Network[1][2]做图片的unsupervised feature learning,ZF-Net论文中的卷积网络可视化[3],FCN网络中的upsampling[4],GAN中的Generative图片生成[5]。

如果只是单纯想了解conv和deconv操作本身,建议直接查看[8],后面是关于deconv相关应用的详细介绍。

Deconvolution大致可以分为以下几个方面:

(1)unsupervised learning,其实就是covolutional sparse coding[1][2]:这里的deconv只是观念上和传统的conv反向,传统的conv是从图片生成feature map,而deconv是用unsupervised的方法找到一组kernel和feature map,让它们重建图片。

(2)CNN可视化[3]:通过deconv将CNN中conv得到的feature map还原到像素空间,以观察特定的feature map对哪些pattern的图片敏感,这里的deconv其实不是conv的可逆运算,只是conv的transpose,所以tensorflow里一般取名叫transpose_conv。

(3)upsampling[4][5]:在pixel-wise prediction比如image segmentation[4]以及image generation[5]中,由于需要做原始图片尺寸空间的预测,而卷积由于stride往往会降低图片size, 所以往往需要通过upsampling的方法来还原到原始图片尺寸,deconv就充当了一个upsampling的角色。

下面分别介绍这三个方面的文章:

1. covolutional sparse coding

首先介绍第一个方面covolutional sparse coding,主要介绍Deconvolutional

Network的两篇文章[1][2],都是由New York University的Matthew D. Zeiler, Rob Fergus等人提出来的(他们提出的ZF-net也是ILSVRC 2013的冠军,Matthew D. Zeiler是Rob Fergus的PhD,毕业后去了自己的人工智能初创公司clarifai,而Rob Fergus也加入了Facebook AI Research),最后再简单介绍deconv的一些应用。

第一篇文章Deconvolutional Networks[1]主要用于学习图片的中低层级的特征表示,属于unsupervised feature learning,和传统的auto-encoder,RBM比较类似,和它最像的还是sparse coding,这里先简单介绍一下sparse coding[6],便于后续理解Deconvolutional Network。

Sparse coding是学习一个输入向量x在basis空间phi下的系数a,这个a即是输入向量在phi空间的向量表示:

其中phi是全局变量,对所有输入x都一样,a是局部隐变量,每个x都不一样。这种隐变量模式和K-means,GMM,LDA中的隐变量模式一模一样,所以可以看出这种unsupervised带隐变量的学习都有类似的套路。

Sparse coding和PCA变换最大的不同是PCA找的这个basis空间是complete set,而sparse coding找的这个basis空间是over-complete set,解释是over-complete set能更好的表达输入数据的潜在pattern。由于basis空间是over-complete的,所以系数a就不是唯一的了(一个不太恰当的类比就是方程组求解中,求解三个未知数,但只有两个方程,所以求得的未知数不唯一),所以要引入sparsity,方法就是加正则。Sparse coding的loss function如下:

第一项是reconstruction误差,第二项是正则,一般L1。还有个问题是,如果要保证a足够小,那么让basis vector phi足够大也能达到正则sparsity的目的,这是我们不想要的,所以再加一个约束,

让phi小于某个常数。

学习求解这个loss function就是隐变量学习的通用技巧,有点像alternating least squares(ALS)交替优化。Sparse coding一个不足就是在learning阶段需要学习a和phi,在inference阶段还是需要学习a,runtime cost比较高。

接下来开始介绍Deconvolutional Network,和sparse coding的思路比较类似,是学输入图片y的latent feature map z,同时也要学卷积核f。如果非要用sparse coding那套来类比解释的话,就是学习图片在basis空间f的系数表示z。只是操作由点乘变成了卷积,如下图所示,

其中y是输入图片,c是图片的feature map(color channel)数量,z是feature map,k是feature map数量,f是卷积核。f和z分别对应sparse coding里的phi和a。Loss function是

上述结构只是单层的deconvolutional layer,可以继续按照这个方法叠加layer,第一层的z就作为第二层的图片输入。Loss function如式3:

其中

就是上一层的feature map表示,作为当前层的输入,

是一个0-1矩阵,相当于一个mask,用来决定哪些位置的输入需要连接,有点denoising auto-encoder的味道,附上denoising auto-encoder的关于denoising的解释[7]:

上图说明基于一部分变量去预测另一部分变量的能力是学习变量的联合分布的关键,这也是Gibbs sampling能work的原因。

下面分别介绍Deconcolutional Network的learning和inference

(1) learning

Deconcolutional Network的学习也是alterlative交替优化,先优化feature map z,再优化filter f,如果有多层的话也是逐层训练。

首先第一步是学习feature map。学习Deconcolutional Network的loss function有些困难,原因是feature map中的不同位置的点因为filter互相耦合比较严重。作者尝试了GD,SGD,IRLS(Iterative Reweighted Least Squares)这些优化方法,效果都不理想。因此作者使用了另外一个优化方法,不是直接优化式3中的z,而是选择了一个代理变量x,让z接近x,同时正则化x达到和式3中loss function同样的效果:

优化上式也是采用交替优化z和x的方法。

第二步是学习filter,正常的梯度下降即可。

整个Deconvolutional Network的学习算法如下图所示,其中红色框是学习feature map,其实也相当于做inference,蓝色框是学习filter,相当于模型本身的参数学习。

(2) inference

Inference包括两个层面,一个是根据输入图片和学到的filter inference latent feature map,第二是根据latent feature map reconstruct图片。以两层Deconcolutional Network为例,首先学习第一层z1,然后学习第二层的z2,注意第二层的学习有两个loss,一个是重建z1的loss,

即project 1次学习和z1的误差

另一个是继续重建原图片的loss,即project两次学习和原始图片y的误差

z1和z2学习到后,就可以重建原图片了

下图是Deconcolutional Network学习到的filter示例,可以看到通过unsupervised的方法一样能学到线条以及线条组合等中低层特征,具体分析可见论文。

第二篇文章Adaptive Deconvolutional Networks for Mid and High Level Feature Learning[2]也是通过deconvolutional network学习图片的特征表示,和上一篇不同的是加入了pooling,unpooling,deconv(transpose conv,deconv的参数只是原卷积的转置,并不原卷积的可逆运算)。这篇文章才是可视化常用的反卷积,上篇文章的deconv只是说conv的方向从feature map到图片,也还是feedforward的概念,不是这篇里用的conv和transpose conv。

这篇文章就是要学习图片的所有层级的特征,还是用unsupervised的方法。以往的其它方法在逐层学习的时候图片原始像素丢掉了,学习的target只是上一层的feature map,所以高层的filter和输入图片的连接就没那么强了,导致学得不好,所以它要end to end的学习,学习都是以原始像素作为target学习。

网络结构还是一样有deconvolution

然后引入了pooling,采用的是3D pooling,both in a 2D map and between maps,然后记录max pooling value and switch idx,也就是pooling的receptive field中最大值的位置。 unpooling的时候最大值的位置还原,其它位置填0,如下图所示:

整个网络结构(两层)如下图所示:

首先看右边的卷积通道:y--conv1--z1--pool1--p1--conv2--z2--pool2--p2

然后是左边的反卷积通道:p2--unpool2--z2--devonv2--p1--unpool2--z1--deconv1--y^

同一层中的conv与deconv的参数是转置关系,整个conv通道用

表示,deconv通道用

表示,下标l代表deconv网络的层数,conv通道的组成为:

网络的学习也是分两个步骤,先固定filter学习feature map (inference),然后固定feature map学习filter (learning),和上一篇文章一样,学习没什么难的,大致步骤如下图,具体可以参见paper细节,图片中的红框代表inference,蓝框代表learning。

最后将提出来的feature用于图片识别分类,使用中间层的feature map作为SPM (Spatial

Pyramid Matching) 的输入,M个feature map的reconstruction average 起来,得到一个SPM的single pyramid,最后SPM分类器的效果能达到comparable的效果。

2. CNN可视化 deconv第二个方面是用来做CNN的可视化。ZF-Net[3]中用到了deconv来做可视化,它是将CNN学习到的feature map用得到这些feature map的卷积核,取转置,将图片特征从feature map空间转化到pixel空间,以发现是哪些pixel激活了特定的feature map,达到分析理解CNN的目的。 3. upsampling 分别简单介绍两篇文章,FCN和DCAN。FCN[4]主要用来做pixel-wise的image segmentation预测,先用传统的CNN结构得到feature map,同时将传统的full connected转换成了对应参数的卷积层,比如传统pool5层的尺寸是7×7×512,fc6的尺寸是4096,传统的full connected weight是7×7×512×4096这样多的参数,将它转成卷积核,kernel size为7×7,input channel为512,output channel为4096,则将传统的分别带有卷积和全连接的网络转成了全卷积网络(fully convolutional network, FCN)。FCN的一个好处是输入图片尺寸大小可以任意,不受传统网络全连接层尺寸限制,传统的方法还要用类似SPP结构来避免这个问题。FCN中为了得到pixel-wise的prediction,也要把feature map通过deconv转化到像素空间。论文中还有一些具体的feature融合,详情可参见论文。

DCGAN[5]中使用deconv就更自然了,本身GAN就需要generative model,需要通过deconv从特定分布的输入数据中生成图片。GAN这种模式被Yann LeCun特别看好,认为是unsupervised learning的一个未来。

以上就是关于deconv以及相关应用的简单介绍,本篇文章只是在学习过程中记录整理deconv相关知识点,不敢保证内容的完全正确性,如有兴趣可以多多交流。

[1] Zeiler M D, Krishnan D, Taylor G W, et al. Deconvolutional networks[C]. Computer Vision and Pattern Recognition, 2010.

[2] Zeiler M D, Taylor G W, Fergus R, et al. Adaptive deconvolutional networks for mid and high level feature learning[C]. International Conference on Computer Vision, 2011.

[3] Zeiler M D, Fergus R. Visualizing and Understanding Convolutional Networks[C]. European Conference on Computer Vision, 2013.

[4] Long J, Shelhamer E, Darrell T, et al. Fully convolutional networks for semantic segmentation[C]. Computer Vision and Pattern Recognition, 2015.

[5] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

[6] Sparse Coding - Ufldl

[7] Denoising Autoencoders (dA)

[8] Convolution arithmetic tutorial

原文发布于微信公众号 - CreateAMind(createamind)

原文发表时间:2017-05-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

决策树算法介绍及应用

1323
来自专栏SIGAI学习与实践平台

流形学习概述

在很多应用中,数据的维数会很高。以图像数据为例,我们要识别32x32的手写数字图像,如果将像素按行或者列拼接起来形成向量,这个向量的维数是1024。高维的数据不...

1524
来自专栏AI科技大本营的专栏

AI从入门到放弃:BP神经网络算法推导及代码实现笔记

作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍!

1652
来自专栏机器学习算法与Python学习

基础回顾 | 10幅图解释机器学习中的基本概念

1. Test and training error: 为什么低训练误差并不总是一件好的事情呢:以模型复杂度为变量的测试及训练错误函数。

800
来自专栏智能算法

初识支持向量机原理

支持向量机作为机器学习中最为难于理解的算法,小编将以三篇的篇幅去讲解小编自己理解的SVM算法。主要包括:初识支持向量机原理、SVM如何解决线性不可分、SVM实践...

3356
来自专栏机器之心

IJCAI 2018 | 让CNN跑得更快,腾讯优图提出全局和动态过滤器剪枝

作者:Shaohui Lin、Rongrong Ji、Feiyue Huang 等

1403
来自专栏技术翻译

用数学方法解密神经网络

在本文中,我们将讨论简单神经网络背后的数学概念。其主要目的是说明在建立我们自己的人工智能模型时,数学是如何发挥巨大作用的。

1540
来自专栏marsggbo

(转载) 浅谈高斯过程回归

  在训练集中,我们有3个点 x_1, x_2, x_3,   以及这3个点对应的结果,f1,f2,f3. (如图) 这三个返回值可以有噪声,也可以没有。我们先...

2181
来自专栏专知

【干货】结合单阶段和两阶段目标检测的优势:基于单次精化神经网络的目标检测方法

【导读】近日,针对目标检测中单阶段和两阶段方法分别存在准确度和速度瓶颈的问题,来自中科院自动化所、中国科学院大学和GE Global Research的学者发表...

65910
来自专栏人工智能的秘密

拆解VGGNet网络模型在分类和定位任务上的能力

下面我们将对2014年夺得ImageNet的定位第一和分类第二的VGG网络进行分析,在此过程中更多的是对这篇经典文章的感性分析,希望和大家共同交流产生共鸣,如果...

4729

扫码关注云+社区