回顾一些重要的CNN改进模型(你真的了解 Convolutional Neural Networks 么)
2016-01-12 23:59
585 查看
转载自:
干货 | 你真的了解 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 吧。
干货 | 你真的了解 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 吧。
相关文章推荐
- MongoDB数据库的介绍
- 程序人生--架构师
- 八步详解Hibernate的搭建及使用
- Linux下umask命令的用法
- Android之编写C程序访问Android之驱动程序
- Linux 文件操作总结
- objective-c 一个链式加法计算器实现
- mysql数据库要按当天、昨天、前七日、近三十天、季度、年查询
- 悲观锁和乐观锁
- 循序渐进看Java web日志跟踪(2)-Java日志API认识
- Zabbix之微信订阅号平台报警
- Zabbix之微信订阅号平台报警 推荐
- Spring+EhCache缓存实例(详细讲解+源码下载)
- Spring+EhCache缓存实例(详细讲解+源码下载)
- Spring+EhCache缓存实例(详细讲解+源码下载)
- 全景拼接实现过程
- Spring+EhCache缓存实例(详细讲解+源码下载)
- 支付宝芝麻信用页面自定义View的简单制作(续)
- Ubuntu上为Android编写驱动程序
- redisTemplate 操作