• 如何解决过拟合


    什么是过拟合

    • 就是模型过于复杂
    • 在训练集合上过度拟合
    • 随着模型越来越复杂,在 test set 上面的 error 会呈现先下降后上升的趋势。
    • 造成在 training set 上的表现比 test set 上面好。

    解决思路

    • 简化模型
      • 减少特征
      • 减小参数
        • 正则化
        • dropout
        • 减小参数的意义:
          • overfitting 意味着每个点都进行拟合,那势必这条曲线在一段区域内,变化显著,即导数值很大。而 weight 可以近似看做某段区域的导数值。
      •   减少训练轮数:early stop
    • 增加数据量
      • “增加眼界”
      • 推荐系统里面就是增加训练集参数
      • CV 里面还可以 data augmentation,旋转跳跃我闭着眼~
    • 改善评估手段
      • cross validation,例如 k-fold,将同一份数据分成 m 组,每个组 k 份,每次用不同的 1/k 份来进行验证,其他数据训练。
      • 疑问:像排序系统,会不会有数据穿越的问题。因为像 prerank 模型,uid 也是一组特征。如果我见过未来某用户的click history里面有过去的 eid,会不会帮助我们预测过去。

    Q: L1, L2 为什么可以防止过拟合

    • 什么是正则化
      • 在 loss 函数后加一个正则化项,weight的绝对值或是平方项。
    • 从定义角度就能看出,minimize loss 的同时也要  minimize weight 大小。
    • 从 gradient descent 角度:
      • L1 正则化,对于 wi > 0,则导数为1 ,wi < 0,则导数为 -1。
      • L2 正则化,导数为 2lamda*wi。
      • 想象成 gradient descent,更新是减去 gradient,那么 wi> 0 则会越来越小。针对 wi < 0,则会越来越大。都在向 0 靠近。
      • 但 L1 比 L2 特殊点在于 w = 0,是函数不可导点。为函数最小值。因此 L1 更容易产生稀疏性。

    dropout 相关

    • 为什么
      • 防止过拟合,即在训练集合上损失比较小,在测试集合上损失比较大。
      • 起到一定的正则化的作用
    • 怎么做
      • 在每个批次的训练过程中,以一定的概率,随机使某些神经元的输出值为0。服从伯努利分布。
      • 由于改变了这个输出神经元的个数,需要对输出进行缩放。1/(1-p)。 
      • rescale 也可以选择在测试的时候做,就每个神经元都乘以 p。在预测的时候会影响之后的每一层,因此主流做法都是用前一种。
      •  

    • 为什么能起到过拟合的作用
      • 针对单个神经元来说,它看不到所有的数据,所以模型结构发生了改变。相当于在N个模型取平均的结果。
      • 针对多个神经元来说,它们不保证同时出现,也就避免某些特征必须在其他特征有的时候才起作用。迫使模型丢失一些特征,也能学到信息。
  • 相关阅读:
    让外部网络访问K8S service的四种方式
    Kubernetes 针对资源紧缺处理方式的配置
    基于Prometheus,Alermanager实现Kubernetes自动伸缩
    ubuntu16.04下python2、python3环境选择与python升级(pip版本切换)
    学习资源集锦
    tensorflow :ckpt模型转换为pytorch : hdf5模型
    SoftMax多分类器原理及代码理解
    玩转树莓派3
    keras_基本网络层结构(2)_卷积层
    keras_基本网络层结构(1)_常用层
  • 原文地址:https://www.cnblogs.com/toonice/p/14433958.html
Copyright © 2020-2023  润新知