前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何理解深度学习中的deconvolution networks?

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

作者头像
用户1908973
发布2018-07-24 16:11:33
1.2K0
发布2018-07-24 16:11:33
举报
文章被收录于专栏:CreateAMindCreateAMind

谭旭 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CreateAMind 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档