【Day 21】卷积神经网路(Convolutional Neural Network, CNN)(上)

Why CNN for Image?

我们在训练Neural Network的时候,我们会期待在这个Network里面的每一个Neuron就代表一个最基本的Classifier,而我们使用一般的全连接前馈网路(Fully connected feedforward network)来做影像处理,会需要太多的参数。

所以CNN在做的事情是,简化Neural Network的架构,在一开始就把Network里面一些用不到的weight拿掉。

Property 1

假设第一层的hidden layer的Neuron要做的事情就是侦测某一种pattern,而大部分的pattern其实是比整张图片还要小,所以它其实只要看图片的一小部分,并不用看整张图片。举例来说,我们现在有一张鸟的图片,第一层的hidden layer的某一个Neuron的工作是要侦测有没有鸟嘴的存在,而我们只要给它看红色框框圈出来的区域,它就可以知道它是不是一个鸟嘴。
所以每个Neuron只要连接到一个小块的区域就好,它不需要连接到整张完整的图片。

Property 2

而同样的pattern在图片中,它可能会出现在图片不同的部分,但是它们代表的是同样的涵义,也可以用同样的参数,既然两个Neuron做的事情是一样的,我们就可以让它们用一组参数,以减少需要参数的量。

Property 3

那我们知道可以对图片做Subsampling,也就是把图片的奇数行、偶数列的pixel拿掉,但它其实不会影响人对这张图片的理解,所以做Subsampling对影响辨识来说没有太大的影响,这样我们就可以用这样的概念来达到减少参数的目的。

Convolutional Neural Network(CNN)

首先输入一张图片,这张图片通过一个Convolution的layer,接着做Max pooling,然後再做一次Convolution,接着再做一次Max pooling,这样子的循环可以重复很多次,做完之後,接着就要做Flatten,然後把输出丢到一般的全连接网路里面,得到最後影像辨识的结果。

而我们刚刚提到的Property 1, 2就是用Convolution的layer来处理,Property 3则是用Max pooling来处理。

CNN - Convolution

假设我们的输入是6x6的黑白图片,1代表有涂到墨水,0代表没有涂到墨水。而在Convolution layer里面有很多组Filter,每一个Filter都是一个3x3的Matrix,这个Matrix里面的值就是Network的参数,是根据训练资料学出来的。

如果今天Filter是一个3x3的Matrix,就代表它在侦测一个3x3的pattern,也就考虑了Property 1。

运算的过程是,首先你有一个Filter是3x3的Matrix,然後把这个Filter放在图片的左上角,接着把这两个矩阵做内积。

算出来之後,就挪动一下Filter的位置,这个挪动的距离我们称之为Stride,我们必须事先决定好要挪多少,假设我们的Stride是1,就去计算每挪动一次的两个矩阵的内积。

最後原本6x6的Matrix,经过这个Convolution process,就会得到一个4x4的Matrix。

下图中Filter斜对角的值是1,1,1,所以它的工作就是侦测有没有也是左上到右下的1,1,1出现在图片里面,如果有,Convolution就会得到最大值,也就考虑了Property 2。

接着继续用下一个Filter做Convolution,最後得到的很多4x4的Matrix,我们称之为Feature Map

CNN - Colorful image

刚刚讨论的都是黑白的照片,如果今天是彩色的照片要做的事情就会更多。首先彩色的图片是RGB组成的,所以一个彩色的图片就是好几个Matrix叠在一起,就是一个立方体。如果今天要处理彩色的图片,你的Filter也会是一个立方体,而在做Convolution的时候,就是一样把Filter的这些值,跟图片里面的值做内积。

Convolution vs Fully Connected

事实上Convolution就是一个Neural Network,它就是全连接层把一些weight拿掉而已,而Convolution的输出,其实就是一个hidden layer的Neuron的输出。

也就是说,假设我们今天Convolution做完内积的第一个值是3,这件事等同於,我们把6x6的图片拉直,然後有一个Neuron的输出是3,就代表它的weight只连接到1,2,3,7,8,9,13,14,15这些pixel而已,这样就达到了减少参数的效果。

在往下算就会发现做Convolution的时候,我们会把每一个Neuron前面连接的weight减少,并且会强迫他们共用同一组weight。


参考资料

李宏毅老师 - ML Lecture 10


<<:  Eloquent ORM - 多型态关联

>>:  Day22-D3 基础图表:长条图

Day 27:Google Map 范本学习(2)

本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...

[ASP.Net MVC] 如何套用 Bootstrap 网页设计样版 SB Admin 2 开发网站管理介面 (附范例)

想要快速开发一个 Bootstrap 网页设计样版的网站,可以利用网路上已经设计好的网页样版下载套用...

[Day 22] 从GEIT建立政策及组织结构

接续上一章,Governance and Management of Enterprise IT (...

Day 26: Tensorflow分类 分类图像衣物(一)

Tensorflow 衣物图像分类 辅助阅读: Basic classification: Clas...

# JS杂拾-03-运算式与运算子

JS杂拾-03-运算式与运算子 tags: ithome 内文摘要 Expressions 运算式 ...