视频链接
1.为什么CNN用于图像处理
当我们用 fully connect feedforward network 来做图像处理的时候,往往我们会需要太多的参数,举例来说,假设这是一张 100 *100 的彩色图(一张很小的 imgage),你把这个拉成一个 vector,(它有多少个 pixel),它有 100 *100 3 的 pixel。
如果是彩色图的话,每个 pixel 需要三个 value 来描述它,就是 30000 维(30000 dimension),那 input vector 假如是 30000dimension,那这个 hidden layer 假设是 1000 个 neural,那么这个 hidden layer 的参数就是有 30000 *1000,那这样就太多了。
那么 CNN 做的事就是简化 neural network 的架构。我们根据对图像的认识,某些 weight 用不上的,我们一开始就把它滤掉。不是用 fully connect feedforward network,而是用比较少的参数来做图像处理这件事。所以 CNN 比一般的 DNN 还要简单
CNN 就是用 power-knowledge 去把原来 fully connect layer 中一些参数拿掉。
为什么我们有可能把一些参数拿掉(为什么可以用比较少的参数可以来进行图像处理)
- 一些特征图像远小于整个图像:
- 同样的特征会出现在不同的区域:
- 像素缩放不会对图像造成太大影响:
2.CNN架构
首先 input 一张 image,这张 image 会通过 convolution layer,接下来是 max pooling,然后再做 convolution,再做 max pooling。
上述过程可以反复无数次(反复多少次你是要事先决定的,它就是 network 的架构(就像 neural 有几层一样),要做几层的 convolution,做几层的 Max Pooling,在定 neural 架构的时候,要事先决定好)。
做完要做的 convolution 和 Max Pooling 以后,就要进行 flatten,再把 flatten 的 output 丢到一般 fully connected feedforward network,然后得到图像识别的结果。
3. Convlution
卷积(Convolution)特征提取又由卷积核(Convolution Kernel)/过滤器filter来实现,filter是一个矩阵,它以步长为一的方式在图像上移动,并且做点乘加和运算,就是先做点乘,之后再求和。下图是3x3的卷积核在5x5的图像上做卷积的过程:
卷积特征提取的原理:
- 卷积特征提取利用了自然图像的统计平稳性,这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。
- 当有多个filter时,我们就可以学到多个特征,例如:轮廓、颜色等.
多个过滤器filter(卷积核):
- 一张图片有RGB三个颜色通道,则对应的filter过滤器也是三维的,图像经过每个filter做卷积运算后都会得到对应提取特征的图像.
4.Convolution 和 Fully Connected 之间的关系
将 stride=1(移动一格)做内积得到另外一个值-1,假设这个-1 是另外一个 neural 的 output,这个 neural 连接到 input 的(2,3,4,8,9,10,14,15,16),同样的 weight 代表同样的颜色。
在 fully connect 里面的两个 neural 本来是有自己的 weight,当我们在做 convolution 时,首先把每一个 neural 连接的 wight 减少,强迫这两个 neural 共用一个 weight。这件事就叫做 shared weight,当我们做这件事情的时候,我们用的这个参数就比原来的更少。
5.最大池化(Max Pooling)
相对于 convolution 来说,Max Pooling 是比较简单的。我们根据 filter 1 得到 4*4 的 maxtrix,根据 filter2 得到另一个 4 *4 的 matrix,接下来把 output ,4 个一组。每一组里面可以选择它们的平均(平均池化)或者选最大(最大池化)的都可以,就是把四个 value 合成一个 value。这个可以让 image 缩小。
池化本质上的作用是:缩小图像,减少特征。
6.压平(Flatten)
把多维的输入一维化,常用在从卷积层到全连接层的过渡。
flatten 就是 feature map 拉直,拉直之后就可以丢到 fully connected feedforward netwwork。