How CNN work笔记

How convolutioinal neural networks work

阅读了How CNNs work这个课件,感触很大,读完对于CNN的理解有进一步的提高。学习总得记录点什么,便打算一边阅读一边把自己的理解作为笔记写下来,相当于做个笔记吧。

1

如课件题目所言,课件主要讲解的是CNN神经网络的工作原理。

Convolution deep belief networks for scalable

2

图中有几个关键词,卷积深度置信网络,它是可扩展的。还是分层表示的、无监督的学习。图中显示了图像的分类识别过程,对于目标的分类和识别,图中显示的是三个过程,第一层展示的是提取的到特征为边缘和轮廓这些特征,第二层则是物体的局部特征,如faces中的眼睛和鼻子、car的车身和轮子等。最后一层便是分类任务中最高阶的特征了,可以识别分类出face和cars。

卷积神经网络是分层的,在经典的CNN网络中,有人层通过反卷积的办法去还原了每一层网络提取到的特征有哪些规律和信息,发现卷积提取到的特征是逐步由低阶语义层次的特征到高阶语义层次,开始的网络层显示提取到梯度、边缘等特征,接着更进一步提取到了物体的轮廓特征,再接着便是由轮廓组成的物体的部分图像,最后便是可以得到具体物体的类别这种高阶的语义特征。

Playing Atari with Deep Reinforcement Learni

3

图中举的例子是用深度强化学习去玩游戏的应用

##The Robot Learning

Robot Learning ManipulationAction Plans by Watching Unconstrained Videos from the World Wide Web

4

上图展示的是机器人通过光看网络上的视频去学习的例子,学习的框架正是卷积神经网络CNN,CNN在此过程有两个任务,一个是目标的检测一个是学习它的类型,学习完成便是让机器人有理解目标的信息的能力,目标的信息可能是类别和位置这些。然后实现这个理解能力的便是学习训练出来的这个parse tree,它可负责语义的分析,从而去指导机器人的响应动作。所以,这个过程总结起来就是

  1. CNN for Object & CNN for Grasping Type
  2. 对学习到的模型model进行译码viterbi,得到分析树parse tree
  3. parse tree指导commands机器人如何工作(与现实物体进行交互)

A toy ConvNet: X‘s and O’s

5

作者用了一个很简单功能的网络去开始介绍CNN,如图所示,一幅2d数据的图像输入CNN这个黑匣子,黑匣子出来后就可以得到图像里面的内容究竟是X还是O,这个可以理解为是一个分类的思想。

那么接下来便是要去探究这个CNN黑匣子的内部工作原理了。

For example

6

先举个例子,我们需要的黑匣子的功能应该是如上图所示的,X经CNN黑匣子判断后得到的分类结果应该是X,同理O经过分类的正确结果应该是O。看起来貌似原理很简单对吧

Trickier cases

7

但是理想很美满,现实很骨感。并非所有的X都长一个样,也并非所有的o也都长一个样。这些X和O在经过平移translation、尺度scaling、旋转rotation和加粗weight变换之后,CNN这个黑匣子还能否向我们人类一样正确去判断出它的类别,这将是难点所在。

Deciding is hard

8

首先要明白计算机除了计算非常快之外,是非常愚蠢的。让其判断上面两个黑白方阵代表的是同一种事物对计算机来说是非常困难的。

What computers see

9

那再计算机眼中图片是个上面样子的,如图所示,大概是这么模样,就是一个方阵,方阵里面内容是数字。更准确的说这是一个矩阵,用矩阵去表示图像时最常用地方法。这与相机上面的像素点正好相对应,矩阵里不同数值构成了图像的信息,这里使用1表示白色,-1表示黑色。所以对于计算机而言,这就是两个有不同数据的矩阵,要想判断他们是相同的事物是困难的。

10

例如上面就是很直观的想法就是把两图像重叠在一起去判断,发现只有中间部分是相同的。可见,这样的方法行不通。

Computers are literal

11

我们说过计算机是愚蠢的,是缺乏想象力的(literal),所以它没法直接判断这两者是同一个东西。

ConvNets match pieces the image

12

CNNs(ConvNets)通过物体图像的某一部分的方式来对图像进行判断和匹配。如图所示,假如把X拆分成几块,就可以找到两者相同的共性了,这样一来就有判断两者是否为同一个事物的依据了。这里可以联想到先前CNN网络层次特征由低到高的思想,类比一下,有相通的地方,对于复杂的物体时无法直接对其进行类别判断的,但是可以通过简单局部的特征提取一步一步的进行学习和提取到更复杂的高阶全局特征,梯度边缘–>轮廓–>目标局部–>目标全局的信息,这个过程便是这么一个巧妙的方法。

Features match pieces of the image

13

接着上一节,找到识别分类物体的可行方法后,可以得到X有如图的三个特征。三个小的矩阵,这三个小的矩阵便是接下来的关键了。

Slide number

14

15

16

17

18

可以看到,假如以滑动的方式,用三个特征的小矩阵去访问遍历原图像,可以发现都会找到重合的区域。

Filtering

19

那么对于重合这个概念,对计算机来说时怎么理解呢,我们说过计算机除了会死算,其他上面都不会。想要知道计算机怎么理解重合这个概念,就需要探讨小矩阵与原图匹配match背后所蕴含的数学原理了。

20

首先计算的过程是这样的

  1. 用特征矩阵按顺寻滑动去遍历原图像
  2. 在滑动的过程中,重合部分,特征矩阵每一个像素点与对应的原图像素点相乘
  3. 将相乘的结果求和
  4. 求和的结果处以特征矩阵的像素点数目

其实这个过程便是一个滤波的操作,这个特征矩阵就是滤波的模板,对应相乘求和与卷积滤波或相关滤波的甲醛求平均的原理。在卷积滤波里面,这个特征矩阵也称卷积核。眼尖的你也许已经发现了,这一小杰的标题就是滤波Filter。

下面可看图演示这个计算过程

21

22

23

我把对应相乘做成动图,看起来更直观一点。

21to30

31

求和之后取平均。然后得到的结果是1,这里谨记正确匹配的结果为1。与之对比,我们接下来看看不正确匹配的计算结果如何。

32

33

34

35

可以看到结果为0.55,或许看到这里应该有一种“哦,原来如此的感觉了”。别急,接着往下面看,真理或许真的和我们所想的那样。

Convolution layer

36

用卷积模板去遍历原图,对原图所有的点进行计算,右侧是计算结果。可以发现,只有正确匹配的两个部分计算结果为1,其余都是绝对值小于1的数值。看到这里,似乎答案更如我们所想了,计算得出的结果可以理解为一个匹配度,数值范围为绝对值不超过1之间,完全匹配的部分计算结果为1,其余均小于1。

37

所以整个数学的运算过程可以由上图表示,即原图与卷积模板的卷积运算。看看小结的标题,这部分便是CNN网络的卷积层了,所谓CNN,里面的C便是Convolution。卷积的应用可以说是CNN的关键所在了。在经典的CNN网络结构里面(如LeNet),有三层的卷积层C1、C3和C5。卷积层也称为特征提取层,这个与以上的数学运算分析恰好是相吻合的。实际上CNN学习和训练模型的任务中,需要求出的超参数之一便是无数个表示这不同特征的卷积模板了。

38

以上是三个卷积模板分别于原图卷积的结果。

39

那么一幅图像经过一些列的卷积模板运算(卷积层),便可以得到一系列的图像(称为feature map),这些图像通过反卷积可以知道这些输出的图像都是对原图的特征提取,在CNN网络中,C1、C3与C5卷积层得到结果不一样,即三个卷积层提取到的特征是不一样的。C1提取了梯度和边缘的特征,C3则是外形和轮廓,C5便是物体的局部样貌。

可以通过下图加以理解

39

40

但是与上面简单的原理解释不一样,真实具体的CNN网络中卷积层要远比以上三个简单的卷积模板复杂得多,更为重要的一点是,CNN的卷积模板不是前面所示的三个简单的X局部特征,可人为地设定,真实世界物体复杂,想要通过人为地设定这些特征太困难,所以实际上这些卷积的模板是网络自动学习到的。到这里,可能便意识到深度学习中的学习是什么意思了。我的理解便是通过神经网络如CNN,输入大量的标注好的数据,然后不断地训练,使得网络中这些超参数不断向可以正确提取特征靠近。学习完成,便是求解了正确的超参数,就是得到了我们想要的模型。最后变可以使用模型去完成分类识别某一张图像的任务。

Pooling

41

卷积层之后会接着一个池化层(Pooling layer),池化层主要作用是把卷积层得到的feature map图像进行下采样操作。过程如下

  1. 选择一个池化窗口的大小,一般取2或3
  2. 选择窗口移动的步长
  3. 用窗口取遍历feature map图像
  4. 选取每个窗口中的最大值

以上是maxpooling的过程,原理很简单,就是选取窗口中最大值来抽样。还有其他的池化方式包括均值池化监督学习池化等。

42

43

44

45

46

47

查看动图的演示

47

48

三个feature map池化后的结果

49

feature map经过池化层,图像大小会变小,实际就是下采样或者降采样的操作。

Normalizaiton

50

这一步为规范化,为了减少数据的冗余。具体的操作时将每个负值的数值变为0.即下面的ReLUs矫正线性单元。

Rectified Linear Units

51

52

53

54

对feature map每一个数据的点进行如上操作。rectified linear units其实是这么一个函数

rectified linear units

又称为线性整流函数,在升级网络中为激活函数的一种,主要解决的问题是网络不能学习异或问题这个困难。可以这么设想一下,假如所有的网络层都是以卷积提取特征这些线性操作,那么其实无论卷积多少层,最后也等价于卷积一层,即线性关系再继续嵌套线性关系,最后的结果与原始的数据还是一个线性的关系。激活函数就是为了解决这个问题,在线性的网络里面执行这么一个操作有助于提高网络的一个表达能力,对于高层语义的特征往往不是只靠线性的卷积操作提取是可以表达的。

##ReLU layer

55

一系列的激活函数即构成了CNN网络的线性整流层ReLU layer。

56

卷积层、线性整流层和池化层的一般顺序与关系。

57

在深度的神经网络里面的关系。

Fully connect layer

58

接下来就是到了全连接层。到这一步,可先把feature map摊开称为一列。如图,这样每一个值都可以作为一个投票,我理解为一个概率的权值,在分类的时候体现。

59

60

如图,这些摊开成一列的数值,决定了预测的结果为O或者X。数值越大,线条越粗,代表权重越大。

61

62

63

64

65

66

以上是投票预测结果的计算过程,所有的排开的数值都与预测的结果有关系,即与两个结果都相连(全连接层),但是这是一个概率权重的投票机制,即把相连与结果相连的,概率超过0.5的接线数值求和再平均,所得结果即为预测为该结果的一个概率,即有这么大概率是这个结果。如上图计算的结果便是,0.92可能是X,0.52可能是O。

67

把所有的feature map摊开,与所有的结果相连,就构成了全链接层。

68

而且,全连接层可以叠加,CNN经典网络里面就是三层全连接层叠加,所以最后一层与之相连的才是真正想要预测的目标结果,中间两层把结果作为摊开的feature map数值继续全连接和投票预测。

69

至此,一个完整的CNN网络框架是这样子的。

-------------本文结束感谢您的阅读-------------