从上周开始,突然想起了正则化这么个东西,一直都听到加个范数就可以防止过拟合,正则化为什么这么神奇呢?
断断续续地看了一周的相关书籍,博客,决定先来个短暂的总结,以后有了更深入的理解再来补充。

  • 什么是过拟合
  • 第一范数正则化项
    • 定义
    • 模型变化
    • 基于 Occams razor 的解释
  • 第二范数正则项
    • 定义
    • 模型变化
    • condition number
    • 再遇贝叶斯
  • 总结

什么是过拟合

先来一张图:

过拟合指的是模型学习时过于复杂,以至于出现这一模型对已知的数据预测得很好,但是对未知数据预测得很差的现象。换言之,就是模型在训练集上表现的很好(均方差优化到1e-10了),可是在预测集上表现相当糟糕。从上面的图我们可以看到,右侧的图明显是过拟合了,模型在训练集上的优化目标可以优化到很优秀,可是对于接下来要预测的数据来说,并没有什么用。
接下来,我们以 logistic regression 模型作为basis,看下正则化项是怎么通过看似简单的范数来影响我们的模型得到防止过拟合的。

第一范数正则化项

定义:

第一范数定义 L1ni=1|wi| ,简而言之,就是每个参数的绝对值只和。

模型变化:

原来的 LR 模型优化目标是最小化损失函数,即:
L(w)=1NN1(f(xi,w)yi)2
现在我们给它加上一个一范数正则化项,有:
L(w)=1NN1(f(xi,w)yi)2+λ||w||1

基于 Occam’s razor 的解释

为什么加上这么一个项就可以了呢,我们先来引入奥卡姆剃刀原理:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单的模型才是最好的模型,也就是应该选择的模型。从拉格朗日乘子法的计算过程我们可以把后面加的那个一范数正则化项当做一个限制,现在,让我们通过一张图来看下这项是怎么调整我们的模型来降低过拟合的:

图片来自 Prml 的第三章。
上图中的模型是线性回归,有两个特征,要优化的参数分别是w1和w2,左图的正则化是l2,右图是l1。蓝色线就是原始目标函数优化过程中遇到的等高线,一圈代表一个目标函数值,受限条件就是红色边界(就是正则化那部分),二者第一次相交处,就是我们要找的最优化参数。
可以看到 L1 范数的限制区域比较尖,优化目标和限制区域相交的时候更大概率在尖尖的部分,可以这么想,你把一个圆往一个正方形移动,肯定更大概率先撞到正方形的角。
相交点落在坐标轴上表明什么:有0的权值产生!
好了,突然一下子就明朗了, L1 范数会使我们的模型在优化目标函数的过程中偏向模型稀疏(某些特征对应的权重为0),这完全符合剃须刀原理,都一样的优化结果,模型越简单越好。

第二范数正则项

定义:

第一范数定义 L1ni=1(wi)2 ,简而言之,就是个参数的绝对值只和。

模型变化

现在我们给它加上一个一范数正则化项,有:
L(w)=1NN1(f(xi,w)yi)2+λ||w||2

condition number

从 zouxy 的博客里面了解到这个keyword,Wiki 了一下:In the field of numerical analysis,the condition number of a function with respect to an argument measures how much the output value of the function can change for a small change in the input argument. This is used to measure how sensitive a function is to changes or errors in the input,and how much error in the output results from an error in the input.condition number 用来衡量一个模型对输入的敏感程度,当输入变化稍微变化一点点的时候,如果输出变化很大,说明我们的模型对输入的数据很敏感,这并不是一个好的现象,在做 Titanic 的时候,年龄更小的存活率更加高(小孩子可以优先逃生),如果我们的模型对数据比较敏感,10岁和11岁预测出来的存活概率相差特别大,这显然是我们不愿意看到的。因此,我们在优化的过程中希望我们训练出来的模型很稳定,不会因为输入数据的稍微一点点变化而导致预测结果的天翻地覆。

再遇贝叶斯

在上一节中,我们提到模型的稳定性问题,我们希望模型足够稳定,所以我们在优化的过程中加入这么个先验,

我们相当于是给模型参数w 添加了一个协方差为 1α 的零均值高斯分布先验。 对于 α=0 ,也就是不添加正则化约束,则相当于参数的高斯先验分布有着无穷大的协方差,那么这个先验约束则会非常弱,模型为了拟合所有的训练数据,w可以变得任意大不稳定。 α 越大表明先验的高斯协方差越小,w 的波动范围越小,模型越趋于稳定, 相对的variance也越小。

总结

又一次近距离接触到贝叶斯的强大,可以这么说,正则化项对英语模型的先验概率,可以假设复杂不稳定的模型有较小的先验概率,简单稳定的模型有较大的先验概率。

我们常说的正则化防止过拟合是怎么一回事的更多相关文章

  1. Swift思量与初探:我需要学习Swift吗?

    最近,除了N多的基于Swift的服务端开发框架,笔者不由深思,到底该这么评价Swift呢?前两点在Swift的语法和语言特性中已经表现得淋漓尽致:像是尾随闭包,枚举关联值,可选值和强制的类型安全等都是Swift显而易见的优点。综上所述,Swift拥有着被广泛使用以及当做第一学习语言的潜质。Swift在语法层次上会更加高级,并且Swift并没有使用GC机制,因此可以与C更好地相兼容。Swift中的注释与C语言的注释非常相似。

  2. easyui datagrid 大数据加载效率慢,优化解决方法(推荐)

    下面小编就为大家带来一篇easyui datagrid 大数据加载效率慢,优化解决方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. vue 代码压缩优化方式

    这篇文章主要介绍了vue 代码压缩优化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  4. YOLOV5超参数介绍以及优化策略

    yolov5提供了一种超参数优化的方法,这篇文章主要给大家介绍了关于YOLOV5超参数介绍以及优化策略的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或工具有一定的参考学习价值,需要的朋友可以参考下

  5. iOS程序性能优化的技巧

    这篇文章主要介绍了一些优化iOS程序性能的技巧,帮助大家更好的进行ios开发,感兴趣的朋友可以了解下

  6. vue项目打包优化方式(让打包的js文件变小)

    这篇文章主要介绍了vue项目打包优化方式(让打包的js文件变小),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. 一次vue项目优化的实际操作记录

    用vue开发项目上线以后,发现首页加载速度非常慢,如果项目比较大,甚至可能出现10s以上的等待,下面这篇文章主要给大家介绍了关于vue项目优化的相关资料,需要的朋友可以参考下

  8. 怎样优化今日头条IOS安装包

    这篇文章主要介绍了怎样优化今日头条IOS安装包,对IOS优化感兴趣的同学,可以参考下

  9. PHP优化教程之解决嵌套问题

    这篇文章主要给大家介绍了关于PHP优化教程之解决嵌套问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. 基于JavaScript概括浏览器方向的优化

    这篇文章主要介绍了JavaScript浏览器方向的优化,文章围绕主题展开详细的内容介绍具有一定的参考价值,需要的小伙伴可以参考一下

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部