正则化引入的思想其实和奥卡姆剃刀原理很相像,奥卡姆剃刀原理:切勿浪费较多东西,去做,用较少的东西,同样可以做好的事情。
经验风险最小化 + 正则化项 = 结构风险最小化
经验风险最小化(ERM),是为了让拟合的误差足够小,即:对训练数据的预测误差很小。
但是,我们学习得到的模型,当然是希望对 未知数据有很好的预测能力(泛化能力),这样才更有意义。
当拟合的误差足够小的时候,可能是模型参数较多,模型比较复杂,此时模型的泛化能力一般。于是,我们增加一个正则化项,它是一个正的常数乘以模型复杂度的函数,aJ(f),a>=0 用于调整ERM与模型复杂度的关系。
结构风险最小化(SRM),相当于是要求拟合的误差足够小, 同时模型不要太复杂(正则化项的极小化),这样得到的模型具有较强的泛化能力。
L1正则化表示各个参数绝对值之和。它会让各个参数的值趋向于0,从而达到减少参数个数的目的。
L2正则化标识各个参数的平方的和的开方值。它不会让参数的值趋向于0,但会改变参数的权重,减小参数的大小,从而简化模型。
1)实现参数的稀疏有什么好处吗?
一个好处是可以简化模型,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据就只能呵呵了。另一个好处是参数变少可以使整个模型获得更好的可解释性。
2)参数值越小代表模型越简单吗?
是的。为什么参数越小,说明模型越简单呢,这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。
L1 regularization
在原始的代价函数后面加上一个L1正则化项。即全部权重w的绝对值的和。乘以λ/n(这里不像L2正则化项那样,须要再乘以1/2。详细原因上面已经说过。)
相同先计算导数:
上式中sgn(w)表示w的符号。那么权重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正则化**************************************
L2 regularization(权重衰减)
L2正则化就是在代价函数后面再加上一个正则化项:
C0代表原始的代价函数,后面那一项就是L2正则化项。它是这样来的:全部參数w的平方的和,除以训练集的样本大小n。
λ就是正则项系数,权衡正则项与C0项的比重。另外另一个系数1/2,1/2经常会看到,主要是为了后面求导的结果方便,后面那一项求导会产生一个2。与1/2相乘刚好凑整。
L2正则化项是怎么避免overfitting的呢?我们推导一下看看,先求导:
能够发现L2正则化项对b的更新没有影响,可是对于w的更新有影响:
在不使用L2正则化时。求导结果中w前系数为1,如今w前面系数为 1−ηλ/n ,由于η、λ、n都是正的。所以 1−ηλ/n小于1,它的效果是减小w。这也就是权重衰减(weight decay)的由来。