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.其它

  • 相关阅读:
    单片机GPIO口模拟串口的方法
    arduino~snprintf
    #7号板问题
    stm8s + si4463 寄存器配置
    linux之cut用法
    74HC123D 引脚介绍及应用
    无线板卡接口定义
    iio adc转换应用编写
    m72 gprs模块的应用编写
    dac7562 应用层实现dac
  • 原文地址:https://www.cnblogs.com/sc340/p/11870801.html
Copyright © 2011-2022 走看看