机器学习笔记:正则化项

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baoqiaoben/article/details/82927056

在机器学习算法中如果只使用经验风险最小化去优化损失函数则很可能造成过拟合的问题,通常我们要在损失函数中加入一些描述模型复杂程度的正则化项,使得模型在拥有较好的预测能力的同时不会因为模型过于复杂而产生过拟合现象,即结构风险最小化
正则化项一般是模型复杂程度的单调递增函数,因此可以使用模型参数向量的范数来计算

一部分内容在数学上的定义更为广泛,大家可以看看相关资料。这里只涉及了一些和机器学习有关的定义,可能不是很严谨


L-p范数

L-p范数定义如下
Lp=(ixip)1p L^{p} = (\sum_{i}{|x_{i}|^{p}})^{\frac{1}{p}}
在机器学习中常见的有L0、L1和L2范数

L0范数

L0范数为参数向量中非零值的个数
x0=iI(xi0) ||x||_{0} = \sum_{i}{I(x_{i} \neq 0)}
其中 I(bool)I(bool)bool 的值为 True 时值为1,为 False 时值为0
因为L0范数没有很好的数学表达形式,所以很少直接优化L0范数

L1范数

L1范数为参数向量中元素绝对值之和
x1=ixi ||x||_{1} = \sum_{i}{|x_{i}|}

L2范数

L2范数为参数向量的欧氏距离
x2=ixi2 ||x||_{2} = \sqrt{\sum_{i}{x_{i}^{2}}}
通常直接使用L2范数的平方值 x22||x||_{2}^{2}


不同正则化项的区别

最常用的应该是使用L1范数的L1正则化和使用L2范数的L2正则化,二者都能对模型起到一定的防止过拟合的效果,但是在对参数的更新上,因为二者的梯度计算方式不同,使得二者的性质也有很大的不同

L1正则化

带L1正则化项的损失函数
Loss=C0+λnw1 Loss = C_{0} + \frac{\lambda}{n} ||w||_{1}
其中 λ\lambda 为正则化参数,对其求导得到
Losswi=C0wi+λnjwjwi=C0wi+λnsign(wi) \frac{\partial Loss}{\partial w_{i}} = \frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} * \frac{\partial \sum_{j}{|w_{j}|}}{\partial w_{i}} \\ = \frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} sign(w_{i})
因此参数更新方程为
wi=:wiη(C0wi+λnsign(wi)) w_{i} =: w_{i} - \eta (\frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} sign(w_{i}))
这使得在梯度下降时,参数 w 的更新直接向着 w 反方向移动,在 w 大于零时减小,在 w 小于零时增大,最后的结果就是有更多的参数会等于零
因此L1正则化项能使得参数等于零,实现参数的稀疏化,也可以视为一种特征的选择,从而达到防止过拟合的作用
L1正则化因为存在绝对值函数,所以并不能保证所有点都可导,因此也有很多额外的理论研究

L2正则化

带L2正则化的损失函数通常使用L2范数的平方
Loss=C0+λ2nw22 Loss = C_{0} + \frac{\lambda}{2 n} ||w||_{2}^{2}
其中分母中的2是为了求导运算的方便而加入的,L2范数有较好的数学性质,也易于求导,对其求导得到
Losswi=C0wi+λ2njw2wi=C0wi+λnwi \frac{\partial Loss}{\partial w_{i}} = \frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{2n} * \frac{\partial \sum_{j}{w^{2}}}{\partial w_{i}} \\ = \frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} w_{i}
因此参数更新方程为
wi=:wiη(C0wi+λnwi)=(1ηλn)wiηC0wi w_{i} =: w_{i} - \eta (\frac{\partial C_{0}}{\partial w_{i}} + \frac{\lambda}{n} w_{i}) \\ = (1 - \frac{\eta \lambda}{n}) w_{i} - \eta \frac{\partial C_{0}}{\partial w_{i}}
与L1正则化最大的不同是参数 w 在更新时是按比例 1ηλn1 - \frac{\eta \lambda}{n} 变化的,所以部分参数会减小,而不是变为0
很容易理解参数变为0可以防止过拟合,那么减小参数是如何减小过拟合的呢?
直观的讲,过拟合就是对局部的错误样本进行拟合,这使得在错误样本附近函数会剧烈的变化
在这里插入图片描述
如果所有参数都很小,那么在输入变化很小的情况下,输出就很难有这么大的变化,在一定程度上就能环节过拟合现象

展开阅读全文

神经网络正则惩罚项

04-26

<p>rn <br />rn</p>rn<p>rn 20周年限定:唐宇迪老师一卡通!<span style="color:#337FE5;">可学唐宇迪博士全部课程</span>,仅售799元(原价10374元),<span style="color:#E53333;">还送漫威授权机械键盘+CSDN 20周年限量版T恤+智能编程助手!</span> rn</p>rn<p>rn 点此链接购买:rn</p>rn<table>rn <tbody>rn <tr>rn <td>rn <a href="https://edu.csdn.net/topic/teachercard?utm_source=jsk20xqy" target="_blank"><span style="color:#337FE5;">https://edu.csdn.net/topic/teachercard?utm_source=jsk20xqy</span></a> rn </td>rn </tr>rn </tbody>rn</table>rn<p>rn <br />rn</p>rn购买课程后,请扫码进入学习群<span style="font-family:&quot;">,获取唐宇迪老师答疑</span> rn<div>rn <img src="https://img-bss.csdn.net/201908070344327835.jpg" alt="" /> rn</div>rn<p>rn <br />rn</p>rn<p>rn Python数据分析与机器学习实战教程,该课程精心挑选真实的数据集为案例,通过python数据科学库numpy,pandas,matplot结合机器学习库scikit-learn完成一些列的机器学习案例。课程以实战为基础,所有课时都结合代码演示如何使用这些python库来完成一个真实的数据案例。算法与项目相结合,选择经典kaggle项目,从数据预处理开始一步步代码实战带大家入门机器学习。学完该课程即可:rn1.掌握Python数据科学工具包,包括矩阵数据处理与可视化展示。rn2.掌握机器学习算法原理推导,从数学上理解算法是怎么来的以及其中涉及的细节。rn3.掌握每一个算法所涉及的参数,详解其中每一步对结果的影响。rn4.熟练使用Python进行建模实战,基于真实数据集展开分析,一步步完成整个建模实战任务。rn</p>

没有更多推荐了,返回首页