独热向量 y ′ 的长度决 定了模型可以识别出多少不同种类的东西。我们希望 y ′ 和 yˆ 的交叉熵越小越好。
为了避免过拟合,在做图像识别的时候,考虑到图像本身的特性,并不一定 需要全连接,即不需要每个神经元跟输入的每个维度都有一个权重。
4.1 观察 1:检测模式不需要整张图像
要知道图像有没有一个鸟嘴,只要看非常小的范围。这些神经元不需要把整张图像当作输入, 只需要把图像的一小部分当作输入,就足以让它们检测某些特别关键的模式是否出现,这是 第 1 个观察。
4.2 简化 1:感受野
蓝色的神经元的守备范围就是红色正方体框的感受野。这个感受野里面有 3 × 3 × 3 个数值。对蓝色的神经元,它只需要关心这个小范围
Q: 感受野一定要相连吗?所以通常的感受野都是相连的领地,但如果要设计很奇怪的感受野去解决 很特别的问题,完全是可以的,这都是自己决定的。
一般同一个感受野会有一组神经元去守备这个范围,比如 64 个或者是 128 个神经元去守 备一个感受野的范围。
我们把左上角的感受野往右移一个步幅,就制造出一个新的守备范围,即新的感受野。 移动的量称为步幅(stride),接下来需要考虑一个问题:感受野超出了图像的范围,怎么办呢?超出范围就做填充(padding),填充就是补值,一般使用零填充(zero padding),超出范围就补 0,其实也有别的补值的方法,比如补整张图像里面所有值的 平均值或者把边界的这些数字拿出来补没有值的地方。4.3 观察 2:同样的模式可能会出现在图像的不同区域
如图,因为出现在左上角的鸟嘴,它一定落在某一个感受野里面。因 为感受野是盖满整个图像的,所以图像里面所有地方都在某个神经元的守备范围内。假设在 某个感受野里面,有一个神经元的工作就是检测鸟嘴,鸟嘴就会被检测出来。所以就算鸟嘴出 现在中间也没有关系。假设其中有一个神经元可以检测鸟嘴,鸟嘴出现在图像的中间也会被 检测出来。
4.4 简化 2:共享参数
简单来说就是有一个老师在上课,它可以一个班一个班的上,没必要这么麻烦,直接开个大班上课。所谓参数共享就是两个神经元的权重完全是一样的。
上面神经元 跟下面神经元守备的感受野是不一样的,但是它们的参数是相同的。虽然两个神经元的参数 是一模一样,但它们的输出不会永远都是一样的,因为它们的输入是不一样的,它们照顾的范 围是不一样的。
如图 4.15 所示,每个感受野都有一组神经元在负责守备,比如 64 个神经元,它们彼此 之间可以共享参数。图 4.16 中使用一样的颜色代表这两个神经元共享一样的参数,所以每个 感受野都只有一组参数,就是上面感受野的第 1 个神经元会跟下面感受野的第 1 个神经元共 用参数,上面感受野的第 2 个神经元跟下面感受野的第 2 个神经元共用参数 · · · · · · 所以每个 感受野都只有一组参数而已,这些参数称为滤波器(filter)。这是第 2 个简化的方法。
4.5 简化 1 和 2 的总结
全连接网络可以决定它看整张图像还是只看一个范围,如果它只想看一个范围,可以 把很多权重设成 0。全连接层(fully-connected layer,)可以自己决定看整张图像还是一个小范围。感受野加上参数共享就是卷积层 (convolutional layer),用到卷积层的网络就叫卷积神经网络。卷积神经网络的偏差比较大。 但模型偏差大不一定是坏事,因为当模型偏差大,模型的灵活性较低时,比较不容易过拟合。
接下来通过第 2 个版本的故事来说明卷积神经网络。 一个卷积层里面就是有一排的滤波器,每个滤波器都是一 个 3 × 3 × 通道,其作用是要去图像里面检测某个模式。
假设这些滤波器里面的数值已经找出来了,如图 4.20 所示,这是一个 6 × 6 的大小的图像。先把滤波器放在图像的左 上角,接着把滤波器里面所有的 9 个值跟左上角这个范围内的 9 个值对应相乘再相加,也就 是做内积,结果是 3。
如果有 64 个滤波器,就可 以得到 64 组的数字。这组数字称为特征映射(feature map)。当一张图像通过一个卷积层 里面一堆滤波器的时候,就会产生一个特征映射。假设卷积层里面有 64 个滤波器,产生的特 征映射就有 64 组数字。特征映射可以看成是另外一张新的图像,只是这个图像的通道不是 RGB 3 个通道,有 64 个通道,每个通道就对应到一个滤波器。
4.6 观察 3:下采样不影响模式检测
把一张比较大的图像做下采样(downsampling), 把图像偶数的列都拿掉,奇数的行都拿掉,图像变成为原来的 1/4,但是不会影响里面是什么 东西。
4.7 简化 3:汇聚
最大汇聚在每一组里面选一个代表, 选的代表就是最大的一个,如图 4.28 所示。除了最大汇聚,还有平均汇聚(mean pooling), 平均汇聚是取每一组的平均值。
假设要检测的是非常微细的东西,随便做下采样,性能 可能会稍微差一点。所以近年来图像的网络的设计往往也开始把汇聚丢掉,它会做这种全卷 积的神经网络,整个网络里面都是卷积,完全都不用汇聚。
一般架构就是卷积加汇聚,汇聚是可有可无的,很多人可能会选择不用汇聚。如图 4.30 所示,如果做完几次卷积和汇聚以后,把汇聚的输出做扁平化(flatten),再把这个向量丢进 全连接层里面,最终还要过个 softmax 来得到图像识别的结果。这就是一个经典的图像识别 的网络,里面有卷积、汇聚和扁平化,最后再通过几个全连接层或 softmax 来得到图像识别 的结果。
扁平化就是把图像里面本来排成矩阵样子的东西"拉直",即把所有的数值"拉直"变成一 个向量。