本期的任务主要分为必修和选修部分,必修部分主要包括从3.7至4.8的“批量归一化”与“卷积神经网络”的理论学习,选修部分则是第6章“自注意力机制”与第19章“ChatGPT”的理论学习,再加上运用自注意力机制进行声音分类的实践操作。由于篇幅的限制,本文只记录必修的部分,选修部分我会另外写一篇博客进行介绍。
3.7 批量归一化-内容精华
“归一化”,作为一位数学专业的学生,我的第一反应就是我们在数学建模中的数据处理的归一化。实际上对批量的归一化与数学建模中的归一化本质是一样的:为了把数据统一成更有利于解决问题的形式。
上图就非常形象地展示了如果没有归一化的后果:我们需要在一个更复杂的面上进行梯度下降!(注:如果是一个圆的话,我们在训练的过程中求一些参数会比椭圆要方便的多;如果是两个量的化归一化之后展示在图中的就是一个圆)
那么,我们将可以制造比较好的误差表面,让训练变得比较容易一点其实有很多不同的方法称作“特征归一化”。
而Z值归一化又是特征归一化的常用形式。这种方法对于特征值在不同量纲或具有不同数量级的数据非常有用,因为它可以消除特征间的量纲差异,从而提高模型的训练效果。
![](https://i-blog.csdnimg.cn/direct/bda27e10dc214b2a9f08cea3c43dec90.png)
在Z值归一化之后,我们通过激活函数将处理好的数据塞进神经网络。但是,在训练的过程中,我们也许还会碰到一些数据的不匹配问题,因此我们仍需进行归一化。
那么,既然我们在机器学习的模型训练中用的是批量,我们就得需要对批量进行归一化。这使其具有均值为0、方差为1的标准正态分布。这种处理在每个小批量数据上单独进行,并且引入了两个可学习的参数,使模型能够调整归一化后的分布。之前的独立分开处理的数据,但是在做特征归一化以后,这三个样本变得彼此关联了。
做特征归一化的时候,可以把整个过程当做是网络的一部分。
![](https://i-blog.csdnimg.cn/direct/26ece6eb290b49dfb909db10598f3dbd.png)
在测试阶段,如果没有批量数据,均值和标准差也无需特别计算,因为PyTorch已经处理了这些情况。而在训练阶段,批量归一化会对每个批次计算的均值和标准差进行移动平均,计算方式如下:
如图是从批量归一化原始文献的实验结果,横轴代表的是训练的过程,纵轴代表的是验证集上的准确率。可以发现,批量归一化的训练效率及准确性相比单独训练要大很多。
这里提一嘴内部协变量偏移。 它指的是在训练过程中,每一层的输入数据分布会随着时间的推移而发生变化,即使这些数据本身并没有改变。
这种现象的原因在于,深度神经网络在训练过程中,各层的参数会不断更新,这导致了每一层输入数据的分布也会发生变化,即使输入数据本身并没有改变。这种变化会使得模型的训练变得困难和不稳定。
4.1-4.4 卷积神经网络(上)-内容精华
图像,不同于数字这样的数据,可以直接代入神经网络。为了能让我们的神经网络“认识”我们的图像,我们需要对图像的进行格式化。
我们知道:所有的颜色都可以有红绿蓝三色组成,因此,我们的图像的颜色可以存在一个数组中,这个数组含有三个在[0,255]区间的数,分别代表三色的值。然后就是对图像的每一个像素点进行颜色采集,这样我们就可以把图像的数据转换成张量的数据了。
在实际操作中,我们更倾向于分别采样,也就是使用三个张量分别记录RGB的值,如图所示:
假设我们的任务是让网络识别出图像的动物,那么不同神经元可能会进行不同方向的判断。比如一组神经元判断眼睛, 一组神经元判断轮廓,另一组神经元判断耳朵,这就像人类去做一些动物判断一样(区分猫狗/鸡鸭) 。
所以,这些神经元不需要把整张图像当作输入,只需要把图像的一小部分当作输入,就足以让它们检测某些特别关键的模式是否出现。
感受野是指输入图像中每个像素对输出特定神经元的影响范围。每个神经元都只关心自己的感受野里面发生的事情,感受野是由我们自己决定的。不同的感受野之间也可以彼此重叠。
步幅定义了卷积核在输入图像上移动的步长,即每次卷积核在输入图像上滑动的距离。而填充是指在输入图像的边缘添加额外的像素,目的是保持或控制输出特征图的尺寸,以便更好地捕获输入图像的边缘信息,通常为0值。
参数共享是通过共享网络中某些层的参数(如卷积核的权重),显著减少模型的参数数量,从而降低计算复杂度和内存需求。这对于减小参数数量、降低计算复杂度以及防止过拟合有着重要意义。
滤波器是网络中用于提取输入数据特征的一个小的权重矩阵。滤波器是卷积操作的核心部分,通过在输入数据上滑动并计算加权和,提取出局部特征。滤波器通过卷积操作滑过输入图像的每个位置。对于每个位置,滤波器计算输入数据局部区域的加权和,然后将这个值作为输出特征图中的一个像素值。不同的滤波器能够学习并提取输入数据中的不同类型的特征。
4.5-4.8 卷积神经网络(下)-内容精华
全连接层可以自己决定看整张图像还是一个小范围;感受野加上参数共享就是卷积层。
如果有64个滤波器,就可以得到64组的数字。这组数字称为特征映射。特征映射可以被看作是原始输入数据的某种转换,捕捉了某些特定的模式或特征。每一层卷积层通常会生成多个特征映射,每个特征映射代表不同的特征或模式。
我们在进行图像处理时,有时会遇到比较大的图像,我们处理起来会比较复杂,更有一些图像可能会吃掉一半甚至全部的内存。这时候我们就需要对图像进行“裁剪” 。比如,把图像偶数的列都拿掉,奇数的行都拿掉,图像变成为原来的1/4,而且在清晰度上并未损失过多。我们称这样的方法为下采样。
本来 4 × 4 的图像,如果把这个输出的数值 2 × 2 个一组,4 × 4 的图像就会变成 2 × 2 的图像,这就是汇聚所做的事情。一般在实践上,往往就是卷积跟汇聚交替使用,可能做几次卷积,做一次汇聚。一般架构就是卷积加汇聚,汇聚是可有可无的,很多人可能会选择不用汇聚。
卷积神经网络一个最常见的应用是用来下围棋,下围棋就可以看成一个分类的问题,通过网络去预测下一步应该落子的最佳位置。我们把棋盘看做19*19大小的图像,-1代表黑子落点,0代表棋盘上的空点,1代表白子落点。我们现实生活中的图像动辄几k*几k像素,还是全彩图,因此,相比之下,围棋就显得相当小了。
它的滤波器的大小是 5 × 5(我们的棋子只需考虑它的“势”以及“势”周边的情况,这是我的猜测),然后有 k = 192 个滤波器。其中k 的值是试出来的,结果表明,192个的训练效果要好于128与256。
其实卷积神经网络不能处理图像放大缩小或者是旋转的问题。因此,我们在图像的训练时,可以对图像进行旋转、镜像等一系列操作来增加我们训练集的数据量。