目录
- 一、BN算法(Batch Normalization)的原理和作用
- 1、原理
- 2、优点
- 二、L1、L2正则化
- 1、L1正则化
- 2、L2正则化
- 3、区别
- 1)、下降速度
- 2)、模型空间限制
- 三、dropout层
- 1、原理
- 2、使用方法
- 四、eralystoping
- 优缺点
一、BN算法(Batch Normalization)的原理和作用
1、原理
BN的计算公式如下图所示:
简单地说,通过计算均值和方差后,mini-batch的数据进行标准化,再加上β和γ可以使数据进行移动和缩放。
2、优点
BN算法像卷积层,池化层、激活层一样也输入一层。BN层添加在激活函数前,对输入激活函数的输入进行归一化。这样解决了输入数据发生偏移和增大的影响。
1、加快训练速度,能够增大学习率,及时小的学习率也能够有快速的学习速率;
2、不用理会拟合中的droupout、L2 正则化项的参数选择,采用BN算法可以省去这两项或者只需要小的L2正则化约束。原因,BN算法后,参数进行了归一化,原本经过激活函数没有太大影响的神经元,分布变得明显,经过一个激活函数以后,神经元会自动削弱或者去除一些神经元,就不用再对其进行dropout。另外就是L2正则化,由于每次训练都进行了归一化,就很少发生由于数据分布不同导致的参数变动过大,带来的参数不断增大。
3、 可以把训练数据集打乱,防止训练发生偏移。
二、L1、L2正则化
在我们做监督学习训练时,主要应用的思想是“最小化损失函数的同时规则化参数”, 最小化损失函数的目的是降低训练误差,拟合训练数据,参数的正则化是使得模型不过分拟合训练数据,提高模型的泛化能力。L1和L2是正则化项,又叫做罚项,是为了限制模型的参数,防止模型过拟合而加在损失函数后面的一项。加入正则化项就是在原来目标函数的基础上加入了约束。当目标函数的等高线和L1,L2范数函数第一次相交时,得到最优解。
1、L1正则化
L1范数符合拉普拉斯分布,是不完全可微的。表现在图像上会有很多角出现。这些角和目标函数的接触机会远大于其他部分。就会造成最优值出现在坐标轴上,因此就会导致某一维的权重为0 ,产生稀疏权重矩阵,进而防止过拟合。
L1的正则化的公式是:
其中:
是优化目标(损失函数)。
2、L2正则化
L2范数符合高斯分布,是完全可微的。一般最优值不会在坐标轴上出现。在最小化正则项时,可以是参数不断趋向于0.最后活的很小的参数。
L2正则化的公式是:
其中:
是优化目标(损失函数)。
3、区别
1)、下降速度
L1,L2都是规则化的方式,最小化目标函数,类似于一个下坡的过程,所以它们下降的坡不同,L1是按照绝对值函数下坡,L2是按照二次函数下坡,在0附近,L1的速度更快。
2)、模型空间限制
L1会将模型限制一个正方形区域,L2将模型限制在一个圆的区域,其中L1的限制,使得大部分都在角的部分相交,就使得某些参数为0,而L2没有突出的角,所以不能使得参数为0。总结就是L1会使得某些参数为0,具有稀疏性,而L2没有这个功能,使得参数的值比较小去降低过拟合。
三、dropout层
dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。
1、原理
Dropout说的简单一点就是我们让在前向传导的时候,让某个神经元的激活值以一定的概率p,让其停止工作,示意图如下:
左边是原来的神经网络,右边是采用Dropout后的网络。这个说是这么说,但是具体代码层面是怎么实现的?怎么让某个神经元以一定的概率停止工作?这个我想很多人还不是很了解,代码层面的实现方法,下面就讲解一下其代码层面的实现。以前我们网络的计算公式是:
采用dropout后计算公式就变成了:
2、使用方法
一般是在大型网络中采用dropout,在一些小型网络上一般训练不到样本的数据,再加上dropout就更加学习不到网络需要的信息。
四、eralystoping
EarlyStopping是Callbacks的一种,callbacks用于指定在每个epoch开始和结束的时候进行哪种特定操作。Callbacks中有一些设置好的接口,可以直接使用,如’acc’, 'val_acc’, ’loss’ 和 ’val_loss’等等。EarlyStopping则是用于提前停止训练的callbacks。具体地,可以达到当训练集上的loss不在减小(即减小的程度小于某个阈值)的时候停止继续训练。
优缺点
**优点:**只运行一次梯度下降,我们就可以找出w的较小值,中间值和较大值。而无需尝试L2正则化超级参数lambda的很多值。
**缺点:**不能独立地处理以上两个问题,使得要考虑的东西变得复杂。