模型正则化(减小自由度)是减少过拟合的方法之一。

对多项式模型来说,正则化可以通过减少阶数来实现。

对线性模型来说,正则化往往通过约束模型的权重来实现。

1. Ridge Regression 岭回归,又名 Tikhonov regularization

岭回归是线性回归的正则化版本,即在原来的线性回归的 cost function 中添加正则项(regularization term): α i = 1 n θ i 2 ,以达到在拟合数据的同时,使模型权重尽可能小的目的:

【式-1】岭回归代价函数

J ( θ ) = M S E ( θ ) + α i = 1 n θ i 2


J ( θ ) = 1 m i = 1 m ( θ T x ( i ) y ( i ) ) 2 + α i = 1 n θ i 2

也即
J ( θ ) = ( X θ y ) T ( X θ y ) + α 1 2 w 2 2
  • α = 0 :岭回归退化为线性回归
  • α 很大:所有的权值都趋于0,最终的优化结果为训练集的均值(a flat line)。
  • w = [ 0 , θ 1 ,, θ n ] T

在利用梯度下降法求解时,有:

【式-2】岭回归梯度向量

θ M S E ( θ ) = 2 m X T ( X θ y ) + α w

令【式-2】取0即可得到闭式解

【式-3】岭回归的闭式解

θ ^ = ( X T X + α A ) 1 X T y
  • A R n × n 为单位矩阵,左上角的元素为0,与bias term 对应。

【注意】

  • 偏差项 θ 0 并没有包含在正则项中,即sum的下标从1开始,而不是0.
  • 正则项只在模型训练的过程中加在 cost function 中,一旦模型完成训练,在评估模型 performance 的时候 应该使用没有加正则项的形式。=> 训练时的 cost function 和测试时的 performance measure 可以不相同!cost function 需要考虑易于寻优的问题,而 performance measure 应和最终的目标尽可能相近!
  • 由于对输入特征的Scale非常敏感,在进行岭回归分析前对数据进行归一化(例如利用Scikit-Learn的StandardScaler进行预处理)非常重要。(适用于大多数正则化模型)

2. Lasso Regression

Least Absolute shrinkage and Selection Opperation Regression (Lasso Regression)

Lasso 回归是线性回归的另一种正则化版本,正则项为权值向量的 1 范数:

【式-4】Lasso回归的代价函数

J ( θ ) = M S E ( θ ) + α i = 1 n | θ i |

【注意
- Lasso Regression 的代价函数在 θ i = 0 处是不可导的.
- 解决方法:在 θ i = 0 处用一个次梯度向量(subgradient vector)代替梯度,如式-5

【式-5】Lasso Regression 的次梯度向量

Lasso Regression 有一个很重要的性质是:倾向于完全消除不重要的权重

例如:当 α 取值相对较大时,高阶多项式退化为二次甚至是线性:高阶多项式特征的权重被置为0。

也就是说,Lasso Regression 能够自动进行特征选择,并输出一个稀疏模型(只有少数特征的权重是非零的)。

3. Elastic Net (弹性网络)

弹性网络在岭回归和Lasso回归中进行了折中,通过 混合比(mix ratio) r 进行控制:

  • r = 0 :弹性网络变为岭回归
  • r = 1 :弹性网络便诶Lasso回归

【式-6】弹性网络的代价函数

J ( θ ) = M S E ( θ ) + r α i = 1 n | θ i | + 1 r 2 α i = 1 n θ i 2

一般来说,我们应避免是用朴素线性回归,而应对模型进行一定的正则化处理,那如何选择正则化方法呢?

  • 常用:岭回归
  • 假设只有少部分特征是有用的:弹性网络 或者 Lasso
    • 一般来说,弹性网络的使用更为广泛。因为在 特征维度高于训练样本数 或者 即为特征是强相关 的情况下,Lasso回归的表现不太稳定。

4. Early Stopping

Early Stopping 也是正则化迭代学习算法(如GD)的方法之一。其做法为:在验证错误率达到最小值的时候停止训练。

beatutiful free lunch ——Geoffrey Hinton

正则化线性模型:岭回归 Ridge Regression、Lasso 回归、Elastic Net (弹性网络) 和 Early stopping的更多相关文章

  1. 正则化DropPath/drop_path用法示例(Python实现)

    DropPath 类似于Dropout,不同的是 Drop将深度学习模型中的多分支结构随机"失效",而Dropout是对神经元随机"失效"这篇文章主要给大家介绍了关于正则化DropPath/drop_path用法的相关资料,需要的朋友可以参考下

  2. 机器学习 – 为什么需要在机器学习问题中使用正则化?

    为什么在这种情况下我们更喜欢较小的重量?

  3. 机器学习 – TensorFlow – 将L2正则化和退出引入网络.有什么意义吗?

    如果是这样,怎么办?任何关于此事的参考将是有用的,我还没有找到任何信息.为了防止你有兴趣,我的代码为ANN与L2正则化在下面:好的,经过一些额外的努力,我设法解决它,并将L2和辍学引入我的网络,代码如下.在同一个网络中,我没有辍学略有改善.我仍然不确定是否真的很值得介绍他们两个,L2和辍学的努力,但至少它的作品,并略微提高了结果.

  4. 吴恩达机器学习 - 逻辑回归的正则化

    题目链接:点击打开链接先贴笔记代码:costFunction.m:然后展示下不同λ画出的不同图案

  5. 深度学习中的拟合欠拟合、过拟合、正则化

    我们不论在逻辑回归,线性回归还是在神经网络中应用的都是线性函数。那么如果出现了欠拟合或者过拟合该怎么办呢。这里主要说一下L2正则的原理,看下图:这是我们加了正则化之后的成本函数,可以看我们后面加入了正则化λ的表达式来完善成本函数。而使得整个模型越来越接近于线性化,也就是从下图中的过拟合往欠拟合偏转。

  6. 正则化方法:L1和L2 regularization、数据集扩增、dropout

    有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:trainingdata、validationdata,testingdata。因此,trainingdata的作用是计算梯度更新权重,validationdata如上所述,testingdata则给出一个accuracy以判断网络的好坏。避免过拟合的方法有很多:earlystopping、数据集扩增、正则化包括L1、L2,dropout。L1regularization在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的

  7. 机器学习中正则化项L1和L2的直观理解

    正则化机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作11-norm和22-norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数。L1正则化和L2正则化可以看做是损失函数的惩罚项。L1和L2正则化的直观理解这部分内容将解释为什么L1正则化可以产生稀疏模型,以及为什么L2正则化可以防止过拟合。而正则化前面的系数αα,可以控制LL图形的大小。

  8. 机器学习 – TensorFlow – L2丢失的正则化,如何应用于所有权重,而不仅仅是最后一个?

    我有一个任务,涉及到使用L2丢失的一个隐藏的ReLU层向网络引入泛化。我不知道如何正确引入它,以便所有权重都受到惩罚,不仅仅是输出层的权重。代码网络没有泛化是在底部的帖子。引入L2的明显方法是用这样的代替损失计算:但在这种情况下,它将考虑到输出层权重的值。是否需要或引入惩罚的输出层将以某种方式保持隐藏的权重也在检查?hidden_weights,hidden_biases,out_weights和out_biases都是您正在创建的模型参数。您可以按如下所示对所有这些参数添加L2正则化:

  9. 正则化方法:防止过拟合,提高泛化能力

    λ就是正则项系数,权衡正则项与C0项的比重。当然考虑到后面的导数项,w最终的值可能增大也可能减小。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。

  10. 有关l2,1范数作用的理解--正则化项作用,不同于l1范数矩阵元素绝对值之和的稀疏要求,l21范数还要求行稀疏

    今天和导师讨论问题的时候,说到了l21范数。先看上面l21范数的定义,注意原始矩阵是n行t列的,根号下平方是对列求和,也就是说是在同一行中进行操作的,根号部分就相当于一个l2范数,由此可以看出l21范数实则为矩阵X每一行的l2范数之和。在矩阵稀疏表示模型中,把它作为正则化项有什么作用呢?综上可以这样解释,不同于l1范数的稀疏要求,l21范数还要求行稀疏!

随机推荐

  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个字符,后跟逗号.

返回
顶部