一、引入原因

二、正则化的常用方法

1、增大训练集

训练的数据集规模越大,越不容易发生过拟合,但是这点往往受限于实际要求,所以有的时候很难实现。

2、L1 & L2范数

1、范数的数学定义

假设 x 是一个向量,它的神经网络中正则层的参数含义 l1正则化实现_迭代 范数定义:

神经网络中正则层的参数含义 l1正则化实现_神经网络中正则层的参数含义_02

2、实现原理

在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。在加了正则化项之后的目标函数为:

神经网络中正则层的参数含义 l1正则化实现_正则化_03


式中, 神经网络中正则层的参数含义 l1正则化实现_神经网络中正则层的参数含义_04是一个常数, m 为样本个数,神经网络中正则层的参数含义 l1正则化实现_过拟合_05 是一个超参数,用于控制正则化程度,而神经网络中正则层的参数含义 l1正则化实现_迭代_06就是前面所说的范数。

神经网络中正则层的参数含义 l1正则化实现_神经网络中正则层的参数含义_07


从上式可以看出,神经网络中正则层的参数含义 l1正则化实现_神经网络中正则层的参数含义_08正则化通过让原目标函数加上了所有特征系数绝对值的和来实现正则化,而神经网络中正则层的参数含义 l1正则化实现_过拟合_09 正则化通过让原目标函数加上了所有特征系数的平方和来实现正则化。

3、L1 & L2范数的区别

两者都是通过加上一个和项来限制参数大小,却有不同的效果:神经网络中正则层的参数含义 l1正则化实现_神经网络中正则层的参数含义_08 正则化更适用于特征选择,而神经网络中正则层的参数含义 l1正则化实现_过拟合_09正则化更适用于防止模型过拟合。

为了更好的说明其区别,我们从梯度下降的角度来进行分析:

假设数据只有两个特征即 神经网络中正则层的参数含义 l1正则化实现_正则化_12,神经网络中正则层的参数含义 l1正则化实现_迭代_13,

(1)对L1范数而言:

神经网络中正则层的参数含义 l1正则化实现_机器学习_14


神经网络中正则层的参数含义 l1正则化实现_机器学习_15为正数,则每次更新会减去一个常数;若神经网络中正则层的参数含义 l1正则化实现_机器学习_15为负数,则每次更新会加上一个常数,所以很容易产生特征的系数为 0 的情况,特征系数为 0 表示该特征不会对结果有任何影响,因此 正则化会让特征变得稀疏,起到特征选择的作用。(2)对L2范数而言:

神经网络中正则层的参数含义 l1正则化实现_迭代_17


从上式可以看出每次更新时,会对特征系数进行一个比例的缩放而不是像神经网络中正则层的参数含义 l1正则化实现_神经网络中正则层的参数含义_08正则化减去一个固定值,这会让系数趋向变小而不会变为 0因此神经网络中正则层的参数含义 l1正则化实现_迭代_19正则化会让模型变得更简单,防止过拟合,而不会起到特征选择的作用。

3、dropout

dropout 是一种计算方便但功能强大的正则化方法,适用于最近很火的神经网络。他的基本步骤是在每一次的迭代中,随机删除一部分节点,只训练剩下的节点。每次迭代都会随机删除,每次迭代删除的节点也都不一样,相当于每次迭代训练的都是不一样的网络,通过这样的方式降低节点之间的关联性以及模型的复杂度,从而达到正则化的效果。这点上有点类似 bagging,但是远比 bagging 来的简单。

直观理解:

神经网络中正则层的参数含义 l1正则化实现_正则化_20


说dropout简单是因为你只需要设置一个超参数 keep_prob,这个参数的意义是每层节点随机保留的比例,比如将 keep_prob 设置为 0.7,那么就会随机30%的节点消失,消失这个动作其实很简单,只是将这一层的参数矩阵与根据 keep_prob 生成的 {0, 1} 矩阵做 逐点乘积,当然前向传播与反向传播都需要做以上的操作。

dropout的缺点
需要将训练集分为不同子集输入每一次的迭代,这就需要较大的训练集,所以在训练集较小的情况下,dropout的效果可能并不好。我们上面也说过,增大数据集是最好的正则化方式,所以在增大数据集的情况下,使用 dropout 需要使用的计算代价可能会比他带来正则化效果更高,这需要我们在实际使用场景中做取舍。

参考:
https://www.jianshu.com/p/569efedf6985