卷积神经网络详解


1 前言

    在dl中,有一个很重要的概念,就是卷积神经网络CNN,基本是入门dl必须搞懂的东西。本文基本根据斯坦福的机器学习公开课、cs231n、与七月在线寒老师讲的5月dl班第4次课CNN与常用框架视频所写,是一篇课程笔记。本只是想把重点放在其卷积计算具体是怎么计算怎么操作的,但后面不断补充,故写成了关于卷积神经网络的通俗导论性的文章。有何问题,欢迎不吝指正。

 

 

cs231n课程里给出了卷积神经网络各个层级结构,如下图

    上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:如果是车 那是什么车

    所以

  • 最左边是数据输入层,对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。

    中间是

  • CONV:卷积计算层,线性乘积 求和。
  • RELU:激励层,上文2.2节中有提到:ReLU是激活函数的一种。
  • POOL:池化层,简言之,即取区域平均或最大。

    最右边是

  • FC:全连接层
    这几个部分中,卷积计算层是CNN的核心,下文将重点阐述。

http://cs231n.github.io/assets/conv-demo/index.html     如果初看此图,可能不一定能立马理解啥意思,但结合上文的内容后,理解这个动图已经不是很困难的事情。     下述动图中,左边是输入,中间部分是两个不同的滤波器Filter w0、Filter w1,最右边则是两个不同的输出。

    随着左边数据窗口的平移滑动,滤波器Filter w0对不同的局部数据进行卷积计算。

    值得一提的是:

  • 左边数据在变化,每次滤波器都是针对某一局部的数据窗口进行卷积,这就是所谓的CNN中的局部感知机制。
  • 与此同时,数据窗口滑动,但中间滤波器Filter w0的权重(即每个神经元连接数据窗口的的权重)是固定不变的,这个权重不变即所谓的CNN中的参数共享机制。

    我第一次看到上面这个动态图的时候,只觉得很炫,另外就是据说“相乘后想加”,但到底具体是个怎么相乘后想加的过程 则无法一眼看出,网上也没有一目了然的计算过程。本文来细究下。

    首先,我们来分解下上述动图,如下图

    接着,我们细究下上图的具体计算过程。即上图中的输出结果-1具体是怎么计算得到的呢?其实,类似wx + b,w对应滤波器Filter w0,x对应不同的数据窗口,b对应Bias b0,相当于滤波器Filter w0与一个个数据窗口相乘再求和后,最后加上Bias b0得到输出结果-1,如下过程所示:

-1* 0 + 0*0 + 1*0

+

0*0 + 1*0 + 0*1

+

0*0 + -1*2 + -1*0

 

+

0*0 + -1*0 + -1*0

+

-1*0 + 1*0 + -1*0

+

0*0 + -1*0 + 1*1

 

+

0*0 + -1*0 + 1*0

+

0*0 + 0*1 + -1*0

+

0*0 + 1*0 + -1*1

+

 

1

=

-1

    然后滤波器Filter w0固定不变,数据窗口向右移动2步,继续做内积计算,得到4的输出结果

    最后,换做另外一个不同的滤波器Filter w1、不同的偏置Bias b1,再跟图中最左边的数据窗口做卷积,可得到另外一个不同的输出。

 

 

人工神经网络wikipedia
  • 斯坦福机器学习公开课
  • http://neuralnetworksanddeeplearning.com/
  • 雨石 卷积神经网络:http://blog.csdn.net/stdcoutzyx/article/details/41596663
  • cs231n 神经网络结构与神经元激励函数:http://cs231n.github.io/neural-networks-1/
  • cs231n 卷积神经网络:http://cs231n.github.io/convolutional-networks/#overview
  • cs231n 动态卷积图:http://cs231n.github.io/assets/conv-demo/index.html
  • 七月在线寒老师讲的5月dl班第4次课CNN与常用框架视频,过两天会剪切部分放七月在线官网:julyedu.com
  • 七月在线5月深度学习班:https://www.julyedu.com/course/getDetail/37
  • 深度学习与计算机视觉系列(6)_神经网络结构与神经元激励函数:http://blog.csdn.net/han_xiaoyang/article/details/50447834
  • 深度学习与计算机视觉系列(10)_细说卷积神经网络:http://blog.csdn.net/han_xiaoyang/article/details/50542880
  • 图像卷积与滤波的一些知识点:http://blog.csdn.net/zouxy09/article/details/49080029