目录

一、模型评估-bias and variance

二、特征选择

1、过滤式(Relief)

2、包裹式(LVW)

3、嵌入式选择与L1正则

三、L1、L2正则化:

1、添加L1和L2正则化有什么用?

2、为什么L1可以实现稀疏化,L2不可以?

1)数学公式角度

2)几何图像角度

3、那为什么L2正则化可以获得值很小的参数?

4、L2比L1稳定?

 三、神经网络解决过拟合

1、L2正则化

2、dropout

3、early stopping

4、特征归一化


参考链接:

机器学习中正则化项L1和L2的直观理解

L1正则和L2正则的比较分析详解


一、模型评估-bias and variance

        验证集和测试集来自同一分布会更好;

常见情况如下:

训练集误差小(1%),验证集大(15%),为高方差,可能过拟合训练集了;

训练集误差大(15%),验证集大(16%),错误率几乎为0,高偏差,可能欠拟合,识别cat不准确;

训练集误差小(0.5%),验证集小(1%),低方差,低偏差;

训练集误差小(15%),验证集小(30%),高方差,高偏差;过拟合部分数据;

解决方法:

        首先要明确问题 is bias or varianceor both?

先判断是否为高偏差(bias):1)用更大的网络;2)加大训练时间;3)或者使用其他不同的网络结构;

不是高偏差,则判断是否为高方差(variance):1)用更多的训练数据;2)正则化;3)或者使用其他不同的网络结构;

不断优化使error最小;

二、特征选择

        特征选择:就是从特征集合中选择出相关特征子集的过程。

原因:一是用来解决维数灾难,就是说模型过于复杂,将噪音(错误或异常)数据也学习了;

          二是去除不相关的特征降低学习任务的难度;

方法:

【子集搜索与评价】

子集搜索:

前向搜索:将每个特征看做一个子集,先选最优的一个{

},再选最优的两特征子集{

},且优于{

},再选三个的,k+1轮时,若最优的候选集不如上一轮的,则停止生成候选集,选上一轮的为最优子集;

后向搜索:与前向搜索相反,从完整特征集合开始,每次去掉一个无关特征;

双向搜索:前向与后向的结合,增加相关特征的同时减少无关特征。

评价:计算增益。就是说对数据集D,假定 i 类所占比例为 

,假定样本属性为离散型。对于属性子集A,假定根据其取值将 D 划分为 V 个子集,每个子集中的样本在 A上取值相同,然后由信息增益的公式计算其增益,增益越大,表示 特征子集 A 包含的有助于分类的信息越多。

子集搜索和评价相结合,就可以得到特征选择方法。前向搜索和信息熵的结合,与决策树的特征选择方法很相似。

常用的特征选择方法:过滤式(filter)、包裹式(wrapper)和嵌入式(embedding);

1、过滤式(Relief)

Relief 是为二分类设计的。特征选择过程与后续的学习器无关。

思想是:通过设计一个相关统计量才度量特征的重要性,取一个阈值,来取高于阈值的特征,或取相关统计量topK的特征。

具体是:对样本 

 ,先找其同类中的最近邻 

,再找其异类样本中的最近邻 

,对属性 j 计算 diff(


)、 diff(


),两者相等时,diff=0,否则为1,对于连续变量,diff为两者的差值的绝对值 ,diff(


)=|


|;若前者<后者,说明属性 j 对区分同类、异类有帮助,增加其统计量,反之减少。

2、包裹式(LVW)

与学习器有关;所谓包裹式特征选择就是把最终要使用的学习器的性能作为特征子集的评价标准。

LVW(Las Vegas Wrapper)是一个典型的特征选择方法,它在拉斯维加斯方法(Las Vegas Method)框架下使用随机策略来进行子集搜索。

具体:设误差值为无穷,停止条件参数T(次数),当误差变小了,或者误差不变的情况下,新的特征子集数更小,则更新误差和子集,否则,t(t<T)就加 1,直到满足T就结束。

LVW算法描述如下:在特征子集 

 上通过交叉验证估计学习器的误差

python神经网络回归MLP 神经网络回归模型评估_python神经网络回归MLP

3、嵌入式选择与L1正则

过滤式与包裹式的结合,就是在学习器训练过程中自动进行特征选择。

L1 正则可以产生稀疏解。


三、L1、L2正则化:

必备知识:

给定向量


L0范数:并不是一个真正的范数,它主要被用来度量向量中非零元素的个数;

L1范数:向量各个元素绝对值之和;

L2范数:向量各个元素的平方求和然后求平方根;

Lp范数:向量各个元素绝对值的p次方求和然后求 1/p 次方;

范数:响亮的各个元素求绝对值,取最大那个元素的绝对值

L1范数正则化:就是通过向目标函数中添加L1范数,使的学习到的结果满足稀疏化,用于特征选择。

 

1、添加L1和L2正则化有什么用?

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型(很多0),可以用于特征选择;
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合;

2、为什么L1可以实现稀疏化,L2不可以?

参考链接:

为什么L1正则项会产生稀疏解

为什么L1稀疏,L2平滑?

1)数学公式角度

python神经网络回归MLP 神经网络回归模型评估_正则化_02

所以(不失一般性,我们假定:wi等于不为0的某个正的浮点数,学习速率η 为0.5)

L1的权值更新公式为:

python神经网络回归MLP 神经网络回归模型评估_python神经网络回归MLP_03

 也就是说权值每次更新都固定减少一个特定的值(比如0.5),那么经过若干次迭代之后,权值就有可能减少到0。

python神经网络回归MLP 神经网络回归模型评估_特征选择_04

     L2的权值更新公式为:

python神经网络回归MLP 神经网络回归模型评估_python神经网络回归MLP_05

       也就是说权值每次都等于上一次的1/2,那么,虽然权值不断变小,但是因为每次都等于上一次的一半,所以很快会收敛到较小的值但不为0。

python神经网络回归MLP 神经网络回归模型评估_过拟合_06

总结:

L1能产生等于0的权值,即能够剔除某些特征在模型中的作用(特征选择),即产生稀疏的效果。

L2可以得迅速得到比较小的权值,但是难以收敛到0,所以产生的不是稀疏而是平滑的效果。

2)几何图像角度

1、L1正则

python神经网络回归MLP 神经网络回归模型评估_python神经网络回归MLP_07

越大,方形越小,也可以取到很小的值; 

2、L2正则

python神经网络回归MLP 神经网络回归模型评估_正则化_08

        在二维空间表示,左边为L1函数,图示最优解落在坐标轴上,意味着某些参数为0,从而实现稀疏化;右边为L2,函数图像为圆形,与方形相比,没有棱角,在坐标轴相交的可能性大大减小,因此没有稀疏性。

        西瓜书上解释的很清楚:假设 x 仅有两个属性,所以上面两个优化目标解出的  都只有两个分量,即,我们将其作为两个坐标轴,先绘制出不带正则的损失函数的“等值线”,即在()空间中  取值相同的点的直线,再分别绘制出  范数和  范数的等值线,即在()空间中  范数取值相同的点的连线,以及  范数取值相同的点的连线,如下图所示,我们优化目标的解要在目标函数和正则化项之间折中,即它们的等值线的相交处;可以看出,采用L1范数时交点常出现在坐标轴上,即  或  为0,而采用L2范数时交点更易出现在某个象限内,即  或  非0;换句话说,采用L1范数更容易得到稀疏解。

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型(很多0),可以用于特征选择;
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合;

python神经网络回归MLP 神经网络回归模型评估_特征选择_09

3、那为什么L2正则化可以获得值很小的参数?(L2正则为什么可以防止过拟合)

python神经网络回归MLP 神经网络回归模型评估_过拟合_10

因为 

 是不断减小的,达到了权重衰减的效果。

过拟合:可以描述为特征维数很大,但样本很少;也可以说模型太复杂,将噪音数据也一并学习了。

L2正则为什么可以解决过拟合?过拟合就是拟合函数需要顾忌到每一个点,使函数波动很大,函数波动大的地方函数的导数值是非常大的,导致导数值大的原因是系数太大,因为自变量是可大可小的,所以只有系数足够大时,导数才会很大。那么正则化就是通过约束参数的范围使其不要太大,所以它能在一定程度上减小过拟合。

所以解决过拟合的方法:增加训练样本,减少特征(降低模型复杂度)等

4、L2比L1稳定?

绿色的样本点稍作变动,就会影响回归线的斜率,L1变化很大,会影响到其他点的预测值,相比之下,L2比较稳定;

python神经网络回归MLP 神经网络回归模型评估_正则化_11

 

 三、神经网络解决过拟合

1、L2正则化

       可避免权值矩阵过大;

越大,衰减的越快 ;

过大,

时,会减少很多隐藏单元的影响,但依然有很深的深度,易欠拟合;

        加了正则之后,J才能在调幅范围内单调递减;

2、dropout

        类似L2正则,压缩梯度;可以一些层用dropout,一些不用,因为有的隐藏层的单元数较少不需要再dropout了;

       每次迭代,都会随机删减一些神经元,此时J不能再被明确定义,梯度下降的性能很难检查;可以先设keep_prob=1,即不用dropout,确保J函数是单调递减的后再打开dropout;

3、early stopping

        验证集上的error一般下降后,会在某个位置上升,early stopping就是说神经网络在这个迭代过程中已经表现得很好了,可以停止训练了;

        刚开始时, 

 为随机初始值,可能很小,随着迭代次数的增加, 

 增加,early stopping能够得到一个中等大小的 

 值;L2:易搜索,但需要尝试很多

值,计算代价高;early stopping只需要运行一次梯度下降,就可以找出small,mid-size,large的 

 值,代价小;

4、特征归一化

        当特征分布不平衡时,训练得到的 

 数量级差别大,用梯度下降时,选较小的学习因子来避免发生震荡,一旦较大,会震荡,不再但单调下降;

        所以,对特征进行零均值化,方差归一化处理,使特征分布在相似的范围内,代价函数 J 优化起来更简单、快捷,也保证了单调递减;