目录
一、计算机视觉(Computer vision)
二、边缘检测示例(Edge detection example)
三、更多的边缘检测内容(More edge detection)
四、Padding
五、卷积步长(Strided convolution)
六、三维卷积(Convolution over volumes)
七、单层卷积网络(One layer of a convolution network)
八、简单卷积网络示例(A simple convolution network example)
九、池化层(Polling)
十、卷积神经网络示例(Convolution neural network example)
十一、为什么要使用卷积(Why convolutions)
一、计算机视觉(Computer vision)
图像分类、目标检测、图片风格迁移等。
要处理的图片往往比较大,如果使用全连接神经网络,那么参数太多,计算量太大,且容易过拟合。
如果图片是1000*1000像素,3通道RGB,那么输入是300million,假设隐藏层有1000个神经元,那么参数就是300million*1000=300billion,300亿个参数,过于庞大。
因此,需要进行卷积计算。
二、边缘检测示例(Edge detection example)
如上图,前几层检测边缘,后面的层检测人脸等特征。
检测垂直的线和水平的线。
下图的卷积核(kernel 或称作fielter)可以检测竖直的线。
三、更多的边缘检测内容(More edge detection)
除了检测竖直线外,还可以检测水平线等。
四、Padding
字面意思是填充,如果不做填充,那么6*6的图片经过3*3的卷积核处理后,大小变为f-n+1=4*4。
这样有两个缺点:
1、卷积操作后,图片的尺寸会减小。如果神经网络有100层,那么就会越来越小,这是我们不希望看到的结果。
2、原图片中心的点,如正中央的点,与卷积核进行过多次运算。而原图片的四个顶点,与卷积核仅仅进行了一次运算。这说明会丢掉一些边缘信息。
为了弥补上述两个缺点,进行padding操作。padding的字面意思是“填充”。
两种卷积方式:
1、valid方式:不做padding
2、same方式:做padding,使得卷积操作后的图片大小与原图片大小一致。
原始大小n, 卷积核大小f,padding是p,那么n-f+1+2p=n,求出p。
p=(f-1)/2
卷积核一般用奇数,3*3或5*5或7*7的,很少有人用偶数。可能有以下两个原因:
1、奇数的话,因为padding的计算公式是需要除以2。如果是偶数,则原图片的上边缘和下边缘处理不相同。
2、奇数的话,会让卷积核有一个中心点,正中央的位置,这在图像处理过程中比较方便。
五、卷积步长(Strided convolution)
卷积步长是指卷积核每次移动的跨度。
如下图,步长为2,则卷积核每次移动2个格子。
计算公式如下:
数学中的卷积,需要做180度的镜像翻转。
在机器学习中,不做翻转也不影响,所以就不做了。
数学家们称为“互相关”,cross-correlation,但机器学习的研究者们依然习惯称之为“卷积”。
六、三维卷积(Convolution over volumes)
3个通道(立方体的深度为3)的原图像,卷积核是3*3*3的小立方体。
计算时,27个数分别对应相乘,然后将27个数相加。最终得到4*4的结果。
如果想同时探测竖直方向的线和水平方向的线,那么可以设计两个卷积核。每个卷积核分别去做运算,最后得到4*4*2的结果。
计算公式如下图:
七、单层卷积网络(One layer of a convolution network)
计算过程:
不管输入的图片是多大的像素,卷积网络的参数永远都只有3*3*3+1=28个。这里加的1是指偏置项b。这就很好地避免了过拟合的问题。
每一层的输入和输出的维度计算:
八、简单卷积网络示例(A simple convolution network example)
随着网络深度的逐渐加深,前几层会保持原图片的大小,后面会变得越来越小,但通道数会逐渐增加。
大部分的卷积网络都会有这样的特点。
卷积网络中,不仅要有卷积层,也要有池化层(pool)和全连接层(fully connected)。
九、池化层(Polling)
为了缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,使用池化层。
最大池化比较常用,平均池化较为少用。
如下图,是最大池化。相同颜色的四个数字中 取最大值。
下图中,原始输入是5*5,池化的f=3, 步幅s=1, 池化后输出的是3*3的。
这是对最大池化功能的直观理解,你可以把这个4×4输入看作是某些特征的集合,也许不是。你可以把这个4×4区域看作是某些特征的集合,也就是神经网络中某一层的非激活值集合。数字大意味着可能探测到了某些特定的特征,左上象限具有的特征可能是一个垂直边缘,一只眼睛,或是大家害怕遇到的CAP特征。显然左上象限中存在这个特征,这个特征可能是一只猫眼探测器。然而,右上象限并不存在这个特征。最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。所以最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。
必须承认,人们使用最大池化的主要原因是此方法在很多实验中效果都很好。尽管刚刚描述的直观理解经常被引用,不知大家是否完全理解它的真正原因,不知大家是否理解最大池化效率很高的真正原因。
其中一个有意思的特点就是,它有一组超参数,但并没有参数需要学习。实际上,梯度下降没有什么可学的,一旦确定了和,它就是一个固定运算,梯度下降无需改变任何值。
我们来看一个有若干个超级参数的示例,输入是一个5×5的矩阵。我们采用最大池化法,它的过滤器参数为3×3,即,步幅为1,,输出矩阵是3×3。之前讲的计算卷积层输出大小的公式同样适用于计算最大池化的输出大小。
平均池化
目前来说,最大池化比平均池化更常用。但也有例外,就是深度很深的神经网络,你可以用平均池化来分解规模为7×7×1000的网络的表示层,在整个空间内求平均值,得到1×1×1000,一会我们看个例子。但在神经网络中,最大池化要比平均池化用得更多
执行反向传播时,反向传播没有参数适用于最大池化。只有这些设置过的超参数,可能是手动设置的,也可能是通过交叉验证设置的。
最大池化往往不加padding,padding是0.
十、卷积神经网络示例(Convolution neural network example)
下图是一个灵感来源于LeNet-5的跟他类似但是不完全相同的网络。
一个卷积层,跟着一个池化层。然后再卷积,再池化,这样输出的宽度和高度都逐渐减小,通道数逐渐增加。然后再到全连接层,全连接就是之前讲过的普通神经网络,参数数量是400*120,然后再跟着一个神经元数量更少的全连接层,最后通过softmax输出。
在卷积神经网络中,有很多的超参数。不建议自己尝试新的,建议查阅论文里学者们的经验。
接下来我们讲讲神经网络的激活值形状,激活值大小和参数数量。输入为32×32×3,这些数做乘法,结果为3072,所以激活值有3072维,激活值矩阵为32×32×3,输入层没有参数。计算其他层的时候,试着自己计算出激活值,这些都是网络中不同层的激活值形状和激活值大小。
有几点要注意,第一,池化层和最大池化层没有参数;第二卷积层的参数相对较少,前面课上我们提到过,其实许多参数都存在于神经网络的全连接层。观察可发现,随着神经网络的加深,激活值尺寸会逐渐变小,如果激活值尺寸下降太快,也会影响神经网络性能。示例中,激活值尺寸在第一层为6000,然后减少到1600,慢慢减少到84,最后输出softmax结果。我们发现,许多卷积网络都具有这些属性,模式上也相似。
神经网络的基本构造模块我们已经讲完了,一个卷积神经网络包括卷积层、池化层和全连接层。许多计算机视觉研究正在探索如何把这些基本模块整合起来,构建高效的神经网络,整合这些基本模块确实需要深入的理解。根据我的经验,找到整合基本构造模块最好方法就是大量阅读别人的案例。
十一、为什么要使用卷积(Why convolutions)
假设有一张32×32×3维度的图片,这是上节课的示例,假设用了6个大小为5×5的过滤器,输出维度为28×28×6。32×32×3=3072,28×28×6=4704。我们构建一个神经网络,其中一层含有3072个单元,下一层含有4074个单元,两层中的每个神经元彼此相连,然后计算权重矩阵,它等于4074×3072≈1400万,所以要训练的参数很多。虽然以现在的技术,我们可以用1400多万个参数来训练网络,因为这张32×32×3的图片非常小,训练这么多参数没有问题。如果这是一张1000×1000的图片,权重矩阵会变得非常大。我们看看这个卷积层的参数数量,每个过滤器都是5×5,一个过滤器有25个参数,再加上偏差参数,那么每个过滤器就有26个参数,一共有6个过滤器,所以参数共计156个,参数数量还是很少。
卷积的参数少的原因:
1、权值共享:检测竖直线的卷积核,在图片的左上角、右下角等所有位置都适用,因此可以共享同样的权值。
2、稀疏连接:每个卷积核计算都是九个数分别对应计算,即只考虑与九个像素点的关系,而不考虑其他点。
最后,我们把这些层整合起来,看看如何训练这些网络。比如我们要构建一个猫咪检测器,我们有下面这个标记训练集,表示一张图片,是二进制标记或某个重要标记。我们选定了一个卷积神经网络,输入图片,增加卷积层和池化层,然后添加全连接层,最后输出一个softmax,即。卷积层和全连接层有不同的参数和偏差,我们可以用任何参数集合来定义代价函数。一个类似于我们之前讲过的那种代价函数,并随机初始化其参数和,代价函数等于神经网络对整个训练集的预测的损失总和再除以(即)。所以训练神经网络,你要做的就是使用梯度下降法,或其它算法,例如Momentum梯度下降法,含RMSProp或其它因子的梯度下降来优化神经网络中所有参数,以减少代价函数的值。通过上述操作你可以构建一个高效的猫咪检测器或其它检测器。
至此,已经学习完了卷积神经网络的所有基本构造模块
转载自https://blog.csdn.net/qq_35175666/article/details/88666672#%E5%85%AD%E3%80%81%E4%B8%89%E7%BB%B4%E5%8D%B7%E7%A7%AF%EF%BC%88Convolution%20over%20volumes%EF%BC%89