本节目的
where does the error come from?(为什么最复杂的模型反而Loss函数的值越大)
error有两个来源
Niantic是研发宝可梦的公司,而我们希望找到的f*越接近f^越好,两者的差别来源于bias和variance。
问题来了,bias和variance分别是什么
注:图中Larger和Smaller是相反的。
bias
如果mu等于期望值,称为unbiased。
variance
决定了散布在期望周围散得有多开。var[m]即为variance,大小取决于取样数,取样越多variance越小。越集中
s平方的期望可算,但它始终比Sigma平方小一点,要想更接近,就要增加样本的数量N。
更通俗地解释bias和variance,bias是瞄准就做的不太好,variance是瞄准后打偏了。(我们希望bias和variance都小)
注意f是训练出来的,f-是许许多多f的期望,f^是真正的进化函数,只有宝可梦的研发者才知道。
我们希望bias小,是f-能够接近f*。
我们希望variance小,是f*们能够集中。
越复杂的Model(函数次数低),其variance值越大。
原因:因为Model越简单越不容易受样本影响,举个极端的例子f(x)=c。
越复杂的Model,其bias值越小(体现在蓝色线和黑色线更接近)。如下图所示,其中左为1次函数,右上为3次函数,右下为5次函数。
原因:较简单Model,也许压根就没把target包含进去,谈何找到。
结论(鱼和熊掌不可得兼)
随着模型变复杂,bias减小(红线),variance增大(绿色线)。综合考虑两者是蓝色线。
欠拟合variance小但bias大,过拟合bias小但variance大,都不好。
如何解决
1. bias大
重定义Model
①增加更多特征作为输入项
②增加模型的复杂度
2. variance大
①训练每个f*的时候,收集更多的数据(缺陷:现实中可能收集不到那么多)
②Regularization(下图自左到右是调整lambda得到的不同程度的平滑曲线)(缺陷:可能导致bias增大)
见上一篇https://blog.csdn.net/weixin_44997802/article/details/109206305
如何权衡 trade-off
方法1-交叉验证:将训练集分成训练集和验证集,先使用训练集训练,得到较好的那个再使用训练集+验证集训练,这样得到的模型,虽然在public testing set上结果未必佳,但却能在private testing set上结果更好(我们想要的就是这个)。
需要注意的是,即使在public testing set上得到的结果不见得多好,也不要回头去找参数调整。(Not recommend)
方法2 将训练集按三种分法分别训练三个模型,取平均err最小的Model。