批量归一化(Batch Normalization)
制造比较好的误差表面,让训练变得比较容易一点其实有很多不同的方法,这些方法统称为特征归一化。
接下来我们要介绍特征归一化的一种可能性,即 Z 值归一化(Z-score normalization),也称为标准化(standardization)。过程如下:
- 把所有训练数据的特征向量集合起来,即从 x1 到 xr
- 对于每个维度 i,计算其平均值(mean) mi和标准差(standard deviation)σi。
- 进行归一化,公式如下
x ~ i r ← x i r − m i σ i \tilde{x}_i^r ← \frac{x_i^r - m_i}{\sigma_i} x~ir←σixir−mi
特征归一化方式往往对训练有帮助,它可以让在做梯度下降的时候,损失收敛更快一点,训练更顺利一点。
卷积神经网络
卷积神经网络的输入往往是向量(比如图像)。一张彩色图像就是一个三维的张量,其中一维代表图像的宽,另外一维代表图像的高,还有一维代表图像的通道(channel)的数目。比如 RGB 色彩模型中红绿蓝 3 种颜色称为图像的 3 个色彩通道。
由于主要处理分类任务,卷积神经网络的输出往往是一维 one-hot 向量。在这个独热向量里面,我们所需的类别对应的值为 1,其余类别对应的值为 0。
卷积神经网络的三个简化方法
由于模型的一个神经元往往只关注一个模式 (patten),而不是整个图像。比如一张鸟的图片中鸟的喙、爪子、眼睛可以分成 3 个不同的模式,根据这些模式我们可以分辨其是不是鸟的图像。对此我们可以简化模型,设置一个区域称为感受野(receptive field),每个神经元只关注一个感受野范围里的像素,感受野可以任意设置,举例如下:
- 不同的神经元有相同或不同的感受野大小,根据检测的 patten 大小而定
- 一个感受野可以覆盖一个通道或者多个通道
如图所示,一个方框是一个感受野,可以将感受野水平和竖直移动以覆盖整个图像。一般多个感受野之间会有重叠并且在图像边界处会有填充(padding),避免遗漏 patten。填充一般把超出图像范围的部分用 0 补植
由于相同的模式在不同的图像中常常出现在不同的区域,我们可以让不同的神经元共享参数(parameter sharing),即权重(weight)完全相同。这种方法适用于多个识别不同感受野的神经元,如图所示。
我们把上述共用参数称为滤波器(filter),用每个滤波器右移或下移来对图像作卷积,都可以得到一组数字。这些组的数字称为特征映射(feature map)。滤波器的数量成为特征映射的通道数。
如图所示,右下方是在原图上做一次卷积的结果,右上方是原图。可以看出输出的特征映射的 3 × 3 的范围,是在原来的图像上考虑了一个5 × 5 的范围。因此我们可以把卷积层叠成很多层,叠得越深,检测的范围越大,就不用怕检测不到较大的模式。
通过上述两个改进方法,能缩减全连接层(fully connected layer)的弹性,增大模型的偏置,避免过拟合,这样就可以得到用于图像识别任务的卷积神经网络。
由于下采样(downsampling)不影响模式检测,即把一张图像缩小,不影响图像分类而且能减少运算量。我们可以引入汇聚(pooling)来只从含多个像素的一组中选择一个值,以此来减少图像的大小。下图展示了最大汇聚(max pooling)的示例及其结果。但是假设要检测的是非常微细的东西,随便做下采样,模型性能可能会稍微差一点。
卷积神经网络的架构
一般卷积神经网络的架构就是卷积加汇聚 ,汇聚是可有可无的。做完几次卷积和汇聚以后,把汇聚的输出做扁平化(flatten),即把图像矩阵“拉直”成一个向量。再把这个向量丢进全连接层里面,最终还要过个 softmax 来得到图像识别的结果。如图所示,这就是一个经典的图像识别的网络。
参考资料:
[1] 李宏毅《深度学习详解》电子版:https://github.com/datawhalechina/leedl-tutorial
[2] 视频教程:https://www.bilibili.com/video/BV1JA411c7VT?p=9
https://www.bilibili.com/video/BV1JA411c7VT?p=10&vd_source=3efd40f637f094c1da27b1a24b410e12