深度学习&机器学习基础之1-从误差讲起

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 L1L_1正则化

L1L_1正则化,即在损失函数公式中增加预测参数的L1L_1范数因子,在减少原Loss的基础上,同时使L1L_1范数最小,极端情况下,L1L_1范数最小的情况为所有参数为0,即所谓的“无招胜有招”,当然这是不可能的,但是L1L_1正则化想要达到的目的也并非全部参数都为0,而是部分参数为0,增加模型的稀疏性。
数学上的解释,L1L_1正则化相当于对参数增加Laplace先验,理解如下:
引入L1L_1正则化后的损失函数如下图所示:
L~(w;X,y)=L(w;X,y)+αw1\tilde{L}(w; X, y) = L(w; X, y) + \alpha ||w||_1
假设损失函数L(w;X,y)L(w; X, y)为连续可导函数,在任一点ww^*处,损失函数存在一阶近似:
L(w;X,y)L(w;X,y)+(ww)wL(w;X,y)L(w; X, y) \approx L(w^*; X, y) + (w - w^*) \nabla_wL(w^*; X, y)
假设参数向量ww的参数个数为2,则损失函数L(w;X,y)L(w; X, y)近似函数和L1L_1正则化项的等高线如下所示:
在这里插入图片描述
图中,红色直线代表原Loss的等高线,虚线为L1L_1范数的等高线,如果想要L+L1L + L_1最小,则ww的选择应该是w2=0w_2=0,此时lossloss函数有稀疏解。
关于L1L_1正则化为什么可以解决过拟合,理解如下:
L1L_1正则化后,得到的是稀疏解,有效地降低了原模型的复杂度,可以避免由于模型复杂导致的过拟合。

2.2 L2L_2正则化

类比L1L_1正则化,L2L_2正则化在原Loss中增加了L2L_2范数,相当于对参数增加了GaussGauss先验分布。
在这里插入图片描述
图中,红线代表原lossloss的一阶近似等高线,蓝线代表L2L_2正则化的等高线,可以看出,当两条等高线相切时,取得最小的lossloss,此时,模型并非稀疏解。
关于L2L_2正则化为什么可以解决过拟合,理解如下:
增加L2L_2正则化后,会使得参数的绝对值尽可能小,可以避免某些参数对于模型的绝对控制作用,增强模型的泛化能力。(个人理解,主要解决由于样本量少,不能覆盖训练和测试所有情况的过拟合)
例如,机器人走路控制模型中,原lossloss中走直线的参数起决定控制作用,导致在测试集的弯路测试中预测结果较差,但是增加了L2L_2正则化后,可以适当减少其控制力,进而增强模型的泛化能力,使得在弯路预测中结果不至于太差。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章