[理论学习] CNN学习笔记简陋版
写在前面
参考:
https://www.cnblogs.com/boostwei/p/15195643.html
https://www.youtube.com/watch?v=pj9-rr1wDhM
https://zhuanlan.zhihu.com/p/56940729
CNN做了什么
CNN的出现主要解决图像处理的两大难题:
1.图像处理的数据量过大以致处理成本昂贵且效率低
2.图象在数字化的过程中很难保证原有的特征
CNN结构
输入: 图像的每个像素
输出:我们希望分类的东西
过程:在输入与输出之间是卷积层,池化层和全连接层
一.输入
计算机是如何查看图像的?
图像(或者是其他形式的输入,如语音)以像素值矩阵的方式存储于数字设备中。
二.卷积层
内核
内核是一个比输入小几个数量级的矩阵,在卷积运算中,内核在输入图像上从左到右、从上到下移动,取它和输入图像的矩阵做点积,然后将值保存到新矩阵中,以此来提取图像的特征
是如何做到提取特征的?
用值初始化内核,他们可以用来转换输入图像。不同初始值的内核面对一张图像进行卷积时,检测到的边缘细节不同。一个卷积层可以有产生多个特征图的多个内核。
另外,由前述可知,在CNN中,卷积操作只是加权求和的线性操作。若神经网络中只用卷积层,那么无论有多少层,输出都是输入的线性组合,网络的表达能力有限,无法学习到非线性函数。因此CNN引入激活函数,激活函数是个非线性函数,常用于卷积层和全连接层输出的每个神经元,给神经元引入了非线性因素,使网络的表达能力更强,几乎可以逼近任意函数,这样的神经网络就可应用到众多的非线性模型中
三.池化层
池化层用于对特征图进行下采样,保留重要的部分,去除冗余的部分。这一步是防止过拟合,同时保留了重要信息使得空间变小,提升了后续的计算速度
实现方式仍然是一个内核。该内核在特征图上从左到右、从上到下地移动,与特征矩阵点积,并将值保存在新的矩阵中。
四.全连接层
“我们刚给讲了卷积层、池化层和激活函数,这些在全连接层之前层的作用都是将原始数据映射到隐层特征空间来提取特征,而全连接层的作用就是将学习到的特征表示映射到样本的标记空间。换句话说,就是把特征正合并到一起(高度提纯特征),方便交给最后的分类器或者回归。”
感受野(Receptive Field)
(我现在还不太清楚将感受野的知识放在这里合不合适,但既然是有关神经网络的,那就姑且放在这里一起简单说一下吧,后面学得深入了自然就知道合不合适啦)
是什么
The receptive field is defined as the region in the input space that a particular CNN’s feature is looking at (i.e. be affected by).
理论上定义,卷积神经网络中每层的特征图(Feature Map)上的像素点在原始图像中映射的区域大小就叫感受野,也就相当于高层的特征图中的像素点受原图多大区域的影响
一个特征点的感受野可以用其所在的中心点位置(center location)和大小(size)来描述。然而,某卷积特征点所对应的感受野上并不是所有像素都是同等重要的,就好比人的眼睛所在的有限视野范围内,总有要 focus 的焦点。对于感受野来说,距离中心点越近的像素肯定对未来输出特征图的贡献就越大。换句话说,一个特征点在输入图像(Input) 上所关注的特定区域(也就是其对应的感受野)会在该区域的中心处聚焦,并以指数变化向周边扩展(need more explanation)。
如图所示,我们采用卷积核C的核大小(kernel size) k=3x3,填充大小(padding size) p=1x1,步长(stride) s=2x2。(图中上面一行)对5x5的输入特征图进行卷积生成3x3的绿色特征图。(图中下面一行)对上面绿色的特征图采用相同的卷积操作生成2x2的橙色特征图。(图中左边一列)按列可视化CNN特征图
怎么算
作用是什么
前文说了,感受野相当于高层的特征图中的像素点受原图多大区域的影响
因此感受野对网络的主要影响有二:
一.影响网络感知能力
较小的感受野可以提高网络对细节特征的感知能力,较大的感受野可以提高网络对全局特征的感知能力。
二.影响网络的计算复杂度
较小的感受野需要更多的卷积层来提取特征,从而增加了计算复杂度;较大的感受野可以通过较少的卷积层来提取特征,从而减少了计算复杂度。