斯坦福cs231n课程学习(2)卷积神经网络

文章目录

    • 神经网络
    • 反向传播
    • 卷积核
    • 池化

神经网络

我们知道神经网络是由很多个神经元构成的。他是模仿的是生物学中的神经网络。也就是说每一个神经元都会有输入和输出。输入端可能是上一个神经元传来的参数。也可以是我们直接给的参数。在上一讲里我们会有图片的3 X 像素个数个数据,这些数据就可以作为神经元的最上游输入。

在每个神经元中都会对输入的数据做处理。这样的处理可以是很简单的也可以是很难的,这取决于你自己的设定。同时在每个神经元输出之前,都会用激活函数进一步处理。为什么要用激活函数?因为如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。常用的激活函数有sigmoid,ReLU等。

在这样无数层神经元前后连接后就构成了我们的神经网络。

反向传播

反向传播是链式法则的递归调用。反向传播之所以被称为反向是因为对参数求输出值时是从上游往下游运算,而反向传播是下游折返回上游求梯度。反向传播有什么作用呢?回想一下我们在上一篇博客中,为了求得最佳的权重取值,采用的是学习率乘梯度的办法反复调整权重取值直到我们损失函数达到实际的最好情况。那么在神经网络中我们又是怎么样调整我们的超参数的呢?其实还是一样的求梯度。

但是我们有这么多的神经元到底要怎么求?其实就是简单的逐级求下去。也就用到了链式求导法则,通俗来讲就是一个神经元的输出值乘上这个神经元的包含式子对这个神经元输入的那个参数求导就是上游神经元的输出值。这样不断的递归最终会得到一开始输入的某个参数的梯度。值得注意的是:

1、最下游神经元的输出值设定为1,因为他是自己对自己求导。
2、以上输出值均特指梯度而非参数数值的输出值

卷积核

在做图片处理时我们都知道要提取图片的每一个像素的RGB数值来进行处理。但是这样直接用原始数据处理得到每个类的得分的做法其实并不高效。我们完全可以将图片中的重要特征提取出来,再用这些特征做进一步处理。这就引进了我们的卷积核。

卷积核就是我们做特征提取的一个工具。一般是用于对图像做局部特征提取,所以其大小也只会有图像局部区域(自定义)那么大。在特征提取时我们把一个卷积核与图像中对应大小区域的像素进行一个每个像素上的数值与卷积核上的数值乘积求和成为新矩阵的其中一个数值。然后卷积核再以一定步长移动求下一个数值。每一个卷积神经网络隐藏层中都包含着多个卷积映射,同一深度的映射是由同一个卷积核产生。

要注意
1、图像的像素大小应该刚好被卷积核覆盖完,否则不理想
2、在像素值不足以让卷积核全覆盖时可以对图像补0,但相应的后面要处理掉这些0

为什么说卷积核有效?
因为我们在判断图像中两个物体是否是同一个种类时,我们并不会关心这两个物体的颜色,商标等信息。而更加关注两物体之间的特征。而卷积核正是可以有效的帮我们过滤掉这些无用的信息。进而使我们分类的时候更加高效。

池化

池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效地原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

作用在于:
池化操作后的结果相比其输入缩小了。池化层的引入是仿照人的视觉系统对视觉输入对象进行降维和抽象。在卷积神经网络过去的工作中,研究者普遍认为池化层有如下三个功效:

1.特征不变形:池化操作是模型更加关注是否存在某些特征而不是特征具体的位置。
2.特征降维:池化相当于在空间范围内做了维度约减,从而使模型可以抽取更加广范围的特征。同时减小了下一层的输入大小,进而减少计算量和参数个数。
3.在一定程度上防止过拟合,更方便优化。

你可能感兴趣的:(计算机视觉)