CNN卷积神经网络的改进(15年最新paper)
回归正题,今天要跟大家分享的是一些 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 connected
layers to average pooling improved the top-1 accuracy by
about 0.6%, however the use of dropout remained essential
even 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卷积神经网络的改进(15年最新paper)的更多相关文章
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM
http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- TensorFlow——CNN卷积神经网络处理Mnist数据集
CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...
随机推荐
- CREATE VIEW - 定义一个视图
SYNOPSIS CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query DESCRIPTION 描述 CREATE ...
- Lodash数组方法中文总结
LodashAPI总结 Lodash是一个特别特别好用的工具,感觉有了Lodash就没有解决不了的问题了~~~~ 使用初开始 官网 https://www.lodashjs.com/docs/4.17 ...
- C#根據當前DataGridView查詢數據導出Excel
private void btnsuggestinfo_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.C ...
- vue工程化引入组件模板
vue脚手架搭建好项目后,组件间的引用通过components import bannerComponent from './banner' export default { data(){ retu ...
- JavaSE-06 二维数组
学习要点 二维数组的定义 二维数组内存数据结构 不规则二维数组 二维数组的定义 语法格式 格式一 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. ...
- JAVA基础——对象流
对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息. 使得对象持久化. ObjectInputStream : 对象输入流 ObjectOutPutStream :对象输 ...
- 多线程之Java中的等待唤醒机制
多线程的问题中的经典问题是生产者和消费者的问题,就是如何让线程有序的进行执行,获取CPU执行时间片的过程是随机的,如何能够让线程有序的进行,Java中提供了等待唤醒机制很好的解决了这个问题! 生产者消 ...
- 51nod 1021 石子归并 - 区间dp(经典)
题目地址:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1021 经典区间dp,dp[i][j] 表示将从 i 到 j 堆 ...
- 样例GeoQuiz应用开发 第1章
1. Activity是Android SDK的Activity类的一个具体实例,负责管理用户和信息屏的交互.应用的功能是通过编写一个Activity子类来实现的.简单的可能只有一个子类,复杂的应用则 ...
- django-3 admin开启后台配置并展示表内容
设置了superuser 之后,可以在run server 后, 通过浏览器访问后台,进行界面配置. 1. python manage.py creatersuperuser 此命令在manage.p ...