深度学习-L2正则化

  • Post author:
  • Post category:其他


神经网络可能会存在过拟合,那么建议你首先对模型进行正则化处理。虽然使用更多的训练数据是肯定可以解决过拟合问题的,但问题是我们无法获得更多训练数据,即使能获取也太贵了。所以正则化是首选方案。

正则化方法有很多。L2正则化就是其中一种常见的方法。它的实现主要分为两步。第一步,就是在成本函数后面加点“尾巴”;第二步就是在计算偏导数的时候加点“尾巴”。我们以逻辑回归为例来实现L2正则化,求成本函数J的最小值,




J

=

1

m

i

=

0

m

L

(

y

i

,

y

i

)

J=\frac{1}{m}\sum_{i=0}^mL(y'^i,y^i)






J




=




















m
















1




































i


=


0









m




















L


(



y














i










,





y










i









)




下式是加了L2正则化尾巴的成本函数。




J

=

1

m

i

=

0

m

L

(

y

i

,

y

i

)

+

λ

2

m

w

2

J=\frac{1}{m}\sum_{i=0}^mL(y'^i,y^i)+\frac{\lambda}{2m}||w||^2






J




=




















m
















1




































i


=


0









m




















L


(



y














i










,





y










i









)




+




















2


m
















λ



























w

















2











它是我们定义的成本函数,参数包含一些训练数据和不同数据中个体预测的损失,w和b是逻辑回归的两个参数,w是一个多维度参数矢量,b是一个实数,λ是一个超参数,被称为正则化参数,m是样本数量。

上面所说的是单神经元网络的正则化,多神经元网络的正则化也是类似的。




J

=

1

m

i

=

0

m

L

(

y

i

,

y

i

)

+

λ

2

m

l

=

0

L

w

2

J=\frac{1}{m}\sum_{i=0}^mL(y'^i,y^i)+\frac{\lambda}{2m}\sum_{l=0}^L||w||^2






J




=




















m
















1




































i


=


0









m




















L


(



y














i










,





y










i









)




+




















2


m
















λ




































l


=


0









L


























w

















2











与单神经元网络不同的是多了一个累加操作,就是把每层的结果再累加起来。通俗来说就是把神经元网络每层的每个权重的平方再统统累加起来(单神经元网络只有一层)。这里的W已经从一个向量变成了矩阵,但本质是没有变的,还是简单地将所有元素的平方累加起来,即所有元素的平方和。

在成本函数后面加了“尾巴”后,第二步就是在计算偏导数的时候加“尾巴”了。如下所示。




d

W

l

=

1

m

d

Z

l

d

A

l

1

.

T

+

λ

m

W

l

dW^l=\frac{1}{m}dZ^l * dA^{l-1}.T+\frac{\lambda}{m}W^l






d



W










l











=




















m
















1





















d



Z










l




















d



A











l





1










.


T




+




















m
















λ






















W










l














W

l

=

W

l

α

d

W

l

=

(

1

α

λ

m

)

W

l

1

m

d

Z

l

d

A

l

1

.

T

W^l=W^l-\alpha *dW^l=(1-\frac{\alpha\lambda}{m})W^l -\frac{1}{m}dZ^l * dA^{l-1}.T







W










l











=









W










l




















α













d



W










l











=








(


1

























m
















α


λ





















)



W










l
































m
















1





















d



Z










l




















d



A











l





1










.


T




加了尾巴之后,实际上,相当于我们给矩阵W乘以(1-a λ/m)倍的权重,矩阵W减去α λ/m倍的它,也就是用这个系数(1-a λ/m)乘以矩阵W,该系数小于1,因此L2范数正则化也被称为“权重衰减。

那么为什么L2正则化有利于防止过拟合?

直观上理解就是,如果正则化λ设置得足够大,权重矩阵W被设置为接近于0的值,直观理解就是把多隐藏单元的权重设为0,于是基本上消除了这些隐藏单元的许多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,这个神经网络就变成了很简单的网络了,所以就避免了过拟合,当然有时候反而会导致了欠拟合。

上面说权重为0后就变成了简单的神经网络,这只是便于大家理解所说的极端的话。其它的神经元还是起作用的。如果不起作用,那我们为什么要用大型神经网络呢,还不如直接用个小点的神经网络。

另外还有一点需要说明一下。上面我们只对参数w做了衰减。那为什么不对b也作衰减呢。因为神经网络中w的数量很多,而b一个神经元只有一个,数量很少。所以我们一般懒得去衰减它,因为影响力太小。



版权声明:本文为qq_38525526原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。