【deeplearning.ai】第二门课:提升深层神经网络——正则化

来源:互联网 发布:exo arashi知乎 编辑:程序博客网 时间:2024/06/03 16:32

一、逻辑斯特回归的正则化

在损失函数后面加上L2正则化项:


其中正则化项:


不对b使用正则化是因为w已经是高维参数矢量,几乎涵盖了所有的参数,而b只是一个标量,可以忽略。当然也可以对b进行正则化,不会产生什么影响。

也可以使用L1正则化:


L1正则化使w是稀疏的,即w中有很多0。目前更倾向于使用L2正则化。


二、神经网络的正则化


Feobenius范数:


加入L2正则化后的参数更新:


三、为什么正则化能防止过拟合

训练神经网络的目的是最小化损失函数并更新参数。如果正则化参数λ很大,为了最小化损失函数,那么权重矩阵w将接近于0。对于w接近于0带来的影响,可以从以下两个例子来说明。

  • 对于一个多层神经网络,w接近于0意味着隐藏单元的权重接近于0,相当于大大减小了这些隐藏单元的影响。这样神经网络被简化成小规模的网络,但深度不变。这样会欠拟合状态趋向于欠拟合状态。但λ会存在一个中间值,使其达到合理拟合的状态。

  • 假设使用双曲激活函数tanh(z),如果z集中于0附近,那么tanh(z)会接近于线性;如果z很大或很小,则tanh(z)变得非线性。那么,w接近于0时,z=wa+b变得很小,集中于0附近,那么每一层几乎都是线性的,这个网络就变成了非常深的线性网络,不会过度拟合数据集的非线性决策边界。

总之,λ增大时,整个网络会变的更加简单,越简单的模型越不会发生过拟合。


四、Dropout

dropout会遍历网络的每一层,以一定的概率消除某一节点,得到一个规模较小的网络。常用的dropout方法是inverted dropout(反向随机激活)。下面以某一神经网络的第三层举例说明。

d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_proba3 = np.multply(a3, d3)a3 /= keep_prob
第一行,d3是随机矩阵,布尔型。keep_prob是保留某个隐藏单元的概率。

第二行,将a3与d3相乘,以消除某些节点。

第三行,将a3除以keep_prob,使a3的期望值不变。


五、正则化输入

当输入特征不在同一范围时,如x1在[0,1],x2在[0,10000],需要对输入特征进行归一化,步骤包括零均值化和归一化方差。

零均值化:


归一化方差:


如下图1所示,输入特征可能不在同一范围,零均值化后输入特征变为图2所示分布,归一化方差后输入特征变成图3所示,x1和x2的方差都为1。


如果不进行输入正则化,那么代价函数J的形状可能如下图所示。J的形状十分狭长,此时需要设置较小的学习率,反复尝试才能达到最优点。


进行输入正则化后,J的形状如下所示。J变得均匀,设置一个较大的学习率就可以较快地达到最优点。



六、其他正则化方法

1、数据增强

当不好收集其他数据来扩展训练集时,可以利用现有的训练集进行数据增强。例如在图像分类中,可以对图像进行翻转、裁剪等操作来扩展数据集。

2、early stopping

在训练网络时,我们能看到训练误差在不断地下降,但在验证集上误差可能是先下降再上升。当验证集误差上升时,网络就出现了过拟合,此时提早停止训练可以防止过拟合。一般机器学习包括两个重要内容,一是选择优化算法来优化代价函数J,二是防止过拟合。在一个时间只做以上其中一个事情,而不影响另一个事情,这称为正交化。early stopping的缺点是无法独立地处理这两个事情,你若提早停止训练网络,就无法继续优化代价函数J。


阅读全文
0 0