什么是正则化?

Regularization,中文翻译过来可以称为正则化,或者是规范化。什么是规则?闭卷考试中不能查书,这就是规则,一个限制。同理,在这里,规则化就是说给损失函数加上一些限制,通过这种规则去规范他们再接下来的循环迭代中,不要自我膨胀。


为什么需要正则化?

我们首先回顾一下模型训练的过程,模型参数的训练实际上就是一个不断迭代,寻找到一个方程  来拟合数据集。然而到这里,我们只知道需要去拟合训练集,但拟合的最佳程度我们并没有讨论过。看看下面回归模型的拟合程度,看看能发现什么。

最左边的图中,拟合程度比较低,显然这样的  并不是我们想求的。连训练集的准确率如此低,那么测试集肯定也不高,也就是模型的泛化能力不高。

最右边的图中,拟合程度非常高,甚至每一个点都能通过  表达,这个难道就是我们所渴望得到的  吗?并不是!我们的数据集中无法避免的存在着许多噪声,而在理想情况下,我们希望噪声对我们的模型训练的影响为0。而如果模型将训练集中每一个点都精准描述出来,显然包含了许许多多噪声点,在后续的测试集中得到的准确率也不高。另一方面,太过复杂的  直接导致函数形状并不平滑,而会像图中那样拐来拐去,并不能起到预测的作用,“回归”模型也丧失了其预测能力(也就是模型泛化能力),显然这也不是我们想要的。

中间的图中,展现的是最适合的拟合程度, 不过于复杂或过于简单,并且能够直观的预测函数的走向。虽然它在测试集的中准确列不及图三高,但在测试集中我们得到的准确率是最高的,同时泛化能力也是最强的。

同样,在分类模型中也存在过拟合与欠拟合的情况。

总结一下:

  1. 欠拟合:泛化能力差,训练样本集准确率低,测试样本集准确率低。
  2. 过拟合:泛化能力差,训练样本集准确率高,测试样本集准确率低。
  3. 合适的拟合程度:泛化能力强,训练样本集准确率高,测试样本集准确率高

欠拟合原因:

  1. 训练样本数量少
  2. 模型复杂度过低
  3. 参数还未收敛就停止循环

欠拟合的解决办法:

  1. 增加样本数量
  2. 增加模型参数,提高模型复杂度
  3. 增加循环次数
  4. 查看是否是学习率过高导致模型无法收敛

过拟合原因:

  1. 数据噪声太大
  2. 特征太多
  3. 模型太复杂

过拟合的解决办法:

  1. 清洗数据
  2. 减少模型参数,降低模型复杂度
  3. 增加惩罚因子(正则化),保留所有的特征,但是减少参数的大小(magnitude)。

通过分析,我们可以看出,正则化是用来防止模型过拟合而采取的手段。我们对代价函数增加一个限制条件,限制其较高次的参数大小不能过大。还是使用回归模型举例子:

正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于0的话,我们就能很好的拟合了,因此,我们对代价函数  进行修改如下:

我们在方程中增加了两个限制条件,分别对  和  进行限制,不能让他们过高。很直观的看出,要想使  最小化,不仅仅需要  足够拟合 ,同时还需要减少  和 

一方面要使得L(w)的取值最小,必然w的绝对值会取到很大,这样模型才能完美拟合训练样本点;另一方面,当w的绝对值很大时,||w||的值又会变得很大,因此为了权衡,只有使得w取值适当,才能保证值取到最优。这样得到的拟合曲线平滑很多,因此具有泛化能力。这就是正则化存在的意义,能帮助我们在训练模型的过程中,防止模型过拟合


怎么对模型做正则化?

我们对前面的讨论进行推广。假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。于是,我们分析 线性回归模型 的代价函数和 Logistic回归模型 的代价函数如何修改。

线性回归:

则修改梯度下降过程:

逻辑回归:

则修改对应梯度下降过程:

其中  称为正则化参数(Regularization Parameter),当参数越大,则对其惩罚(规范)的力度也就越大,越能起到规范的作用。但是要注意, 并不是越大越好的!如果选择的正则化参数  大,则会把所有的参数都最小化了,导致模型变成 ,造成欠拟合。因此,我们对  的选取需要合理即可。


不同的正则项?

可能会有小伙伴提出疑问了,为什么正则项带了个平方呢?那我们来分析一下不同次方下的正则项。我们以一次和二次为例,正则项的图分别是一个矩形和圆形,如图:

那这有什么关系呢?我们把代价函数(包括正则项)整个画出来就知道了。

可以直观的理解为,我们最小化损失函数就是求蓝圈+红圈的和的最小值,而这个值通在很多情况下是两个曲面相交的地方。

可以看到二次正则项的优势,处处可导,方便计算

L2 正则化

式中, 为  的2范式,平方是为了求解的方便。

L2正则化对于绝对值较大的权重予以很重的惩罚,对于绝对值很小的权重予以非常非常小的惩罚,当权重绝对值趋近于0时,基本不惩罚。这个性质与L2的平方项有关系,即越大的数,其平方越大,越小的数,比如小于1的数,其平方反而越小。

同时,他有另一个优势,在使用正规方程时,解析式中的逆始终存在的。

L1正则化

随着海量数据处理的兴起,工程上对于模型稀疏化的要求也随之出现了。这时候,L2正则化已经不能满足需求,因为它只是使得模型的参数值趋近于0,而不是等于0,这样就无法丢掉模型里的任何一个特征,因此无法做到稀疏化。这时,L1的作用随之显现。L1正则化的作用是使得大部分模型参数的值等于0,这样一来,当模型训练好后,这些权值等于0的特征可以省去,从而达到稀疏化的目的,也节省了存储的空间,因为在计算时,值为0的特征都可以不用存储了。

式中, 为  的1范式。

L1正则化对于所有权重予以同样的惩罚,也就是说,不管模型参数的大小,对它们都施加同等力度的惩罚,因此,较小的权重在被惩罚后,就会变成0。因此,在经过L1正则化后,大量模型参数的值变为0或趋近于0,当然也有一部分参数的值飙得很高。由于大量模型参数变为0,这些参数就不会出现在最终的模型中,因此达到了稀疏化的作用,这也说明了L1正则化自带特征选择的功能,这一点十分有用。

L1正则化和L2正则化在实际应用中的比较

L1在确实需要稀疏化模型的场景下,才能发挥很好的作用并且效果远胜于L2。在模型特征个数远大于训练样本数的情况下,如果我们事先知道模型的特征中只有少量相关特征(即参数值不为0),并且相关特征的个数少于训练样本数,那么L1的效果远好于L2。然而,需要注意的是,当相关特征数远大于训练样本数时,无论是L1还是L2,都无法取得很好的效果

一篇文章完全搞懂正则化(Regularization)相关推荐

  1. 一篇文章彻底搞懂Android事件分发机制

    本文讲的是一篇文章彻底搞懂Android事件分发机制,在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解 ...

  2. 一篇文章全搞懂!B2B

    作为一名刚入行不久的电商新人,时常被各种专业名词搞的晕头转向,公司开会或者行业交流时候没听懂也只能假装呵呵一笑(话说这种呵呵一笑是什么态度!摔).痛心疾首,小编决定总结近期所有我听过的没听过的互联网专 ...

  3. 目标检测扩(六)一篇文章彻底搞懂目标检测算法中的评估指标计算方法(IoU(交并比)、Precision(精确度)、Recall(召回率)、AP(平均正确率)、mAP(平均类别AP) )

    ​ 基本在目标检测算法中会碰到一些评估指标.常见的指标参数有:IoU(交并比).Precision(精确度).Recall(召回率).AP(平均正确率).mAP(平均类别AP)等.这些评估指标是在评估 ...

  4. mysql snowflake_一篇文章彻底搞懂snowflake算法及百度美团的最佳实践

    写在前面的话 一提到分布式ID自动生成方案,大家肯定都非常熟悉,并且立即能说出自家拿手的几种方案,确实,ID作为系统数据的重要标识,重要性不言而喻,而各种方案也是历经多代优化,请允许我用这个视角对分布 ...

  5. 八、一篇文章快速搞懂MySQL 常见的数据类型(整型、小数、字符型、日期型详解)

    常见的数据类型 1.数值型: 整型 小数: 定点数 浮点数 2.字符型: 较短的文本:char.varchar 较长的文本:text.blob(较长的二进制数据) 3.日期型: 一.整型 1)分类: ...

  6. 一篇文章彻底搞懂“分布式事务”

    在如今的分布式盛行的时代,分布式事务永远都是绕不开的一个话题,今天就谈谈分布式事务相关的一致性与实战解决方案. 01 为什么需要分布式事务 由于近十年互联网的发展非常迅速,很多网站的访问越来越大,集中 ...

  7. 一篇文章快速搞懂C++生成随机数

    使用rand()函数 头文件<stdlib.h> 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间. ...

  8. 一篇文章快速搞懂排序算法(含实现源码)

    十大排序算法函数声明 时间复杂度表 主函数 #include<iostream> #include<cstdlib> #include<srand> using n ...

  9. 一篇文章快速搞懂十大排序算法(C++实现源码)

    十大排序算法函数声明 时间复杂度表 主函数 #include<iostream> using namespace std;void BubbleSort(int length, int a ...

  10. cookie是什么?有什么用?cookie详解,一篇文章彻底搞懂cookie

    Cookie是什么 cookie的中文翻译是曲奇,小甜饼的意思.cookie其实就是一些数据信息,类型为"小型文本文件",存储于电脑上的文本文件中. Cookie有什么用 我们想象 ...

最新文章

  1. 软件开发中需要专职的 QA 吗?
  2. 一张纸厚度是多少毫米_大洼20毫米水泥纤维板多少钱一张追求至善
  3. 学会这 6 招,网页搜索一秒就能搜到你想要的【老司机必备神技】
  4. linux远程登录提示WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
  5. xampps mysql无法启动
  6. iOS 开发比较实用的框架总结(上)
  7. python结果保存到变量_python中import this 编程之禅的结果我想用一个变量保存,如何做...
  8. java定时任务Quartz整理
  9. 虚拟机服务器ip端口映射,VMware虚拟机配置端口转发(端口映射),实现远程访问【转】...
  10. 手机也可以接USB摄像头了
  11. 深度学习教程(12) | CNN应用:目标检测(吴恩达·完整版)
  12. 杭州电子科技大学ACM-1094
  13. php 查询每个一号,SPOT系列卫星参数一览表 - 高分一号、高分二号卫星查询遥感数据购买 - 新闻资讯 - 遥感卫星影像数据查询中心-北京揽宇方圆-购买高分卫星影像...
  14. 永久免费!吴恩达刚公布的深度学习课程上线网易云课堂
  15. 【计算机毕业设计】018母婴商城系统
  16. clickHouse副本和同步机制
  17. 分享一套响应式自适应公司网站官网源码,带文字搭建教程
  18. 电子学报、计算机研究与发展中文期刊投稿过程记录
  19. 生活随记 - NBA总决赛第5场 球迷有感
  20. 荣耀手表es鸿蒙,荣耀手表ES评测:方形大屏+轻盈机身,599元腕上健康全能管家...

热门文章

  1. 使用spark-md5获取文件md5值
  2. C++:hex、oct、dec使用
  3. 计算机图形学中点画线法
  4. echarts柱形图x轴y轴的字体大小颜色调整
  5. 计算机内部网络连接,在电脑中新建专用网络连接的操作方法【图文教程】
  6. 输入水仙花数的位数 c语言,水仙花数,水仙花数c语言
  7. 我终于有自己的专业技术博客了
  8. 梯形图如何实现c语言 f语句,如何注释梯形图
  9. php控制梯形图,如何画梯形图? plc梯形图怎么画?如何画plc梯形图
  10. javax.mail 发送163邮件