CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络

1.历史
2.卷积和池化
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第1张图片
先从函数角度了解工作原理,简单介绍这些连接点。
对于全连接层,我们要做的就是在这些向量上进行操作。比如我们有一张图片,三维图片32*32*3大小,我们将所有的像素展开,就可以得到一个3072维的向量。我们得到这些权重,把向量和权重矩阵相乘,这里我们就用10*3072,然后就可以得到激活值。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第2张图片
卷积层和全连接层的主要差别,可以保全空间结构,不是将它展开成一个长的向量,我们可以保持图片的结构,我们的权重是一些小的卷积核,例子中是5*5*3的大小,我们将这个卷积核在整个图像上滑动,计算出每一个空间定位时的点积结果。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第3张图片
将这个卷积核从左上方的边角处开始,并且让卷积核遍历输入的所有像素点,在每一个位置,我们都进行点击运算,每一次运算都会在我们输出激活映射中产生一个值。之后我们再继续滑动卷积核,最简单的方式是一个像素一个像素地滑动,我们持续地进行这样操作,并相应地填满我们地输出激活映射,输出映射的维数和所想的结果并不符合,输入是32*32,输出为28*28。首先决定是如何滑动卷积核的,不同尺寸大小的输出完全取决于滑移方式。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第4张图片
当我们在处理一个卷积层时,我们希望用到多种卷积核,因为每一个卷积核都可以从输入中得到一种特殊的模式或者概念。所以我们会有一组卷积核,按照同样的方法使用多个卷积核进行计算,如果我们有6个卷积核,每个尺寸都是5*5*3,这样我们就会得到一个6层的激活映射,尺寸为28*28*6的输出。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第5张图片
我们来简单描述一下,在卷积神经网络中我们是如何使用这些卷积层的,ConvNet是由多个卷积层组成的一个序列,它们依次堆叠,就像我们之前在神经网络中,那样堆叠简单的线性层一样,之后我们将用激活函数,对其进行逐一处理,比如说一个ReLU激活函数,我们将得到一些比如Conv和ReLU的东西,以及一些池化层,之后你会得到一系列的这些层,每一个都会有一个输出,该输出又作为下一个卷积层的输入。
这些层采用多个卷积核,每一个卷积核会产生一个激活映射,这些层叠加成一个ConvNet,最后的结果是完成了对这组卷积核的学习。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第6张图片
卷积神经网络整体上来看,其实就是一个输入图片,让它通过很多层,第一个是卷积层,然后通常是非线性层,所以ReLU其实就是一种非常常用的手段,接下来会用到池化层,这些措施已经大大降低了激活映射的采样尺寸。经过这些处理之后,最终得到卷积层输出,然后我们就可以用我们之前见到的全连接层,连接所有的卷积输出,并用其获得一个最终的分值函数。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第7张图片
每滑一次所经过的区间,称其为步幅。采用步长3的时候和既有图像不能很好地拟合,会导致不对称地输出,不能进行卷积。计算输出尺寸归纳为,假设输入维度为N,卷积核大小为F,那么我们在滑动时的步幅以及最终的输出大小,也就是每个输出大小的空间维度,这些将变成(N-F)/步幅,然后再加1。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第8张图片
相当于采用零填充边界来得到最后我们想要的大小。零填充是为了保持和我们之前的输入大小相同,我们想保持全尺寸输出。通常的卷积核大小有3*3、5*5、7*7。这些都是常用的大小。
3. 视觉之外的卷积神经网络
从大脑神经元的角度来分析一个卷积层,就像我们之前分析神经元那样,在每一个位置,我们会取一个卷积核与图像的特定部分之间的一个点积,从而得到一个数值结果。来取这样一些输入值和权值矩阵W之间的点积,这些卷积核的权值,也就是这些突触的权值,然后得到一个结果值,他们的区别在于,神经元具有局部的连接性。所以我们不关注所输入图片的全部,而是关注图像空间的一个局部区域。这个神经元在图像各个区域所被激发的程度,基于之后的各层的激活映射进行推导。有一个5乘5的卷积核,称它为这个神经元的一个5乘5的感受野。这个感受野就是输入区域就是这个神经元,所能接受到的视野。对于每一个5乘5滤波器,将让它们划过整个图像空间,这些卷积核都是具有相同的权重,具有相同的参数。卷积核的数量就是所谓的深度,我们从这个三维网络中将会得到一个5个的28乘28尺寸的输出,这些不同的卷积核作用于图像的相同区域当中。
与全连接层做比较,如果我们看一下每个神经元,在激活区域或者输出中,每一个神经元都连接着平展后的所有输入。所有神经元是与全体输入量都发生关联,而不是像卷积核这样,只与图像的一个局部区域发生关联。每隔几个卷积层就会有些池化层夹在中间,还有这些非线性层。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第9张图片
池化层所要做的是要让所生成的表示,更小且容易控制。给定区域内的不变性问题,池化层不只是在做降低采样率处理,对输入的全体有效,对224乘224乘64的输入,进行空间上的降采样处理,所以最后你得到的是一个112乘112的结果。不在深度方向上的池化处理,而是只做平面上的。所以输入和输出的深度是一样的。最大池化法,池化层有一个卷积核的大小,而且卷积核的大小和我们所要池化处理的区域大小是相同的,如果我们使用2乘2的滤波器,并且在这里我们设定步长为2,我们让这个卷积核滑过整个输入部分,不过我们不进行取数量积的计算,我们只提取其中的最大值,所在图像区域的输入的最大值。
均值池化,最大值池化更好。有一堆神经元的激活值,每个值都在一定程度上表示了,在这个位置,某个神经元的激发程度,或者是某组卷积核的激发程序,你可以把最大值池化看成,这组卷积核在图像任意区域的,受激程度的表示,所以如果需要做检测,识别之类的任务。最大值池化是更直观的。很多情况下,会用滑动来代替池化去做降采样,可以看作是比例性的滑动。
CS231n-深度学习与计算机视觉-笔记-Lecture5 卷积神经网络_第10张图片
我们会有很多选项,你得到容量为W*H*D的输入,然后设置超参数,选择卷积核的尺寸,或者池化的空间范围,以及步长,然后计算输出的容量。把总的长度W减去卷积核尺寸,除以步长再加一。一般不在池化层做填零,因为池化层只做降采样,这样就不会导致,卷积核扫过边缘时,有一部分超出了输入的范围,这样池化时就不需要担心这样的问题,所以就直接降采样。池化层的典型设置是2*2的卷积核加步长2或者3*3加3,用2*2的池化器。
卷积层和ReLU层跟朴素神经网络是一样的,所以像这样分散池化,来实现降采样,最后得到一个全连接层,在最后把卷积网络最后一层的输出,即一个固定尺寸的矩阵,已知长宽高,把这样的矩阵直接拉平,这样就获得了一组一维输入与朴素神经网络连接,得到卷积网络最后的全连接层,即与每一个卷积图输出相连接的权重。在最后一层把所有的内容汇聚在一起,可以得到那些分值一样的输出。
每一列都是激活映射的输出,一开始是一辆车,经过卷积层得到的是每一个滑过输入图像的,卷积核的激活映射,把激活映射送进ReLU,得到一些这样的值,一直走,在池化层得到的值就是前面ReLU层输出,拿到ReLU层的输出然后池化之,这就做了降采样,取出所有卷积核对应位置上的最大值。如果看下这个池化层的输出,最后一列pool看起来和一个ReLU层输出是一样的,只是做了降采样,和取了每个空间位置上的最大值。这就是两者之间细微的差别。
每一个池化层输出的值,是数据经过了整个网络,处理后累积的结果,在最顶层每个值都代表了上一阶的某个概念。
卷积神经网络的工作原理,怎么把卷积层和池化层堆叠起来,最后怎么与全连接层结合,小尺寸卷积核和更深的网络结构是一个趋势,还有一个趋势是完全弃用池化和全连接层,而保留卷积层形成非常深的卷积网络。最后用softmax得到你的类别分数。

你可能感兴趣的:(Deep,Learning)