目录
人类视觉原理
深度学习的许多研究成果,离不开对大脑认知原理的研究,尤其是视觉原理的研究。
1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和TorstenWiesel,以及 Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”,可视皮层是分级的。
人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。下面是人脑进行人脸识别的一个示例:
![人类视觉原理](https://img-blog.csdnimg.cn/20190720162632858.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2phY2tfX2xpbnV4,size_16,color_FFFFFF,t_70)
我们可以看到,在最底层特征基本上是类似的,就是各种边缘,越往上,越能提取出此类物体的一些特征(轮子、眼睛、躯干等),到最上层,不同的高级特征最终组合成相应的图像,从而能够让人类准确的区分不同的物体。那么我们可以很自然的想到:可以不可以模仿人类大脑的这个特点,构造多层的神经网络,让计算机来逐层提取图像中的特征,最终在顶层做出分类呢?答案是肯定的,这也是卷积神经网络的灵感来源。
1整体描述
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积运算且具有深度结构的前馈神经网络(Feedforward Neural Networks)。相比早期的BP神经网络,卷积神经网络最重要的特性在于“局部感知”与“参数共享”,自2012年的AlexNet开始,卷积神经网络就多次成为ImageNet大规模视觉识别竞赛(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)的优胜算法,至此,卷积神经网络开始大放异彩,成为了众多科学领域的研究重点之一。
如图1所示,一个完整的卷积神经网络可包含卷积层、池化层、全连接层等。其中卷积层用来进行特征提取,池化层用于降低维数,全连接层可用于结果预测(也可使用全卷积网络进行预测)。
注:卷积运算也属于一种线性运算,故需要进行非线性处理,即添加激活函数(示例中为修正线性单元的函数,即 Relu 激活函数)。
对于卷积层,其详细描述如图1.2所示
![卷积层描述](https://img-blog.csdnimg.cn/20191023160512517.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2phY2tfX2xpbnV4,size_16,color_FFFFFF,t_70)
其运算过程主要由以下4步组成:
- 原图像(尺寸为
)分别与
个
的卷积核(又名滤波器,fliter)进行卷积运算,得到
个
的特征图(feature map)
- 每个特征图分别添加不同的偏置(bias),具体为特征图中的每个元素
- 对每个特征图添加激活函数
,进行非线性运算
- 将这
个特征图依次叠加,得到最终的特征图(尺寸为
)
注:对于某一个卷积层,其不同特征图所使用的激活函数相同,但不同卷积层所使用的激活函数可以不同,该步骤在整体描述中为突出与神经网络的相似性而单独提出,但实际上其仍属于卷积层的一部分。
对于池化层,其详细描述如图1.3所示:
![池化层描述](https://img-blog.csdnimg.cn/20190719164325679.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2phY2tfX2xpbnV4,size_16,color_FFFFFF,t_70)
承接上例,对于 的特征图,其池化过程仅需通过池化核对该特征图进行池化运算即可得到输出。
然后将得到的特征图经过全连接层进行处理并由softmax算法进行回归即可得到最终的输出结果。
注:全连接层即为机器学习中常见的由神经元构成的神经网络。
(关于神经网络及softmax回归可参考:神经网络的前向及反向传播、深度学习笔记)
2基本理论
2.1卷积(convolution)
卷积神经网络中的核心即为卷积运算,其相当于图像处理中的“滤波器运算”。
对于一个 大小的卷积核
,其对某一原图像
进行卷积运算的过程为:卷积核
中的每一个权值
分别和覆盖的原图像
中所对应的像素
相乘,然后再求和。计算公式为:
如图2.1所示,对一幅图像的一个完整的卷积运算过程为:卷积核以一定的间隔滑动,并对所覆盖的区域进行卷积运算得到值 ,直至遍历完整幅图像。
![卷积运算](https://img-blog.csdnimg.cn/20190720180736192.gif)
一个标准的卷积运算以图2.2为例,其卷积核每次覆盖原图像的9个像素,共滑动4次,得到了一个 的二维数据。对于一个大小为
的原图像,经过大小为
的卷积运算后,其输出图像的尺寸为
。
2.2步长(stride)
滑动一定的间距,但这个间距该如何定义呢? 这个概念就是卷积的 “步长”(stride),设置卷积的步长可使卷积过程跳过原图像中的某些像素。结合步长 操作后,其输出图像的尺寸为
。stride = 1 表示卷积核滑过每一个相距是 1 的像素,是最基本的单步滑动,作为标准卷积模式。Stride 是 2 表示卷积核的移动步长是 2,跳过相邻像素,输出图像缩小为原来的 1/2。Stride 是 3 表示卷积核的移动步长是 3,跳过 2 个相邻像素,图像缩小为原来的 1/3,以此类推。
![一个步长为2的卷积运算](https://img-blog.csdnimg.cn/20190720182452976.gif)
2.3填充(padding)
在标准的卷积过程中,存在两个问题:
- 每次卷积运算后,图像就会缩小,在经历多次运算后,图像终会失去其形状,变为
的 “柱状”。
- 对于图像边缘的像素,其只被一个输出所触碰或者使用,但对于图像中间的像素,则会有多个卷积核与之重叠。所以那些在角落或者边缘区域的像素点在输出中采用较少,意味着卷积过程丢掉了图像边缘位置的许多信息。
对于这个问题,可以采用额外的 “假” 像素(通常值为 0, 因此经常使用的术语 ”零填充“ )填充边缘。这样,在滑动时的卷积核可以允许原始边缘像素位于其中心,