继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

中科院算法研究员带你学算法(3)-AI人说的正则化,到底是个啥?

ForeverRuri
关注TA
已关注
手记 7
粉丝 9
获赞 11

我是谁

  从15年接触人工智能领域,迄今算法工作年限已达 6年,以校招生的身份加入某top AI独角兽公司担任算法工程师并获得企业内部最高奖项。于中科院体系工作期间,供职于某领域国内领军人物团队,负责若干部委级项目的算法部分。
  辅导多名学生通过面试并供职于百度、平安科技、小米和联通等企业的算法岗位。对于就业指导和面试技巧有着自己的思考和丰富经验。
   更多文章猛戳这里


  相信很多同学在日常的学习和工作中,都见过一个词——正则化,它被证明是一种适用范围十分广泛的技巧,很多模型也默认使用它,在近年来发展极为迅速的深度学习和神经网络领域中,也有大量的应用,只不过这时,正则化有一个新的名字,weight decay

  正则化是regularization的中文翻译,从我的角度来看,这个翻译是极为失败的,没有体现出其含义,正则化实际是个啥,本质就是规则化,即在进行建模之前,对模型进行一个先验的假设,假设模型的参数满足某种分布,将模型的搜索范围从函数全体减小到某个sub domain。如果不满足这个假设,则会产生一定的损失。

  常见的正则化方法有两种,ℓ1\ell_11正则和ℓ2\ell_22正则,结合线性回归的模型,给出正则化影响下的损失函数,他们是模型优化的目标。

  • ℓ1\ell_11 套索回归(Lasso Regression)

    Lossℓ1(X,Y,β)=mse(Xβ,Y)+α∑j=1p∣βj∣ Loss_{\ell_1}(X, Y, \beta) = mse(X\beta, Y) + \alpha\sum_{j=1}^p|\beta_j| Loss1(X,Y,β)=mse(Xβ,Y)+αj=1pβj

    等价于

    Lossℓ1(X,Y,β)=mse(Xβ,Y)s.t.∑j=1p∣βj∣<t Loss_{\ell_1}(X, Y, \beta) = mse(X\beta, Y) s.t. \sum_{j=1}^p|\beta_j| < t Loss1(X,Y,β)=mse(Xβ,Y)s.t.j=1pβj<t

  • ℓ2\ell_22 岭回归(Ridge Regression)

    Lossℓ2(X,Y,β)=mse(Xβ,Y)+α∑j=1p∣βj∣2 Loss_{\ell_2}(X, Y, \beta) = mse(X\beta, Y) + \alpha\sum_{j=1}^p|\beta_j|^2 Loss2(X,Y,β)=mse(Xβ,Y)+αj=1pβj2

    等价于

    Lossℓ2(X,Y,β)=mse(Xβ,Y)s.t.∑j=1p∣βj∣2<t Loss_{\ell_2}(X, Y, \beta) = mse(X\beta, Y) s.t. \sum_{j=1}^p|\beta_j|^2 < t Loss2(X,Y,β)=mse(Xβ,Y)s.t.j=1pβj2<t

  可以看到,二者都改变了原有的损失函数形式,从而push模型向先验设定的子空间靠近,距离越远,损失越大。至于这二者对应着什么样的子空间,下文会进行具体描述。

  除此之外,由于可能会出现predictor之间的共线性情况,即若
X1=−3X2X_1 = -3 X_2X1=3X2
  则对于输出而言,β1=(1,4)T\beta_1 = (1, 4)^Tβ1=(1,4)Tβ2=(0,1)T\beta_2 = (0, 1)^Tβ2=(0,1)T对应同样的输出XβX\betaXβ,即此时得到的损失已知,两组估计出的参数在mse指标上等价,也即有相同的bias。而显然,β1\beta_1β1对应的模型会有更小的方差,通过引入正则化对参数的尺度进行限制,可以使得模型会对于β2\beta_2β2对应的模型更有偏好。


从正则化到最大后验概率

  前文中我们说了如何从极大似然估计推出模型的最优参数,但是暗含了参数在其域内均匀分布的假设,这就是一个先验,如果参数本身存在一定的分布形式,那么在进行参数估计时,还需要将其自身的分布纳入考量,此时就将极大似然估计(MLE)改为了最大后验概率(MAP)

  为防有的同学不理解什么叫做先验和后验分布,在此举一个简单的例子。


  现在你叫李华,就是高考试卷上那位,大学毕业到了工作单位,第一天就发现有一位同事刘大爷每天游手好闲不怎么工作,你怀疑他是领导的亲戚,但是你没有什么证据,只是根据你的经验认为,这种在单位里不干活却又没人敢管的,一般都是关系户,这个判断刘大爷是关系户就是你在没有证据的前提下,根据经验和领域常识得到的先验,记此判断为A,即你先验的认为P(A)P(A)P(A)数值较大,此时假设为0.70.70.7

  第二天你发现单位有的同事给刘大爷递烟,记此事件为BBB,你更加坚信了之前的判断,即你利用自己观察到的事件修正了之前的判断,将P(A)P(A)P(A)修正为0.90.90.9这种利用观测到的数据对之前的先验进行修正的结果记为后验概率,将P(A)=0.7P(A)=0.7P(A)=0.7修正为P(A∣B)=0.9P(A|B)=0.9P(AB)=0.9


故事说完,回到线性回归中来,采用了正则化之后,原先的P(ϵ)\bold{P}(\epsilon)P(ϵ)被如下联合分布取代

P(ϵ,β)=P(ϵ∣β)P(β) \bold{P}(\epsilon,\beta) = \bold{P}(\epsilon |\beta)\bold{P}(\beta) P(ϵ,β)=P(ϵβ)P(β)

  当β\betaβ满足高斯分布,即
β∼N(0,λ2) \beta \sim \bold{N}(0, \lambda^2) βN(0,λ2)

而每个样本对应的预测误差ϵi\epsilon_iϵi,根据之前的叙述,同样满足均值为0的高斯分布,即
ϵi∼N(0,σ2) \epsilon_i \sim \bold{N}(0, \sigma^2) ϵiN(0,σ2)

  对联合分布取对数有
图片描述

其中第一项为常数
若记
图片描述

则最大化上述对数值
图片描述

即最小化
αβ2+∑iϵi2 \alpha\beta^2 + \sum_i \epsilon_i^2 αβ2+iϵi2

  等价于对于Ridge Regression的定义。即ℓ2\ell_22正则或Ridge Regression等价于给参数的分布添加高斯先验。

  同理ℓ1\ell_11对应一个满足拉普拉斯分布的先验。

为何使用正则化

  可是为啥要用正则化呢?这明显增加了模型的复杂程度啊。

  从观察上来看自然界的很多分布实际上趋向于正态分布的,这也是其名称Normal Distribution的由来,所以使用L2是有道理的。

  很多时候使用正则化可以减少过拟合的情况。采用正则化,会去控制参数的尺度在一个范围内,模型对于微小输入扰动的反馈不会过大,会push模型曲线尽可能平滑,对应一个没那么复杂的模型。小尺度的参数,也意味着模型对此特征的依赖不会过大,增强其稳定性

  如下图所示,为了拟合一个包含样本(−1,−1.5),(0,0),(1,1.5)(-1,-1.5),(0,0), (1,1.5)(1,1.5),(0,0),(1,1.5)的数据集
f(x)=0.5x5+0.2x3+0.8x f(x) = 0.5x^5 + 0.2x^3 + 0.8x f(x)=0.5x5+0.2x3+0.8x

g(x)=x g(x)=x g(x)=x
  都是满足要求的函数,但是从图上可以看出,在xxx取值落在[−0.68,0.68][-0.68, 0.68][0.68,0.68]之外时,f(x)f(x)f(x)的输出发生剧烈的变化,也意味着,此时一个微小的扰动会导致输出发生严重的震荡,使得方差过大,模型稳定性变差。

图片描述

  换个角度来看,参数的大小本质是函数的一阶导数值,也表明了函数的平滑程度,越小的参数值,函数曲线越光滑,函数的高阶导数也有着类似性质。

  而模型对于微小扰动的反馈过大实际就是过拟合的表现。很多时候模型过于强调记住数据中的所有sample,相应的减少了对于那些真正有效特征的注意,产生了没有必要的复杂的模型。

ℓ1\ell_11ℓ2\ell_22的差别

  ℓ1\ell_11会产生一个稀疏的解,在一定程度上可以进行特征选择,当然这一部分后续还会提到。而ℓ2\ell_22会得到一个范围较为均匀的解。

图片描述

  上图是为了说明左边的ℓ1\ell_11为何会产生稀疏解的。

  红色的圆,代表的是losslossloss中第一项,即RSSRSSRSS的等值线,其中β^\hat{\beta}β^代表不考虑正则化项时,利用最小二乘法得到的最优解。蓝色的阴影部分分别代∑i∣βi∣<t\sum_i |\beta_i|<tiβi<t∑i∣βi∣2<t\sum_i |\beta_i|^2 < tiβi2<t

  显然,当红色的等值线第一次和阴影区域相交时,损失函数中的mse部分最小。

  当维度变为3时,左边的蓝色部分会从一个菱形变为一个八面体,而右侧的圆形会变成一个球体。和球体相比,八面体有着相对于全体区域较为突出的edge和corner,这里的突出指的向外扩张的程度更高。那么当红色等值线扩大时,会更有可能先碰到这些edge和corner,此时有一个或多个参数为0,得到稀疏的解
当维度进一步扩大时,这种现象会更加明显。

  对于ℓ1\ell_11稀疏化的作用,还有另一种解释。可以从优化的角度入手,对对应的损失函数进行求导,Lasso中正则化项的导数值是1,而Ridge中对应正则化项的导数值是β\betaβ,当β\betaβ已经很小时,所能提供的梯度值也很小,导致参数值的减小速度很慢,最终会得到一个不那么稀疏的解,而Lasso由于始终有有效的梯度值,可以将某些参数优化到0。

需要说明的,所有的正则化项,无论是ℓ1\ell_11还是ℓ2\ell_22,都不包含截距项β0\beta_0β0。否则,会push截距项接近0,进一步,有f(0∣β)→0f(0|\beta)\rightarrow0f(0β)0,这是没有道理的。

不同于LassoRidge有闭式解。

图片描述
令其为0,则有

β=(XTX+αI)−1XTY \beta = (X^TX+\alpha I)^{-1}X^TY β=(XTX+αI)1XTY

除了单独使用ℓ1\ell_11ℓ2\ell_22,还可以将二者进行结合得到ElasticNet正则项

LossElasticNet(X,Y,β)=mse(Xβ,Y)+α∑j=1p(δ∣βj∣+(1−δ)βj2) Loss_{ElasticNet}(X, Y, \beta) = mse(X\beta, Y) + \alpha\sum_{j=1}^p\big(\delta|\beta_j| + (1 - \delta)\beta^2_j\big) LossElasticNet(X,Y,β)=mse(Xβ,Y)+αj=1p(δβj+(1δ)βj2)

  至此,我们就完成了对于正则化的介绍,熟读这篇文章并完成其中的数学推导,你会发现你对正则化操作的理解更上一层楼,而且在面试中大概率会遇到类似的题目,因为这些都最能体现数学功底和概念理解。

  有问题欢迎及时提问,我辅导过的孩子都说好👍

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP