3.1 卷积神经网路 (Convolutional Neural Networks, CNN)

1. 概念引入: Image Classification

1.1 基本步骤

  我们做图像分类时,一般分为三步:

  • 所有图片都先 rescale 成大小一样
  • 把每一个类别表示成一个 one-hot vector(dimension 的长度决定模型可以辨识出多少不同种类的东西)
  • 将图片输入到模型中
    image

1.2 将图片输入到模型中

  首先要提出的问题是怎么将图片输入到模型.机器将图像看成三维的Tensor,三维分别是长,宽,通道数.100*100是像素点数量,每个像素点都由RGB三种颜色构成,所以就有 3 个channels.然后将这些像素拉直,形成一个很长的向量!这个向量的某个数值就是某个\(pixel\)在某个颜色上的强度.
image
  向量中总共有100x100x3 个自变量,假如使用全连接网络,每一个Neuron与向量的每一个数值都有\(weight\).假设隐藏层有1000个神经元,那么我们需要的参数就是30000000!一方面参数太多了影响运算,另一方面模型弹性太大,很容易导致overfitting,所以我们要想办法简化网络,降低模型弹性.
image
  考虑到影像辨识问题本身的特性,其实并不一定需要 fully connected,即不需要每一个 neuron 与 input 的每一个 dimension 都有一个 weight.

2. 神经元角度介绍 CNN

  我们先观察影像本身,来简化网络.

2.1 观察一

  人类辨识一张图片的方法就是看图片中存在的关键特征,比如鸟有鸟嘴,眼睛,锋利的爪子等等。机器可以借鉴这个思想:只需要辨识一些关键图案.即模型通过识别一些特定 patterns 来识别物体,而非整张图
image
image

  根据这个观察,我们就可以做第一个简化.那么怎么只看一个pattern呢?在CNN里,我们定义了一个名词Receptive field(感受野),每个神经元只需要考察自己特定范围内的图像讯息,将图像内容展平后输入到神经元中即可.也就是将感受野的3*3*3的tensor拉直,然后变成27维向量输入到对应Neuron里.Neuron会给每个参数一个weight,相乘作为输出.
image
  请注意:

  • reptive field 之间可以重叠
  • 一个 reptive field 可以有多个神经元守备
  • reptive field 可以有大有小
  • reptive field 可以只考虑某一些 channel
  • reptive field 可以是长方形
  • reptive field 不一定要相连
    image
      reptive field可以由我们自己定义,但有一个经典的设计模式:
  • 一般在做影像辨识的时会看全部的 channel。所以在描述一个 receptive field 的时候,无需说明其 channel 数,只要讲它的高、宽 ⇒ kernel size → 一般不做过大的 kernal size,常常设定为 3 × 3.
  • 每个 reptive field 会有不止一个神经元进行守备(eg:64 neurons) ⇒ 输出通道数 o r卷积核数目
  • 不同的 reptive field 之间的关系 ⇒ reptive field 的水平垂直位移:Stride【hyperparameter】→ 一般希望 reptive field 之间有重叠,避免交界处的 pattern 被忽略(一般为1或2)
  • reptive field 超出影响的范围 ⇒ padding(补值:补 0、补平均值、补边缘值、…)
    image

2.2 观察二

  同样的 pattern,可能出现在图片的不同位置.比如下图的鸟嘴.那么每一个感受域都需要创建一个鸟嘴检测器吗?答案是否定的,因为不同感受域可以共用同一个鸟嘴检测器!
image
  简化措施就是共享神经元参数(即Neuron的weight是完全一样的,比如上面的Neuron和下面的Neuron虽然感受域不同,但是weight相同),但守备相同感受野的Neuron不共享参数.
image
  它同样有经典的设计模式:对每个 reptive field,都使用一组相同的神经元进行守备;这一组神经元被称作 Filter,对不同 reptive field 使用的 Filter 参数相同.
image

2.3 Convolutional Layer 的优势

  卷积层是"受限"(弹性变小)的 Fully Connected Layer.Fully Connected Layer可以自由选择要看的感受野,而CNN直接固定了.并且,Fully Connected Layer的各个参数并不相同,而CNN有共享参数.
image

分析:

  • 一般而言,model bias 小、model 的 flexibility 很高的时候,比较容易 overfitting。fully connected layer 可以有各式各样的变化,但是它可能没有办法在任何特定的任务上做好
  • CNN 的 bias 比较大,它是专门为影像设计的,所以它在影像上仍然可以做得好

3. 以滤波器角度介绍 CNN

3.1 卷积层的基本定义

  卷积层中有若干个 filters,每个 filter 可以"抓取"图片中的某一种 pattern(pattern 的大小小于 reptive field 大小).filter 的参数就是神经元中的"权值(weight)".
  假如图片是彩色的,那么channel 是 3,如果图片是黑白的,那么 channel 是 1.
image
  一个首要的问题的\(filter\)要如何抓取\(pattern\).假设图片为黑白图片,channel=1.filter 中的数字就是参数 w!是需要学出来的,假设我们已经学出来了这些数值.
image
  filter 与 image 中每个感受域的数字相乘,例如image 的右上角的九宫格和filter相乘,得到3,从头到尾移动生成很多个感受域,这些感受域和filter 相乘后形成一系列数字,组成了一个数字图.
image
  注意:上图所示的滤波器,对主对角线为 1 的特征敏感 ⇒ 对应卷积结果为 3(最大).第二个 filter 做同样的事,又形成一个数字图,不同的filter形成的数字图叠在一起就组成了 feature map.所以有多少个 filter,输出的feature map就有几个channel,每个channel 对应一个 filter.
image
  比如下图中的第一个卷积层有 64 个滤波器,所以输出的 feature map就有 64 个 channel.
image

3.2 多层卷积

  第一层的卷积结果产生了一张 \(3\times3\times64\) 的 feature map.继续卷积时,需要对 64 个 channel 都进行处理 ⇒ filter 的"高度"要是 64.
image

3.3 小filter是否能看到大pattern

  假如第二层的filter的宽高还是3x3,我们发现第二层能检测的信息是原来尺度的5x5.所以检测范围一直在扩大!第二层检测的右上角的 -1包含第一层输入的右上角九宫格的资讯。第二层检测的右下角的-2包含第一层输入的右下角九宫格的资讯。所以第二层3x3蓝色框就是第一层的5x5.
image

4. 神经元角度(Neuron)vs 滤波器角度(Filter)

  神经元角度说到Neuron 会共用参数,这些共用的参数就是滤波器角度说到的 Filter(Filter在移动,可以看成不同Filter在共用参数).实际filter中会包含 bias,但是在分析的时候我们忽略了 bias,只分析了 w.
image

4.1 不用看整张图片范围

  • 神经元角度:只要守备 reptive field
  • 滤波器角度:使用 Filter 侦测模式 pattern
    image

4.2 相同Pattern 可能出现在图片的不同位置

  • 神经元角度:守备不同 reptive field 的神经元可以共用参数
  • 滤波器角度:Filter 扫过整张图片(也称为 Convolutional)
    image

5. Subsampling(Pooling)

  以下图为例,把偶数行拿掉,把奇数列拿掉,不会影响图片的分类,同时可以减少运算量.
image

5.1 不同 Pooling 方法

  • Max pooling
      下图通过滤波器产生了4x4 的数字图,按照方框分成四组,每一组中选最大值做为该组代表,这就叫max pooling.
    image

  • Mean Pooling
      假如是将每一组的平均值作为该组代表,那么就叫做 mean pooling.
      做完convolution后,往往后面还会搭配pooling

5.2 Pooling 可有可无

  pooling 对于 rerformance 会带来一点伤害。如果运算资源足够,现今很多 network 的架构的设计往往就不做 pooling,改为全 convolution.这是因为pooling主要为了减少计算量.

6. CNN 全流程总结

  pooling 对于 rerformance 会带来一点伤害.如果运算资源足够,现今很多 network 的架构的设计往往就不做 pooling,改为全 convolution.(因为现在很多实验环境算力都够用,池化层的目的显得越来越没必要,所以在设计每一模块的时候都要考虑当前任务及实验环境,根据这些因素去设计最符合的网络)
image

7. CNN的应用

7.1 Alpha Go

  可使用 FC,但用 CNN 效果更好.把棋盘看成 \(19\times19\) 的图片,用 48 个 channel 来描述.每个channel用于描述该位置的信息.
image

7.1.1 Why CNN for Go playing?

  CNN多用于影像辨识,为什么也可以使用下围棋呢?一般有以下两点:

  • 只看小范围
  • 同个 pattern 在不同位置出现
    image
      顺带一提,pooling是不能用在下围棋的模型里的.
    image

7.2 语音、NLP

image

8. CNN的缺陷

  CNN 并不能够处理影像放大缩小,或者是旋转的问题.所以在做影像辨识的时候,往往都要做 data augmentation(数据增强),把训练数据截一小块出来放大缩小、把图片旋转,CNN 才会做到好的结果.

可以用 Spacial Transformer Layer 处理这个问题
image

posted @ 2023-06-16 18:13  acmloser  阅读(25)  评论(0编辑  收藏  举报