转 深度学习—过拟合问题

1、过拟合问题

  欠拟合:根本原因是特征维度过少,模型过于简单,导致拟合的函数无法满足训练集,误差较大; 
      解决方法:增加特征维度,增加训练数据; 
  过拟合:根本原因是特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。 过度的拟合了训练数据,而没有考虑到泛化能力。
      解决方法:(1)减少特征维度;(2)正则化,降低参数值。

  减少过拟合总结:过拟合主要是有两个原因造成的:数据太少+模型太复杂 
  (1)获取更多数据 :从数据源头获取更多数据;数据增强(Data Augmentation) 
  (2)使用合适的模型:减少网络的层数、神经元个数等均可以限制网络的拟合能力; 
  (3)dropout ;
  (4)正则化,在训练的时候限制权值变大; 
  (5)限制训练时间;通过评估测试; 
  (6)增加噪声 Noise: 输入时+权重上(高斯初始化) ;

  (7)数据清洗(data ckeaning/Pruning):将错误的label 纠正或者删除错误的数据。

  (8)结合多种模型: Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络;

  产生过拟合根本原因:

  1、 观察值与真实值存在偏差: 
   训练样本的获取,本身就是一种 抽样。抽样操作就会存在误差, 也就是你的训练样本 取值 X, X = x(真值) + u(随机误差),机器学习的 优化函数 多为 min Cost函数,自然就是尽可能的拟合 X,而不是真实的x,所以 就称为过拟合了,实际上是学习到了真实规律以外的 随机误差。举个例子说,你想做人脸识别,人脸里有背景吧,要是你这批人脸背景A都相似,学出来的模型,见到背景A,就会认为是人脸。这个背景A就是你样本引入的误差。
  2、 数据太少,导致无法描述问题的真实分布
   举个例子,投硬币问题 是一个 二项分布,但是如果 你碰巧投了10次,都是正面。那么你根据这个数据学习,是无法揭示这个规律的,根据统计学的大数定律(通俗地说,这个定理就是,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率),当样本多了,这个真实规律是必然出现的。
  为什么说 数据量大了以后 就能防止过拟合,数据量大了,
    问题2,不再存在,
    问题1,在求解的时候因为数据量大了, 求解min Cost函数时候, 模型为了求解到最小值过程中,需要兼顾真实数据拟合 和 随机误差拟合,所有样本的真实分布是相同的(都是人脸),而随机误差会一定程度上抵消(背景),

  (1)数据有噪声。

  我们可以理解地简单些:有噪音时,更复杂的模型会尽量去覆盖噪音点,即对数据过拟合。这样,即使训练误差Ein 很小(接近于零),由于没有描绘真实的数据趋势,Eout 反而会更大。
  即噪音严重误导了我们的假设。还有一种情况,如果数据是由我们不知道的某个非常非常复杂的模型产生的,实际上有限的数据很难去“代表”这个复杂模型曲线。我们采用不恰当的假设去尽量拟合这些数据,效果一样会很差,因为部分数据对于我们不恰当的复杂假设就像是“噪音”,误导我们进行过拟合。

  如下面的例子,假设数据是由50次幂的曲线产生的(下图右边),与其通过10次幂的假设曲线去拟合它们,还不如采用简单的2次幂曲线来描绘它的趋势。

  (2)训练数据不足,有限的训练数据。

  (3)训练模型过度,导致模型非常复杂。

2、正则方法主要有哪些?

(1)L1和L2正则:都是针对模型中参数过大的问题引入惩罚项,依据是奥克姆剃刀原理。在深度学习中,L1会趋向于产生少量的特征,而其他的特征都是0增加网络稀疏性;而L2会选择更多的特征,这些特征都会接近于0,防止过拟合。神经网络需要每一层的神经元尽可能的提取出有意义的特征,而这些特征不能是无源之水,因此L2正则用的多一些。

(2)dropout:深度学习中最常用的正则化技术是dropout,随机的丢掉一些神经元。

(3)数据增强,比如将原始图像翻转平移拉伸,从而是模型的训练数据集增大。数据增强已经是深度学习的必需步骤了,其对于模型的泛化能力增加普遍有效,但是不必做的太过,将原始数据量通过数据增加增加到2倍可以,但增加十倍百倍就只是增加了训练所需的时间,不会继续增加模型的泛化能力了。

(4)提前停止(early stopping):就是让模型在训练的差不多的时候就停下来,比如继续训练带来提升不大或者连续几轮训练都不带来提升的时候,这样可以避免只是改进了训练集的指标但降低了测试集的指标。

(5)批量正则化(BN):就是将卷积神经网络的每层之间加上将神经元的权重调成标准正态分布的正则化层,这样可以让每一层的训练都从相似的起点出发,而对权重进行拉伸,等价于对特征进行拉伸,在输入层等价于数据增强。注意正则化层是不需要训练。

### 深度学习过拟合与欠拟合的概念 在深度学习领域,模型的表现可以分为三种情况:过拟合、欠拟合以及适度拟合。当模型既能在训练集上取得良好效果,在测试集上也能保持稳定性能时,则认为达到了适度拟合的状态。 对于过拟合而言,指的是模型对训练数据的学习过于精细以至于记住了噪声和其他不重要的细节,从而导致其泛化能力下降,在未见过的数据上的预测准确性降低[^1]。而欠拟合则是指模型未能充分捕捉到输入特征与目标变量之间的关系,使得无论是在训练还是验证阶段都表现出较差的成绩[^2]。 ### 判断标准 - **欠拟合**:如果一个模型在训练集和测试集上的误差都很高,那么这个模型可能处于欠拟合状态。 - **过拟合**:相反地,若某模型仅在训练集中有较低错误率而在独立样本(如交叉验证集或测试集)里却显示出较高偏差,则表明该网络发生了过拟合现象。 - **适度拟合**:理想情况下,希望找到一种平衡点使我们的算法既能很好地适应已知实例又能合理推测未知案例。 ### 导致的原因 #### 过拟合原因 - 数据量不足:有限数量的例子不足以支撑复杂函数空间的有效探索; - 特征维度过多:存在大量冗余属性增加了不必要的参数估计难度; - 正则约束不够强:缺乏有效的惩罚机制来抑制权重增长; #### 欠拟合原因 - 学习速率设置不当:过高会跳过全局最小值附近区域,太低又难以收敛至最优解; - 网络结构简单:隐藏层节点数太少无法表达复杂的映射规律; - 初始化方式不合理:某些极端初始值可能会阻碍梯度传播过程正常进行; ### 解决策略 针对上述两种异常状况有不同的处理手段: #### 应对过拟合的方法 ##### L2正则化 通过向损失函数添加一项关于权值平方和的形式,鼓励较小绝对值的系数分布,有助于减少过拟合风险。 ```python weight_decay = 0.01 # 调整此超参控制强度 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=learning_rate, weight_decay=weight_decay) ``` ##### Dropout随机失活 每次迭代过程中按照一定概率丢弃部分神经元连接,迫使其他路径承担更多责任,提高整体鲁棒性和抗干扰性。 ```python dropout_prob = 0.5 # 设置丢失比例 model = nn.Sequential( ..., nn.Dropout(p=dropout_prob), ... ) ``` #### 应对欠拟合的办法 增加模型容量是最直接有效的方式之一,比如加深层数或者拓宽每层宽度以增强表征力。除此之外还可以尝试调整优化器配置文件里的各项参数直至获得满意的结果为止[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值