偏差和方差及其解决办法

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

 

当训练集精度为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层的神经网络已经可以表示一切连续函数了

  没必要多加

posted @ 2018-04-25 17:39  shensobaolibin  阅读(1428)  评论(0编辑  收藏  举报