zoukankan      html  css  js  c++  java
  • 正则化

    1.泛化问题


      上一篇文章深入理解泛化提及了泛化问题,即是解决过拟合问题。本篇文章就来看看在机器学习(深度学习)领域通常是怎么解决过拟合。

      神经网络的复杂度由其自由参数(权值和偏置量)的数量决定,而自由参数数量又由网络中的神经元数量决定。对于一个给定的数据集,如果网络结构复杂,则很可能会造成网络过拟合而使泛化能力不足。

      因此,要想获得具有良好泛化能力的神经网络,就是要找到能够解释数据的最简神经网络模型。这就是14世纪逻辑学家奥卡姆的威廉命名的奥卡姆剃刀定律的变形。其核心思想:模型越复杂,出错的可能性越大

    图片1.jpg

      根据奥卡姆剃刀法则:在同样能够解释已知观测现象的假设中,我们应该挑选“最简单”的那一个。对于模型的设计而言,我们应该选择简单、合适的模型解决复杂的问题。

    2.一些方法


      最优解决方法是获取更多的训练数据。模型的训练数据越多,泛化能力自然也越好,但往往获得带标签的数据成本是很高的。

      因此,在得不到足够多数据的情况下,我们通常选择能产生最简神经网络模型的方法,这里可按方法的目标分为两类:限制权重数量、限制权重大小。

    Snipaste_2019-11-15_20-11-12.png

    3.提前终止法


    先回顾深度学习的训练过程:

      当训练有足够的表示能力甚至会过拟合的大模型时,我们经常会观察到,训练误差会随着时间的推移逐渐降低但验证集的误差会再次上升,并且这种现象几乎一定会出现。

      因此,我们考虑使训练在最优容量(在前一篇文章提及)处终止,这种策略为提前终止法。其基本思想:随着训练的进行,网络使用越来越多的权值,直到训练结果达到误差曲面的极小值时所有的权值都被使用。通过增加训练的迭代次数,使得网络的复杂度也在增加。如果训练在达到极小误差值之前终止,那么网络将有效地使用更少的参数,且更不容易过拟合。

      为了有效使用提前终止法,需要知道何时终止训练,这里使用一个方法:交叉验证法 (cross validation)。它先将数据集划分为 k个大小相似的互斥子集, 即
    D=D1∪D2∪⋯∪Dk,Di∪Dj=∅(i≠j) D = D_{1} cup D_{2} cup cdots cup D_{k},D_{i} cup D_{j} = varnothing(i eq j) D=D1D2Dk,DiDj=(i=j)
      每个子集 都尽可能保持数据分布的一致性,即从Di D_{i} Di中通过分层采样得到. 然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行 k次训练和测试,最终返回的是这k个测试结果的均值。(注意:交叉验证法这里的测试集应该指的是验证集?)

    图片2.png

      训练集用来计算梯度或者Jacobian矩阵,并确定每次迭代中网络权值的更新。验证集是一个指示器,用来表明训练数据点之间所形成的网络函数发生了什么,并且验证集上的误差值在整个训练过程中都将被监测。

      当验证集上的误差在几次迭代中均上升时,训练终止,在验证集上产生最小误差的权值被用作最终训练好的网络的权值。

    图片3.png

      上图展示了训练过程中网络在训练集和验证集上的性能指标F(误差平方和的变化)。蓝色曲线为真实,黑色曲线为拟合。

      左边这张图中虽然训练过程中训练集的误差持续下降,但验证集上的误差极小值出现在“a”点处。中间这张图是在“a”点的网络响应,拟合效果很好。右边这张图是“b”点的时的网络响应,此时验证集误差变大,网络过拟合。

    小结

      提前终止法在凭借其有效性和简单性在深度学习中非常流行。它在实际应用中需要说明的问题:

    • 所选验证集(训练集、测试集)必须代表网络后续使用中涉及的所有情形(尽管每个数据集的规模可能不同,但它们所覆盖的输入空间都必须大致相等);
    • 划分数据集时,通常大约70%的数据用作训练,15%用作验证,15%用作测试。关于如何选取验证集的数据规模,可以参见:Gauss-Newton approximation to Bayesian learning
    • 需要使用一个相对较慢的训练方法,在训练过程中,网络将使用越来越多的可用网络参数。如果训练方式过快,很有可能会跳过使得验证集上误差取得较小值的点。

    4.正则化法


    4.1定义

      正则化:修改学习算法,使其降低泛化误差而非训练误差。最新定义:旨在更好实现模型泛化的补充技术,即在测试集上得到更好的表现。(Kukacka et al,2017)

      另一种理解:调节模型允许存储的信息量,或对模型允许存储的信息加以约束。如果一个网络只能记住几个模式,那么优化过程会迫使模型集中学习最重要的模式,这样更可能得到良好的泛化。

    4.2 对正则化理解

      正则化项即惩罚函数,该项对模型向量进行“惩罚“,从而避免单纯最小二乘问题的过拟合问题。或者说正则化参数等价于对参数引入先验分布,使得模型复杂度变小(缩小解空间),对于噪声以及异常值的鲁棒性增强(泛化能力)。

      正则化项本质上是一种先验信息,整个最优化问题从贝叶斯观点来看是一种贝叶斯最大后验估计,其中正则化项对应后验估计中的先验信息,损失函数对应后验估计中的似然函数,两者的乘积即对应贝叶斯最大后验估计的形式,如果你将这个贝叶斯最大后验估计的形式取对数,即进行极大似然估计,你就会发现问题立马变成了损失函数+正则化项的最优化问题形式。

    4.3正则化法分类

    正则化可按策略分为三类

    • 经验正则化:通过工程上的技巧来实现更低的泛化误差方法,比如:提前终止法、模型集成、Dropout等;
    • 参数正则化:直接提供正则化约束,比如:L1/L2正则化法等;
    • 隐式正则化:不直接提供约束,比如:数据有关的操作,包括归一化、数据增强、扰乱标签等。

      发现没,提前终止法也属于正则化的一种!至于为什么,请看后边的分析。

      这里只介绍几种常见的正则化法:L1/L2正则化法、Dropout法以及从贝叶斯角度理解正则化。

    4.3.1 L1/L2正则化法

      L1正则化是指在损失函数后加上权值向量w中各个元素的绝对值之和,即(lasso回归):
    min⁡{1N∑i=1N(yi−ωTxi)2}+C∥ω∥1 minleft{ frac{1}{N}sum_{i = 1}^{N}{(y_{i} - omega^{T}x_{i})^{2}} ight} + Cleft| omega ight|_{1} min{N1i=1N(yiωTxi)2}+Cω1
      L2正则化是指在损失函数后加上权值向量w中各个元素的平方和然后再求平方根,即(岭回归) :
    min⁡{1N∑i=1N(yi−ωTxi)2}+C∥ω∥22 minleft{ frac{1}{N}sum_{i = 1}^{N}{(y_{i} - omega^{T}x_{i})^{2}} ight} + Cleft| omega ight|_{2}^{2} min{N1i=1N(yiωTxi)2}+Cω22

      一般都会在正则化项之前添加一个系数(如C),这个系数需要用户设定,系数越大,正则化作用越明显。

    图片4.jpg

      如上图,参数空间(w1,w2)是一个二维平面,蓝色部分是一个平方损失函数,黄色部分是正则项。蓝色的那个圈,中心的点其实代表的就是损失函数最优的点,而同心圆则代表不同的参数相同的损失,可见随着圆的扩大,损失增大。黄色的区域也类似,周边的红色线表示的是损失相同点的轮廓。

      正则项的红色轮廓线示平方损失的蓝色轮廓线总要相交,才能使得两者加起来的损失最小,两者的所占区域的相对大小,是由权重因子决定的。不管怎么说,它们总有一个交叉点。

      对于L2正则化,它的交点会使得w1或者w2的某一个维度特别小,而L1正则化则会使得w1或者w2的某一个维度等于0,因此获得所谓的稀疏化。

      因此,L1正则化容易得到稀疏解(0比较多)。L2正则化相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。

      从贝叶斯先验的角度看,加入正则化项相当于加入了一种先验,L1范数相当于加入了一个Laplacean先验,L2范数相当于加入了一个Gausssian先验,如图:

    图片5.jpg

      拉普拉斯先验在0的位置具有最高的概率密度,这就说明很多参数会变成0,这就是为什么L1正则化会具有能产生稀疏性的优良性质。

    4.3.2 Dropout法

    待补

    4.3.3 从贝叶斯角度理解正则化

    [从贝叶斯角度理解正则化](https://www.cnblogs.com/sc340/p/11891242.html)

    5.提前终止法与正则化法之间关系


    [提前终止法与正则化法关系](https://www.cnblogs.com/sc340/p/11891700.html)

    参考资料


    1.尹恩·古德费洛.深度学习[M].北京:人民邮电出版社,2017.8

    2.马丁 T·哈根,章毅(译).神经网络设计.第二版.北京:机械出版社,2017.12

    3.神经网络损失函数中的正则化项L1和L2

    4.神经网络的提升方法(2)——正则化

    5.其它

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/sc340/p/11870801.html
Copyright © 2011-2022 走看看