Datawhale X 李宏毅苹果书 AI夏令营 深度学习详解进阶task3

深度学习基础

目录

深度学习基础 

1.7.3 内部协变量偏移

 2.卷积神经网络

2.2 简化 1:感受野 

2.3 观察 2:同样的模式可能会出现在图像的不同区域

2.4 简化 2:共享参数

2.5 简化 1 和 2 总结

2.6 观察 3:下采样不影响模式检测

2.7 简化 3:


 

1.7.3 内部协变量偏移

批量归一化为什么会有帮助呢?原始的批量归一化论文里面提出内部协变量偏移(internal covariate shift)概念。如图 3.47 所示,假设网络有很多层,-x 通过第一层后得到 a,a 通过第二层以后得到 b;计算出梯度以后,把 A 更新成 A′,把 B 这一层的参数更新成 B′。但是作者认为说,我们在计算 B 更新到 B′ 的梯度的时候,这个时候前一层的参数是 A,或者是前一层的输出是 a。那当前一层从 A 变成 A′ 的时候,其输出就从 a 变成 a′ 。但是我们计算这个梯度的时候,是根据 a 算出来,所以这个更新的方向也许它适合用在 a 上,但不适合用在 a′ 上面。因为我们每次都有做批量归一化,就会让 a 和a′ 的分布比较接近,也许这样就会对训练有帮助。但是论文“How Does Batch NormalizationHelp Optimization?”认为内部协变量偏移有问题。这篇论文从不同的角度来说明内部协变量偏移不一定是训练网络的时候的一个问题。批量归一化会比较好,可能不一定是因为它解决了内部协变量偏移。这篇论文里面做了很多实验,比如其比较了训练的时候 a 的分布的变化,发现不管有没有做批量归一化,其变化都不大。就算是变化很大,对训练也没有太大的伤害。不管是根据 a 算出来的梯度,还是根据 a′ 算出来的梯度,方向居然都差不多。内部协变量偏移可能不是训练网络的时候,最主要的问题,它可能也不是批量归一化会好的一个的关键。

协变量偏移(covariate shift),训练集和预测集样本分布不一致的问题就叫做协变量偏移现象,这个词汇是原来就有的,内部协变量偏移是批量归一化的作者自己发明的。图 1.44内部协变量偏移示例为什么批量归一化会比较好呢,那在这篇“How Does Batch Normalization Help Optimization?”这篇论文从实验和理论上,至少支持批量归一化可以改变误差表面,让误差表面比较不崎岖这个观点。所以这个观点是有理论的支持,也有实验的佐证的。 

 图 1.44 内部协变量偏移示例

 2.卷积神经网络

对于机器,图像可以描述为三维张量(张量可以想成维度大于 2 的矩阵)。一张图像是一个三维的张量,其中一维代表图像的宽,另外一维代表图像的高,还有一维代表图像的通道(channel)的数目。如图 2.1 所示。在这个例子里面,张量有 100 × 100 × 3 个数字,所以一张图像是由100×100×3 个数字所组成的向量可以作为网络的输入,而这个向量里面每一维里面存的数值是某一个像素在某一个通道下的颜色强度。 图像有大有小,而且不是所有图像尺寸都是一样的。常见的处理方式是把所有图像先调整成相同尺寸,再“丢”到图像的识别系统里面。

图 2.1 把图像作为模型输入 

 如图 2.2 所示,如果把向量当做全连接网络的输入,输入的特征向量(feature vector)的长度就是 100 × 100 × 3。这是一个非常长的向量。由于每个神经元跟输入的向量中的每个数值都需要一个权重,所以当输入的向量长度是 100 × 100 × 3,且第 1 层有 1000 个神经元时,第 1 层的权重就需要 1000×100×100×3 个权重,这是一个非常巨大的数目。更多的参数为模型带来了更好的弹性和更强的能力,但是模型的弹性越大,就越容易过拟合。为了避免过拟合,在做图像识别的时候,考虑到图像本身的特性,并不一定需要全连接,即不需要每个神经元跟输入的每个维度都有一个权重。

 图 2.2 全连接网络

 如图 2.3 所示。独热向量{y}'的长度决定了模型可以识别出多少不同种类的东西。如果向量的长度是 n,代表模型可以识别出n种不同的东西。如果希望图像识别系统可以识别上万种目标,标签就会是维度上万的独热向量。模型的输出通过 softmax 以后,输出是 \hat{y}。我们希望{y}'\hat{y} 的交叉熵越小越好。

图 2.3 图像分类 

 人在判断一个物体的时候,往往也是抓最重要的特征。看到这些特征以后,就会直觉地看到了某种物体。对于机器,也许这是一个有效的判断图像中物体的方法。但假设用神经元来判断某种模式是否出现,也许并不需要每个神经元都去看一张完整的图像。因为并不需要看整张完整的图像才能判断重要的模式(比如鸟嘴、眼睛、鸟爪)是否出现,如图 2.4 所示,要知道图像有没有一个鸟嘴,只要看非常小的范围。这些神经元不需要把整张图像当作输入,只需要把图像的一小部分当作输入,就足以让它们检测某些特别关键的模式是否出现,这是第 1 个观察。

 

 图 2.4 检测模式不需要整张图像

2.2 简化 1:感受野 

 根据观察 1 可以做第 1 个简化,卷积神经网络会设定一个区域,即感受野(receptivefield),每个神经元都只关心自己的感受野里面发生的事情,感受野是由我们自己决定的。比如在图 4.6 中,蓝色的神经元的守备范围就是红色正方体框的感受野。这个感受野里面有3 × 3 × 3 个数值。对蓝色的神经元,它只需要关心这个小范围,不需要在意整张图像里面有什么东西,只在意它自己的感受野里面发生的事情就好。这个神经元会把 3 × 3 × 3 的数值“拉直”变成一个长度是 3 × 3 × 3=27 维的向量,再把这 27 维的向量作为神经元的输入,这个神经元会给 27 维的向量的每个维度一个权重,所以这个神经元有 3 × 3 × 3 = 27 个权重,再加上偏置(bias)得到输出。这个输出再送给下一层的神经元当作输入。

 

 图 2.5 感受野

如图 2.6 所示,感受野彼此之间也可以是重叠的,比如绿色的神经元的感受野跟蓝色的、黄色的神经元都有一些重叠的空间。我们没有办法检测所有的模式,所以同个范围可以有多个不同的神经元,即多个神经元可以去守备同一个感受野。接下来我们讨论下如何设计感受野。图 2.6感受野彼此重叠感受野可以有大有小。此外,感受野可以只考虑某些通道。目前感受野是 RGB 三个通道都考虑,但也许有些模式只在红色或蓝色的通道会出现,即有的神经元可以只考虑一个通道。感受野不仅可以是正方形的,也可以是长方形的,完全可以根据对问题的理解来设计感受野。虽然感受野可以任意设计,但下面要跟大家讲一下最经典的感受野安排方式。

 

图 2.6 感受野彼此重叠 

 在做图像识别的时候,可能不会觉得有些模式只出现在某一个通道里面,所以会看全部的通道。既然会看全部的通道,那么在描述一个感受野的时候,只要讲它的高跟宽,不用讲它的深度,因为它的深度就等于通道数,而高跟宽合起来叫做核大小。图 2.7 中的核大小就是 3 × 3。在图像识别里面,一般核大小不会设太大,常见的感受野设定方式就是核大小为 3 × 3。 一般同一个感受野会有一组神经元去守备这个范围。

 

图 2.7 卷积核

我们把左上角的感受野往右移一个步幅,就制造出一个新的守备范围,即新的感受野。移动的量称为步幅(stride),图 2.8 中的这个例子里面,步幅就等于 2。步幅是一个超参数,需要人为调整。因为希望感受野跟感受野之间是有重叠的,所以步幅一般设为 1 或 2。如令步幅 = 2,感受野就会重叠。

 

图2.8 步幅

接下来需要考虑一个问题:感受野超出了图像的范围,怎么办呢?如果不在超过图像的范围“摆”感受野,就没有神经元去检测出现在边界的模式,这样就会漏掉图像边界的地方,所以一般边界的地方也会考虑的。如图2.9 所示,超出范围就做填充(padding),填充就是补值,一般使用零填充,超出范围就补 0,如果感受野有一部分超出图像的范围之外,就当做那个里面的值都是 0。其实也有别的补值的方法,比如补整张图像里面所有值的平均值或者把边界的这些数字拿出来补没有值的地方。

图 2.9填充

除了水平方向的移动,也会有垂直方向上的移动,垂直方向步幅也是设 2,如图2.110所示。我们就按照这个方式扫过整张图像,所以整张图像里面每一寸土地都是有被某一个感受野覆盖的。也就是图像里面每个位置都有一群神经元在检测那个地方,有没有出现某些模式。这个是第 1 个简化。

图 2.10 垂直移动

2.3 观察 2:同样的模式可能会出现在图像的不同区域

       第 2 个观察是同样的模式,可能会出现在图像的不同区域。如图 2.11 所示,图像里面所有地方都在某个神经元的守备范围内。假设在某个感受野里面,有一个神经元的工作就是检测鸟嘴,鸟嘴就会被检测出来。所以就算鸟嘴出现在中间也没有关系。但这些检测鸟嘴的神经元做的事情是一样的,只是它们守备的范围不一样。既然如此,其实没必要每个守备范围都去放一个检测鸟嘴的神经元。如果不同的守备范围都要有一个检测鸟嘴的神经元,参数量会太多了,因此需要做出相应的简化。

图 2.11 每个感受野都放一个鸟嘴检测器

2.4 简化 2:共享参数

在图像处理上,则可以让不同感受野的神经元共享参数,也就是做参数共享,如图 2.12 所示。所谓参数共享就是两个神经元的权重完全是一样的。

图2.12 共享参数

如图 2.13 所示,颜色相同,权重完全是一样的,比如上面神经元的第 1 个权重是 \varpi_{1},下面神经元的第 1 个权重也是\varpi_{1},它们是同一个权重,用同一种颜色黄色来表示。上面神经元跟下面神经元守备的感受野是不一样的,但是它们的参数是相同的。虽然两个神经元的参数是一模一样,但它们的输出不会永远都是一样的。因为输入不一样的关系,所以就算是两个神经元共用参数,它们的输出也不会是一样的。所以这是第 2 个简化,让一些神经元可以共享参数。

图 2.13 两个神经元共享参数

如图2.14 所示,每个感受野都有一组神经元在负责守备,比如 64 个神经元,它们彼此之间可以共享参数。 

图 2.14守备感受野的神经元

图 2.15 中使用一样的颜色代表这两个神经元共享一样的参数,所以每个感受野都只有一组参数,就是上面感受野的第 1 个神经元会跟下面感受野的第 1 个神经元共用参数,上面感受野的第 2 个神经元跟下面感受野的第 2 个神经元共用参数。所以每个感受野都只有一组参数而已,这些参数称为滤波器(filter)。这是第 2 个简化的方法。

图 2.15 多个神经元共享参数

2.5 简化 1 和 2 总结

如图 2.16 所示,全连接网络是弹性最大的。全连接网络可以决定它看整张图像还是只看一个范围,如果它只想看一个范围,可以把很多权重设成 0。全连接层可以自己决定看整张图像还是一个小范围。但加上感受野的概念以后,只能看一个小范围,网络的弹性是变小的。参数共享又进一步限制了网络的弹性。本来在学习的时候,每个神经元可以各自有不同的参数,它们可以学出相同的参数,也可以有不一样的参数。但是加入参数共享以后,某一些神经元无论如何参数都要一模一样的,这又增加了对神经元的限制。而感受野加上参数共享就是卷积层(convolutional layer),用到卷积层的网络就叫卷积神经网络。卷积神经网络的偏差比较大。但模型偏差大不一定是坏事,因为当模型偏差大,模型的灵活性较低时,比较不容易过拟合。全连接层可以做各式各样的事情,它可以有各式各样的变化,但它可能没有办法在任何特定的任务上做好。而卷积层是专门为图像设计的,感受野、参数共享都是为图像设计的。虽然卷积神经网络模型偏差很大,但用在图像上不是问题。

图2.16 卷积层与全连接层的关系

接下来通过第 2 个版本的故事来说明卷积神经网络。如图 2.17 所示,卷积层里面有很多滤波器,这些滤波器的大小是 3 × 3 × 通道。如果图像是彩色的,它有 RGB 三个通道。如果是黑白的图像,它的通道就等于 1。一个卷积层里面就是有一排的滤波器,每个滤波器都是一个 3 × 3 × 通道,其作用是要去图像里面检测某个模式。这些模式要在 3 × 3 × 通道,这个小的范围内,它才能够被这些滤波器检测出来。举个例子,假设通道为 1,也就是图像是黑白的。

图 2.17 卷积层中的滤波器

滤波器就是一个一个的张量,这些张量里面的数值就是模型里面的参数。这些滤波器里面的数值其实是未知的,它是可以通过学习找出来的。如图 4.18所示。

图 2.18 滤波器示例 

如图 2.19 所示,这是一个 6 × 6 的大小的图像。先把滤波器放在图像的左上角,接着把滤波器里面所有的 9 个值跟左上角这个范围内的 9 个值对应相乘再相加,也就是做内积,结果是 3。接下来设置好步幅,然后把滤波器往右移或往下移,重复几次,可得到模式检测的结果

 

图 2.19 使用滤波器检测模式

如图2.20 所示,接下来把每个滤波器都做重复的过程。比如说有第 2 个滤波器,它用来检测图像 3 × 3 范围内中间一列都为 1 的模式。把第 2 个滤波器先从左上角开始扫起,得到一个数值,往右移一个步幅,再得到一个数值再往右移一个步幅,再得到一个数值。重复同样的操作,直到把整张图像都扫完,就得到另外一组数值。每个滤波器都会给我们一组数字,红色的滤波器给我们一组数字,蓝色的滤波器给我们另外一组数字。如果有 64 个滤波器,就可以得到 64 组的数字。这组数字称为特征映射。当一张图像通过一个卷积层里面一堆滤波器的时候,就会产生一个特征映射。假设卷积层里面有 64 个滤波器,产生的特征映射就有 64 组数字。在上述例子中每一组是 4 × 4,即第 1 个滤波器产生 4 × 4 个数字,第2 个滤波器也产生 4 × 4 个数字,第 3 个也产生 4 × 4 个数字,64 个滤波器都产生 4 × 4 个数字。特征映射可以看成是另外一张新的图像,只是这个图像有64 个通道,每个通道就对应到一个滤波器。本来一张图像有 3 个通道,通过一个卷积变成一张新的有 64 个通道图像。

图 2.20 使用多个滤波器检测模式

积层是可以叠很多层的,如图 4.21 所示,第 2 层的卷积里面也有一堆的滤波器,每个滤波器的大小设成 3 × 3。其高度必须设为 64,因为滤波器的高度就是它要处理的图像的通道。如果输入的图像是黑白的,通道是 1,滤波器的高度就是 1。如果输入的图像是彩色的,通道为 3,滤波器的高度就是 3。对于第 2 个卷积层,它的输入也是一张图像,这个图像的通道是 64。这个 64 是前一个卷积层的滤波器数目,前一个卷积层的滤波器数目是 64,输出以后就是 64 个通道。所以如果第 2 层想要把这个图像当做输入,滤波器的高度必须是 64。所以第 2 层也有一组滤波器,只是这组滤波器的高度是 64。

图 2.21 对图像进行卷积

 如图 2.22 所示,这组参数有 3 × 3 × 3 个,即滤波器里面有 3 × 3 × 3 个数字,这边特别还用颜色把这些数字圈起来,权重就是这些数字。为了简化,这边去掉了偏置。神经元是有偏置的,滤波器也是有偏置的。在一般的实践上,卷积神经网络的滤波器都是有偏置的。

图 2.22 共享参数示例

如图 2.23 所示,在第 1 个版本的故事里面,不同的神经元可以共享权重,去守备不同的范围。而共享权重其实就是用滤波器扫过一张图像,这个过程就是卷积。这就是卷积层名字的由来。把滤波器扫过图像就相当于不同的感受野神经元可以共用参数,这组共用的参数就叫做一个滤波器。

图 2.23 从不同的角度理解参数共享 

2.6 观察 3:下采样不影响模式检测

第 3 个观察是下采样不影响模式检测。把一张比较大的图像做下采样(downsampling),把图像偶数的列都拿掉,奇数的行都拿掉,图像变成为原来的 1/4,但是不会影响里面是什么东西。如图 2.24 所示,把一张大的鸟的图像缩小,这张小的图像还是一只鸟。

 

图 2.24 下采样示意

2.7 简化 3:

汇聚根据第 3 个观察,汇聚被用到了图像识别中。汇聚没有参数,所以它不是一个层,它里面没有权重,它没有要学习的东西,汇聚比较像 Sigmoid、ReLU 等激活函数。因为它里面是没有要学习的参数的,它就是一个操作符(operator),其行为都是固定好的,不需要根据数据学任何东西。每个滤波器都产生一组数字,要做汇聚的时候,把这些数字分组,图 2.25中的例子是 2 × 2 个一组。

图 2.25 最大汇聚示例

汇聚有很多不同的版本,以最大汇聚(max pooling)为例。最大汇聚在每一组里面选一个代表,选的代表就是最大的一个,如图 2.26所示。

图 2.26 最大汇聚结果

除了最大汇聚,还有平均汇聚(mean pooling),平均汇聚是取每一组的平均值。做完卷积以后,往往后面还会搭配汇聚。汇聚就是把图像变小。做完卷积以后会得到一张图像,这张图像里面有很多的通道。做完汇聚以后,这张图像的通道不变。如图 2.27 所示,在刚才的例子里面,本来 4 × 4 的图像,如果把这个输出的数值 2 × 2 个一组,4 × 4 的图像就会变成 2 × 2 的图像,这就是汇聚所做的事情。

图 2.27 重复使用卷积和池化

一般在实践上,往往就是卷积跟汇聚交替使用,可能做几次卷积,做一次汇聚。比如两次卷积,一次汇聚。不过汇聚对于模型的性能(performance)可能会带来一点伤害。所以近年来图像的网络的设计往往也开始把汇聚丢掉,它会做这种全卷积的神经网络。一般架构就是卷积加汇聚,汇聚是可有可无的。如图 2.28所示,如果做完几次卷积和汇聚以后,把汇聚的输出做扁平化(flatten),再把这个向量丢进全连接层里面,最终还要过个 softmax 来得到图像识别的结果。这就是一个经典的图像识别的网络,里面有卷积、汇聚和扁平化,最后再通过几个全连接层或 softmax 来得到图像识别的结果。

图 2.28 经典的图像识别的网络

 

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值