校招算法工程师常见面试题及答案总结01——L1和L2正则化

        2016年自己经历了很多很多,其中很重要的部分就是找工作啦~~~ 
  在这一系列博客中呢,总结一下自己找工作过程中面试算法工程师的经历,主要包括常考的面试题和搜集的答案,希望能对求职者有些启发。 
   PS:面试题是结合自己的面试经历和看到的网上面经总结而来的,而答案有点儿乱,包括文字、截图啊等等,但都是正确的。


一.  L1和L2正则化

       监督机器学习问题无非就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。我们的目标是希望模型的测试误差小,也就是能准确的预测新的样本。所以,我们需要保证模型“简单”的基础上最小化训练误差,这样得到的参数才具有好的泛化性能(也就是测试误差也小),而模型“简单”就是通过规则函数来实现的。另外,规则项的使用还可以约束我们的模型的特性。

        从贝叶斯估计的角度来看,规则化项对应于模型的先验概率。民间还有个说法就是,规则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或惩罚项。

        一般来说,监督学习可以看做最小化下面的目标函数:


         第一项L(yi,f(xi;w)) 衡量我们的模型(分类或者回归)对第i个样本的预测值f(xi;w)和真实的标签yi之前的误差,第二项是惩罚项,是对参数w的规则化函数Ω(w)去约束我们的模型尽量的简单。 
  其实大部分无非就是变换这两项而已。对于第一项Loss函数,如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是Boosting了;如果是log-Loss,那就是Logistic Regression了。

        规则化函数Ω(w)也有很多种选择,一般是模型复杂度的单调递增函数,模型越复杂,规则化值就越大。不同的选择对参数w的约束不同,取得的效果也不同,但我们在论文中常见的都聚集在:零范数、一范数、二范数、迹范数、Frobenius范数和核范数等等。  
   L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。换句话说就是让参数W是稀疏的。大家都用L1范数去实现稀疏,而不是L0范数。 

         L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”。L1范数是L0范数的最优凸近似,容易求解。 

为什么要稀疏??? 
1. 特征选择 
  xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏会学习去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。 
2. 可解释性 
  模型更容易解释,更容易处理。 
  L2的强大功效是改善机器学习里面一个非常重要的问题:过拟合。过拟合就是模型训练时候的误差很小,但在测试的时候误差很大,也就是我们的模型复杂到可以拟合到我们的所有训练样本了,但在实际预测新的样本的时候,糟糕的一塌糊涂。通俗的讲就是应试能力很强,实际应用能力很差,泛化能力差。解决方法:减少特征数量或正则化。 
  L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。

        L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。L2范数不但可以防止过拟合,还可以让我们的优化求解变得稳定和快速。大概保证在梯度下降和有限的迭代次数的情况下得到的点w会是一个比较好的全局最小点w*的近似点。 
  我们将权值参数以L1或者L2的方式放到代价函数里面去。然后模型就会尝试去最小化这些权值参数。而这个最小化就像一个下坡的过程,L1和L2的差别就在于这个“坡”不同:L1就是按绝对值函数的“坡”下降的,而L2是按二次函数的“坡”下降。 
  L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。



你可能感兴趣的:(机器学习,面试题,正则化)