4.批量归一化
用简单的话说,使用一种方法将崎岖的误差表面变得平滑,使我们更好进行优化的操作就叫做批量归一化(Batch Normalization,BN)。如tast2中讲到的凸状损失表面https://mp.csdn.net/mp_blog/creation/editor/141754211https://mp.csdn.net/mp_blog/creation/editor/141754211就需要采取一些复杂的方法(如Adam)进行优化。
我们最平常的线性模型y=wx+b,当我们将w1+∆w时,就会影响损失,如果此时w1很小,那么他对损失的影响就很小,就相对平滑;同理,将w2+∆w时,如果w2很大,那么w2对损失的影响就很大,就相对陡峭,结合下来就会产生上面凸状误差表面。
当输入的特征,每一个维度的值,它的范围差距很大的时候,我们就可能产生像这样子的误差表面。我们有很多不同的方可以给不同的维度,同样的数值的范围,制造一个比较好的误差表面这些不同的方法统称为特征归一化(feature normalization)。
下面介绍的其中一种方法为Z 值归一化(Z-score normalization)也称为标准化(standardization)。简单来说,Z值归一化就是将数据集中的每个数值减去该数据集的均值,然后除以该数据集的标准差。这样处理后的数据就会围绕0点波动,并且数据的波动范围(即标准差)为1。
假设我们有一个数据集,其均值为μ,标准差为σ。对于数据集中的每一个数值x,经过Z值归一化后的数值x'可以通过以下公式计算:
x' = (x - μ) / σ
这样得到的误差表面就会比较平缓。
4.1考虑深度学习
我们通常把经过归一化的数据放入深度学习神经网络,我们会遇到这样一个问题:在经过第一层后得到的数据又变得相差很大,所以为了方便计算,我们需要将每一层得到的数据再进行归一化然后输入下一层网络。
对z做归一化,改变了 z1 的值,a1 的值也会改变,µ 和 σ 也会改变。µ,σ 改后,z2, a2, z3, a3的值也会改变。所以有做特征归一化的时候,可以把整个过程当做是网络的一部分。即有一个比较大的网络,该网络输入一堆数据,用这堆输入在这个网络里面计算出 µ,σ,接下来产生一堆输出。
就是因为这种特性,有时数据量过大时我们的计算机无法做到同时处理这么多数据,所以我们要采取批量归一化(Batch Normalization,BN)的方法。每次网络只会考虑一个批量里的样本,所以批量要够大才算得出 µ,σ。
4.2测试时的批量归一化
在深度学习中,测试时的批量归一化(Batch Normalization)与训练时有所不同,但基本原理相似,都是为了稳定数据的分布,加速模型的训练和收敛。
简单来说,批量归一化在测试时的作用主要是确保模型能够对未见过的数据(即测试数据)进行稳定的预测。在训练过程中,批量归一化会基于每个小批次的数据来计算均值和方差,并用这些统计量来归一化当前批次的数据。然而,在测试时,我们通常没有小批次的数据来实时计算均值和方差,因此需要使用在训练过程中计算得到的整个训练集的统计量(即移动平均的均值和方差)来进行归一化。
卷积神经网络
深度学习中的卷积神经网络(Convolutional Neural Networks, CNNs)是一种专门设计用来处理具有网格状拓扑结构数据的神经网络,如图像。CNNs 在图像识别、图像分类、视频分析、自然语言处理以及语音识别等领域取得了显著的成效。
图像分类:我们会把图像转化为三维张量,三维分别为长、宽和RGB,RGB看成三个不同的通道,然后拉直成向量作为输入。所以假设有100×100的图片,那么变为张量然后拉直后就是100×100×3的向量。每个神经元跟输入的向量中的每个数值都需要一个权重,所以当输入的向量长度是 100 × 100 × 3,且第 1 层有 1000 个神经元时,第 1 层的权重就需要 1000×100×100×3 = 3 ×10^7 个权重。
模型的输出为独热向量,假设要识别猫,那么猫就是1,其他种类都为0。独热向量的长度为多少就决定模型可以识别多少种类别。
1.1观察 1:检测模式不需要整张图像
像我们人类自身去判断物体种类的时候都不是去全局观察,而是通过几个特征来判断物体种类,例如判断鸟,我们会通过翅膀、爪子、嘴等特征来判断这是一只鸟。用CNN判断也是一样,只需要让三个神经元看到翅膀、爪子、嘴判断这是一只鸟。我们要知道这些特征都出现在图片中很小的一部分。
1.2简化 1:感受野
根据观察 1 可以做第 1 个简化,卷积神经网络会设定一个区域,即感受野(receptivefield)。
通常我们设定3×3×3的大小的方块为一个感受野,神经元把其拉直变成27维的向量。这个神经元会给每个维度一个权重,即27个权重,再加上偏置(bias)得到输出并作为下一个神经元的输入。感受野可以有大有小,位置可以尽可能重叠以确保不漏取特征,因为有些特征不止会出现在一个通道里,所以感受野都会匡取三个通道,所以我们只需要考虑长宽,把这两个组合叫核大小。不需要考虑深度,3×3叫做大小3×3大小的卷积核。我们把左上角的感受野往右移一个步幅,就制造出一个新的守备范围,即新的感受野。移动的量称为步幅(stride)。在移动过程中我们会遇到一个问题,卷积核的大小超出了数据范围,这时我们可以选择用零做填充。
1.3 观察 2:同样的模式可能会出现在图像的不同区域
我们可能会担心同一个特征比如鸟嘴在不同图片处于不同位置的问题,出于不同的感受野会不会判断不出来。实际这个问题不大,我们会把感受野铺满整个图片,而感受野决定的只是位置不同,但其功能都是一样的,每个神经元还是都会判断一遍。
反而因为鸟嘴只是出现在一小块区域,所以,我们并不需要每个感受野都放上所有的感受野,我们要做出优化。
1.4 简化 2:共享参数
可以把两个神经元的权重完全是一样的,即参数共享(parameter sharing)。因为输入不同,就算神经元相同输出也会不同。我们可以把所有的感受野共用相同的一组神经元,所以每个感受野都只有一组参数,这些参数称为滤波器(filter)。
1.5 观察 3:下采样不影响模式检测
把一张比较大的图像做下采样(downsampling),把图像偶数的列都拿掉,奇数的行都拿掉,图像变成为原来的 1/4,并不会对内容造成影响,如:把一张大的鸟的图像缩小,这张小的图像还是一只鸟。
1.6 简化 3:汇聚
汇聚有最大汇聚(max pooling)、平均汇聚(mean pooling)等方法,也是把图像变小。由前面卷积层可知,图片三通道做完卷积后会变成很多个通道,通过汇聚,可以使这张图像的通道不变,但大小变小。
汇聚是可有可无,可以做完几次卷积和汇聚以后,把汇聚的输出做扁平化(flatten)。(扁平化:把图像里面本来排成矩阵样子的东西“拉直”,即把所有的数值“拉直”变成一个向量。),再把这个向量输入全连接层,最终通过 softmax 来得到图像识别的结果
1.7 卷积神经网络的应用:下围棋
棋盘上有 19 × 19 个位置,可以把一个棋盘表示成一个 19 × 19 维的向量,黑子1,白子-1,无子0。所以下围棋就是一个有 19 × 19 个类别的分类问题,网络会输出 19 × 19个类别中的最好类别,据此选择下一步落子的位置。