我是谁
从15年接触人工智能领域,迄今算法工作年限已达 6年,以校招生的身份加入某top AI独角兽公司担任算法工程师并获得企业内部最高奖项。于中科院体系工作期间,供职于某领域国内领军人物团队,负责若干部委级项目的算法部分。
辅导多名学生通过面试并供职于百度、平安科技、小米和联通等企业的算法岗位。对于就业指导和面试技巧有着自己的思考和丰富经验。
更多文章猛戳这里
相信很多同学在日常的学习和工作中,都见过一个词——正则化
,它被证明是一种适用范围十分广泛的技巧,很多模型也默认使用它,在近年来发展极为迅速的深度学习和神经网络领域中,也有大量的应用,只不过这时,正则化有一个新的名字,weight decay
。
正则化是regularization的中文翻译,从我的角度来看,这个翻译是极为失败的,没有体现出其含义,正则化实际是个啥,本质就是规则化,即在进行建模之前,对模型进行一个先验的假设,假设模型的参数满足某种分布,将模型的搜索范围从函数全体减小到某个sub domain。如果不满足这个假设,则会产生一定的损失。
常见的正则化方法有两种,ℓ1\ell_1ℓ1正则和ℓ2\ell_2ℓ2正则,结合线性回归的模型,给出正则化影响下的损失函数,他们是模型优化的目标。
-
ℓ1\ell_1ℓ1 套索回归(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| Lossℓ1(X,Y,β)=mse(Xβ,Y)+αj=1∑p∣β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 Lossℓ1(X,Y,β)=mse(Xβ,Y)s.t.j=1∑p∣βj∣<t
-
ℓ2\ell_2ℓ2 岭回归(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 Lossℓ2(X,Y,β)=mse(Xβ,Y)+αj=1∑p∣βj∣2
等价于
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 Lossℓ2(X,Y,β)=mse(Xβ,Y)s.t.j=1∑p∣βj∣2<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(A∣B)=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)
ϵi∼N(0,σ2)
对联合分布取对数有
其中第一项为常数
若记
则最大化上述对数值
即最小化
αβ2+∑iϵi2
\alpha\beta^2 + \sum_i \epsilon_i^2
αβ2+i∑ϵi2
等价于对于Ridge Regression
的定义。即ℓ2\ell_2ℓ2正则或Ridge Regression
等价于给参数的分布添加高斯先验。
同理ℓ1\ell_1ℓ1对应一个满足拉普拉斯分布的先验。
为何使用正则化
可是为啥要用正则化呢?这明显增加了模型的复杂程度啊。
从观察上来看自然界的很多分布实际上趋向于正态分布的,这也是其名称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_1ℓ1和ℓ2\ell_2ℓ2的差别
ℓ1\ell_1ℓ1会产生一个稀疏的解,在一定程度上可以进行特征选择,当然这一部分后续还会提到。而ℓ2\ell_2ℓ2会得到一个范围较为均匀的解。
上图是为了说明左边的ℓ1\ell_1ℓ1为何会产生稀疏解的。
红色的圆,代表的是losslossloss中第一项,即RSSRSSRSS的等值线,其中β^\hat{\beta}β^代表不考虑正则化项时,利用最小二乘法得到的最优解。蓝色的阴影部分分别代∑i∣βi∣<t\sum_i |\beta_i|<t∑i∣βi∣<t和∑i∣βi∣2<t\sum_i |\beta_i|^2 < t∑i∣βi∣2<t。
显然,当红色的等值线第一次和阴影区域相交时,损失函数中的mse部分最小。
当维度变为3时,左边的蓝色部分会从一个菱形变为一个八面体,而右侧的圆形会变成一个球体。和球体相比,八面体有着相对于全体区域较为突出的edge和corner,这里的突出指的向外扩张的程度更高。那么当红色等值线扩大时,会更有可能先碰到这些edge和corner,此时有一个或多个参数为0,得到稀疏的解。
当维度进一步扩大时,这种现象会更加明显。
对于ℓ1\ell_1ℓ1稀疏化的作用,还有另一种解释。可以从优化的角度入手,对对应的损失函数进行求导,Lasso
中正则化项的导数值是1,而Ridge
中对应正则化项的导数值是β\betaβ,当β\betaβ已经很小时,所能提供的梯度值也很小,导致参数值的减小速度很慢,最终会得到一个不那么稀疏的解,而Lasso由于始终有有效的梯度值,可以将某些参数优化到0。
需要说明的,所有的正则化项,无论是ℓ1\ell_1ℓ1还是ℓ2\ell_2ℓ2,都不包含截距项β0\beta_0β0。否则,会push截距项接近0,进一步,有f(0∣β)→0f(0|\beta)\rightarrow0f(0∣β)→0,这是没有道理的。
不同于Lasso
,Ridge
有闭式解。
令其为0,则有
β=(XTX+αI)−1XTY \beta = (X^TX+\alpha I)^{-1}X^TY β=(XTX+αI)−1XTY
除了单独使用ℓ1\ell_1ℓ1或ℓ2\ell_2ℓ2,还可以将二者进行结合得到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=1∑p(δ∣βj∣+(1−δ)βj2)
至此,我们就完成了对于正则化
的介绍,熟读这篇文章并完成其中的数学推导,你会发现你对正则化操作的理解更上一层楼,而且在面试中大概率会遇到类似的题目,因为这些都最能体现数学功底和概念理解。
有问题欢迎及时提问,我辅导过的孩子都说好👍