以LeNet-5为例理解CNN

在用caffe实现对MNIST手写数字分类的过程中发现利用的网络是LetNet-5.决定从这个网络入手好好认识一下CNN。

LeNet-5早在1998年就出现了(5表示5层模型),标志着CNN的诞生。以其作者YannLeCun的名字命名。但是却没有得到广泛的应用,原因一个是对机器要求高(当时没有GPU),一个是因为其他算法(SVM,老实说是你干的吧?)也能达到类似的效果甚至超过。之后的模型还有AlexNet(以人的名字命名)、VGG(以机构名命名)、GoogleNet(机构名命名)、ResNet(以核心算法命名)。既然都是千年的狐狸(神经网络),比的就是谁的模型更好,可以更好地模拟人脑认知的过程。而之后出现的R-CNN(使用了AlexNet),Fast R-CNN等就好比是《聊斋》,是一套方法,重要的是把故事讲好。看《聊斋》的书,哪只狐狸什么样子当然无所谓;但是如果是看电影,那么扮演狐狸的演员,她对狐狸的把握、还原就至关重要了。至于Caffe、TensorFlow、Torch等深度学习框架,仅仅是一个工具,就像是写作的笔,没有马良的笔那么神奇,但也都足够我们用来书写自己的故事。

胡乱比喻了一下,不至于把他们混淆。下来好好认识一下这个LeNet-5网络及CNN。

我准备从三个角度介绍一下LeNet-5网络。先是侧重每部分的作用,整体把握一下网络的思路。然后从连接的角度,层与层之间在数学上的关系。最后对CNN中特有的几个概念做一下解读。

既然说是5层网络,那么我们看一看到底是哪5层。看来看去,发现是7层(算上输出层,不算输入层)。就拿论文中的插图来看,上图的顶部是每层的名字。看来作者认为是6层。。

INPUT,输入图像是32x32,对比之下,MNIST输入的图像是28x28的。

C1:C意味着这是一个卷积层。在这一层我们将得到feature map。卷积应该不是一个陌生的概念,在图像处理中,简单来说就是旋转180度之后卷积核和图像对应像素加权求和。卷积之后的图像是一个“响应”,如果是边缘检测算子,那么得到的响应就是图像的边缘,现在我们只知道我们希望得到的响应是feature map,得到输入图像的特征,但是不知道的是卷积核的参数(权重),所以我们需要一个网络来训练它。

这一层卷积核的大小是5x5.卷积核滑动一行之后,得到的结果的边长变为32-5+1,得到的feature map大小是28x28.有6个不同的卷积核,希望从不同的角度得到图像的特征。所以待定参数是(5x5+1)*6=156。刚才讲到,参数要由网络求得,网络的层与层之间是通过feature map连接的。得到的28x28的feature map的每一个像素对应5x5+1个权值,这有点像MIMO,所以这里的连接个数是28x28x156=122304个。

S2:S指的是Subsamples,这层经过下采样得到的也是featuremap。下采样的作用是减少计算量,同时保留有用的信息。但是这里的下采样和普通的不一样,不是插值的方法,而是用一种叫池化的方法。就是把一幅图像分割成几个块,每个块的输出是这个块原有像素的统计结果,可以是最大值,那就是最大值池化Max_pooling,如果是均值,那就是均值池化Mean_Pooling。

这一层池的大小是2x2.所以最后得到6个14x14的feature map。和卷积层的连接数的计算方法一样,连接数=参数个数*feature map大小=(2x2+1)x6x14x14=5880

C3:这一层还是卷积层。卷积核大小还是5x5.但是有16个(14-5+1)x(14-5+1)=10x10的fea map。所以得到16个这个层除了要对下采样得到的feature map再进行一次卷积,还有一个问题值得注意。既然有16个卷积核,那么对每一幅feature map就可以得到16个全新的,总共可以得到16x6个feature map,但是这里得到的正好是16个feature map,所以其实在卷积之前,对池化后的feature map进行了组合,得到了16个新的图像,每个图像对应一个特有的卷积核,最终得到16个f.map。所以,现在的问题就是如何对6个feature map排列组合得到16个新图像。论文中给出了一种组合方式(部分连接):

一共6行10列,每列的X表示C3中的一个feature map与S2中的feature map的连接情况。可以看到C3一共有6个与3个S2中的feature map连接,有9个是4连接,有一个是全连接。参数数目:(5x5x3+1)x6+(5x5x4+1)x9+5x5x6+1=1516.这里得到的每一个feature map其实是多核多通道卷积。把每一列叫作一个卷积核,它由若干个卷积模板构成。因为是多个卷积核模板卷积的结果得到一个feature map,仍然认为是一个卷积核,所以每列只有一个偏置参数。所以连接的数目=1516x10x10=151600.

S4:也是下采样层,得到16个5x5的feature map。连接数=(2x2+1)x5x5x16=2000.

C5:又一个卷积层。注意到它与S4是Fullconnection,因为卷积核大小依然是5x5,正好与S4得到的feature map大小一样,得到的feature map就是1x1大小的,时刻注意连接指的是feature map之间的连接。还注意到这里的示意图是带状了,这是因为feature map到这里太多了,有多少呢?有120个。如果用类似上图的矩阵表示,那就是16x120的全1矩阵。

F6:只有86个神经元,继续降低特征的维数。采用了正切函数。连接数=86x(120+1)=10164.

完全连接层就是传统的多层感知机。使用softmax连接函数,输出的概率和为1.

最终经过高斯连接,得到10维的输出。输出层采用了RBF径向欧式距离函数。计算输入向量和参数向量的欧式距离。

 

卷积神经网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入与输出之间的精确的数学表达式,只要用已知的模式对卷积神经网络加以训练,网络就具有输入与输出之间的映射能力。卷积网络是有监督学习,所以它的样本集都形如:(输入向量,理想输出向量)之类的向量对构成。

    在训练之前,所有权值都用一些不同的小随机数进行初始化,小的随机数可以保证网络不会因权值太大而进入饱和状态,从而导致训练失败。不同则保证网络可以正常学习。

如果要是用相同的数去初始化矩阵,网络会没有学习的能力。

关于偏置和激活

卷积、池化其实不是简单的加权求和、统计最大值/均值。首先,它们都会加一个偏置系数。池化的连接处还有一个激活函数,这同样是模仿人的神经系统,因为刺激达到一定程度神经元才会做出反应,而反应又可分为刺激(正)和抑制(负)。激活函数的选取也很重要,可选择的有sigmoid函数、tanh双曲正切函数、ReLU函数。前两个函数是饱和的。现在一般使用ReLu作为激活函数(虽然sigmoid的求导形式优美,f’(x)=f(x)(1-f(x)),可以加速收敛。

参考6提到卷积之后也会加ReLU函数。ReLU 是一个针对元素的操作(应用于每个像素),并将特征映射中的所有负像素值替换为零。ReLU 的目的是在卷积神经网络中引入非线性因素,因为在实际生活中我们想要用神经网络学习的数据大多数都是非线性的(卷积是一个线性运算)

关于C3的部分连接

C3中的每一个Feature Map连接到S2的所有6个Feature Map或者是几个Feature Map。表示本层的Feature Map是上一层提取的Feature Map的不同组合。为什么不把S2的每一个Feature Map连接到S3的每一个Feature Map中?原因有2: 第一,不完全连接机制连接的数量保持在合理范围,第二,这样破坏了网络的对称性,由于不同的Feature Map有不同的输入,所以迫使他们抽取不同的特征(理想状态特征互补)。

关于连接数的计算

上文中提到连接数=参数个数*featuremap大小,但是以C2为例,不同的feature map是由不同的卷积核得到的,所以有一些连接对是没有联系的。为什么也要将他们连接起来呢?我的思考是虽然他们没有因果关系,但是因为我们的目的是在构建网络之后训练得到网络的参数,所以除了前向传播通过损失函数得到损失,我们还需要向后传播梯度信息,更新权重。反向传播的过程中,已经得到的某个feature map当然可以推算对应的卷积核,但是对其他的卷积核也有启示作用,因为我们是基于局部感知的,每个神经元只负责对图像某一部分,这里的某一部分,我觉得指的不是图像的空域部分,而是图像的某一种特征,如颜色或者边缘信息,然后在更高的层次进行组合得到全局的,更加完整的感知。这也解释了为什么C3部分连接组合,也可以解释为什么一开始选择用6个卷积核。

关于池化的作用

池化的作用是逐步减少输入的空间大小[4]。具体来说有以下四点:

使输入(特征维度)更小,更易于管理

减少网络中的参数和运算次数,因此可以控制过拟合 [4]

使网络对输入图像微小的变换、失真和平移更加稳健(输入图片小幅度的失真不会改池化的输出结果 —— 因为我们取了邻域的最大值/平均值)。

可以得到尺度几乎不变的图像(确切的术语是“等变”)。这是非常有用的,这样无论图片中的物体位于何处,我们都可以检测到,(详情参阅[18]和[19])

 

Reference:

1.1998论文:http://pdfs.semanticscholar.org/162d/958ff885f1462aeda91cd72582323fd6a1f4.pdf

2.SVM干的https://www.cnblogs.com/alexanderkun/p/6923064.html

3.https://blog.csdn.net/genius_zz/article/details/52804585

4.https://www.cnblogs.com/ranjiewen/articles/7467600.html

5.诺贝尔医学奖可视皮层是分级的https://www.cnblogs.com/alexcai/p/5506806.html

6.http://www.mamicode.com/info-detail-2310074.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置IE默认文本模式的方法

设置IE默认文本模式的方法 <meta http-equiv"X-UA-Compatible" content"IE8" /> IE5、6、7等都可以&#xff0c; 如果要让IE浏览器默认以最高级别文本模式显示&#xff0c;设置 IEedge 转载于:https://www.cnblogs.com/wshiqtb/p/3393653.html

任正非最新谈话:直到2006年,我才真正抛弃自杀的念头

来源&#xff1a;世界科技创新论坛摘要&#xff1a;日前&#xff0c;一份任正非会见索尼CEO吉田宪一郎会谈纪要流出&#xff0c;这份纪要以吉田宪一郎发问任正非的视角&#xff0c;揭开了不少华为鲜为人知的故事&#xff0c;其中涉及华为的管理、创业之初的故事&#xff0c;还有…

LeNet网络配置文件 lenet_train_test.prototxt

.prototxt文件 定义了网络的结构&#xff0c;我们可以通过它了解网络是如何设计的&#xff0c;也可以建立属于自己的网络。这种格式来源于Google的Protocol Buffers&#xff0c;后来被开源&#xff0c;主要用于海量数据存储、传输协议格式等场合。https://blog.csdn.net/liuyuz…

现有代码移植到Metro App

现有代码移植到Metro App 一&#xff1a;工程配置 配置WinRT工程时要注意以下几点&#xff1a; 静态库工程General里的“Windows Store App Support”设成trueC\General下面的“Consume Windows Runtime Extension”设成Yes&#xff0c;设置该选项的目的是&#xff1a;引入Micr…

前沿 | 历时十二年!曼彻斯特百万级神经元的类脑超算终开启

具有百万处理器内核的「脉冲神经网络架构」或 SpiNNaker&#xff0c;每秒能完成约 200 兆次运算。来源&#xff1a;机器之心摘要&#xff1a;这台世界最大的神经形态超级计算机由曼彻斯特大学计算机科学学院设计和制造&#xff0c;它被设计和制造成与人脑相同的工作方式&#x…

Caffe中的卷积实现

https://www.zhihu.com/question/28385679 https://github.com/Yangqing/caffe/wiki/Convolution-in-Caffe:-a-memo 作者贾扬清亲自解释了这个问题。Caffe框架是他在研究生毕业毕业前两个月的时间写的&#xff0c;自然有一些缺点&#xff08;占用内存方面&#xff09;。其实卷积…

Oracle使用goldengate分别向Oracle和mysql双路的单向复制

一.Oracle分别向Oracle和mysql双路的单向复制是在&#xff1a; ORACLE-mysql的单向复制基础上做的。http://blog.csdn.net/q947817003/article/details/13294937 二.分别再在ORACLE主库及ORACLE目标库上增加相应进程 ORACLE源端增加&#xff1a; 1.增加配置extract进程 按顺序…

小程序创业:新金矿、野望与焦虑

来源&#xff1a;视觉中国摘要&#xff1a;小程序正在带来新的红利&#xff0c;互联网上的生意可以再做一遍&#xff1f;张远想要尽可能地保持低调&#xff0c;但现在这个愿望正在变得越来越难。在最近几个月阿拉丁小程序排行榜上&#xff0c;糖豆广场舞、糖豆爱生活、糖豆每日…

三个数据集与deploy.prototxt

神经网络中经常会出现三种数据集&#xff1a;训练数据集train set、验证数据集validation set、测试数据集test set。对每个训练数据&#xff0c;计算得到准确性&#xff0c;在网络中后向传播误差&#xff0c;从而调整权重weights。对每一个验证数据&#xff0c;也会计算准确性…

网络编程套接字socket

哈哈哈&#xff0c;之前的保存成草稿忘了发 目录 一 . 先回顾一下网络初始中的相关概念&#xff1a; 1.网络通信&#xff1a; 2.局域网&#xff1a; 3.广域网&#xff1a; 4.IP地址&#xff1a; 5.端口&#xff1a; 概念 格式 6.协议&#xff1a; 7.五元组&#xff1a; 8.分层…

增长率高达40%!物联网平台如何拉动产业马车飞速狂奔

来源&#xff1a; 联动原素、安信通信研究、IoT Analytics物联网智库 整理发布物联网的低准入门槛造就了这个内容庞大的产业生态&#xff0c;致使更多的企业融入进来。伴随物联网大规模发展&#xff0c;物联网平台在其中的作用越加凸显&#xff0c;新一轮资本涌入、技术开发、业…

Java小对象的解决之道——对象池(Object Pool)的设计与应用

一、概述 面向对象编程是软件开发中的一项利器&#xff0c;现已经成为大多数编程人员的编程思路。很多高级计算机语言也对这种编程模式提供了很好的支持&#xff0c;例如C、Object Pascal、Java等。曾经有大量的软件工程师使用C语言作为他们的谋生工具&#xff0c;随着面向对象…

中国代表性Fintech企业动态观察

来源&#xff1a;全球高科技联盟阿里巴巴系企业一、阿里巴巴金融科技和区块链总体布局揭开面纱9月28日&#xff0c;阿里达摩院官网正式上线&#xff0c;公开5 大研究领域、14 个实验室&#xff0c;从中可一探阿里在金融科技和区块链领域的总体技术布局。阿里金融科技领域致力于…

新建WindowsPhone项目时提示未将对象引用设置到对象的实例

问题&#xff1a; 安装好新系统之后&#xff08;只有Windows8 专业版和企业版支持hyper-v&#xff09;&#xff0c;然后安装vs2012&#xff0c;再安装Wp8 Sdk&#xff0c;安装完毕后新建Windows Phone项目&#xff0c;会提示未将对象引用设置到对象的实例。 解决方案&#xff1…

windows+caffe下对CIFAR训练

CIFAR是什么 CIFAR-10和CIFAR-100都是带标签的大小为8000万小图数据集的子集。其中CIFAR-10有10类&#xff0c;每类6000个大小为32x32的图像。其中训练图像和测试图像的比例是5:1&#xff0c;对每类图像&#xff0c;随机选择1000个测试图像&#xff0c;剩下的就是训练图像。注意…

BAT看上了产业互联网

来源&#xff1a;《中国经济周刊》2018年 第 43 期摘要&#xff1a;互联网浪潮正从过去的消费互联网向产业互联网转移&#xff0c;巨头们正在把“矛头”从C(消费者)端转向B(企业)端&#xff0c;他们希望越来越多的企业接入互联网&#xff0c;进行数字化和智能化改造&#xff0c…

hdu 1165 坑爹找规律题

http://acm.hdu.edu.cn/showproblem.php?pid1165 不看题解&#xff0c;使劲找规律&#xff0c;应该是可以找到的&#xff0c;就是费时间&#xff01; Problem DescriptionAs is known, Ackermann function plays an important role in the sphere of theoretical computer sci…

caffe下matlab、python的配置和faster RCNN的运行

因为自己的电脑没有安装linux环境&#xff0c;显卡也不支持CUDA&#xff0c;所以在实现faster RCNN的demo的过程中还是很麻烦的。 完善项目文件 下图是vs2013 打开的caffe解决方案的工程目录。由于windows版本caffe的不完善&#xff0c;要先在其libcaffe项目中添加roi_poling层…

Innodb 表空间卸载、迁移、装载

从MySQL的Innodb特性中我们知道&#xff0c;Inndob的表空间有共享和独享的特点&#xff0c;如果是共享的。则默认会把表空间存放在一个文件中&#xff08;ibdata1&#xff09;&#xff0c;当开启独享表空间参数Innodb_file_per_table时&#xff0c;会为每个Innodb表创建一个.ib…

马化腾与中国知名科学家联手发起“科学探索奖”

来源&#xff1a;腾讯今日&#xff0c;公布一件大事情&#xff1a;腾讯基金会将投入10亿元人民币的启动资金资助“科学探索奖”&#xff0c;每年将在基础科学和前沿核心技术方面的九大领域&#xff0c;遴选出50名青年科技工作者。获奖人年龄上限为45岁&#xff0c;且每位获奖者…