深度学习12(卷积神经网络)
为什么需要卷积神经网络
在计算机视觉领域,通常要做的就是指用机器程序替代人眼对目标图像进行识别等。那么神经网络也好,还是卷积神经网络其实都是上个世纪就有的算法,只是近些年来电脑的计算能力已非当年的那种计算水平,同时现在的训练数据很多,于是神经网络的相关算法又重新流行起来,因此卷积神经网络也一样流行。
1974年,PaulWerbos提出了误差反向传导来训练人工神经网络,使得训练多层神经网络成为可能。
1979年,KunihikoFukushima(福岛邦彦),提出了Neocognitron,卷积、池化的概念基本形成
1986年,Geoffrey Hinton与人合著了一篇论文:Learning representations by back-propagation
errors。
1989年,Yann LeCun提出了一种用反向传导进行更新的卷积神经网络,称为LeNet。
1998年,Yann LeCun改进了原来的卷积网络,LeNet-5。
感受野
1962年Hubel和Wiesel通过对猫视觉皮层细胞的研究,提出了感受野(receptive field)的概念,Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络。单个感受器与许多感觉神经纤维相联系,感觉信息是通过许多感受神经纤维发放总和性的空间与时间类型不同的冲动,相当于经过编码来传递。
边缘检测
为了能够用更少的参数,检测出更多的信息,基于上面的感受野思想。通常神经网络需要检测出物体最明显的垂直和水平边缘来区分物体。比如:
看一个列子,一个 6x6的图像卷积与一个3x3的过滤器(Filter orkenel)进行卷积运算。
在这个6x6 的图像中,左边一半像素的值全是 10,右边一半像素的值全是 0,中间是一条非常明显的垂直边缘。这个图像与过滤器卷积的结果中,中间两列的值都是 30,两边两列的值都是 0,即检测到了原 6x6图像中的垂直边缘。
注:虽然看上去非常粗,是因为我们的图像太小,只有5个像素长、宽,所以最终得到结果看到的是两个像素位置,如果在一个500x500的图当中,就是一个竖直的边缘了。
随着深度学习的发展,我们需要检测更复杂的图像中的边缘,与其使用由人手工设计的过滤器,还可以将过滤器中的数值作为参数,通过反向传播来学习得到。
卷积网络原理
卷积神经网络的结构
卷积神经网络由一个或多个卷积层、池化层以及全连接层等组成。与其他深度学习结构相比,卷积神经网络在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。
卷积层
目的:卷积运算的目的是提取输入的不同特征,某些卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。
参数:
size:卷积核/过滤器大小,选择有1*1,3*3,5*5
padding:零填充,Valid与Same
stridle:步长,通常默认为1四个超参数:
Filter数量反
Filter大小F
步长S
零填充大小P
输出体积大小H2*W2*D2
H2=(H1-F+2P)/S+1
W2=(W1-F+2P)/S+1
D2=K
进行卷积之后的图片变小了,假设N为图片大小,F为卷积核大小
相当于N-F+1=5-3+1=3
这样会有缺点:图像变小和边缘信息丢失,那么就需要填充。
padding-零填充
在图片像素的最外层加上若干层0值,若一层,记做p =1。
因为0在权重乘积和运算中对最终结果不造成影响,也就避免了图片增加了额外的干扰信息。
这张图中,还是移动一个像素,并且外面增加了一层0。那么最终计算结果我们可以这样用公式来计算:5+2*p-3+1=5
P为1,那么最终特征结果为5。实际上我们可以填充更多的像素,假设为2层,则5+2*2-3+1=7,这样得到的观察特征大小比之前图片大小还大。所以我们对于零填充会有一些选择该填充多少?
过滤器大小与步长
通过上面的式子,如果F不是奇数而是偶数个,那么最终计算结果不是一个整数,造成1/2,3/2……这种情况这样填充不均匀,所以也就是为什么卷积核默认都去使用奇数维度大小。而且奇数维度的过滤器有中心,便于指出过滤器的位置。
步长是过滤器每次移动的像素单位,以上例子中我们看到的都是每次移动一个像素步长的结果,如果将这个步长修改为2,3,那结果如何?
多通道卷积和多卷积核
当输入有多个通道(channel)时(例如图片可以有 RGB 三个通道),卷积核需要拥有相同的channel数,每个卷积核 channel 与输入层的对应 channel 进行卷积,将每个 channel 的卷积结果按位相加得到最终的Feature Map.
当有多个卷积核时,可以学习到多种不同的特征,对应产生包含多个channel的 Feature Map,这里的多少个卷积核也可理解为多少个神经元。
池化层
池化层主要对卷积层学习到的特征图进行亚采样(subsampling)处理,主要由两种:
1最大池化:Max Pooling,取窗口内的最大值作为输出
2平均池化:IAvg Pooling,取窗口内的所有值的均值作为输出
意义在于:降低了后续网络层的输入维度,终缩减模型大小,提高计算速度提高了Feature Map 的鲁棒性,防止过拟合。
对于一个输入的图片,我们使用一个区域大小为22,步长为2的参数进行求最大值操作。同样池化也有一组参数,f,s,得到2 2的大小。当然如果我们调整这个超参数,比如说3*3,那么结果就不一样了,通常选择默认都是f=2*2,s=2。池化超参数特点:不需要进行学习,不像卷积通过梯度下降进行更新。
全连接层
卷积层+激活层+池化层可以看成是CNN的特征学习/特征提取层,而学习到的特征(Feature Map)最终应用于模型任务(分类、回归):先对所有 Feature Map 进行扇平化(flatten,即reshape 成1xN 向量)。再接一个或多个全连接层,进行模型学习。