AlexNet详解3
Reference.
Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks [J]. Advances in Neural Information Processing Systems, 2012, 25(2):2012.
https://code.google.com/p/cuda-convnet/
说来惭愧,看了深度学习快五个月了,前几周的Paper Review上刚刚注意到AlexNet,那果断用啊,话说LeNet虽然好用,那也是快20年以前的网络结构了,AlexNet是2012年的结构,不管怎么说肯定好呀。贴一张网络结构的历史
AlexNet是2012年ImageNet竞赛冠军获得者Alex Krizhevsky设计的,这个网络结构和LeNet有什么区别呢?
1 卷积神经网络的组成部分
套路是一样的,先介绍一下深度学习的卷积神经网络(ConvNet)的组成吧。
1.1 卷积层(Convolutional Layer)
这个不多说,学过信号的都大概知道卷积是个什么玩意儿,不懂的话可以参考额。。。别参考了,好好学基础知识去吧~要说明的一点是这个卷积的过程很好地模拟了人的视觉神经系统的过程,听老师说人眼看东西也就是一个卷积的过程哦,这个我可不能保证哦~
1.2 降采样层(Pooling Layer)
降采样就是用一个值来代替一块区域,这个值可以是区域的平均值,最大值,最小值等等,反正有代表性就好了,这个层的目的就是减少数据量。
1.3 激活函数层(Activation Layer)
激活函数的作用是把卷积后的结果压缩到某一个固定的范围,这样可以一直保持一层一层下去的数值范围是可控的。比如一些常见的激活函数
- sigmoid:控制在[0, 1]
- tanh:控制在[-1, 1]
- ReLU:控制在[0, 正无穷]
- 还有好多新的激活函数,这儿就不举例了,知道它们的作用就OK
我用的是ReLU激活函数
1.4 标准化层(Normalization Layer)
1.5 全连接层(Full Connected Layer)
全连接层给人的感觉就是人工神经网络的那样,把所有的网络结点都用一些带权重的值连接起来。这个层一般出现在CNN的后面部分,这个层很长,可以作为图像的特征向量来用,也有论文是把全连接层放到SVM,RF,Adaboost,ANN等传统的分类器里头分类,来代替CNN最后的softmax层,那我也做过这个实验,得到的结果并不好,我不知道这些大牛是怎么弄的。这儿打个问号?
1.6 扔掉层(Dropout Layer)
这个层我不知道怎么翻,反正作用就是把一些没用的结点给扔掉。
- 这个思路参考了人的大脑的实际运行状态,研究表明大脑在分析图像的过程中真正被激活的神经元并不多,具体哪些被激活靠得就是先前的学习,和留下来的记忆。那如果没有这个dropout层,我们的CNN在判断所有的图像是相当于所有的结点都激活了,这样和现实的情况不符,所以我们要模拟大脑,把一下没什么用的结点给扔掉。
- 这个层的作用是加快运算速度,防止过拟合,让网络更加的普适,更加有所谓的“鲁棒性”——装个逼,其实就是更好哈哈:)
- 实现的方法是设置一个阈值,如果这个结点与结点之间的权重高于这个值,那么说明这是强关系,我们保留,如果权重低于这个值,说明关系不大,我们把它扔掉得了。!!这个实现方法说错了,特别感谢@hzzzol同学的指正,正确的解释应该是:
- Dropout是在训练过程中以一定概率1-p将隐含层节点的输出值清0,而用bp更新权值时,不再更新与该节点相连的权值。什么意思,就是这个就是个概率问题,和权值的大小,激活程度无关哦,被抽中的结点无条件被丢掉。(Dropout简单理解、DropConnect简单理解)
- 这个层常常出现在全连接层的地方,因为全连接层中的结点与结点连接太多了,消耗了CNN中绝大多数的内存资源,而这中间有一大部分是没有必要的。
你看,最后几层多浪费!
2 LeNet与AlexNet
以上是对CNN的一个简单的阐述,当然啰,比较琐碎,一个完整的CNN结构是由多个1)卷积层,2)降采样层,3)激活函数层,4)标准化层,5)全连接层和6)扔掉层 有序地拼接而成的,那么又来了这个问题,LeNet和AlexNet的拼法到底有什么不同呢?
2.1 LeNet
再次祭出这幅经典的LeNet图
LeNet的成功应用案例是手写字体的识别,就是给一堆手写的阿拉伯数字,用网络来判断这是个什么字。应用的就是当时的邮局等地方,还有门牌号。其实传统的分类器已经可以做到很好的水平了(正确率在96%吧大概),那LeNet作为新起之秀,正确率达到了98%,那在当时就很有名啊,赚了好多好多钱呢,然后卷积神经网络的研究就开始火了呀。到了2012出现AlexNet,以卷积神经网络为核心的深度学习就开始烫了哈哈。
我们可以看到LeNet中有1)卷积层,2)降采样层(就是Subsampling),和3)全连接层,当然喽,应该是由激活函数层的,只是图中没有画,当时用的应该是sigmoid函数吧,反正现在不用了。你可以发现刚刚提到的扔掉层(dropout)和标准化层没有用诶,为什么呢,因为
当时还没有这个啊==b
可以注意到LeNet的
- 输入尺寸是32*32像素
- 卷积层:3个
- 降采样层:2个
- 全连接层:1个
- 输出:10个类别(数字0-9的概率)
然后softmax根据网络输出,也就是这个图像是0-9的概率值大小来判断输入的是多少,比如输出的是个结点,4的值是0.9,其他都是0.001这样的,那么就是说这个输入的图像就是4了,然后根据这个输出的概率,我们可以排列一下输入图像输入某一类的概率值,从大到小,取3个比如,ImageNet竞赛的规则就是这三个里头有一个是对的就当你的网络预测是对的,不然就是预测错误。
2.2 AlexNet
我个人的感觉是AlexNet更强调了全连接层的作用,它用了两个全连接层,那么为了减少权重的数目,才引出了dropout这个概念,其他的区别其实不能叫做区别
- 输入尺寸:227*227像素(因为竞赛的需要)
- 卷积层:好多(因为输入尺寸的需要)
- 降采样层:好多(因为输入尺寸的需要)
- 标准化层:这个反正就是一个公式
- 输出:1000个类别(因为竞赛的需要)
这儿要说明一下:不要以为卷积层的个数、降采样层的个数、卷积核的尺寸、卷积核的个数这些网络细节会对最后的训练结果产生什么了不得的影响,这些就按照你的输入图像的尺寸来就行了。没有什么说头,你也可以去参考现在已经有的网络结构去设计,都可以的。这些参数大多都是手动调的,依据就是看看学习的结果如何。
放一下AlexNet的结构图
卷积神经网络的结构并不是各个层的简单组合,它是由一个个“模块”有机组成的,在模块内部,各个层的排列是有讲究的。比如AlexNet的结构图,它是由八个模块组成的。
模块一和模块二是CNN的前面部分,
卷积-激活函数-降采样-标准化
构成了一个计算模块,这个可以说是一个卷积过程的标配,CNN的结构就是这样,从宏观的角度来看,就是一层卷积,一层降采样这样循环的,中间适当地插入一些函数来控制数值的范围,以便后续的循环计算。
模块三和四也是两个卷积过程,差别是少了降采样,原因就跟输入的尺寸有关,特征的数据量已经比较小了,所以没有降采样,这个都没有关系啦。
模块五也是一个卷积过程,和模块一、二一样事儿的,就是重复重复。好了,可以总结一下,模块一到五其实都是在做卷积运算,根据输入的图像尺寸在适当决定哪几层要用降采样。然后再加上一些必要的函数来控制数值,就可以了。模块五输出的其实已经是6\6的小块儿了(一般我设计都是到1\1的小块,由于ImageNet的图像大,所以6\6也正常的。)
为什么原来输入的227\227像素的图像会变成6\*6这么小呢,主要原因是归功于降采样,当然啰,卷积层也会让图像变小,如图,一层层的下去,图像越来越小
模块六和七就是所谓的全连接层了,全连接层就和人工神经网络的结构一样的,结点数超级多,连接线也超多,所以这儿引出了一个dropout层,来去除一部分没有足够激活的层,其实我记的没错的话这个思想在ANN里头早就有了。
模块八就是一个输出的结果,结合上softmax做出分类。有几类,输出几个结点,每个结点保存的是属于该类别的概率值。:)
好了,讲完了,就酱。
GoogLeNet和VGG我现在还没有看呢,估计应该套路和LeNet和AlexNet差不多,可能网络的深度加了,超大规模的GPU了,或者网络更加精简了,反正整体的思路是不变的,我回头还是要看一看的:)
AlexNet详解3的更多相关文章
- AlexNet详解2
此处以caffe官方提供的AlexNet为例. 目录: 1.背景 2.框架介绍 3.步骤详细说明 5.参考文献 背景: AlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet ...
- AlexNet详解
在imagenet上的图像分类challenge上Alex提出的alexnet网络结构模型赢得了2012届的冠军.要研究CNN类型DL网络模型在图像分类上的应用,就逃不开研究alexnet,这是CNN ...
- lenet-5,Alexnet详解以及tensorflow代码实现
http://blog.csdn.net/OliverkingLi/article/details/73849228
- 第十五节,卷积神经网络之AlexNet网络详解(五)
原文 ImageNet Classification with Deep ConvolutionalNeural Networks 下载地址:http://papers.nips.cc/paper/4 ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(一)
卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...
- 第三十一节,目标检测算法之 Faster R-CNN算法详解
Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...
- 第三十节,目标检测算法之Fast R-CNN算法详解
Girshick, Ross. “Fast r-cnn.” Proceedings of the IEEE International Conference on Computer Vision. 2 ...
- 第二十九节,目标检测算法之R-CNN算法详解
Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmenta ...
- [转]CNN目标检测(一):Faster RCNN详解
https://blog.csdn.net/a8039974/article/details/77592389 Faster RCNN github : https://github.com/rbgi ...
随机推荐
- nginx指令中的优化(配置文件)
nginx指令中的优化(配置文件)worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_cpu_affinity 00000001 0000 ...
- MySQL查找SQL耗时瓶颈 SHOW profiles
http://blog.csdn.net/k_scott/article/details/8804384 1.首先查看是否开启profiling功能 SHOW VARIABLES LIKE '%pro ...
- 求一个数的n次幂
1.当这个数是2的多少次幂: 求(2^m)^n = 2^(m*n) = 1<<m*n; 2.快速幂(要考虑底数a,和m的正负) int quick_mod(int a,int m){ ...
- Django的开始
一 浏览器相关知识 http:只有依赖一回,属于短链接,不会报错客户端的信息. 浏览器相当于一个客户端,客户端的链接 服务端:socket服务端,起服务监听客户端的请求. import socket ...
- 存储引擎中MYIASM是什么意思
- 2019.02.07 bzoj4316: 小C的独立集(仙人掌+树形dp)
传送门 题意:给出一个仙人掌森林求其最大独立集. 思路:如果没有环可以用经典的树形dpdpdp解决. fi,0/1f_{i,0/1}fi,0/1表示第iii个点不选/选的最大独立集. 然后fi,0+ ...
- 2019.01.24 NOIP训练 旅行(轮廓线dp)
传送门 题意简述: 给一个n∗mn*mn∗m的有障碍的网格图,问你从左上角走到左下角并覆盖所有可行格子的路径条数. 思路: 路径不是很好算. 将图改造一下,在最前面添两列,第一列全部能通过,第二列只有 ...
- 2018.12.12 codeforces 935D. Fafa and Ancient Alphabet(概率dp)
传送门 概率dp水题. 题意简述:给你数字表的大小和两个数列,数列中为0的数表示不确定,不为0的表示确定的,求第一个数列字典序比第二个数列大的概率. fif_ifi表示第i ni~ ni n位第一个 ...
- SELECT INTO创建临时表
SELECT INTO创建临时表 SQL Server临时表有两种类型:本地和全局.它们在名称.可见性以及可用性上有区别.本地临时表的名称以单个数字符号 (#) 打头:它们仅对当前的用户连接是可见的: ...
- 定时调度系列之Quartz.Net详解(转)
出处:https://www.cnblogs.com/yaopengfei/p/9216229.html 一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提 ...