正则化(吴恩达视频笔记)

判断什么时候用到正则化
在这里插入图片描述
理解深度学习中的偏差和方差之前,我们先来看一下数学定义:
在这里插入图片描述
在这里插入图片描述
那么,在深度学习中,我们可以把偏差理解为预测值和真实值之间的差异程度,如果模型拟合效果是欠拟合的情况,正如左边的图展示的那样,很多的预测值都没有经过真实值,偏差很大;
方差可以理解为预测值和预测平均值的差异程度,如果数据过拟合,如右图所示,每个拟合的预测值都恰好经过真实的点,偏差为0,但是每个预测值与平均值的差异很大,产生高方差;
我们需要在高偏差和高方差之间找到一种折衷的办法,使得找到的模型正正好,不会产生高方差也不会产生高偏差,这就意味着我们的模型为了走的路线不要太扭曲,就不会恰好经过每一个真实值。

理解偏差和方差的两个关键数据是训练集误差和验证集误差。
假设人眼辨别的错误率接近0%。一般来说,最优误差也被成为基本误差,那么在此项分类任务中,我们的最优误差为0%
从而我们看到第4个效果是最好的,前面的3种情况都产生了不同的问题。比如,针对第1种情况,说明数据过拟合,导致验证时数据无法准确预测。
因此,我们可以根据训练集误差和验证集误差的情况来调整我们的模型(注意,4种情况的好坏是基于我们的基本误差,如果此时图片很模糊,我们的基本误差变成14%,那图中的第2种情况就是很好的状况了。)
在这里插入图片描述
两种情况:
1、训练集的偏差很高
增加更多隐藏层或隐藏单元;或更换其他的优化算法。这是训练网络的基础要求。
2、验证集的方差很高
如果训练集效果很好,但是验证集的方差很大,那么可以去找更多的数据;或正则化。
这是两种不同的情况,需要根据情况不同对待,不能混淆。比如,如果训练集的偏差很高,增加更多的数据并没有很大的作用。
正则化
正则化通常有助于避免过拟合,从而减小高方差。
正则化只需添加参数λ,也就是正则化参数。
比如,我们现在在做逻辑回归时,成本函数表示为J,那么正则化就是在原本的成本函数后面接一个正则化项。

那为什么不加参数b呢?
因为w通常是一个高维参数矢量,已经可以表达高方差的问题,w几乎包含所有参数,而b只是众多参数中的一个,影响不大,所有通常省略。在这里插入图片描述
最常使用的是L2范数进行正则化,有时也用L1正则,其中的分母m或者2m都只是一个比例常量。
如果用的是L1正则化,w最终是稀疏的,也就是说w向量中有很多0,有人说这样有利于压缩模型,因为存储该模型所占的内存更少,但实际上并没有降低太多存储内存。因此往往更长使用L2正则化。
参数λ,也就是正则化参数,我们通常使用验证集或交叉验证来配置这个参数。在编写代码中,因为lambda是一个保留字段,因此,我们用lambd表示λ,以免与python中的保留字段冲突。

在神经网络中,有一个成本函数J,我们用L2正则化,那么就有下图中的式子,其中w的尺寸为(n[l-1],n[l]),n[l-1]表示隐藏单元的数量,n[l]表示l层单元的数量,我们称W矩阵为Frobenius范数,表示一个矩阵中所有元素的平方和。在向后传播更新第l层的权重矩阵时,我们相应的增加了λ/m w[l]项,然后计算更新项。

在这里插入图片描述
使用新定义的dw[l],它的定义含有代价函数的相关参数以及最后添加的额外正则项,这也是L2正则化有时被成为权重衰减,因为实际上,相当于我们给权重矩阵乘以了(1-αλ/m)倍的权重。
为什么正则化会抑制过拟合呢
因为加上正则化项后,可以避免权重矩阵过大,直观上理解,如果λ设置的足够大,权重矩阵倍设置为接近于0的值,于是基本消除了这些隐藏单元的许多影响,那么一个大的网络会变成一个小的网络,甚至小到一个逻辑回归的网络,使得从右图高方差的网络变成左边一个高偏差的网络。
在这里插入图片描述
假设我们用的是一个双曲正切函数,用g(z)=tanh(z),当z的值在0附近时,**函数会呈现出线性,而当z过大或过小时,**函数呈现出非线性。因此,当λ比较大,那么W中的值会很小,则z的值也会很小。实际上,z的取值范围很小,这个**函数会相对呈线性,整个神经网络会计算离线性函数近的值,不会发生过拟合的现象。
在这里插入图片描述
总结 当运用正则化项后,由于正则化参数λ的出现,使得权重矩阵w中的值变小,从而在运用到**函数中时会使得整个网络近似呈线性,这样做就会避免过拟合,也就是模型不会是太过非线性的曲线,增加过拟合的可能性。L2正则化是最常用的一种抑制过拟合的一种方式。