讨论一下神经网络中非常有名的卷积神经网络,如下图,之前我们构建的都是两层的神经网络,我们有一个线性层,然后一个非线性的运算,再添加一个线性运算,得到我们的结果,我们还发现这有助于我们解决一些模式问题,我们通过学习任务所需的中间模板,比如我们要识别一辆车,我们会提取红色的车,黄色的车,等等,然后把这些中间特征组合起来,得到某一类别的最终的评分函数,这是一些传统的神经网络。
今天我们说下卷积神经网络,它与常规神经网络的构想基本一致,不同的是需要训练卷积层,因为卷积层更能保留输入的空间结构。
接下来我们说说全连接层,我们的一张图片的尺寸为32*32*3,首先我们将其展开成3072*1,这时候我们用10*3072的权值矩阵来与其做点乘法,得到一个10*1的矩阵,其中每一个元素代表其对应类别的分数。
然后我们再讨论下卷积,他与全连接最大的不同在于可以保全空间结构,用一张我们之前用过的32*32*3的图片,而不是像全连接把它展开成一个长的向量,我们可以保持图片的结构,接下来我们的权重是一些小的卷积核,例如下面的5*5*3的大小,我们将把这个卷积核在整个图像上滑动,计算出每一个空间定位时的点积结果。
我们采用了一个卷积核,然后将它在图像的整个平面进行滑移然后我们输出它的激活映射,它里面的值就是卷积核在每个位置球的的结果,当我们在处理一个卷积层时,我们希望用到多种卷积核,因为每一个卷积核都可以从输入中得到一种特殊的模式或者概念,所以我们会有一组卷积核。
我们搭建网络模型的时候,一般都是是卷积,池化等这样来回的构建,我们会有很多的卷积核,每一个卷积核会产生一个激活映射,将每一层的输出当作下一层的输入,最后的结果是模型完成了对这组卷积核的学习。
接下来我们比较直观的了解下,我们的网络,每一层作用之后,大概是什么样的效果,其中前面的几层卷积核一般代表了一些低阶的图像特征,比如说像一些边缘特征,对于中间的一些层,我们可以得到一些更加复杂的图像特征,它的内容看起来可能更加丰富,比如边角跟斑点,而对于那些高阶的特征,我们可以获得一些比斑点之类的更加丰富的内容。
由下图可知,我们的每一个filter都会产生相应的activation map,现在我们在讨论下,我们为什么把它叫做卷积,这与两个信号的卷积有关,所以很早就有人提出,这个基本上就是卷积公式,我们与这个卷积核的翻转形式进行卷积,但这有一些微妙,不过对于深度学习的目的并不是很重要,但基本上,如果你正写出来你正在做什么,那就符合卷积的定义了。
卷积神经网络整体上来看,其实就是一个输入图片,让它通过很多层,最后得到其相应的得分。
我们来看看我们是怎么计算卷积运算后的图像的大小的,其中N为图像的大小,F为filter的大小,stride为步长,
实际中,我们会在卷积运算时进行填充,来得到我们最后想要得到的大小。
我们可以看出,如果我们不做填充的话,那么我们的图像的大小就会以一个很快的速度,变得很小。
ok,let's do a summary about the convs !!!
接下来我们先讨论下全连接与卷积的区别,全连接是将这个输入排成一列,例如一个32*32*3的图片,我们将它拍成32*32*3 by1 的一个矩阵,然后一个W维度为10 by 32*32*3与其做运算,得到一个10*1的得分向量,里面的每一个值就是这10类的得分,卷积运算在空间上,比如5*5*5,表示大小为5*5 深度为5的filter,其作用于输入图片的同一片区域,但是他们却具有不同的功用,这些不同的卷积核,作用于图像的相同区域当中。卷积运算只与图像的一个局部区域发生关联。
我们现在讨论下池化,池化层是要让所生成的表示更小更容易控制,因为我们要为了最后有更少的参数,这关系到最后我们得到的参数数量,并且基本上也会关系到给定区域内的不变性问题,关于池化层所要做的事情,它做的是一个全局化的下采样的处理,它不是只做平面上的缩小范围的操作,同时处在这个我们深度上的所有图像,我们都会对其做一个下采样的操作。
举个例子,我们做的最多的就是最大化池话,池化层也有一个卷积核的大小,而卷积核的大小和我们所要池话处理的区域大小是相同的,在这个例子中,如果我们使用2*2的滤波器,并且我们设定步长为2,我们让这个卷积核滑过整个输入部分,就像我们进行卷积时做的那样,不过我们知识提取其中最大的值,所在图像区域的输入的最大值。
为什么我们实际中,大部分采用的最大化池化,因为我有一些神经元的激活值在那儿,每个值都在一定程度上表示了,在这个位置某个神经元的激发程度,或者是某组卷积核的激发程度,你可以把最大值池化当做这组卷积核在图像任意区域的受激程度的表示,所以如果需要做检测,识别之类的任务,最大值池化是最直观的。
池化层的尺寸计算如下,以及一些超参的设定。。