zoukankan      html  css  js  c++  java
  • 偏差和方差及其解决办法

    训练神经网络时,我们会有一个训练集,一个测试集,人在这件事上几乎是不会出错的

    当训练集精度为99%,而测试集精度为90%时

    这时就是出现了过拟合,我们称他为方差较高

    当训练集精度为85%,测试集精度也为85%时

    这就是拟合的不好,我们称他为高偏差

    为了之后表达方便我称训练集精度为a,测试集精度为b

    高方差的解决办法:

      出现高方差时一般是,a,b先一起上升,然后到某一点之后 a继续上升b开始下降

       

      Early Stopping

      我常用的就是训练时,每训练100次输出一次训练集精度,每1k次保存一次模型

      一旦发现b开始下降了,就停止训练

      这里定义下什么叫做b开始下降

      不是说连续300次训练b都在下降就叫b开始下降了

      最好是连续1000 - 2000次训练b都在下降才能叫做b开始下降了

      因为b是会有波动的,偶尔几次下降是正常行为

      另外的解决办法是正则化

      因为神经网络过拟合的根本原因就是网络设计的过于复杂了

      正则化就是一种把网络简化的方法

      drop out 正则化:

        在训练神经网络时,按照一定的概率去更新节点

        其实网络会过拟合

        每一次学习时,这次让一部分节点学习,下次让另一部分节点学习

        这样每次学习就能学到不同的过拟合特征

        最后再用的时候,过拟合相互抵消,就解决了过拟合的问题

      L2正则化:

        将loss改为loss = loss + (a/2n)*(w1 * w1 + w2 * w2 + ....... + wm * wm)

        a为自己指定的系数,n为样本个数,w就是我们训练时的w

        这样的话,在做反向传播的时候dwi = dwi + (a/n) * wi

        wi = wi - learning_rate * dwi

        那么那个多出来的东西会使无论此时的wi是什么,我们都会试图让他变得更小

        让w趋近于0,就会弱化这个神经元对结果的影响,达到了减小神经网络复杂度的效果

    高偏差的解决办法:

       高偏差没什么好说的,就是神经网络太简单了呗

      这时候要么继续训练,要么加数据,要么就加节点,加层数

      最好不要加层数,因为3层的神经网络已经可以表示一切连续函数了

      没必要多加

  • 相关阅读:
    非常强大的table根据表头排序,点击表头名称,对其内容排序
    处理字符集中的算式问题
    java基础复习:final,static,以及String类
    try,catch,finally含return时的执行顺序及丢失的伪例
    系统 触发器
    某个表按某个列分组且按另一个列排序
    XML读取
    硬软件交互原理
    TcpClient 读写流
    C# Socket的TCP通讯 异步 (2015-11-07 10:07:19)转载▼
  • 原文地址:https://www.cnblogs.com/shensobaolibin/p/8946201.html
Copyright © 2011-2022 走看看