转载自:

干货 | 你真的了解 Convolutional Neural Networks 么
https://mp.weixin.qq.com/s?__biz=MzAwMjM3MTc5OA==&mid=403231780&idx=1&sn=4d6b282e45a016df274b72f08ddf8492&scene=1&srcid=0111p2ycZ4HF6hZ8N9eohts2&ascene=1&uin=OTE0NTE3ODQx&devicetype=webwx&version=70000001&pass_ticket=8WwTcRsKg44bcrNwjcBl175U1yC17S0EJItWCw7eG1u5%2Fripwp%2FMV3S1QmkuD7Sl

包括全卷积网络:http://arxiv.org/abs/1412.6806

Network In Network(只是讲了一方面):http://arxiv.org/abs/1312.4400

Spatial Transformer Networks:http://arxiv.org/abs/1506.02025

Stacked What-Where Auto-encoders:http://arxiv.org/abs/1506.02351

今天要跟大家分享的是一些 Convolutional Neural Networks(CNN)的工作。大家都知道,CNN 最早提出时,是以一定的人眼生理结构为基础,然后逐渐定下来了一些经典的架构——convolutional 和 pooling 的交替,最后再加上几个 fully-connected layers 用作最后做 prediction 等的输出。然而,如果我们能“反思”经典,深入剖析这些经典架构中的不同 component 的作用,甚至去改进它们,有时候可能有更多的发现。所以,今天分享的内容,便是改进 CNN 的一些工作。

  Striving For Simplicity : The All Convolutional Net

先说一篇探究 CNN 中不同 component 的重要性和作用的工作。这篇工作发表于 ICLR 2015,已经有一年多的时间了。个人觉得它应该受到更大的关注。这篇工作最大的贡献是,把经典架构的 CNN 中的 pooling 层,用 stride convolutional 层给替换掉了,也就是去掉了 deterministic 层。并且,通过数学公式和实验结果证明,这样的替换是完全不会损伤性能的。而加入 pooling 层,如果不慎,甚至是有伤性能的。

具体来看,CNN 中的每次 feature map 表达,都可以看做一个 W*H*N 的三维结构。在这个三维结构下,pooling 这种 subsampling 的操作,可以看成是一个用 p-norm(当 p 趋向于正无穷时,就是我们最常见的 max-pooling)当做 activation function 的 convolutional 操作。有了这样的解释,自然而然地,就会提出一个问题:那么引入这样的 pooling 操作,有什么意义呢?真的有必要么?在过去的工作中,大家普遍认为,pooling 层有三种可能的功效:(1)提取更 invariant 的 feature;(2)抽取更广范围的(global)的 feature——即 spatially dimension reduction;(3)更方便优化。这篇作者认为,其中(2)是对 CNN 最重要的。基于此,它们就提出,那么我只要在去掉 pooling 层的同时,保证这种 spatially dimension reduction——是否就可以构造出一个 all convolutional net,同时这个 net 的效果还不比 convolutional + pooling 交替的差?


最后,果然,如他们所料。它们的 all convolutional net 达到了甚至有时候超过了 state-of-art,同时他们还发现有时候加入 pooling 反而不如不加。这篇工作的另外一个贡献是他们提出了一种新的 visualizing CNN 的方法,效果更直观更有分辨性。总结来说,这篇工作提出的 all convolutional net 可以实现自主 downsampling,并且效果不差;其二,它不是在说 pooling 不好,我们一定要抛弃;而是对于 minimum necessary ingredients for CNN 进行了探究。

 Network in Network

第一个要分享的是如何去 replace pooling layer after convolutional layer,接下来要分享的是 replace fully-connected layer on the top of CNN。这个也是经典的 CNN 架构中的一个组成部分。也许这个东西大家还不熟悉,但是提到另一个词,大家就会很熟悉了。那就是,dropout。已经有非常多的工作,在 CNN 的 fully-connected layer 中,加入 dropout,来避免 overfitting。受此启发,后来又有了一个 sparse convolutional neural networks 的工作。然而,更具开创性的工作是,《Network in Network》这篇,提出了用 global averaging pooling layer 替代 fully-connected layer.

这样的 global averaging pooling layer 显然,可以把 input/feature map 和 output/category,也就可以达到减少 overfitting 的作用(和 dropout 一样)。


现在,global average pooling 已经被用得很广泛,比如在《Going Deeper with Convolutions》中,作者指出:

We found that a move from fully connectedlayers to average pooling improved the top-1 accuracy byabout 0.6%, however the use of dropout remained essentialeven after removing the fully connected layers.

当然它也有它自己的一定弊端,比如 convergence 会变慢。但是关于 fully-connected layer 是否一定是必须的这个问题,却在被各种工作和各种场景探究。比如 Google 去年非常火的 inceptionism 的工作中,也放弃了 fully-connected layer,并达到了很好的效果。

所以,关于这点,小S 是认为,我们不要光看表面的 dropout or global averaging pooling 这些技术,而是要去思考它们的共同之处和它们的原理。从它们带给网络结构的变化入手。也许现在来看,最初的结论还是对的,deeper is better,我们暂时要解决的是如何 deeper。

 Spatial Transformer Networks

这篇是 NIPS 2015 中,来自 Google DeepMind 的工作。这篇也被前几天 huho larochelle 评选出的 Top 10 arXiv 2015 Deep Learning Papers 收录(另外提一下,昨天看到这个评选,发现大部分我都写过笔记了,大家如果感兴趣,我可以单独整理一份,以供大家查阅)。回到这篇工作上来,它主要是说,尽管 CNN 一直号称可以做 spatial invariant feature extraction,但是这种 invariant 是很有局限性的。因为 CNN 的 max-pooling 首先只是在一个非常小的、rigid 的范围内(2×2 pixels)进行,其次即使是 stacked 以后,也需要非常 deep 才可以得到大一点范围的 invariant feature,三者来说,相比 attention 那种只能抽取 relevant 的 feature,我们需要的是更广范围的、更 canonical 的 features。为此它们提出了一种新的完全 self-contained transformation module,可以加入在网络中的任何地方,灵活高效地提取 invariant image features.


具体上,这个 module 就叫做 Spatial Transformers,由三个部分组成: Localization Network, Grid generator 和 Sampler。Localization Network 非常灵活,可以认为是一个非常 general 的进一步生成 feature map 和 map 对应的 parameter 的网络。因此,它不局限于用某一种特定的 network,但是它要求在 network 最后有一层 regression,因为需要将 feature map 的 parameter 输出到下一个部分:Grid generator。Grid generator 可以说是 Spatial Transformers 的核心,它主要就是生成一种“蒙版”,用于“抠图”(Photoshop 附体……)。Grid generator 定义了 Transformer function,这个 function 的决定了能不能提取好 invariant features。如果是 regular grid,就好像一张四四方方没有倾斜的蒙版,是 affined grid,就可以把蒙版“扭曲”变换,从而提取出和这个蒙版“变换”一致的特征。在这个工作中,只需要六个参数就可以把 cropping, translation, rotation, scale and skew 这几种 transformation 都涵盖进去,还是很强大的;而最后的 Sampler 就很好理解了,就是用于把“图”抠出来。


这个工作有非常多的优点:(1)它是 self-contained module,可以加在网络中的任何地方,加任何数量,不需要改变原网络;(2)它是 differentiable 的,所以可以直接进行各种 end-to-end 的训练;(3)它这个 differentiable simple and fast,所以不会使得原有网络变慢;(4)相比于 pooling 和 attention 机制,它抽取出的 invariant features 更 general。

 Stacked What-Where Auto-encoders

这篇文章来自 NYU,Yann LeCun 组,已投稿到 ICLR 2016。与之前整理过的 improving information flow in Seq2Seq between encoder-decoder 类似的是,这篇文章主要是改进了基于 CNN 的 encoder-decoder,并非常 intuitive 的讨论了不同 regularizer 的区别。架构图可以直接看 Figure 1 的右侧,会比较清晰。具体来讲,Stacked What-Where Auto-encoders(SWWAE) 基于前向 Convnet 和前向 Deconvnet,并将 max-pooling 的输出称为 “what”,其实就是将 max function 的 content 和 position 传给下一层;同时,max-pooling 中的 position/location 信息,也就是 argmax function,作为 “where” 要“横向”传给 decoder。这样,在进行 decoder reconstruct 的过程时,则更能基于 where + what 的组合,进行 unpooling。

为了能让网络利用好 what 和 where,文章考虑了三种 loss,见公式(1),即传统的 discriminate loss,和新增的 input-level reconstruction loss for “what” 还有 intermediate-level reconstruction loss for “where”。

如上文所说,文章的 Section 3 很 intuitive,首先说明并解了为什么使用的是 soft version 的 max/argmax 去进行 ”what“ 和 ”where“;第二,讨论了为何加入 reconstruction loss 和这样一个 hybird loss function 更好(generalization 和 robustness);第三,说明了 intermediate loss 对于“what”“where”一起学习的重要性。

实验结果上来看,这样的 SWWAE 模型 generate 出来的图片更清晰,更“干净”(clearer and cleaner)。

其实,关于 CNN 的改进和探究,是很符合科研发展的。就像更熟悉的 RNN 一样,一个东西火起来,被证实在各种领域 powerful,那么紧随其后的便是对于其原理的深刻揭示。当关于原理的基础工作有了突破,又会对后续的改进和实际应用起到指导作用。这便是科学工作中的一种 pattern 吧。

回顾一些重要的CNN改进模型(你真的了解 Convolutional Neural Networks 么)相关推荐

  1. CNN实现过程(卷积神经网络Convolutional Neural Networks)

    1.图像的输入 一张照片是如何输入到神经网络中的.众所周知,计算机适合处理的是矩阵运算,所以必须要把图片转换成矩阵后计算机才能认识.所有的彩色图像都由红绿蓝(RGB)叠加而成,成为图像的三个通道,一张 ...

  2. keras构建卷积神经网络(CNN(Convolutional Neural Networks))进行图像分类模型构建和学习

    keras构建卷积神经网络(CNN(Convolutional Neural Networks))进行图像分类模型构建和学习 全连接神经网络(Fully connected neural networ ...

  3. 【卷积神经网络】卷积神经网络(Convolutional Neural Networks, CNN)基础

    卷积神经网络(Convolutional Neural Networks, CNN),是一种 针对图像 的特殊的 神经网络. 卷积神经网络概述 Why not DNN? 图像数据的维数很高,比如 1, ...

  4. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)

    前面, 介绍了DNN及其参数求解的方法(深度学习之 BP 算法),我们知道DNN仍然存在很多的问题,其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸.那么,人们又是怎么解决这个问题的呢?本节的卷积 ...

  5. 论文学习17-Global Normalization of Convolutional Neural Networks(联合实体关系抽取CNN+CRF)2017

    文章目录 abstract 1.Introduction 2.相关工作 3.Model 全局归一化层(使用线性链CRF) 4.实验和分析 4.3实验结果 总结 Adel, H. and H. Schü ...

  6. CNN(Convolutional Neural Networks)没有原理只有实现

    零.说明: 本文的所有代码均可在 DML 找到,欢迎点星星. 注.CNN的这份代码非常慢,基本上没有实际使用的可能,所以我只是发出来,代表我还是实践过而已 一.引入: CNN这个模型实在是有些年份了, ...

  7. 卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现

    零.说明: 本文的所有代码均可在 DML 找到,欢迎点星星. 注.CNN的这份代码非常慢,基本上没有实际使用的可能,所以我只是发出来,代表我还是实践过而已 一.引入: CNN这个模型实在是有些年份了, ...

  8. 深度模型压缩论文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

    文章目录 1.摘要和背景 1.1 摘要 1.2 背景 2.方法和贡献 2.1 方法 2.1.1 训练过程 2.1.2 loss介绍 2.2 贡献 3.实验和结果 3.1 实验 3.2 结果 4.总结和 ...

  9. 深度模型压缩论文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

    文章目录 1.摘要和介绍 1.1摘要部分 2.背景和方法 2.1 背景 2.2 贡献 2.3 方法 3.实验和结果 3.1 实验 3.2 结果 4.总结和展望 4.1 总结 4.2 展望 本系列是在阅 ...

最新文章

  1. 多重继承_多重继承和菱形问题
  2. 爱说说技术原理方案的定选思考过程(一)
  3. 华为python工程师工资-华为百万年薪抢人工智能应届生,这个高薪行业你如何进入?...
  4. 浅谈如何更好的打开和关闭ADO.NET连接池
  5. 插图 引用 同一行两个插图_插图的目的
  6. 他将国际奥赛变成个人秀,哈佛为他打破校规,他的选择让国人骄傲
  7. mysql 分类汇总_sql多级分类汇总实现介绍
  8. 爬虫时安装的newspaper 新闻包
  9. IDEA 编译时 报 “常量字符串过长” 解决办法
  10. idea导入项目出现时钟标志
  11. 建立U盘免疫病毒文件_七夕小子_新浪博客
  12. 无线网主dns服务器,无线网的dns怎么设置
  13. python-转义字符及其使用
  14. 解析木马攻击与防御发展简史
  15. C++虚函数实现多态性来求正方体、球体和圆柱体的表面积和体积
  16. 全球及中国地理信息产业应用建设发展及产值规模预测报告2021-2027
  17. JDBC完成对数据库数据操作(增,删,改,查)
  18. ZYNQ Cache一致性问题和使用
  19. PHP学习路线图--2014-11-29
  20. Tekla二次开发的各个模块介绍

热门文章

  1. pyDes 实现 Python 版的 DES 对称加密/解密--转
  2. Writing Images to the Excel Sheet using PHPExcel--转载
  3. oracle时间格式转换问题 ORA-01810: format code appears twice--转
  4. 【采用】【风险管理】(第一篇)风险管理核心指标
  5. STDIN_FILENO和stdin区别
  6. Oozie 任务调度
  7. 4. Nest :module (Model)
  8. 分享十佳Web开发资源
  9. 实战SSM_O2O商铺_20【商铺编辑】View层开发
  10. Spring4.X系列之AOP-@AspectJ