Lecture 3: Image as input
文章目录
Convolutional Neural Network (CNN)
Image Classification
如上图所示,假设所有的输入图片的大小都是 100 × 100 100\times 100 100×100,输出一个 one-hot 向量 y ′ y' y′,用交叉熵来计算标签值 y ^ \hat y y^ 和输出值 y ′ y' y′ 间的损失。
如下图所示,计算机在处理图片时,将图片视作三维的 Tensor(图片的宽、高、channel,三个 channel 代表了 RGB 三种颜色、宽和高就代表了图片的解析度也就是像素个数),将图片拉直成向量后就能作为模型的输入,向量中的数值代表了某个位置的某一颜色的强度。
如果选择全连接网络(Fully Connected Network)作为模型,那么输入向量的总长度就是 100 × 100 × 3 100\times 100\times 3 100×100×3。假设第一层神经元(Neuron)的个数是 1000 1000 1000,那么第一次的权重(weight)的个数就是 3 × 100 × 100 × 1000 = 3 × 10 7 3\times 100\times 100\times 1000 = 3\times {10}^7 3×100×100×1000=3×107 个。
Observation and Simplification
我们尝试观察图片中的特点,并基于我们的发现在全连接网络上进行简化工作。
Observe and Simplify 01
观察:
我们期待模型能够识别物体(object)的一些特定的模式(pattern)或特征,从而学会分辨物体。如上图所示,模型学习到了鸟的喙、眼和足,从而识别出这是一只鸟。
因此,当模型需要学习一些特定的模式或特征时,我们不需要让每一个神经元都看过一整张图片。一些特定的模式或特征往往比完整的图片要小得多。是否可以只将关键的模式或特征作为输入呢?
简化:
我们可以划定一个区域,称作感受野(Receptive Field),每个神经元只关心自己感受野中的数值。如下图所示,一个神经元只负责感受野中的 3 × 3 × 3 = 27 3\times 3 \times 3=27 3×3×3=27 个数值,因此总共需要 27 27 27 个权重再加上一个 b i a s bias bias 即可作为下一个神经元的输入。
关于感受野(Receptive Field):
- 多个神经元可以作用于同一个感受野;
- 不同的感受野可以重叠;
- 不同的神经元可以有不同大小的感受野;
- 神经元可以只作用于某些通道;
- 感受野不一定得是正方形。
Receptive Field - Typical Setting
如上图所示,是一个经典的感受野设定:
- 感受野包含了所有的通道(all channels),一般讨论
kernel size
的时候,我们只说宽和高,默认包含了所有的通道,比如一个大小为 3 × 3 3\times 3 3×3 的卷积核; - 通常会有一组神经元作用于同一个感受野,比如 64 64 64 或 128 128 128 个;
- 通过移动卷积核可以得到一个新的感受野,而移动的这一段距离叫做步长(Stride),步长不会设置得很大,我们希望不同的感受野之间要有重叠,比如 s t r i d e = 2 stride=2 stride=2;
- 如果移动卷积核超出了范围,那么我们需要填充(padding),比如补 0 0 0。
Observe and Simplify 02
观察:
同样一种模式或特征可能出现在图片的不同位置上,如下图中鸟喙的例子。这些作用于图中鸟喙部分的神经元,他们的作用是一样的,只是作用的感受野位置不同。那么是否每个感受野都需要一个检测鸟喙的神经元呢?当让是不需要的,这样参数量就太大了。
简化:
我们希望不同感受野的神经元间能够共享参数(parameter sharing)。如下图所示,两个作用于不同感受野的神经元,它们的参数是相同的;而作用于同一感受野的不同神经元之间是不会共享参数的。
Parameter Sharing - Typical Setting
每个感受野都有一组神经元;不同感受野的神经元共享同一组参数;作用于不同感受野且共享参数的神经元,将这样的共享的参数叫做 filter (滤波器)。
Observe and Simplify 03
观察:
对图片进行下采样(subsample)不会改变图中的物品,比如去掉图片中的偶数行和奇数列。
简化:
Pooling 池化,Pooling 可以减少计算量,让图片越来越小。