过拟合产生原因:
- 从训练集和测试集的角度来讲就是:模型几乎完全符合符合训练集(只是记住了训练数据,而没有真正学习到数据的特征),甚至将噪声也作为拟合模型的数据,这就导致了在训练集上效果很好,在测试集上效果很差,也就是加入一个新数据的时候这个新数据就不符合这个模型了(这也是所谓的泛化能力很差)
- 从模型的复杂度来讲,就是模型过于复杂,那么这个模型过于复杂有两点含义:
- 模型的参数w过大,相乘的数据只要偏差一点点就会对结果产生很大的影响,也就是抗扰动性不强
- 模型的参数w过多,多到一些高次方的参数不为0,而这些高次方会使得函数更加曲折这样会更加贴合训练集,甚至将噪声考虑了进去,从而产生过拟合
过拟合的解决办法
为什么L1L2正则化可以防止过拟合
为了控制w不要太大(w1,w2,w3.....不要太大),同时使得损失函数达到最小,我们构建一个条件极值问题:
拉格朗日乘数法就是L(w,λ)对w求偏导为零,然后调节λ的值从而解出w
那么我们将L(w,λ)展开可以发现λC这一项对于L(w,λ)对w求偏导然后使之为零这个式子是没有影响的,因此我们可以忽略λC这一项,这就成了我们熟悉的加入正则化项的损失函数的表达式了
-----------------------------------------------------------------------------------------------------
备注:
----------------------------------------------------------------------------------------------------
因此加上正则化项后的损失函数和拉格朗日乘数法的问题等价的,因此加入正则化项后的损失函数可以理解为在控制w不要太大(w1,w2,w3.....不要太大)的前提下,使得损失函数最小,从而控制了模型复杂度,从而解决了过拟合问题。
L1正则化和L2正则化
首先我们理解下等值线的概念
从上图我们可以知道等值线上的Z值是相等的,从损失函数的角度来讲,Z就是损失函数,在等值线上损失函数是相等的
损失函数与正则化项
从上面我们也可以看出λ越小,L不变所得的菱形或则圆就越小,那么w1,w2的值就越小,从而实现了通过调节λ减小w1,w2的作用。当L确定,不同的λ对应则固定的菱形或则圆形,这样找到与等高线的交点就找到了最优的w
- 上图中蓝色的点就是我们要求的w1,w2(这里以二维为例),从上图可以看到L2正则化w1,w2都不会为0,而L1正则化中w1或w2可能为0,这就是所谓的稀疏化,即使w1或w2为0,而w1或w2为0就会使得与之对应的特征和它相乘为0,也就是忽略掉了一个特征(忽略掉的特征不代表不重要,而代表忽略掉的特征和没有忽略掉的特征具有强相关性,两个强相关性的特征我们只保留一个)这也是所谓特征选择。
- 而L2正则化使得w1和w2的偏差不会很大,从而使参数比较均匀(不会有某个参数过大),从而对权值进行了平滑
Dropout
- 解释1:随机去掉一些神经元,这样也会导致某些边的消失,这样边上的权重就会消失,从而减少了模型的参数从而防止过拟合。
- 解释2:不要让所有特征或则比较多的特征都让一个神经元去记录,这样去掉这个神经元模型就不起作用了无法训练了,也不能让一个神经元不记录特征或则比较少的特征,这样只剩下这个神经元的时候这个模型也不起作用也无法训练了,因此最佳策略是特征分配的比较平均,每个神经元的特征在平均的基础上还有一些冗余的特征。
- 解释3:随机失活一些神经元后得到了一个模型,随机失活另外一些神经元后得到了另外一个模型。这样将这几个模型集成起来会比一个模型的鲁棒性更高。
Dropout的问题
注意测试阶段是不能采用随机失活的,因此测试阶段的期望和训练阶段的期望不同,我们采用的策略是在测试阶段加入一个Dropout层,在Dropout中对它进行处理:
这样训练集和测试集的结果就相同了
*是指将(row,col)变成row,col
<p是指H1中小于p的元素设置成1
Dropout加在了激活函数的后面
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix