深度学习之卷积神经网络原理(cnn)
1.图像原理
图像在计算机中是一堆按顺序排列的数字,数值为0到255。0表示最暗,255表示最亮。
上图是只有黑白颜色的灰度图,而更普遍的图片表达方式是RGB颜色模型,即红、绿、蓝三原色的色光以不同的比例相加,以产生多种多样的色光。RGB颜色模型中,单个矩阵就扩展成了有序排列的三个矩阵,也可以用三维张量去理解。 其中的每一个矩阵又叫这个图片的一个channel(通道),宽, 高, 深来描述。
2.图像识别
画面不变性
知道一个物体不管在画面左侧还是右侧,都会被识别为同一物体,这一特点就是不变性,希望所建立的网络可以尽可能的满足这些不变性特点
3.传统神经网络
解决办法是:用大量物体位于不同位置的数据训练,同时增加网络的隐藏层个数从而扩大网络学习这些变体的能力。
卷积神经网络原理
什么是卷积?
对图像(不同的窗口数据)和卷积核(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。
卷积层
卷积操作存在的问题?
步长stride:每次滑动的位置步长。
b. 卷积核的个数:决定输出的depth厚度。同时代表卷积核的个数。
c. 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除
数据窗口每次移动两个步长取3*3的局部数据,即stride=2。 两组神经元(卷积核),即depth=2,意味着有两个滤波器。 zero-padding=1。
卷积神经网络卷积结构
卷积神经网络(CNN)的卷积结构,是其强大特征提取能力的核心。左图中,图片(picture)的局部区域(红框标记)作为输入(input)的起始,通过与卷积核的关联,将局部信息传递到隐藏层(hidden) 。每个局部区域并非孤立,像左图里红框的 0 - 1、4 - 5 等元素,对应输入层特定节点,经连接传递信息,逐步在隐藏层抽象、整合,最终输出(output)关键特征。
右图则更直观展现局部与整体的连接。红框局部(a - b、e - f 等)对应输入层节点,广泛连接隐藏层,让局部特征在网络中充分交互、融合。这种结构突破全连接网络对计算和特征利用的局限,通过聚焦局部、逐层传递与抽象,高效提取图片从简单到复杂的特征,为图像识别、分类等任务筑牢基础,是 CNN 适配图像数据,挖掘深层模式的关键设计。
图片精通卷积核处理后的样子,与人眼观看事物原理相似,先看事物的轮廓
卷积神经网络的系统
这是AlexNet的多GPU并行结构示意图,红框内核心卷积模块通过卷积层提取图像从简单到复杂的特征,池化层精简信息,双GPU并行加速运算,为后续图像分类奠定基础。
卷积层计算的结果
例如输入数据为32*32*3的图像,用10个5*5*3的卷积核来进行操作,步长为1,边界0填充为2,最终输出结果为?
(32-5+2*2)/1 +1 =32,输出规模为32*32*10的特征图
池化层
池化层的作用:
一种降采样,减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。
常见的池化层:
最大池化、平均池化、全局平均池化、全局最大池化。 平均池化(average pooling):计算图像区域的平均值作为该区域池化后的值。 最大池化(max pooling):选图像区域的最大值作为该区域池化后的值。是最为常见的。 通常来说,CNN的卷积层之间都会周期性地插入池化层。
池化层操作方法:
与卷积层类似,池化层运算符由一个固定形状的窗口组成,该窗口根据其步幅大小在输入的所有区域上滑动,为固定形状窗口(有时称为 池化窗口)遍历的每个位置计算一个输出。 然而,不同于卷积层中的输入与卷积核之间的互相关计算,池化层不包含参数。
最大池化的原理分析
Max pooling的主要功能是压缩,却不会损坏识别结果。 这意味着卷积后的Feature Map中有对于识别物体不必要的冗余信息。 那么我们就反过来思考,这些“冗余”信息是如何产生的。
全连接层
当抓取到足以用来识别图片的特征后,接下来的就是如何进行分类。 全连接层(也叫前馈层)就可以用来将最后的输出映射到线性可分的空间。 通常卷积网络的最后会将末端得到的长方体平摊(flatten)成一个长长的向量,并送入全连接层配合输出层进行分类。
感受野
例如图片是3通道: 卷积核为7*7的,则卷积核所需要的参数个数为:7*7=49个 卷积核为3个3*3的,则卷积核所需要的参数个数为:(3*3*3) =27
一张250*250的图片和一张500*500的图片,卷积层的权重参数数谁多?
答案是一样多
以下是几个比较有名的卷积神经网络结构
LeNet:第一个成功的卷积神经网络应用
AlexNet:类似LeNet,但更深更大。使用了层叠的卷积层来抓取特征(通常是一个卷积层马上一个max pooling层)
ZF Net:增加了中间卷积层的尺寸,让第一层的stride和filter size更小。
GoogLeNet:减少parameters数量,最后一层用max pooling层代替了全连接层,更重要的是Inception-v4模块的使用。
VGGNet:只使用3x3 卷积层和2x2 pooling层从头到尾堆叠。
ResNet:引入了跨层连接和batch normalization。
DenseNet:将跨层连接从头进行到尾。