1. 误差
试想一下,你辛辛苦苦训练了一个自认为超级牛逼的神经网络,但是一到测试集上验证,发现结果并不符合预期,是不是就开始怀疑人生了呢?为什么不对呢?预测结果与真实结果的误差到底是哪里来的呢?
误差的来源无非两部分:bias + variance,所谓Bias,指的是训练出的模型已经非常非常努力了,拼命想拟合真实的模型,但是由于种种原因,真的拟合不完全,比如缺失了部分关键特征(就好像有个人没有了双脚,你却非要让他直立行走一样,太南南南了);而Variance往往指的是在训练集上表现比较好,但是一到测试集就废掉,这个有点像不会变通的机器人,你把它训练的可以走任何直线,但是一旦遇到弯路就会碰壁。从数学上理解,我们可以使用不同的数据集训练模型,得出一系列的f,如果得到的f在相同的预测集上得到的结果都差不多,但是跟真实值还是有一定差距,那这就是Bias大,Variance小;如果得到的结果相差比较大,但都围绕着真实值变化,那就是Bias小,Variance大;如果variance和bias都很大,那哪里来的自信觉得自己训练的模型很牛逼!不同情况如下图示例:
Bias大的主要原因包括:特征不足;模型复杂度较低(试想用一个线性模型模拟一个非线性函数)
Variance大的主要原因包括:模型过于复杂;样本量较小(试想用2个点去拟合一个二次函数,不同的样本得出的结果相差较大,但用20个点就能很好拟合;另一种理解,让样本中包含更多信息,让其覆盖的解空间更大,比如机器人走直路的例子,样本量小的话,可能样本中只有走直路的情况,而没有走弯路的情况)
使用不同的多项式函数预测f,可能得到的误差如下(横座标为多项式幂次):
当模型比较简单时(多样式幂次小于3),主要误差来源于Bias,此时模型欠拟合;当模型比较复杂时(多项式幂次大于4),主要误差来源于Variance,此时模型过拟合。
为了解决过拟合,可以增加正则化
2. 正则化
2.1 正则化
正则化,即在损失函数公式中增加预测参数的范数因子,在减少原Loss的基础上,同时使范数最小,极端情况下,范数最小的情况为所有参数为0,即所谓的“无招胜有招”,当然这是不可能的,但是正则化想要达到的目的也并非全部参数都为0,而是部分参数为0,增加模型的稀疏性。
数学上的解释,正则化相当于对参数增加Laplace先验,理解如下:
引入正则化后的损失函数如下图所示:
假设损失函数为连续可导函数,在任一点处,损失函数存在一阶近似:
假设参数向量的参数个数为2,则损失函数近似函数和正则化项的等高线如下所示:
图中,红色直线代表原Loss的等高线,虚线为范数的等高线,如果想要最小,则的选择应该是,此时函数有稀疏解。
关于正则化为什么可以解决过拟合,理解如下:
正则化后,得到的是稀疏解,有效地降低了原模型的复杂度,可以避免由于模型复杂导致的过拟合。
2.2 正则化
类比正则化,正则化在原Loss中增加了范数,相当于对参数增加了先验分布。
图中,红线代表原的一阶近似等高线,蓝线代表正则化的等高线,可以看出,当两条等高线相切时,取得最小的,此时,模型并非稀疏解。
关于正则化为什么可以解决过拟合,理解如下:
增加正则化后,会使得参数的绝对值尽可能小,可以避免某些参数对于模型的绝对控制作用,增强模型的泛化能力。(个人理解,主要解决由于样本量少,不能覆盖训练和测试所有情况的过拟合)
例如,机器人走路控制模型中,原中走直线的参数起决定控制作用,导致在测试集的弯路测试中预测结果较差,但是增加了正则化后,可以适当减少其控制力,进而增强模型的泛化能力,使得在弯路预测中结果不至于太差。