神经网络正则化(1):L1/L2正则化

转自:https://zhuanlan.zhihu.com/p/35893078
在神经网络出现high variance也就是overfitting的时候,regularization(正则化)是一个很常用的方法。现在应用最为广泛的包括两种regularization方式:

L1/L2 regularization
dropout regularization
其中本篇介绍L1/L2 regularization,主要包括:

L1/L2 regularization以及效果
加入正则化之后的梯度下降推导
代码实现
regularization能够解决overfitting问题的解释
1. L1/L2 regularization
假设一个神经网络样本为 \left{ (x^{(i)},y^{(i)}) \right},i=1,…,m ,训练过程中训练样本的预测结果为 \hat{y}^{(i)},i=1,…,m .

cost function如下所示:

J(w,b)=\frac{1}{m}\sum_{i=1}^{m}{L(\hat{y}^{(i)},{y}^{(i)})} \tag{1}

1.1 L2 regularization
L2正则化是给cost function加上正则项:

J(w,b)=\frac{1}{m}\sum_{i=1}^{m}{L(\hat{y}^{(i)},{y}^{(i)})} + \frac{\lambda}{2m}||w||^2_2 \tag{2}

例如针对交叉熵代价函数,得到的损失函数为:

J(w,b)=\small \underbrace{-\frac{1}{m} \sum\limits_{i = 1}^{m} \large{(}\small y^{(i)}\log\left(a^{L}\right) + (1-y^{(i)})\log\left(1- a^{L}\right) \large{)} }\text{cross-entropy cost} + \underbrace{\frac{1}{m} \frac{\lambda}{2} \sum\limits_l\sum\limits_k\sum\limits_j W{k,j}^{[l]2} }_\text{L2 regularization cost} \tag{3}

L2正则损失部分是神经网络中每一层的权重矩阵 W^{[l]} 的Frobenius范数的平方和,假设第l层的权重矩阵维度是 W^{[l]}\in R^{n_l\times n_{l-1}} ,那么计算如下所示:

||w||^2_2=\sum_{l=1}^{L}{||W^{[l]}||F^2}=\sum{l=1}^{L}{\sum_{i=1}^{n_l}{\sum_{j=1}^{n_{l-1}}{W^{[l]}_{i,j}}^2}} \tag{4}

在实现中可以采用下面的方式来求取每一层的权重矩阵的L2正则损失部分,然后累加即可。

np.sum(np.square(Wl))

在修改了损失函数之后,必然要修改梯度下降方向,由于正则化部分的影响,需要对原本的梯度下降方向加上下面的部分:

\frac{d}{dW} ( \frac{1}{2}\frac{\lambda}{m} W^2) = \frac{\lambda}{m} W \tag{5}

因此梯度下降方向变为:

W^{[l]}:=W^{[l]}-\alpha(\frac{1}{m} dZ^{[l]} A^{[l-1] T}+\frac{\lambda}{m}W^{[l]})\ =W^{[l]}-\alpha\frac{1}{m} dZ^{[l]} A^{[l-1] T}-\frac{\alpha\lambda}{m}W^{[l]})\ =(1-\frac{\alpha\lambda}{m})W^{[l]}-\alpha\frac{1}{m} dZ^{[l]} A^{[l-1] T} \tag{6}

可以看到不论 W^{[l]} 是什么,我们都试图让它变得更小,实际上,相当于我们给矩阵W乘以 (1-\frac{\alpha\lambda}{m}) 倍的权重,矩阵减去 \frac{\alpha\lambda}{m} 倍的它,因此范数正则化也被称为“权重衰减”.

在计算 dW^{[l]} 时可以采用如下所示的方法:

dW2 = 1./m * np.dot(dZ2, A1.T) + lambd / m * W2

1.2 L1 regularization
L1正则化采用的正则化项如下所示:

J(w,b)=\frac{1}{m}\sum_{i=1}^{m}{L(\hat{y}^{(i)},{y}^{(i)})} + \frac{\lambda}{2m}||w||_1 \tag{7}

其中正则项计算为:

||w||^2_2=\sum_{l=1}^{L}{||W^{[l]}||F^2}=\sum{l=1}^{L}{\sum_{i=1}^{n_l}{\sum_{j=1}^{n_{l-1}}{|W^{[l]}_{i,j}}|}} \tag{8}

这里称为L1正则化,其实是对应到向量的1-范数,而矩阵范数里的1范数并不是这里的正则化计算方法,因此有点尴尬容易混淆。

修改加入了L1正则化的梯度下降方法为:

\frac{d}{dW} (\frac{\lambda}{m}||w||_1) = \frac{\lambda}{m}sgn(w) \tag{9}

整体梯度下降为:

W^{[l]}:=W^{[l]}-\alpha(\frac{1}{m} dZ^{[l]} A^{[l-1] T}+ \frac{\lambda}{m}sgn(W^{[l]}) )\ =W^{[l]}-\alpha\frac{1}{m} dZ^{[l]} A^{[l-1] T}-\frac{\alpha\lambda}{m}sgn(W^{[l]})\\tag{10}

可以看到在L1正则化中,权重通过一个常量向0进行缩小,因为取得是 sgn(W^{[l]})

  1. L1/L2正则化的区别
    通过上面的推导我们可以看出,

在L1规范化中,权重通过一个常量向0进行缩小;在L2规范化中,权重通过一个和w成比例的量进行缩小
当一个特定的权重绝对值|w|很大时,L1规范化的权重缩小要比L2规范化小很多;当一个特定的权重绝对值|w|很小时,L1规范化的权重缩小要比L2规范化大很多
L1规范化倾向于聚集网络的权重在相对少量的高重要度的连接上,而其他权重会被驱使向0接近
在w=0处偏导数不存在,此时使用无规范化的随机梯度下降规则,因为规范化的效果是缩小权重,不能对一个已经是0的权重进行缩小

  1. 正则化为什么能解决overfitting的问题?
    为什么正则化有利于预防过拟合呢?为什么它可以减少方差问题?我们通过两个例子来直观体会一下

左图是高偏差,右图是高方差,中间是Just Right

现在我们来看下这个庞大的深度拟合神经网络。我知道这张图不够大,深度也不够,但你可以想象这是一个过拟合的神经网络。我们添加正则项,它可以避免数据权值矩阵过大,这就是弗罗贝尼乌斯范数,为什么压缩范数,或者弗罗贝尼乌斯范数或者参数可以减少过拟合?

直观上理解就是如果正则化设置得足够大,权重矩阵被设置为接近于0的值,直观理解就是把多隐藏单元的权重设为0,于是基本上消除了这些隐藏单元的许多影响。如果是这种情况,这个被大大简化了的神经网络会变成一个很小的网络,小到如同一个逻辑回归单元,可是深度却很大,它会使这个网络从过度拟合的状态更接近左图的高偏差状态。

但是会存在一个中间值,于是会有一个接近“Just Right”的中间状态。

直观理解就是增加到足够大,会接近于0,实际上是不会发生这种情况的,我们尝试消除或至少减少许多隐藏单元的影响,最终这个网络会变得更简单,这个神经网络越来越接近逻辑回归,我们直觉上认为大量隐藏单元被完全消除了,其实不然,实际上是该神经网络的所有隐藏单元依然存在,但是它们的影响变得更小了。神经网络变得更简单了,貌似这样更不容易发生过拟合,因此我不确定这个直觉经验是否有用,不过在编程中执行正则化时,你实际看到一些方差减少的结果。

我们进入到神经网络内部来直观感受下为什么正则化会预防过拟合的问题,假设我们采用了tanh的双曲线激活函数

如果使用了正则化部分,那么权重W会倾向于更小,因此得到的 Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]} 会更小,在作用在激活函数的时候会接近于上图中横轴零点左右的部分,如下图所示:

如果 z 的值最终在这个范围内,都是相对较小的值, g(z)=\tanh(z) 大致呈线性,每层几乎都是线性的,和线性回归函数一样。如果每层都是线性的,那么整个网络就是一个线性网络,即使是一个非常深的深层网络,因具有线性激活函数的特征,最终我们只能计算线性函数,因此,它不适用于非常复杂的决策,以及过度拟合数据集的非线性决策边界。

下一章我们实现加入L2正则化的神经网络模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值