cs231n---CNN架构
1 LeNet-5 (1998)

第一个被提出的卷积网络架构,深度较浅,用于手写数字识别。
2 AlexNet (2012)

架构为:
CONV1 ->MAX POOL1 ->NORM1 ->CONV2 ->MAX POOL2 ->NORM2 ->CONV3->CONV4->CONV5->Max POOL3->FC6 ->FC7->FC8
相比于LeNet-5,AlexNet除了使用了更深的结构,还用到了:

观察架构图可以看到,AlexNet实际上被分成了两部分,这是由于当时的GPU内存限制。因此AlexNet被分别存储在两个GPU上,其中CONV3,FC6,FC7,FC8涉及到了GPU间的通信。
AlexNet是第一个成功运用的深度神经网络。
3 VGGNet (2014)
(1)改进
相比AlexNet,VGGNet有更深的网络,更小的滤波器:

(2)为什么更小的滤波器更好
假设有连续3层卷积层,它们都使用3*3的滤波器,那么最后一层激活图中,每个神经元的感受野是7*7的。可以看到,3个3*3的滤波器堆叠能达到一个7*7滤波器的感受野大小,但是却使用了更少的参数,更深的网络,引入了更多的非线性。
(3)整体架构
下面这张图显示了VGGNet的结构和内存参数情况:

其中红色的内存指的是存储激活值所占的内存,可以看到,一张图片的一次前向传播需要大约100M的内存,而且参数有一亿多个。而且我们发现,内存消耗主要集中在卷积层中,而参数主要集中在全连接层中。
VGG论文中一些其他的细节:

4 GoogLeNet (2014)
(1)改进
相比之前的网络,GoogleNet更深。由于放弃了全连接层,因此参数更少。并且使用了Inception模块,计算效率更高。

(2)Inception模块

其中模块的输入是之前层的输出,在上面并行的使用各种大小的滤波器处理,最后各个滤波器的结果在深度上串联起来,得到模块的输出。
其中红色部分都是1*1的滤波器,被称为bottleneck层,其作用是减少输入的深度,然后再送给后面的滤波器处理,使得整体的运算量降低。下面两张图对比了使用和不使用bottleneck层的运算量。
不使用bottleneck层:

使用bottleneck层:

(3)整体架构

我们可以把GoogleNet的架构分为四部分:
a 输入一开始的部分,是传统的conv->pooling结构
b 中间部分是inception模块的堆叠
c Classifier output部分,移除了复杂的全连接层,使得参数量大大减少
d 额外的Classifier output部分,是为了解决网络过深导致较低层接受不到有效的梯度信号,额外的Classifier output部分可以为较低层提供额外的梯度信号。
5 ResNet (2015)
(1)深度网络训练困难问题
ResNet提出者指出,当网络很深时,训练集和测试集上的误差都表现得不好,显然这不是过拟合,而是深度网络难以训练(并不是梯度消失导致的,因为BN已经很好的解决了梯度消失)。

(2)残差层

如上图,左边是普通层,右边是残差层,H(x)是我们期望学习的函数。普通层会直接学习这个函数,而残差层会学习其与x的差。
为什么残差层会有效,它解决了深度网络训练中的什么问题?
ResNet并不是解决了梯度消失的问题,梯度消失可以通过BN来解决,但是我们发现,使用BN的plainNet仍然比不上ResNet。事实上ResNet解决的是反传回来的梯度之间的相关性问题,具体可以参考文章The Shattered Gradients Problem: If resnets are the answer, then what is the question?
通俗来说,ResNet的结构很好的管理了梯度流,残差层的结构提供了一条使梯度直接向后流动的畅通无阻的通路,使得我们能够轻易的训练几百层的深层结构!
(3)架构
完整的ResNet是残差块的堆叠,并且不使用全连接层,更多细节:

ResNet中也使用了bottleneck来提高计算效率:

6 各种架构的性能对比

其中横坐标是运算量,纵坐标是精度,圆的大小表示占用的内存大小。
7 其他架构

8 CNN架构研究现状
(1)VGG, GoogLeNet, ResNet 被广泛投入使用,其中ResNet性能最佳
(2)加深网络是一个趋势,但是也有研究表明深度并不是最重要的,宽的ResNet仍然表现很好
(3)有很多关于层之间如何连接,跳连接的研究

cs231n---CNN架构的更多相关文章
- 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- 用于NLP的CNN架构搬运:from keras0.x to keras2.x
本文亮点: 将用于自然语言处理的CNN架构,从keras0.3.3搬运到了keras2.x,强行练习了Sequential+Model的混合使用,具体来说,是Model里嵌套了Sequential. ...
- 【深度学习篇】--神经网络中的池化层和CNN架构模型
一.前述 本文讲述池化层和经典神经网络中的架构模型. 二.池化Pooling 1.目标 降采样subsample,shrink(浓缩),减少计算负荷,减少内存使用,参数数量减少(也可防止过拟合)减少输 ...
- (Review cs231n) CNN in Practice
Make the most of your data Data augmentation 加载图像后,对图像做一些变化,这些变换不改变图像的标签. 通过各种变换人为的增大数据集,可以避免过拟合提高模型 ...
- 第九节课-CNN架构
2017-08-21 这次的课程比较偏向实际的运用,介绍了当前几种比较主流的CNN网络: 主要是AlexNet,GoogleNet, VGG, ResNet 需要把课后习题做了才能更好的理解.
- 『cs231n』视频数据处理
视频信息 和我之前的臆想不同,视频数据不仅仅是一帧一帧的图片本身,还包含个帧之间的联系,也就是还有一个时序的信息维度,包含人的动作判断之类的任务都是要依赖动作的时序信息的 视频数据处理的两种基本方法 ...
- CS231n 斯坦福深度视觉识别课 学习笔记(完结)
课程地址 第1章 CS231n课程介绍 ---1.1 计算机视觉概述 这门课的主要内容是计算机视觉.它是一门需要涉及很多其他科目知识的学科. 视觉数据占据了互联网的绝大多数,但是它们很难利用. --- ...
- 理解NLP中的卷积神经网络(CNN)
此篇文章是Denny Britz关于CNN在NLP中应用的理解,他本人也曾在Google Brain项目中参与多项关于NLP的项目. · 翻译不周到的地方请大家见谅. 阅读完本文大概需要7分钟左右的时 ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- 【机器学习】彻底搞懂CNN
之前通过各种博客视频学习CNN,总是对参数啊原理啊什么的懵懵懂懂..这次上课终于弄明白了,O(∩_∩)O~ 上世纪科学家们发现了几个视觉神经特点,视神经具有局部感受眼,一整张图的识别由多个局部识别点构 ...
随机推荐
- spark 源码分析之十四 -- broadcast 是如何实现的?
本篇文章主要剖析broadcast 的实现机制. BroadcastManager初始化 BroadcastManager初始化方法源码如下: TorrentBroadcastFactory的继承关系 ...
- 查询亿级数据毫秒级返回!Elasticsearch 是如何做到的?
掌握搜索技能,才能在庞大的数据集中找到准确的目标.本篇就带你进入另一个非凡的旅程,即使你没有像Google或Baidu一样强大的技术,一样也可以做出与之相匹敌的用户体验. 搜索是现代软件必备的一项基础 ...
- 提升布局性能____Making ListView Scrolling Smooth
listview是一个比较重要的UI组件,一切影响UI的操作,比如适配器从磁盘.网络或者数据库中加载数据的操作,最好都放在子线程中完成.子线程可以使用thread,不过那样比较老土,官方推荐使用Asy ...
- 第三章.定制专属的kali
1.更新升级 • apt-get update • apt-get upgrade • apt-get dis-upgrade 2.根据个人喜好需求安装软件包 • 库 • Apt-get命令 • ...
- 黑羽压测 比 jmeter、locust、loadrunner 更简便,性能更强
视频讲解 点击下方链接,观看 讲解视频 https://www.bilibili.com/video/av60089015/ 动机 目前市场上对API接口做性能测试工具有 Jmeter.LoadRun ...
- java面试题库(长期)
本文内容来自互联网各种面试实例,以及自己的面试经历,主要是中级开发的面试题 初中级java面试主要分为几个部分: 0.序 1.java基础 2. java多线程 3. jvm知识 4. spring等 ...
- Android调用系统分享功能总结
Android分享-调用系统自带的分享功能 实现分享功能的几个办法 1.调用系统的分享功能 2.通过第三方SDK,如ShareSDK,友盟等 3.自行使用各自平台的SDK,比如QQ,微信,微博各自的S ...
- httpclient 方式提供接口
在后台写好自己的方法: 打开shiro验证,设置url访问: 提供包调用http方式连接后台获取数据: String url = getUrl(); HttpClient client = new H ...
- ~~面向对象进阶——__name__=="__main__"~~
进击のpython 面向对象进阶--__name__=="__main__" 前面我们在讲模块的时候,其实还有一个知识点没有很好的讲 那就是main和name 可能你们在看一些代码 ...
- 12. 集合类Collection和Map
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...