深度网络结构是由多个单层网络叠加而成的,而常见的单层网络按照编码解码情况可以分为下面3类:

  1. 既有encoder部分也有decoder部分:比如常见的RBM系列(由RBM可构成的DBM, DBN等),autoencoder系列(以及由其扩展的sparse autoencoder, denoise autoencoder, contractive autoencoder, saturating autoencoder等)。
  2. 只包含decoder部分:比如sparse coding, 和今天要讲的deconvolution network.
  3. 只包含encoder部分,那就是普通的feed-forward network.

  Deconvolution network的中文名字是反卷积网络,那么什么是反卷积呢?其概念从字面就很容易理解,假设A=B*C 表示的是:B和C的卷积是A,也就是说已知B和C,求A这一过程叫做卷积。那么如果已知A和B求C或者已知A和C求B,则这个过程就叫做反卷积了,deconvolution.

  Deconvolution network是和convolution network(简称CNN)对应的,在CNN中,是由input image卷积feature filter得到feature map, 而在devonvolution network中,是由feature map卷积feature filter得到input image. 所以从这点看,作者强调deconvolution network是top-down是有道理的(具体可参考Zeiler的Deconvolutional networks),看下图便可知:

  

  上图表示的是DN(deconvolution network的简称)的第一层,其输入图像是3通道的RGB图,学到的第一层特征有12个,说明每个输入通道图像都学习到了4个特征。而其中的特征图Z是由对应通道图像和特征分别卷积后再求和得到的。

  本人感觉层次反卷积网络和层次卷积稀疏编码网络(Hierarchical Convolution Sparse Coding)非常相似,只是在Sparse Coding中对图像的分解采用的是矩阵相乘的方式,而在DN这里采用的是矩阵卷积的形式。和Sparse coding中train过程交叉优化基图像和组合系数的类似,DN中每次train时也需要交叉优化feature filter和feature map.

  DN的train过程:

  学习DN中第l(小写的L)层网络的特征时,需优化下面的目标函数:

  

  它是将第l层网络的输出当做第l+1层网络的输入(这和通常的deep network训练过程类似),其中的  表示第l层的特征图k和第l-1层的特征图c的连接情况,如果连接则为1,否则为0. 对上面loss函数优化的思想大致为:

  1. 固定   ,优化   ,但是这样不能直接优化(没弄清楚原因,可参考博客下面网友的评论),因此作者引入了一个辅助变量  ,则这时的loss函数变为:

  

 上式loss函数中对辅助变量  和  之间的距离进行了惩罚,因此这个辅助变量的引入是合理的,接着交替优化  和  ,直到    收敛(具体可参考文章公式细节)。

  2. 固定  ,优化  ,直接采用梯度下降法即可。

  DN的test过程:

  学习到每层网络的filter后,当输入一张新图片时,可同样采用重构误差和特征图稀疏约束来优化得到本层的feature map, 比如在第一层时,需优化:

  

  其中的f是在训练过程中得到的。

  提取出图片y的DN特征后(可多层),可以用该特征进行图像的识别,也可以将该特征从上到下一层层卷积下来得到图像y’,而这个图像y’可理解为原图像y去噪后的图像。因此DN提取的特征至少有图像识别和图像去噪2个功能。

  不难发现,如果读者对卷积稀疏编码网络熟悉的话,也就比较容易理解反卷积网络了。同理,和sparse coding一样,DA的train过程和test过程的速度都非常慢。

读完这篇paper,不得不佩服搞数学优化的人。

  参考资料:

  Deconvolutional Networks, Matthew D. Zeiler, Dilip Krishnan, Graham W. Taylor and Rob Fergus.

Deep learning:五十(Deconvolution Network简单理解)的更多相关文章

  1. Deep learning:四十一(Dropout简单理解)

    前言 训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择.Dropout是hintion最近2年提出的,源于其文章Improving neural n ...

  2. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  3. Deep learning:四十九(RNN-RBM简单理解)

    前言: 本文主要是bengio的deep learning tutorial教程主页中最后一个sample:rnn-rbm in polyphonic music. 即用RNN-RBM来model复调 ...

  4. [C1W2] Neural Networks and Deep Learning - Basics of Neural Network programming

    第二周:神经网络的编程基础(Basics of Neural Network programming) 二分类(Binary Classification) 这周我们将学习神经网络的基础知识,其中需要 ...

  5. Java开发笔记(五十八)简单接口及其实现

    前面介绍了抽象方法及抽象类的用法,看似解决了不确定行为的方法定义,既然叫唤动作允许声明为抽象方法,那么飞翔.游泳也能声明为抽象方法,并且鸡类涵盖的物种不够多,最好把这些行为动作扩展到鸟类这个群体,于是 ...

  6. 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 2 - Neural Network Basics(第二周测验 - 神经网络基础)

    Week 2 Quiz - Neural Network Basics(第二周测验 - 神经网络基础) 1. What does a neuron compute?(神经元节点计算什么?) [ ] A ...

  7. Japanese Learning - 五十音图

    平假名: 片假名: あ い う え お ア イ ウ エ オ か き く け こ カ キ ク ケ コ さ し す せ そ サ シ ス セ ソ た ち つ て と        タ チ ツ テ ト な に ...

  8. Deep learning:三十四(用NN实现数据的降维)

    数据降维的重要性就不必说了,而用NN(神经网络)来对数据进行大量的降维是从2006开始的,这起源于2006年science上的一篇文章:reducing the dimensionality of d ...

  9. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

随机推荐

  1. poj 3067 - Japan(树状数组)

    先按第一个数从大到小排序,相等的情况下,第二个数按照从大到小排序..... 预处理后,照着树状数组写就行了... 注意:k的最大值应取1000*1000 代码如下: include <cstdi ...

  2. iOS 项目改名~~~~~

    今早出现一个改名的囧事...先记录下...在此之前感谢整理过这片文章的作者 --- GarveyCalvin ,插眼!以下是正文---- 前言:在iOS开发中,有时候想改一下项目的名字,都会遇到很多麻 ...

  3. Xamarin.Android中使用ResideMenu实现侧滑菜单

    上次使用Xamarin.Android实现了一个比较常用的功能PullToRefresh,详情见:Xamarin. Android实现下拉刷新功能 这次将实现另外一个手机App中比较常用的功能:侧滑菜 ...

  4. [.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

    一.引用 其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计.领域驱动设计C# 2008实现.领域驱动设计:软件核心复杂性应对之道.实现领域驱动设计 ...

  5. Flume概述和简单实例

    Flume概述 Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方( ...

  6. 《OOC》笔记(0)——为何要看这本书

    <OOC>笔记(0)——为何要看这本书 <OOC>全名是<Object-oriented Programming with ANSI-C>,作者Axel-Tobia ...

  7. ThreadStatic应用(Identity补完)

    关于Identity Identity自增序列/唯一断标识 起初做这个东西,是在一个内部组件中,用于在高并发的环境下得到一个较短的“相对”不重复标识字符串;(这里说的相对是指一定的数量下不重复) 灵感 ...

  8. redis系列-主从复制

    redis自身提供了主从的机制,通过配置可以实现服务的备份(Master->Slave). 配置项 slaveof <masterip> <masterport> mas ...

  9. nginx负载下站点错误响应会导致其他节点重复响应问题的解决过程

    目录 前言 问题来了 问题又来了 问题分析 困惑 转机 后续 前言: 这是我上周工作过程中的一次解决问题的过程.解决的是nginx负载下站点错误响应导致其他节点重复响应. 我在整理这个记叙文时,在给这 ...

  10. iOS ARC模式 内存管理

     1,测试一 ;i<;i++) { NSLog(@"i = %d",i); } 2,测试二 ;i<;i++) { NSLog(@"i = %d",i ...