2.4 过拟合、欠拟合与正则化
在训练时经常会出现过拟合的问题,具体表现是在训练数据上误差渐渐减小,可是在验证集上的误差反而却渐渐增大。详细来讲就是在训练初期,由于训练不足,学习器的拟合能力不够强,偏差比较大。随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据的扰动也能够渐渐被学习器学到。而充分训练后,学习器的拟合能力已非常强,训练数据的轻微扰动都会导致学习器发生显著变化,进而产生过拟合。
2.4.1 过拟合与欠拟合的区别是什么,什么是正则化
欠拟合指模型不能在训练集上获得足够低的训练误差,往往是由于特征维度过少,导致拟合的函数无法满足训练集,导致误差较大。
过拟合指模型的训练误差与测试误差(泛化误差)之间差距过大;具体来讲就是模型在训练集上表现良好,但是在测试集和新数据上表现一般(泛化能力差)。
所有为了减少测试误差的策略统称为正则化方法,不过代价可能是增大训练误差。
2.4.2 解决欠拟合的方法有哪些
降低欠拟合风险主要有以下3类方法。
1)加入新的特征,对于深度学习来讲就可以利用因子分解机、子编码器等。
2)增加模型复杂度,对于线性模型来说可以增加高次项,对于深度学习来讲可以增加网络层数、神经元个数。
3)减小正则化项的系数,从而提高模型的学习能力。
2.4.3 防止过拟合的方法主要有哪些
1.正则化
正则化包含L1正则化、L2正则化、混合L1与L2正则化。
L1正则化目的是减少参数的绝对值总和,定义为:
L2正则化目的是减少参数平方的总和,定义为:
混合L1与L2正则化是希望能够调节L1正则化与L2正则化,定义为:
因为最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0,产生稀疏权重矩阵。
由L1正则化的定义可看出最优的参数值很大概率出现在坐标轴上,这样就会导致某一维的权重为0,产生稀疏权重矩阵,而L2正则化的最优的参数值很小概率出现在坐标轴上,因此每一维的参数都不会是0。
所以由于L1正则化导致参数趋近于0,因此它常用于特征选择设置中。而机器学习中最常用的正则化方法是对权重施加L2范数约束。
L1正则化与L2正则化还有个重要区别是L1正则化可通过假设权重w的先验分布为拉普拉斯分布,由最大后验概率估计导出。L2正则化可通过假设权重w的先验分布为高斯分布,由最大后验概率估计导出。
事实上,后验概率函数是在似然函数的基础上增加了logP(w):
MAP=logP(y|X,w)P(w)=logP(y|X,w)+logP(w)
P(w)的意义是对权重系数w的概率分布的先验假设,在收集到训练样本后,则可根据{X,y}下的后验概率对w进行修正,从而做出对w的更好地估计。
假设权重w的先验分布为0均值的高斯分布,即:
wj~N(0,σ2)
则有:
可以看到,此时logP(w)的效果等价于在代价函数中增加L2正则项。
假设权重w的先验分布是均值为0,参数为a的拉普拉斯分布,即:
则有:
可以看到,此时logP(w)的效果等价于在代价函数中增加L1正则项。
2.Batch Normalization
Batch Normalization是一种深度学习中减少泛化误差的正则化方法,主要作用是通过缓解梯度消失加速网络的训练,防止过拟合,降低了参数初始化的要求。
由于训练数据与测试数据的分布不同会降低模型的泛化能力。因此,应该在开始训练前对所有输入数据做归一化处理。而由于神经网络每个隐层的参数不同,所以下一层的输入发生变化会导致每一批数据的分布也发生改变,从而导致了网络在每次迭代中都会去拟合不同的数据分布,增大了网络的训练难度与过拟合的风险。
Batch Normalization会针对每一批数据在网络的每一层输入之前增加归一化处理,归一代的目的是为了使输入均值为0,标准差为1。这样能将数据限制在统一的分布下。利用公式表示就是针对每层的第k个神经元,计算这一批数据在第k个神经元的均值与标准差,然后将归一化后的值作为该神经元的激活值。
Batch Normalization通过对数据分布进行额外的约束增强模型的泛化能力,同时由于破坏了之前学到的特征分布,从而也降低了模型的拟合能力。所以为了恢复数据的原始分布,Batch Normalization引入了一个重构变换来还原最优的输入数据分布:
其中γ和β为可训练参数。
3.Dropout
Dropout是避免神经网络过拟合的技巧来实现的。Dropout并不会改变损失函数而是修改网络结构本身。通过对神经网络中的神经元做随机删减,从而降低了网络的复杂度。Dropout在训练大型深度神经网络时非常有用。
Dropout具体过程表现为:第一次迭代时随机地删除一部分的隐层单元,保持输入输出层不变,更新神经网络中的权值。第二次迭代也是随机地去删掉一部分,跟上一次删除掉的是不一样的。第三次以及之后都是这样,直至训练结束。
运用dropout相当于训练了非常多个仅有部分隐层单元的神经网络,每个这种神经网络,都能够给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分网络都能够给出正确的分类结果。
4.迭代截断
迭代截断主要是在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。方法就是在训练的过程中,记录到目前为止最好的准确率,当连续n次Epoch没达到最佳准确率时,就可以停止迭代了。n可以根据实际情况取,如100、200等。
5.交叉验证
k-fold交叉验证是把训练样例分成k份,然后进行k次交叉验证过程,每次使用不同的一份样本作为验证集合,其余k-1份样本合并作为训练集合。每个样例会在一次实验中被用作验证样例,在k-1次实验中被用作训练样例。每次实验中,使用上面讨论的交叉验证过程来决定在验证集合上取得最佳性能的迭代次数,并选择恰当的参数。
6.常见面试笔试题
机器学习中L1正则化和L2正则化有什么区别( )。
A.使用L1可以得到平滑的权值,使用L2可以得到平滑的权值
B.使用L1可以得到稀疏的权值,使用L2可以得到平滑的权值
C.使用L1可以得到平滑的权值,使用L2可以得到稀疏的权值
D.使用L1可以得到稀疏的权值,使用L2可以得到稀疏的权值
分析:选(B)。这个问题非常重要,L1正则化偏向于稀疏,即将这些特征对应的权重置为0。L2主要功能是为了防止过拟合,偏向于选更多的参数,至于这其中的原理更是机器学习面试的常考题,详见2.5.3。可以尝试试从几何、凸优化、梯度等多个角度解释为何L1相比L2更容易得到稀疏解。L1正则化通过假设权重w的先验分布为拉普拉斯分布,由最大后验概率估计导出。L2正则化可通过假设权重w的先验分布为高斯分布,由最大后验概率估计导出。