CNN学习笔记
学习笔记
个人整理的CNN学习笔记,所有素材均来自于互联网,版权归作者所有,感谢各位作者的无私分享。我个人仅作了整理便于学
习之用。
http://www.cnblogs.com/charleshuang/p/3651843.html
http://www.68idc.cn/help/buildlang/ask/20150705417730.html(CNN的背景介绍)
http://www.68idc.cn/help/mobilesys/other/20160516616446.html(全面的综合讲解)
先解释一下:什么是卷积?
先解释一下:什么是卷积?
翻转和平移的重叠部分的面积。
在泛函分析中,卷积、旋积或摺积(英语:Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表征函数f 与
g经过翻转和平移
如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是“滑动平均
卷积的基本内涵公式:
滑动平均”的推广。
设:f(x),g(x)是R1上的两个可积函数,作积分:
上面公式继而解释为:
1.如果卷积的变量是序列x(n)和h(n),则卷积的结果:
2.如果卷积的变量是函数x(t)和h(t),则卷积的计算变为:
物理意义:加权叠加
加权叠加
图示见这个网址: http://www.zhihu.com/question/22298352?rf=21686447
1.
2.
3.x[n]乘以y[n]的过程
(1)x[n]乘以y[0]并平移到位置0:
(2)x[n]乘以y[1]并平移到位置1:
(3)x[n]乘以y[2]并平移到位置2:
(4)最后把上面三个图叠加,就得到了x[n]乘以y[n]:
重复一遍,这就是卷积的意义:加权叠加。
重复一遍,这就是卷积的意义:加权叠加。
1.概述概述
CNN有两点:非全连接、权重共享
非全连接
非全连接:并不是所有上、下层的神经元都直接相连
权重共享
权重共享:同一层中某些神经元之间的连接权重是共享的(即相同的),降低了复杂度。
2.CNN结构结构
特征提取:提取局部特征
局部特征。一旦一个特征被提取出来, 只要它相对于其他特征的位置被近似地保留下来,它的精确位置就
变得没有那么重要了。
特征映射:网络的每一个计算层都是由多个特征映射组成
多个特征映射组成的,每个特征映射都是平面形式的。平面中单独的神经元在约束
共享相同的突触权值集,这种结构形式具有如下的有益效果:a.平移不变性。b.自由参数数量的缩减(通过权值共享实
下共享相同的突触权值集
现)。
子抽样:每个卷积层跟着一个实现局部平均和子抽样的计算层,由此特征映射的分辨率降低。这种操作具有使特征映射的
输出对平移和其他 形式的变形的敏感度下降的作用。
2.1 稀疏连接
稀疏连接
可以看到是局部连接,m层只连接m-1层的3个,而不是5个
设第m-1层为视网膜输入层,第m层的接受域的宽度为3,也就是说该层的每个单元与且仅与输入层的3个相邻的神经元相
连,第m层与第m+1层具有类似的链接规则
m-1层为视网膜输入层(接受自然图像)。根据上图的描述,在m-1层上面的m层的神经元节点都具有宽度为3的感受野,m
层每一个节点连接下面的视网膜层的3个相邻的节点。
多层堆积形成了滤波器(不再是线性的了),它也变得更具有全局性了(如包含了一大片的像素空间)。比如,在上图
中,第m+1层能够对宽度为5的非线性特征进行编码(就像素空间而言)。
2.2 权值共享(
权值共享(Shared Weights))
在CNNs中,每一个稀疏滤波器hi在整个感受野中是重复叠加的,这些重复的节点形式了一种特征图(feature map),这个特种图
可以共享相同的参数,比如相同的权值矩阵和偏置向量。
在图中,三个隐层节点属于同一个特征图
因为颜色相同,所以权重相同
权值为什么要共享?因为1.重复单元在感受野的什么位置,他们都可以检测到特征。(想象一下一只猫在你面前走,特征会
随之移动,眼睛都可以检测到)2.减少参数数,降低训练难度,避免过拟合。
图示权值共享:
除了增加卷积层和采样层,在传统人工神经网络的基础上,卷积神经网络还通过感受野和权值共享大大地减少了参数,降
低了训练难度,也避免了参数过多引起过拟合(overfitting)。
卷积神经网络的输入是一幅幅的图像,根据传统的人工神经网络,在第2层的每个unit都要和输入层图像的每个像素连接,
这里我们假设第2层有1M个hidden units,输入图像大小1000*1000,那么这一层要训练的权值w就是1M 10001000=10^12
个,如下图左:
而人们发现人是通过一个局部的感受野去感受图像的,且图像的空间联系是局部的,每一个神经元并不需要对全局图像感受,
每个神经元只用感受局部的图像区域,然后在更高层将这些神经元的信息综合起来得到全局信息。这样,我们就可以减少连接
数目了,,假设感受野是1010大小,那么第2层的每个unit只用和一个1010的感受野连接,这样的感受野有100100个,那么这
一层要训练的权值w是1M1010=10^8个,如上图右。可以看到,通过感受野,隐层的权值个数已经从10^12降到了10^8个,每
个hidden unit有1010=100个参数。 人们认为对于不同的感受野区域,要提取的特征是相似的,比如边缘,颜色变化等等,这
样,我们可以在不同的感受野用同样的方式去感受特征,也就是说,用一个卷积核去卷积全部的感受野。这就是权值共享,就
是让这1M个hidden units共享同一组参数(100个权值),那么隐层权值个数就降到了100个。下图左中的红色,黑色,绿色,蓝色
的感受野区域使用相同的参数来做卷积。
下面的分析来源于: http://blog.csdn.net/zouxy09/article/details/8781543
我们知道,隐含层的每一个神经元都连接10x10个图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我
们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有多少个参数??
只有100个参数啊!!!亲!不管你隐层的神经元个数有多少,两层间的连接我只有100个参数啊!亲!这就是权值共享啊!
亲!这就是卷积神经网络的主打卖点啊!亲!(有点烦了,呵呵)也许你会问,这样做靠谱吗?为什么可行呢?
好了,你就会想,这样提取特征也忒不靠谱吧,这样你只提取了一种特征啊?对了,真聪明,我们需要提取多种特征对不?假
如一种滤波器,也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,怎么办,
加多几种滤波器不就行了吗?对了。所以假设我们加到100种滤波器,每种滤波器的参数不一样,表示它提出输入图像的不同特
征,例如不同的边缘。这样每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为Feature Map。所以100种卷积
核就有100个Feature Map。这100个Feature Map就组成了一层神经元。到这个时候明了了吧。我们这一层有多少个参数了?
100种卷积核x每种卷积核共享100个参数=100x100=10K,也就是1万个参数。才1万个参数啊!亲!(又来了,受不了了!)见
上图右:不同的颜色表达不同的滤波器。
嘿哟,遗漏一个问题了。刚才说隐层的参数个数和隐层的神经元个数无关,只和滤波器的大小和滤波器种类的多少有关。那么
隐层的神经元个数怎么确定呢?它和原图像,也就是输入的大小(神经元个数)、滤波器的大小和滤波器在图像中的滑动步长
都有关!例如,我的图像是1000x1000像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经
元个数就是(1000x1000 )/ (10x10)=100x100个神经元了,假设步长是8,也就是卷积核会重叠两个像素,那么……我就不算了,
思想懂了就好。注意了,这只是一种滤波器,也就是一个Feature Map的神经元个数哦,如果100个Feature Map就是100倍了。
由此可见,图像越大,神经元个数和需要训练的权值参数个数的贫富差距就越大。
总之,卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合
总之,卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合
起来获得了某种程度的位移、尺度、形变不变性。
起来获得了某种程度的位移、尺度、形变不变性。
2.3 实例实例
视觉皮层存在两类相关的细胞,S细胞(Simple Cell)和C(Complex Cell)细胞。S细胞在自身的感受野内最大限度地对图像
中类似边缘模式的刺激做出响应,而C细胞具有更大的感受野,它可以对图像中产生刺激的模式的空间位置进行精准地定位。
C是卷积层,S是下采样层。
参看这个两个网址,对理解CNN非常有帮助:
http://www.68idc.cn/help/buildlang/ask/20150705417730.html
http://www.68idc.cn/help/buildlang/ask/20150705419299.html
C是卷积层,S是下采样层。输入的一幅图像,在C1层,通过和3个卷积模板做卷积运算,然后加上偏置值,再经过sigmoid激活
函数,得到3幅输出图像,在S2层,对C1层输出的3幅图像做下采样,假设采样因子是2,也就是图中每2*2的patch中的4个像素
进行求和,再加偏置,再通过激活函数,得到3张尺寸减小了的输出图像。同样的,再经过C3,S4。将S4的输出拉成一个向量,
输入传统的神经网络中,并得到输出。
2.4 综合实例
综合实例
图中的
卷积网络工作流程如下,输入层由32×32个感知节点组成,接收原始图像。然后,计算流程在卷积和子抽样之间交替进行,如下
所述:
第一隐藏层进行卷积,它由8个特征映射组成,每个特征映射由28×28个神经元组成,每个神经元指定一个 5×5 的接受域,
这28×28个神经元共享5×5个权值参数,即卷积核;
第二隐藏层实现子 抽样和局部平均,它同样由 8 个特征映射组成,但其每个特征映射由14×14 个神经元组成。每个神经元
具有一个 2×2 的接受域,一个可训练 系数,一个可训练偏置和一个 sigmoid 激活函数。可训练系数和偏置控制神经元的操
作点;
第三隐藏层进行第二次卷积,它由 20 个特征映射组 成,每个特征映射由 10×10 个神经元组成。该隐藏层中的每个神经元
可能具有和下一个隐藏层几个特征映射相连的突触连接,它以与第一个卷积 层相似的方式操作。
第四个隐藏层进行第二次子抽样和局部平均汁算。它由 20 个特征映射组成,但每个特征映射由 5×5 个神经元组成,它以
与第一次抽样相似的方式操作。
第五个隐藏层实现卷积的最后阶段,它由 120 个神经元组成,每个神经元指定一个 5×5 的接受域。
最后是个全连接层,得到输出向量。
综合起来,如下图:
上图中28如何变成24的?
12如何变成8的?
详情见这个网址:http://ufldl.stanford.edu/wiki/index.php/Featureextractionusing_convolution
这个过程中,有这么几个参数:
* a. 深度depth:神经元个数,决定输出的depth厚度。同时代表滤波器个数。
* b. 步长stride:决定滑动多少步可以到边缘。
* c. 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了
总长能被步长整除。
最左边一列是输入层,第二列是第一个滤波器(W0),第三列是第二个滤波器(W1),第四列是输出层。
* 该图有两个神经元,即depth=2,意味着有两个滤波器。
* 数据窗口每次移动两个步长取3*3的局部数据,即stride=2。
* zero-padding=1。
3.CNN的激励层与池化层
的激励层与池化层
ReLU激励层
不要用sigmoid,因为它容易饱和、造成终止梯度传递,且没有0中心化。
ReLU的优点是收敛快,求梯度简单。
池化pool层
池化,简言之,即取区域平均或最大,如下图所示
参考文献:
参考文献:
http://yann.lecun.com/exdb/lenet/index.html (Yann LeCunn实现的CNN演示,以动画的形式演示了位移、加噪、旋转、压缩
等识别,最有价值的是把隐层用图像显示出来了,很生动形象)