李宏毅《机器学习》| 卷积神经网络(Convolutional Neural Network)(上)

目录

一、为什么用CNN

1.small region

2.small patterns

3.subsampling

二、CNN架构

三、Convolution

Propetry1

Propetry2


问题思考:

1、卷积的计算,怎么通过卷机提取特征的
2、参数量的计算
3、Pooling层的作用,有哪几种
4、怎么减少卷积参数量

一、为什么用CNN

CNN常被用在影像处理上,能够用CNN完成的影像处理,当然也可以用一般的neural network来做。比如影像的分类,training一个neural network,input一张图片,把这张图片表示成里面的pixel,即很长很长的vector。output就是(假如你有1000个类别,output就是1000个dimension)dimension。

实际上在training neural network时,会期待:在network的structure里面,每一个neural代表了一个最基本的classifier,事实在文件上根据训练的结果,有可能会得到很多这样的结论。举例来说:第一层neural是最简单的classifier,任务就是detain有无绿色出现,有无黄色出现,有无斜条纹。

第二个layer是做比这个更复杂的东西,根据第一个layer的output,它看到直线横线就是窗框的一部分,看到棕色纹就是木纹,看到斜条纹+灰色可能是很多的东西(轮胎的一部分等等)。

再根据第二个hidden layer的outpost,第三个hidden layer会做更加复杂的事情。

当一般直接用fully connect feedforward network来做影像处理时,往往需要太多参数。举例来说:假设这是一张100*100的彩色图(一张很小的imgage,每个pixel需要3个value来描述),把这个拉成一个vector(有多少个pixel),它有100*100*3的pixel,就是30000维。假如input vector是30000维,假设hidden layer是1000个neural,那么hidden layer的参数就多达30000*1000。CNN做的事就是简化neural network的架构。根据对影像的理解等知识,一开始就可以滤掉某些用不上的weight。不是用fully connect feedforward network,而是用比较少的参数来做影像处理。所以CNN比一般的DNN还要简单(就是用power-knowledge去把原来fully connect layer中一些参数拿掉就成了CNN)。

为什么可以用较少的参数来做影像处理呢?

1.small region

这里有几个观察,第一个是在影像处理里面,第一层的hidden layer那些neural做的事就是侦测某一种pattern有没有出现。大部分pattern其实比整张的image还要小,对一个neural来说,它要知道一个image里有没有某个pattern出现,它其实不需要看整张image,只要看image的一小部分。

举例来说,假设现在有一张图片,第一个hidden layer的某一种neural的工作就是侦测有没有鸟嘴的存在(有的neural侦测有无爪子、翅膀、嘴巴等存在,合起来就可以侦测图片中某一只鸟),那并不需要看整张图,只需要给neural看小红色方框的区域(鸟嘴),它就可以知道是不是鸟嘴。对人来说也一样,看一小块区域这是鸟嘴,不需要去看整张图才知道。所以,每一个neural连接到每一个小块的区域就好了,不需要连接到整张完整的图。

2.small patterns

第二个观察是,同样的pattern在image里可能会出现在image不同的部分,但代表的是同样的含义,它们有同样的形状,可以用同样的neural,同样的参数就可以把patter侦测出来。

比如这张图里有一张在左上角的鸟嘴,有一个在中央的鸟嘴,但并不需要训练两个不同的detector去侦测左上角或是中央有无鸟嘴。我们不需要太多的冗源,并不需要两个neural去做两组参数,这个nerual侦测左上角的鸟嘴跟侦测中央的鸟嘴做的事情是一样的,我们就要求这两个neural用同一组参数,就样就可以减少需要参数的量。

3.subsampling

第三个是:一个image可以做subsampling,把一个image的奇数行偶数列的pixel拿掉,变成原来十分之一的大小,它其实不会影响人对这张image的理解。

这张image跟这张image看起来可能没有太大的差别,所以可以用这样的概念把image变小,这样就可以减少需要的参数。

二、CNN架构

整个CNN的架构:

首先input一张image后,这张image会通过convolution layer,接下来做max pooling,然后再做convolution,再做max pooling。这个process可以反复无数次,反复的次数是需要事先决定的,它就是network的架构:就像neural有几层一样,要做几层的convolution,做几层的Max Pooling,在定neural架构的时候要事先决定好。做完convolution和Max Pooling后,要做flatten,再把flatten的output丢到一般fully connected feedforward network,然后得到影像辨识的结果。

基于三个对影像处理的观察,所以设计了CNN这样的架构。

第一个观察是,要生成一个pattern,不要看整张image,只需看image的一小部分。第二是,通用的pattern会出现在一张图片的不同的区域。第三个是,可以做subsampling。前面的两个property可以用convolution来处理,最后的property可以用Max Pooling处理。

三、Convolution

Propetry1

假设network的input是一张6*6的Image,如果是黑白的,一个pixel只需用一个value去描述,1代表有涂墨水,0代表没有涂到墨水。

在convolution layer里面,它由一组的filter(其中每一个filter就等同于是fully connect layer里面的一个neuron),每一个filter其实就是一个matrix(3*3),每个filter里的参数(matrix里每个element值)就是network的parameter(这些parameter是要学习出来的,并不是需要人去设计的)。

每个filter如果是3*3的detects意味着它就是再侦测一个3*3的pattern(看3*3的一个范围)。在侦测pattern时不看整张image,只看一个3*3的范围内就可以决定有没有某个pattern的出现。这个就是我们考虑的第一个Property。

Propetry2

filter如何和image运作:

首先第一个filter是一个3*3的matrix,把这个filter放在image左上角,把filter的9个值和image的9个值做内积,两边都是1,1,1(斜对角),内积的结果就得到3。(移动多少是事先决定的),移动的距离叫做stride(stride是自己来设计的),内积等于-1。stride等于2,内积等于-3。先设stride等于1。

把filter往右移动一格得到-1,再往右移一格得到-3,再往右移动一格得到-1。接下来往下移动一格(从最右边开始)得到-3。以此类推(每次都移动一格),直到把filter移到右下角时,得到-1。

本来6*6的matrix,经过convolution process得到4 *4的matrix。filter斜对角的值是1,1,1,所以它的工作就是detain1有没有1,1,1(连续左上到右下的出现在这个image里面),比如蓝色的直线。这个filter会告诉你:左上跟左下出现了最大的值,代表这个filter要侦测的pattern出现在这张image的左上角和左下角,这件事情就考虑了propetry2。同一个pattern出现在了左上角的位置跟左下角的位置,我们就可以用filter 1侦测出来,并不需要不同的filter来做这件事。

一个convolution layer里会有很多filter(刚才只是一个filter的结果),那另外的filter会有不同的参数(图中显示的filter2)也做跟filter1一样的事情。在filter放到左上角再内积得到结果-1,依次类推。把filter2跟input image做完convolution后,就得到了另一个4*4的matrix。

红色4*4的matrix跟蓝色matrix合起来就叫做feature map,有几个filter,就得到多少个image(100个filter,就得到100个4*4的image)。

刚才举的例子是一张黑白的image,所以input是一个matrix。若换成由RGB组成的彩色的image,所以一个彩色的image就是好几个matrix叠在一起,就是一个立方体。如果要处理彩色image,这时候filter不是一个matrix,filter而是一个立方体。如果是RGB表示一个pixel的话,那input就是3*6 *6,filter就是3 *3 *3。

做convolution就是将filter的9个值和image的9个值做内积,不是把每一个channel分开来算,而是合在一起来算,一个filter就考虑了不同颜色所代表的channel。

这里RGB彩色图像的卷积过程大概可由上图展示,具体可参考文章:《RGB彩色图像的卷积过程(gif动图演示)》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值