深度学习:欠拟合、过拟合、正则化,BN ,L1/L2 范数正则化、bagging集成,dropout

https://github.com/imhuay/Algorithm_Interview_Notes-Chinese

一、欠拟合、过拟合

欠拟合指模型不能在训练集上获得足够低的训练误差

过拟合指模型的训练误差测试误差(泛化误差)之间差距过大;

反映在评价指标上,就是模型在训练集上表现良好,但是在测试集和新数据上表现一般(泛化能力差);

降低过拟合风险的方法

所有为了减少测试误差的策略统称为正则化方法,这些方法可能会以增大训练误差为代价

数据增强

图像:平移、旋转、缩放

利用生成对抗网络(GAN)生成新数据

NLP:利用机器翻译生成新数据

降低模型复杂度

神经网络:减少网络层、神经元个数

决策树:降低树的深度、剪枝

...

权值约束(添加正则化项)

L1 正则化

L2 正则化

集成学习

神经网络:Dropout

决策树:随机森林、GBDT

提前终止

降低欠拟合风险的方法

加入新的特征

交叉特征、多项式特征、...

深度学习:因子分解机、Deep-Crossing、自编码器

增加模型复杂度

线性模型:添加高次项

神经网络:增加网络层数、神经元个数

减小正则化项的系数

添加正则化项是为了限制模型的学习能力,减小正则化项的系数则可以放宽这个限制

模型通常更倾向于更大的权重,更大的权重可以使模型更好的拟合数据

二、正则化

2.1 Batch Normalization(批标准化) 均值为0 方差为1 本质上解决反向传播过程中的梯度问题。

BN 是一种正则化方法(减少泛化误差),主要作用有:

  • 加速网络的训练缓解梯度消失,支持更大的学习率) 激活函数sigmoid 在反向传播过程中,正无穷和负无穷两边的导数都几乎为0,只有中间Y轴导数值比较大,所以经过若干次链式求导,最终 接近0,梯度消失,经过BN 可以是每一层的H 均值为0,标准差为1,也就是数据集中在y轴附近,这样就使得梯度比较大,解决了梯度消失的问题。
  • 防止过拟合
  • 降低了参数初始化的要求。
  • BN 可以缓解每一层数据不稳定的问题,很多层每一层数据都要经过权重计算,如果权重大于1的话,最后的数据可能非常大,为了防止“梯度弥散”。关于梯度弥散,大家都知道一个简单的栗子:0.9^{30}\approx 0.04。在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。

动机

训练的本质是学习数据分布。如果训练数据与测试数据的分布不同会降低模型的泛化能力。因此,应该在开始训练前对所有输入数据做归一化处理

而在神经网络中,因为每个隐层的参数不同,会使下一层的输入发生变化,从而导致每一批数据的分布也发生改变;致使网络在每次迭代中都需要拟合不同的数据分布,增大了网络的训练难度与过拟合的风险

解析

大家都知道在统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如,transfer learning/domain adaptation等。



 

基本原理

  • BN 方法会针对每一批数据,在网络的每一层输入之前增加归一化处理,使输入的均值为 0,标准差为 1目的是将数据限制在统一的分布下。减均值/标准差
  • 具体来说,针对每层的第 k 个神经元,计算这一批数据在第 k 个神经元的均值与标准差,然后将归一化后的值作为该神经元的激活值。

  • BN 可以看作在各层之间加入了一个新的计算层,对数据分布进行额外的约束,从而增强模型的泛化能力;
  • 但同时 BN 也降低了模型的拟合能力,破坏了之前学到的特征分布
  • 为了恢复数据的原始分布,BN 引入了一个重构变换来还原最优的输入数据分布

其中 γ 和 β 为可训练参数。

完整算法

BN 在训练和测试时分别是怎么做的?

  • 训练时每次会传入一批数据,做法如前述;
  • 测试预测时,每次可能只会传入单个数据,此时模型会使用全局统计量代替批统计量;
  • 训练每个 batch 时,都会得到一组(均值,方差)
  • 所谓全局统计量,就是对这些均值和方差求其对应的数学期望
  • 具体计算公式为:
  • 完整算法

为什么训练时不采用移动平均?

  • 使用 BN 的目的就是为了保证每批数据的分布稳定,使用全局统计量反而违背了这个初衷;
  • BN 的作者认为在训练时采用移动平均可能会与梯度优化存在冲突

在做正则化过程中,为什么只对权重做正则惩罚,而不对偏置做权重惩罚*

在神经网络中,参数包括每一层仿射变换的权重偏置,我们通常只对权重做惩罚而不对偏置做正则惩罚。

精确拟合偏置所需的数据通常比拟合权重少得多。每个权重会指定两个变量如何相互作用。我们需要在各种条件下观察这两个变量才能良好地拟合权重。而每个偏置仅控制一个单变量。这意味着,我们不对其进行正则化也不会导致太大的方差。另外,正则化偏置参数可能会导致明显的欠拟合

三、L1/L2 范数正则化  在lossfunction 后面加入正则化项==带约束条件

《深度学习》 7.1.1 L2 参数正则化 & 7.1.2 - L1 参数正则化

机器学习中正则化项L1和L2的直观理解 - CSDN博客

L1/L2 范数的作用、异同

L0:向量中非零元素的个数

L1 : + λ||w||    向量中所有元素的绝对数之和

L2 : + λ/2 ||w|| 平方    向量中所有元素平方和的开放

相同点    

  • 限制模型的学习能力——通过限制参数的规模,使模型偏好于权值较小的目标函数,防止过拟合。(奥卡姆剃刀:简单的才是最好的模型)

不同点

  • L1 正则化可以产生更稀疏的权值矩阵,可以用于特征选择,同时一定程度上防止过拟合;L2 正则化主要用于防止模型过拟合
  • L1 正则化适用于特征之间有关联的情况;L2 正则化适用于特征之间没有关联的情况。

为什么 L1 和 L2 正则化可以防止过拟合? 正则化——权重衰减/参数范数惩罚

  • L1 & L2 正则化会使模型偏好于更小的权值。
  • 更小的权值意味着更低的模型复杂度;添加 L1 & L2 正则化相当于为模型添加了某种先验,限制了参数的分布,从而降低了模型的复杂度。
  • 模型的复杂度降低,意味着模型对于噪声与异常点的抗干扰性的能力增强,从而提高模型的泛化能力。——直观来说,就是对训练数据的拟合刚刚好,不会过分拟合训练数据(比如异常点,噪声)——奥卡姆剃刀原理

为什么 L1 正则化可以产生稀疏权值,而 L2 不会?

  • 对目标函数添加范数正则化,训练时相当于在范数的约束下求目标函数 J 的最小值

  • 带有L1 范数(左)和L2 范数(右)约束的二维图示

     

    • 图中 J 与 L1 首次相交的点即是最优解。L1 在和每个坐标轴相交的地方都会有“顶点”出现,多维的情况下,这些顶点会更多;在顶点的位置就会产生稀疏的解。而 J 与这些“顶点”相交的机会远大于其他点,因此 L1 正则化会产生稀疏的解。
    • L2 不会产生“顶点”,因此 J 与 L2 相交的点具有稀疏性的概率就会变得非常小。

四、Bagging 集成方法

  • 集成方法的主要想法是分别训练不同的模型,然后让所有模型表决最终的输出。

    集成方法奏效的原因是不同的模型通常不会在测试集上产生相同的误差。

    集成模型能至少与它的任一成员表现得一样好。如果成员的误差是独立的,集成将显著提升模型的性能。

  • Bagging 是一种集成策略——具体来说,Bagging 涉及构造 k 个不同的数据集

    每个数据集从原始数据集中重复采样构成,和原始数据集具有相同数量的样例——这意味着,每个数据集以高概率缺少一些来自原始数据集的例子,还包含若干重复的例子

    更具体的,如果采样所得的训练集与原始数据集大小相同,那所得数据集中大概有原始数据集 2/3 的实例

  • 集成方法与神经网络

  • 神经网络能找到足够多的不同的解,意味着他们可以从模型平均中受益——即使所有模型都在同一数据集上训练。

    神经网络中随机初始化的差异、批训练数据的随机选择、超参数的差异等非确定性实现往往足以使得集成中的不同成员具有部分独立的误差

五、Dropout 策略

  • 简单来说,Dropout 通过参数共享提供了一种廉价的 Bagging 集成近似—— Dropout 策略相当于集成了包括所有从基础网络除去部分单元后形成的子网络。

  • 通常,隐藏层的采样概率为 0.5输入的采样概率为 0.8;超参数也可以采样,但其采样概率一般为 1

  • 权重比例推断规则

  • 权重比例推断规则的目的是确保在测试时一个单元的期望总输入与在训练时该单元的期望总输入大致相同。
  • 实践时,如果使用 0.5 的采样概率,权重比例规则相当于在训练结束后将权重乘 0.5,然后像平常一样使用模型;等价的,另一种方法是在训练时将单元的状态乘 2。

Dropout 与 Bagging 的不同

  • 在 Bagging 的情况下,所有模型都是独立的;而在 Dropout 的情况下,所有模型共享参数,其中每个模型继承父神经网络参数的不同子集。
  • 在 Bagging 的情况下,每一个模型都会在其相应训练集上训练到收敛。而在 Dropout 的情况下,通常大部分模型都没有显式地被训练;取而代之的是,在单个步骤中我们训练一小部分的子网络,参数共享会使得剩余的子网络也能有好的参数设定。

猜你喜欢

转载自blog.csdn.net/weixin_41108334/article/details/85837624