一、过拟合:

过度的拟合了训练数据, 而没有考虑到泛化能力。
模型在训练集上表现很好,但是在交叉验证集上表现先好后差。 这也正是过拟合的特征!
发生过拟合的主要原因可以有以下三点:
(1) 数据有噪声
(2) 训练数据不足, 有限的训练数据
(3) 训练模型过度导致模型非常复杂

防止过拟合:
1、减少特征属性
防止过度训练,使训练集对真实数据有更多的容忍度
2、增大样本数量
增加更多的样本数据,使拟合更精确
3、使用正则化
加入惩罚性(权重),减少测试结果对整体结果的影响
4、引入随机量(集成学习)
使样本多样化

二、正则化:

一、概念

L1范数:
当p=1时,是L1范数,其表示某个向量中所有元素绝对值之和
L2范数:
当p=2时,是L2范数,表示某个向量中所有元素平方和再开根,即欧氏距离
对模型参数w的L1正则项为

Ω(θ)=||w||1=i|wi|

设带L1正则化的损失函数:
J=J0+α||w||1

对模型参数w的L2正则项为
Ω(θ)=α||w||22

即权重向量w中各个元素的平方和,α通常取1/2
设带L2正则化的损失函数:
J=J0+α||w||22

上面提到L1正则化有助于生成一个稀疏权值矩阵,进而可以用于特征选择。为什么要生成一个稀疏矩阵?
稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0. 通常机器学习中特征数量很多,在预测和分类,太多特征无从选择,用稀疏模型表示,只有少数特征对模型有贡献,系数是0的特征没有太大贡献。
对于L2,由于是均方误差,如果误差>1的话,那么平方后,相比L-norm而言,误差就会被放大很多。因此模型会对样例更敏感。

L1 regularization

在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以λ/n(这里不像L2正则化项那样,需要再乘以1/2,具体原因上面已经说过。)

C=C0+λnw|w|

同样先计算导数:
Cw=C0w+λnsgn(w)

上式中sgn(w)表示w的符号。那么权重w的更新规则为:
过拟合、正则化和损失函数
比原始的更新规则多出了ηλsgn(w)n这一项,看wηλsgn(w)n这一项当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

另外,上面没有提到一个问题,当w为0时怎么办?当w等于0时,|W|是不可导的,所以我们只能按照原始的未经正则化的方法去更新w,这就相当于去掉η*λ*sgn(w)/n这一项,所以我们可以规定sgn(0)=0,这样就把w=0的情况也统一进来了。(在编程的时候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)

L2 regularization(权重衰减)

L2正则化就是在代价函数后面再加上一个正则化项:

C=C0+λ2nw||w||2

C0代表原始的代价函数,后面那一项就是L2正则化项,它是这样来的:所有参数w的平方的和,除以训练集的样本大小n。λ就是正则项系数,权衡正则项与C0项的比重。另外还有一个系数1/2,1/2经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘刚好凑整。

L2正则化项是怎么避免overfitting的呢?我们推导一下看看,先求导:

Cw=C0w+λnwCb=C0b

可以发现L2正则化项对b的更新没有影响,但是对于w的更新有影响:
过拟合、正则化和损失函数
在不使用L2正则化时,求导结果中w前系数为1,现在w前面系数为 1−ηλ/n ,因为η、λ、n都是正的,所以 1−ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。

到目前为止,我们只是解释了L2正则化项有让w“变小”的效果,但是还没解释为什么w“变小”可以防止overfitting?一个所谓“显而易见”的解释就是:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。当然,对于很多人(包括我)来说,这个解释似乎不那么显而易见,所以这里添加一个稍微数学一点的解释(引自知乎):

过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
过拟合、正则化和损失函数
而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
下图是推导过程:
过拟合、正则化和损失函数

正则化内容来自https://blog.csdn.net/u012162613/article/details/44261657,很感谢!

三、损失函数:

损失函数由损失项(loss term)和正则项(regularization term)组成:

通常机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这个目标函数优化的过程。在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数。损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的算法使用的损失函数不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。通常表示为如下:

θ=argmin1Ni=1NL(yi,f(xi;θi))+λΦ(θ)

1. 0-1损失函数和绝对值损失函数
0-1损失是指,预测值和目标值不相等为1,否则为0:
L(Y,f(X))={1,Yf(X)0,Y=f(X)

感知机就是用的这种损失函数。但是由于相等这个条件太过严格,因此我们可以放宽条件,即满足 |Y−f(X)|< T时认为相等。

L(Y,f(X))={1,|Yf(X)|T0,|Y=f(X)|<T

绝对值损失函数为:
L(Y,f(X)=|Yf(X)|

2. log对数损失函数
逻辑斯特回归的损失函数就是对数损失函数,在逻辑斯特回归的推导中,它假设样本服从伯努利分布(0-1)分布,然后求得满足该分布的似然函数,接着用对数求极值。逻辑斯特回归并没有求对数似然函数的最大值,而是把极大化当做一个思想,进而推导它的风险函数为最小化的负的似然函数。从损失函数的角度上,它就成为了log损失函数。
log损失函数的标准形式:
L(Y,P(Y|X))=logP(Y|X)

在极大似然估计中,通常都是先取对数再求导,再找极值点,这样做是方便计算极大似然估计。损失函数L(Y,P(Y|X))是指样本X在分类Y的情况下,使概率P(Y|X)达到最大值(利用已知的样本分布,找到最大概率导致这种分布的参数值)
3. 平方损失函数
最小二乘法是线性回归的一种方法,它将回归的问题转化为了凸优化的问题。最小二乘法的基本原则是:最优拟合曲线应该使得所有点到回归直线的距离和最小。通常用欧几里得距离进行距离的度量。平方损失的损失函数为:
L(Y|f(X))=N(Yf(X))2

  1. 指数损失函数
    AdaBoost就是一指数损失函数为损失函数的。
    指数损失函数的标准形式:
    L(Y|f(X))=exp[yf(x)]
  2. Hinge损失函数
    Hinge损失函数和SVM是息息相关的。在线性支持向量机中,最优化问题可以等价于
    minw,biN(1yi(wxi+b))+λ||w2||

这个式子和如下的式子非常像:

1mi=1ml(wxi+byi)+||w||2

其中l(wxi+byi)就是hinge损失函数,后面相当于L2正则项。
Hinge函数的标准形式:

L(y)=max(0,1ty)

y是预测值,在-1到+1之间,t为目标值(-1或+1)。其含义为,y的值在-1和+1之间就可以了,并不鼓励|y|>1,即并不鼓励分类器过度自信,让某个正确分类的样本的距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的分类误差。

相关文章: