在学习深度学习时,我们经常会听到AIC, BIC 还有l1, lasso 等regularization 的知识。
但是随之产生了一些问题,其中一个就是AIC,BIC和l1,l2的应用场景是不是相同或者有重叠的地方?
首先先让我们思考两个问题
1)实现参数的稀疏有什么好处吗?
一个好处是可以简化模型,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据就只能呵呵了。另一个好处是参数变少可以使整个模型获得更好的可解释性。
2)参数值越小代表模型越简单吗?
是的。为什么参数越小,说明模型越简单呢,这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。
接下来我将对AIC和BIC以及L系列正规化进行一些介绍:
1:AIC和BIC
AIC和BIC是同一个指标,一般用于选择模型,也就是模型的比较优劣
他们的不同之处在于
AIC=-2 ln(L) + 2 k 中文名字:赤池信息量 akaike information criterion
BIC=-2 ln(L) + ln(n)*k 中文名字:贝叶斯信息量 bayesian information criterion
HQ=-2 ln(L) + ln(ln(n))*k hannan-quinn criterion
构造这些统计量所遵循的统计思想是一致的,就是在考虑拟合残差的同时,依自变量个数施加“惩罚”。
但,倘若因此就说它们是同一个指标,恐怕还是有些不妥,毕竟“惩罚”的力度还是不尽相同的。
此外,这些信息量的用途不仅限于选择模型,还能用于选取合适的变换等等。而在那些时候,这些信息量又是另一个模样,也就是说它们有许多变体。因此,它们也被称为AIC准则、BIC准则等等。它们中的每一个体现的都是一系列的标准,而非单独的一个简单式子
[有关赤池信息量的更多信息可以参照一下的博客BIC AIC HQ - s1491695565的专栏 - 博客频道 - CSDN.NET]
2:L0,L1,L2正则化的一些介绍:
在机器学习中,我们听到的L0,L1这样的正则化方法比AIC,BIC要多得多,那么这些正则化的概念是什么呢?
1:正则化概念
L0正则化的值是模型参数中非零参数的个数。
L1正则化表示各个参数绝对值之和。
L2正则化标识各个参数的平方的和的开方值。
1:L0正则化
从我们开头的那两个问题我们可以知道,稀疏的参数可以有效地解决过拟合的问题,因此我们可以用非零参数的个数去做正则化的运算来去解决过拟合的问题.但是因为L0正则化很难求解,是一个NP,所以我们一般都采用L1正则化.
2:L1正则化
因为L1正则化是L0正则化的最优凸近似,并且在比L0更好求解的同时,也可以实现稀疏的效果,因此在实际过程中L1常常用来代替L0,来防止过拟合,L1之所以可以解决过拟合,是因为L1的范数是各个参数的绝对值相加得到的,我们在之前讨论了参数的大小和模型的复杂度是成正比对的,因此越是复杂的模型,其中的L1范数也就越大,最终导致的损失函数也就越大,其实也就说明这个模型不够优秀.
3:L2正则化
L2和L1正则化去解决过拟合的方法基本一样,只是形式的表现上有所区别,L2范数是各参数的平方和再求平方根,我们让L2范数的正则项
最小,可以使W的每个元素都很小,都接近于0。但与L1范数不一样的是,它不会是每个元素为0,而只是接近于0。越小的参数说明模型越简单,越简单的模型越不容易产生过拟合现象。
对着两种进行对比,L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。L1在特征选择时候非常有用,而L2就只是一种规则化而已。在所有特征中只有少数特征起重要作用的情况下,选择L1比较合适,因为它能自动选择特征。而如果所有特征中,大部分特征都能起作用,而且起的作用很平均,那么使用L2也许更合适。
回到我们的文章最先的问题中,我们应该怎么选择AIC和BIC以及L系类正则化问题中,我想在机器学习领域,大家对 L1和 L2 说的很赞,他们就是不同的正则化方式,主要用于参数学习。但是AIC/BIC 虽然也是一种正则化,但他们多用于结构选择。比如贝叶斯网结构学习时,单纯用似然会导致极其稠密的网络,使用这两种信息准则替代似然,会得到比较满意的解。
l1, l2 是在模型训练的过程中通过正则项来控制feature 个数,达到防止模型过拟合的问题。
AIC,BIC是在已经训练出来的模型中选择更好的那个模型时候的判断准则。
他们的共性是都是为了找到更好的模型。 区别是l1,l2在模型训练的过程中通过加约束来达到生成更好的模型的目的。 而AIC,BIC是在已经训练好的不同模型里面筛选出相对最好的那个模型,目的不同,最终的结果也一定有所差距.
好了,这就是这篇文章的所有内容,大家如果有更好的建议和观点也希望和我一起多多讨论