卷积神经网络

视觉感知

相同的图片经过不同的视觉系统,会得到适合自己生存环境的感知。

不同的观察角度,决定了图片的识别结果。

图像表达

画面识别的输入$x$是形状为(width, height, depth)的三维张量。其中每一个(width,height)的矩阵称为一个channel。

画面不变性:一个物体在channel中的位置不应该影响对该物体的识别结果。

为什么前馈神经网络不能完成任务?

输入图片是一个三维张量,但是很明显前馈神经网络很难识别不同位置的“相同”样本。
也即:应当使前馈神经网络在识别图片中的物体时,即使物体在不同位置也能顺利识别出来。

卷积神经网络:让权重在不同位置共享的神经网络

卷积神经网络的最基本的操作:

  1. 卷积
  2. 非线性(ReLu)
  3. Pooling池化
  4. 分类(全连接层)

卷积

  • 使用局部区域去扫描整张图片

    其中:红框表示filter或者kernel,隐藏层节点为kernel的线性组合。
    那么,隐藏层节点$y_0$的表达式即为:
    $$ y_0=x_0w_1+x_1w_2+x4w_3+x_5w_4+b_0 $$

  • 空间共享
    不同的区域共享同一个“权重矩阵”和偏移量$b_0$。

  • 矩阵形式的输出表达:

    经过一次feature detector后的隐藏层就可以看做是“卷积”的特征。

  • 处理Depth这一个维度:将三个channel看成三组不同的权重矩阵
    特别的,针对$$ 2\cdot2\cdot3 $$(RGB)的kernel有:

    也就是说,depth维是以被贯穿的方式处理的
    在实践中,Depth的数值与filter的个数相同。

  • 步长(Stride):
    这个参数决定了filter滑动一次所跨越的像素数量。本文的例子中步长均为1。

  • Zero padding
    为了保证卷积后的图片尺寸不变,则需要在最外一层填充0,

  • 多filters
    不同的filters对同一个图像抓取到的Feature Maps也会不同。
    每一个不同的filter代表了每一个不同的操作,下图就展示了filter对用一张图片不同的处理结果。



非线性(ReLu)

回顾一下老朋友ReLU:Rectified Linear Unit

这个环节的主要作用就是把一些值为负数的像素点全部设置为0,

Pooling池化

  • Max pooling
    整个图片被不重叠的分割成若干个同样大小的小块(pooling size)。每个小块内只取最大的数字,再舍弃其他节点后,保持原有的平面结构得出output。那么为什么要有这个环节?

    卷积后的Feature Map中有对于识别物体不必要的冗余信息。

  注:上图的步长设置为1

全连接层

卷积网络的最后会将末端得到的长方体平摊(flatten)成一个长长的向量,并送入全连接层配合输出层进行分类。

小结:卷积神经网络的训练过程

  1. 随机初始化所有的filter、参数、权重
  2. 将训练图像作为输入,通过卷积->ReLu->池化(pooling)->全连接层的过程找到每个分类的概率。
  3. 在输出层计算总误差。
  4. 使用梯度下降反向传播更新所有filter、参数、权重的值。其中,权重按它们所占误差的比例更新;

再用一个例子查漏补缺

可视化CNN游戏,强烈建议尝试一下!

游戏截图如下:
一副图片由1024($32*32$)个像素组成。

第一个卷积层由6个$5*5$并且步长设置为1的filter生成,我们可以形象的理解为它的depth维度为6。注:下图将ReLu环节与卷积环节合二为一了,请读者心中有数。




紧接着针对每一个feature map使用$2*2$并且步长为2的max pooling。可以看到Pooling层的每一个像素对应Conv层的四个像素。



接下来是最难理解的第二次的卷积层和max pooling层的环节:
首先,观察第一层max pooling到第二层卷积的个数,为什么8个feature map经过filter的f卷积之后变成了16个feature map?

为了寻找答案,我们来观察下第二层feature maps的filter都是长成什么样的:

请大家仔细观察上图:我们会发现,第二层卷积层的filter的形状和所选择的第一层max pooling的feature map息息相关!也就是说,我们在做第二层的卷积时,只考察了第一层的局部特征!

第二层的max pooling与第一层同理,我就不再赘述了。

之后是全连接层,全连接层利用了所有的特征:

全连接层的全景图如下:

参考与引用

  1. https://zhuanlan.zhihu.com/p/27642620
  2. https://cs231n.github.io/convolutional-networks/
  3. https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
  4. http://scs.ryerson.ca/~aharley/vis/conv/flat.html
请zzy824喝杯咖啡
0%