Datawhale X 李宏毅苹果书AI夏令营 | 阅读笔记——卷积神经网络

123 阅读7分钟

修订历史:

  • 2024/09/03 初稿

《深度学习详解》/王棋等/中国工信出版社/新书

〇 卷积神经网络是一种非常典型的网络架构,常用于图像分类等任务。所谓图像分类,就是给机器一张图像,由机器去判断这张图像里面有什么样的东西——是猫还是狗、是飞机还是汽车。(P72)

图像有大有小,而且不是所有图像尺寸都是一样的。常见的处理方式是把所有图像先调整成相同尺寸,再“丢”到图像的识别系统里面。


〇 关于图像的的几个重要的观察到的特点(P74-75)

  1. 检测模式不需要整张图像:假设我们的任务是让网络识别出图像的动物。对一个图像识别的类神经网络里面的神经元而言,它要做的就是检测图像里面有没有出现一些特别重要的模式(pattern),这些模式是代表了某种物体的。
    • 感受野(receptive field):卷积神经网络会设定一个区域,即感受野(receptive field),每个神经元都只关心自己的感受野里面发生的事情,感受野是由我们自己决定的。
  2. 同样的模式可能会出现在图像的不同区域
    • 共享参数:这个概念就类似于教务处希望可以推大型的课程一样,假设每个院系都需要深度学习相关的课程,没必要在每个院系都开机器学习的课程,可以开一个比较大型的课程,让所有院系的人都可以修课。如果放在图像处理上,则可以让不同感受野的神经元共享参数,也就是做参数共享(parameter sharing)
  3. 下采样不影响模式检测
    • 汇聚(pooling):汇聚比较像 Sigmoid、ReLU 等激活函数。因为它里面是没有要学习的参数的,它就是一个操作符(operator),其行为都是固定好的,不需要根据数据学任何东西。

〇 一般在做图像识别的时候,可能不会觉得有些模式只出现在某一个通道里面,所以会看 全部的通道。既然会看全部的通道,那么在描述一个感受野的时候,只要讲它的高跟宽,不用 讲它的深度,因为它的深度就等于通道数,而高跟宽合起来叫做核大小。(P76)

滤波器(filter):所以每个感受野都只有一组参数而已,这些参数称为滤波器(filter)。

〇 卷积层(convolutional layer):感受野加上参数共享就是卷积层 (convolutional layer),用到卷积层的网络就叫卷积神经网络。卷积神经网络的偏差比较大。但模型偏差大不一定是坏事,因为当模型偏差大,模型的灵活性较低时,比较不容易过拟合。


〇 一般在实践上,往往就是卷积跟汇聚交替使用,可能做几次卷积,做一次汇聚。比如两次卷积,一次汇聚。不过汇聚对于模型的性能 (performance)可能会带来一点伤害。假设要检测的是非常微细的东西,随便做下采样,性能可能会稍微差一点。所以近年来图像的网络的设计往往也开始把汇聚丢掉,它会做这种全卷积的神经网络,整个网络里面都是卷积,完全都不用汇聚。汇聚最主要的作用是减少运算量,通过下采样把图像变小,从而减少运算量。随着近年来运算能力越来越强,如果运算资源足够支撑不做汇聚,很多网络的架构的设计往往就不做汇聚,而是使用全卷积,卷积从头到尾, 看看做不做得起来,看看能不能做得更好。(P85)


下围棋问题抽象(P87-88):下围棋可以看成是一个有 19x19 个类别的分类问题,网络的输入是棋盘上黑子和白子的位置(19x19 维的向量,可以设定如下规则:如果某个位置有一个黑子,这个位置就填 1,如果有白子,就填 -1,如果没有子,就填 0),输出是下一步要落子的位置。

在 AlphaGo 网络中,每个棋盘的位置都用 48 个数字来描述哪个位置发生的事情。这里 48 个数字是围棋高手设计出来的,包括比如这个位置是不是要被叫吃了,这个位置旁边有没有颜色不一样的等等。此外,棋盘可以看作是一个很小的图像,分辨率为 19x19。总的来说,这个棋盘就是 19x19 的分辨率的图像,其通道为 48.

〇 卷积神经网络其实并不是随便用都会好的,它是为图像设计的。如果一个问题跟图像没有共通的特性,就不该用卷积神经网络。既然下围棋可以用卷积神经网络,这意味着围棋跟图像有共同的特性。

  • 图像上的第 1 个观察是,只需要看小范围就可以知道很多重要的模式。下围棋也是一样的,下图中的模式不用看整个棋盘的盘势,就知道发生了什么事(白子被黑子围住了)。AlphaGo 的第 1 层的滤波器大小就是 5 × 5,所以显然设 计这个网络的人觉得棋盘上很多重要的模式,也许看 5 × 5 的范围就可以知道。
  • 图像上的第 2 个观察是同样的模式可能会出现在不同的位置,在下围棋里面也是一样 的。如下图所示,这个叫吃的模式,它可以出现在棋盘上的任何位置,它可以出现在左上角,也可以出现在右下角。

image.png


〇 我们要想清楚,在用一个网络架构的时候,这个网络的架构到底代表什么意思,它适不适合用在这个任务上。

如果想把卷积神经网络用在语音和文字处理上,就要对感受野和参数共享进行重新设计,其跟图像不同,要考虑语音跟文字的特性来设计。所以不要以为在图像上的卷积神经网络,直接套到语音上它也奏效(work),可能是不奏效的。要想清楚图像语音有什么样的特性,要怎么设计合适的感受野。


〇 卷积神经网络不能处理图像放大缩小或者是旋转的问题,假设给卷积神经网络看的狗的图像大小都相同,它可以识别这是一只狗。当把这个图像放大的时候,它可能就不能识别这张图像是一只狗。 此外,卷积神经网络不能够处理缩放(scaling)跟旋转(rotation)的问题,,但 Special Transformer Layer 网络架构可以处理这个问题。

〇 卷积神经网络就是这么“笨”,对它来说,这是两张图像。虽然两张图像的形状是一模一样的,但是如果把它们“拉直”成向量,里面的数值就是不一样的。虽然人眼一看觉得两张图像的形状很像,但对卷积神经网络来说它们是非常不一样的。所以事实上,卷积神经网络并不能够处理图像放大缩小或者是旋转的问题。

假设图像里面的物体都是比较小的,当卷积神经网络在某种大小的图像上面学会做图像识别,我们把物体放大,它的性能就会降低不少,卷积神经网络并没有想像的那么强。因此在做图像识别的时候往往都要做数据增强

所谓数据增强就是把训练数据每张图像里面截一小块出来放大,让卷积神经网络看过不同大小的模式;把图像旋转,让它看过某一个物体旋转以后长什么样子,卷积神经网络才会做到好的结果