正则化

来源:互联网 发布:手机淘宝 查看评价 编辑:程序博客网 时间:2024/05/19 18:15

在上一篇文章中的岭回归模型,我们知道其实岭回归就是在最小二乘法的基础上添加了正则化的优化手段,来防止模型的过拟合,降低模型的权重,在这篇文章中,将详细的介绍一下正则化。

一、方差和偏差

在介绍正则化之前,我们先来了解两个在训练模型的时候,经常用到的两个衡量模型好坏的参数方差和偏差。

1、方差

方差(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(平均值)之间的偏离程度。统计中的方差(样本方差)是每个样本与全体样本值的平均数之差的平方值的平均数。方差是衡量源数据和期望值相差的度量值。

2、偏差

偏差又被称为表现误差,是指个别测定值与测定的平均值之差,它可以用来衡量测定结果的精密度高低。在统计学中,偏差可以用于两个不同的概念,即有偏采样与有偏估计。一个有偏采样是对总样本集非平等采样,而一个有偏估计则是高估或低估要估计的量。偏差不一定有害,尽管一个有偏采样会难以分析或引起不准确甚至错误的推断,但是有偏估计在某些情况下也有一些好的特性,可能会有较小的方差。

上面介绍了方差和偏差的概念,下面讨论一下偏差和方差在机器学习中的应用。在机器学习中,偏差应用于模型对于训练集数据的评估,而方差这是模型对于验证数据(测试数据)的评估。下面用一个图来说明一下


上面的图是用于可视化,一般实际在训练模型的时候,特征都是非常多的,可能无法将模型进行可视化。我们可以通过模型在训练集和验证集上的表现(错误率)来判断,模型的方差和偏差情况。如果,模型在训练集上的错误率为2%,而在验证集上的错误率为20%的话,很明显我们所训练出来的模型是属于过拟合的也就是高方差。当方差和偏差都比较高的情况下,也许你应该考虑换一种方法来训练模型或者更深的神经网络来训练你的模型。

二、正则化

当我们训练好一个模型,首先应该评估,模型在训练集和验证集上的表现,以便我们对模型做出进一步的调整。如果,偏差比较小而方差比较大的情况下,我们一般有两种解决方式,增加训练的数据可以减少方差而有的时候我们无法获取更多的数据的情况下,我们可以通过使用正则化来减少方差防止模型的过拟合问题。通过使用正则化,我们可以训练更深的神经网络而不用过多的去考虑过拟合的问题。

1、L2正则化

损失函数


L2正则化的损失函数


其中α||w||^2 = α*(w1^2 + w2^2....)

下面用一张图片来展示一下,ω的更新过程,第一个是不带正则项的更新过程,第二个是带正则项的更新过程,其中的α准确的说应该是2α,下面简写了。


通过上面公式的对比可以发现,其实加入正则化的损失函数,相对于没加入正则化的损失函数而言,ω减少为原来的

(1-αβ) > 0因为是小于αβ < 1的。所以,L2正则化也被称为权重衰减。下面通过两个程序来让大家感受一下L2正则化的权重衰减。

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import linear_modelif __name__ == "__main__":    #创建一个10*10的希尔伯特矩阵,其元素A(i,j)=1/(i+j-1),i,j分别为其行标和列标    #希尔伯特矩阵是一个共线性的矩阵    x = 1./(np.arange(1,11) + np.arange(0,10)[:,np.newaxis])    #创建一个全为1的10维的矩阵    y = np.ones(10)    #创建模型,没有截距    ridge = linear_model.RidgeCV(alphas=[0.1,1.0,10],fit_intercept=False)    #训练模型    ridge.fit(x,y)    #获取α    print(ridge.alpha_)   #0.1    #获取权重    print(ridge.coef_)    '''    [-0.51403981  0.69295249  0.98202683  1.05770151  1.06060295  1.03505966      0.99826875  0.9576934   0.91676531  0.87708431]    '''    #使用最小二乘法    liner = linear_model.LinearRegression(fit_intercept=False)    liner.fit(x,y)    print(liner.coef_)    '''    [ -9.99828937e+00   9.89853083e+02  -2.37568861e+04   2.40211807e+05      -1.26112598e+06   3.78341267e+06  -6.72611884e+06   7.00070032e+06      -3.93791626e+06   9.23713318e+05]    '''
2、L1正则化



L1正则化权重更新过程


L1正则化相对于L2来说,不是减少为原来的(1-αβ),而是之间减去了αβ,因为L2正则化w是二次方的,而L1正则化的ω是一次方的。经过L1正则化之后的ω可能会变成稀疏矩阵,也就是说可能某一部分的权重会为0。正则化除了L1和L2正则化还有两个结合一起用的,还有dropout正则化。

3、为什么正则化可以防止过拟合

从直观的角度来理解,当我们训练的模型已经是过拟合的,当L2正则化的α参数过大时导致ω为0(实际不会出现这种情况),那么模型就会变成欠拟合状态,我们可以通过调整合适的α参数来使得模型处于合适的状态。在训练模型的时候,我们通常会使用激活函数,假设使用的激活函数是tanh,通过图其实我们可以观察,如果参数是在-1~1之间的话,其实也是可以被看成为线性函数的,也就是说如果ω小到一定程度话,模型就会从过拟合退化成欠拟合的状态,而我们可以通过调整α参数,来寻找合适模型。



原创粉丝点击