Datawhale X 李宏毅苹果书 AI夏令营 task3

1.批量化归一

若误差表面很崎岖,则其比较难训练,现思考能不能改变误差表面,使其变光滑,变得更好训练。批量化归一就是这样一个想法。

优化问题很重要,有时就算误差表面是凸的,它是一个碗的形状,都不一定好训练。

若两个参数对损失的斜率差别很大,如下图,在\omega _{1}方向上,斜率变化小,在\omega _{2}^{}方向上斜率变化大。

如果是固定的学习率,可能很难得到好的结果,所以我们设定了自适应学习率,Adam等比较进阶的优化方法来得到较好结果。从另一方向想,直接改变较难的误差表面,看能不能更好一点。首先思考第一个问题:\omega _{1}\omega _{2}^{}斜率差很多的情况是如何产生的。

如下图,是一个很简单的模型,输入是x_{1}x_{2},对应参数为\omega _{1}\omega _{2}^{},它是一个线性模型,没有激活函数。\omega _{1}x_{1}\omega _{2}^{}x_{2}再加上b以后得到\hat{y}再去计算它和y之间的差距当作e,所有数据的e加起来就是损失,再去最小化损失。

思考怎么会出现上面比较不好训练的误差表面。\omega _{1}改变时,如加上\Delta \omega _{1}时,L也会改变,那这个\omega _{1}改变时,就改变了y,y改变时改变了e,最后改变了L。

怎么做\omega _{1}的改变最L的影响最小,即他在误差表面的斜率很小。一种可能是当输入很小时,即x_{1}很小时,此时\omega _{1}对L的影响就很小,即斜率很小。

反之,若x_{1}很大,那么\omega _{1}改变很小时,e的改变仍会很大,对L的影响仍很大,故误差表面的斜率很大。

所以既然在这个线性的模型中,当输入的特征,每一个维度的值,它的范围差距很大时,我们就可能产生这样崎岖的误差表面,即不同方向,斜率非常不同,坡度非常不同的误差表面。如果我们让特征中的不同的维度,使其有相同的数值范围,就可能产生比较好的误差表面,让训练变得容易一点,其实有很多不同的方法,这些不同的方法往往合起来统称为特征归一化。

以下所讲的方法只是特征归一化的一种可能,即Z值归一化,也称为标准化。假设x_{}^{1}x^{R},是我们所有的训练数据的特征向量。把所有训练数据的特征向量,都集合起来,向量x_{1}x_{1}^{1}代表x_{1}的第一个元素,x_{1}^{2}代表x_{2}的第一个元素,以此类推。把不同数据同一维度里面的数据取出,对于每个维度i,计算其平均值m_{i}和标准差\sigma _{i}。接下来就是其中一种归一化。

由此得到新的数值\tilde{x_{i}^{r}},在依次代换得到新的向量\tilde{x}

完成归一化后,在这个维度上数值的平均值为0,方差为1。这样每个维度的数值范围均不大,误差表面会平坦很多。

1.1考虑深度学习

\tilde{x}代表归一化的特征,把它放入深度网络中,去做接下来计算。

如上图,\tilde{x^{1}}通过第一层得到z^{1},可能通过激活函数(sigmoid或ReLU均可以),再得到a^{1},再通过下一层等等。

虽然\tilde{x}已经做过归一化,但是通过W_{1}后没有做归一化,z^{1}的数值分布仍然有很大的差异,训练W_{2}时仍会有困难。对于W_{2},a或z其实也可看做一种特征,也应对这些特征做归一化。如果选择sigmoid,推荐再对z做特征归一化。

一般而言,特征归一化,要放在激活函数之前之后,均可以。

归一化的过程如图:

之前\tilde{x_{1}},\tilde{x_{2}},\tilde{x_{3}}是分开单独处理,但是在特征归一化之后,三个样本之间就彼此关联了。所以做特征归一化的时候,可以把整个过程当作是网络的一部分。

批量化归一适用于批量大小比较大的时候,批量大小如果比较大,也许这个批量大小里面的数据就足以表示整个数据集的分布。这个时候就不需要对整个数据集做特征归一化,而改成旨在一个批量上做特征归一化作为近似。

再组批量归一化时,往往还会做以下操作:

理由:完成归一化以后特征平均值一定是零,这会给网络一些限制,所以需要\beta \gamma来调整以下输出的分布。

2.测试时的批量归一化

以上说的都是训练的部分,测试有时候又称为推断。批量归一化在测试的时候可能出现的问题有哪些?在测试时,我们会一次得到所有的测试数据,可以在测试数据上制造一个个批量,但是在实际应用中,比如批量大小设置为64,一定要等64笔数据全部进入才运算显然是不行的。

在做批量归一化时,平均值与标准差都是用一个批量的数据计算得到的,但如果在测试的时候,根本就没有批量、如何计算那两个数据呢“实际上pytorch已处理好了,会用移动平均来代替。

3.内部协变量偏移

批量归一化为什么会有帮助?

原本的批量归一化论文里面提出内部协变量偏移概念。

假设网络有很多层,-x 通 过第一层后得到a,a通过第二层以后得到b;计算出梯度以后,把A更新成A′,把B这 一层的参数更新成B′。但是作者认为说,我们在计算B更新到B′ 的梯度的时候,这个时 候前一层的参数是A,或者是前一层的输出是a。那当前一层从A变成A′的时候,其输出就从a变成a′ 。但是我们计算这个梯度的时候,是根据a算出来,所以这个更新的方向也许它适合用在a上,但不适合用在a′ 上面。

因为我们每次都有做批量归一化,就会让a和 a′ 的分布比较接近,也许这样就会对训练有帮助。

但根据其他实验,内部协变量偏移可能不是训练网络的时候,最主要的问题,它可能也不是批量归一化会好的一个的关键。

2.卷积神经网络

卷积神经网络是一种非常典型的网络架构,常用于图像分类等任务。

图像分类就是给机器一张图像,由机器去判断这张图像里面由上面东西。一张图像是一个三维的张量,其中以为代表图像的宽,另一维代表图像的高,还有一维代表图像的通道的数目。

通道:彩色图像的每个像素都可以描述为红绿蓝的组合,这三种颜色就成为图像的三个色彩通道。这种颜色描述方式称为RGB色彩模型。

网络的输入往往时向量,因此将代表图像的三维张量放入网络之前,需先将它拉直。

例如,一张100*100的图像的张量由100*100*3个数字,把这些数字拍成一排就是一个巨大的向量,这个向量就可做为网络的输入。

注:图像大小各异,所以一般会先把所有图像调整成相同尺寸大小,下讨论的图像尺寸默认为100*100

如下图,如果把向量当作输入,输入的特征向量长度就是100*100*3。由于每个神经元跟输入的向量中的每个数值都需要一个权重,所以当输入的向量长度时100*100*3,且第一层由一千个神经元时,第一层的权重就需要30000000个,数目巨大。更多的参数给模型带来了更好的弹性和更强的能力,但也增强了过拟合的风险。为避免上状况,要考虑图像本身的性质,不需要每个神经元跟输入的每个维度都有一个权重。接下来就是对图像本身特性的一些观察。

模型的输出的目标是分类,因此可将不同的分类结果表示成不同的独热向量。在这个独特向量里,类别对应的值为1,其余类别为0.模型的输出通过softmax以后,输出是\hat{y}。我们希望y‘和\hat{y}的交叉熵越小越好。

交叉熵:目标与预测值之间的差距。

2.1观察1:检测模式不需要整张图像

假如任务时让网络识别出图像的动物。对于一个图像识别的类神经网络里面的神经元而言,它要做的就是检测图像里面有没有出现一些特别重要的模式,这些模式就代表了某种物体。比如有三个神经元分别看到了鸟嘴、眼睛、鸟爪三个模式,就代表神经网络看到了一只鸟。

人在判断物体时,也时抓重要的特征。假设用神经元判断某种模式是否出现,也许就不需要每个神经元都去看一张完整的图像。这些神经元不需要把整张图像当作输入,只需要把图像的一小部分当作输入,就足以让它们检测某些特别关键的模式是否出现。

2.2简化1:感受野

根据观察1可以做第一个简化,卷积神经网络会设定一个区域,即感受野,每个神经元都只关心自己的感受野里面发生的事情,感受野是由我们自己决定的。如下图,蓝色神经元的守备范围就是红色正方体框的感受野,这个感受野里有3*3*3个数值。对于蓝色的神经元,只需要关心这个小范围里的事情。这个神经元把3*3*3数值拉长为一个27维向量,再把这27维的向量作为神经元的输入,这个神经元会给27维的向量每个维度一个权重,故这个神经元有27个权重,再加上一个偏置得到输出,这个输出再送给下一层的神经元当输入。

同个范围可以有多个不同的神经元,即多个神经元可以守备同一个感受野。

接下来讨论如何设计感受野。

感受野可以有大有小,因为有点模式大有点模式小。目前感受野时RGB三个通道都考虑,但也许有些模式只在红色或蓝色的通道会出现,即有点神经元可以考虑一个通道。感受野不仅可以正方形的,也可以时长方形的。

一般做图像识别时,会看全部的通道,故描述一个感受野的时候,只要讲它的高和宽,高和宽合起来叫做核大小。常见感受野设定方式就是核大小维3*3。

一般同一个感受野会有一组神经元去守备这个范围。

下介绍不同感受野之间的关系,我们把左上角的感受野往右移一个不符就制造出一个新的守备范围,即新的感受野。移动的量称为不符。不符是一个超参数,需要人为调整。往往步幅不会太大,一般为1或2。

若感受野超出了图像的范围,超出范围就做填充,一般使用零填充,即超出位置补0。也有其他补充方法,如补整张图像里面所有值的平均值等。

除水平方向移动,感受野也会有垂直方向上的移动。

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

例如,我们无法确认鸟嘴出现在哪个区域,所以每个感受野都要有一个检测鸟嘴的神经元,而这些做的工作相同,所以只要给各个不同区域都设置一个相同的检测鸟嘴的模式即可。

2.4简化2:共享参数

对于相同事物的检测,可以让不同感受野的神经元共享参数,也就是做参数共享。所谓参数共享就是两个神经元的权重完全一样。

如下图,每个感受野均有一组神经元在负责守备,它们彼此可共享参数。使用一样的颜色代表这两个神经元共享一样的参数,所以每个感受野都只有一组参数,所以每个感受野都只有一组参数,这些参数称为滤波器。

2.5简化1、2的总结

如下图,全连接网络是弹性最大的。全连接网络可以觉得它看整张图像还是只看一个范围,如果它只想看一个范围,可以把很多权重设成0。全连接层可以自己决定看整张图像还是一个小范围。但加上感受野后,只能看一个小范围,网络弹性变小。参数共享又进一步限制了网络的弹性。而感受野加上参数共享就是卷积层。用到卷积层的网络就叫卷积神经网络。卷积神经网路的偏差比较大,因此比较不用一过拟合。

下面从另一角度说明卷积神经网络。

接下来通过另一途径解释卷积神经网络。如上图,卷积层中有很多滤波器。如果图像时彩色的,他有RGB三个通道。如果是很白的,它的通道就等于1。一个卷积层中有一排滤波器,每个滤波器都是3*3*通道。其作用是要去图像里面检测某个模式。这些模式要在3*3*通道这个范围中才能被这些滤波器检测出来。滤波器就是一个一个张量,这些张量里面的数值就是模型里的参数。这些滤波器里的数值就是通过学习找出来的。

如下图,接下来吧每个滤波器都做重复的过程。比如有两个滤波器,它用来检测图像3*3范围中间一列都为1的模式。把第2个滤波器先从左上角开始扫起,得到一个数值,往右移一个不符在得到一个数值,再往右一次类推,直到把整张图像扫完得到一组数值。每个滤波器都会给我们一组数字,共色,蓝色绿色每个都给一组。如果有64个滤波器,就可以得到64组数字。在例子中一个滤波器产生4*4个数字,故共有64个4*4的数字。特征映射可以看成是另外一张新图像,只是这个图像的通道不是RGB3个通道,有64个通道,每个通道就对应前面每个滤波器。一张有三个通道的图像,通过卷积变成一张有64个通道的图像。

卷积层可以叠很多层,如下图,第二层的卷积里也有一堆滤波器,每个滤波器大小设成3*3,高度设为64。64即为前一个卷积层的滤波器数目。

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

把一张较大图像做下采样,把图像偶数的列都拿掉,技术的行都拿掉,图像变为原来的四分之一,但是不会影响里面什么东西。

2.7简化3:汇聚

汇聚没有参数,所以他不是一层,它里面没有权重,没有要讯息的东西,它只是一个操作符,行为都是固定好的。进行汇聚操作时,要把数字分组,如分成2*2一组,3*3一组等等。

汇聚有很多版本,以最大汇聚为例,最大汇聚就是在每一组里面选一个代表,选的代表就是最大的一个。还有平均汇聚:取一组的平均值。

做完卷积后,后面往往搭配汇聚把图像变小,图像的通道不变。

2.8应用:围棋

下围棋其实是一个分类的问题,网络的输入是棋盘上黑子跟白子的位置,输出就是下一 步应该要落子的位置。网络的输入是一个向量,棋盘上有19×19 个位置,可以把一个棋盘 表示成一19×19 维的向量。在这个向量里面,如果某个位置有一个黑子,这个位置就填 1,如果有白子,就填-1,如果没有子,就填0。。把 这个向量输到一个网络里面,下围棋就可以看成一个分类的问题,通过网络去预测下一步应 该落子的最佳位置,所以下围棋就是一个有19×19个类别的分类问题,网络会输出19×19 个类别中的最好类别,据此选择下一步落子的位置。这个问题可以用一个全连接网络来解决, 但用卷积神经网络的效果更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值