学习记录自:deeplearning.ai-andrewNG-master
在开始之前,先让我们来看看正则化模型与非正则化训练效果。
非正则化模型与正则化模型的比较预分类数据 非正则化分类结果 损失函数迭代图: On the training set(训练集精度): Accuracy: 0.94 On the test set(测试集精度): Accuracy: 0.91
分类决策边界: 从分类结果来看测试精度为91%,损失函数优化时存在扰动。从分类决策边界来看,该分类模型过度拟合了训练集,拟合了许多噪声点。
## 正则化模型分类效果 L2正则 On the train set(训练集精度): Accuracy: 0.93 On the test set(测试集精度): Accuracy: 0.95 通过L2正则化,分类边界变得更趋于线性性与简单性,而测试精度也达到95%。避免了过拟合,具有更强的泛化能力。
神经网络中的正则化 一、正则化的概念及常用正则化方法1.1 正则化 机器学习中的一个核心问题是设计不仅在训练数据上表现好,并且能在新输入上泛化好的算法。在机器学习中,许多策略显式地被设计来减少测试误差(可能会以增大训练误差为代价)。这些策略被统称伪正则化。 深度学习模型具有很高的灵活性和能力,如果训 练数据集不够大,将会造成一个严重的问题–过拟合。尽管它在训练集上效果很好,但是学到的网络不能应用到测试集中,所以在深度学习模型中使用正则化是必要的。 1.2 常用的正则化方法
神经网络模型中通常使用L2正则化对损失函数进行修正,另外Dropout正则化也常用。 L2正则化: 下面给出L2正则化之前损失函数表达式: 针对这个损失函数,给出它的正则化后的表达式:
L2正则化基于以下假设:权重较小的模型比权重较大的模型更简单。因此,通过对损失函数中权重的平方值进行惩罚,可以将所有权重驱动为较小的值,从而使模型更平滑,输出随着输入的变化而变化得更慢。
Dropout正则化:
Dropout提供了正则化一大类模型的方法,计算方便但功能强大。简单来说Dropout可以理解为在概率意义上随机删除神经网络中的节点,以此简化神经网络模型来防止过拟合的一种正则化方法,下图说明了Dropout的处理过程。 Dropout会在每次迭代中随机关闭一些神经元,其中涉及到正则化参数keep_prob,keep_prob是一个随机数,在正向传播时,我们给每一个神经元赋予一个概率,通过比较keep_prob与神经元的随机概率大小来给出决策。当该概率小于keep_prob时,我们关闭该神经元。做法是通过应用掩码来关闭正向传播过程中的某些神经元。 对于反向传播,将用相同的掩码重新来关闭相同的神经元,进而进行导数的计算。
1.3其他正则化方法 正则化的目的是为了防止过拟合带来的高方差,我们可以考虑采用数据扩增和提早结束训练来防止过拟合。 数据扩增 假设我们的数据集是图片,那对图片进行旋转、裁剪等可以达到数据扩增的目的,如下图所示。 提早结束训练 过拟合一定程度上是由于训练过度导致的,为了防止过拟合带了的高方差,把方差和损失函数作为训练结束的评判标准可以一定程度上减少过拟合。下图是该方法的体现。 从上图来看,方差随着迭代次数的增加,会由小再变大,为了防止过拟合,在方差最小且损失函数比较小的时候提早结束训练。
二、正则化能减少过拟合的原因2.1 过拟合 过拟合是指为了得到一致假设而使假设变得过度严格,如下图所示: 上图反映了对二维数据的分类,该分类器看似很好的拟合的边缘,达到的分类的目的,但是分类边界过于严格,这样的分类模型虽然在训练集中表现得很好,当把它应用到测试集中,预测结果却不会很好。 从上图来看,过拟合往往带着非线性性与复杂性,为了减少过拟合,我们采取某种方法来减少它的非线性性与复杂性。
2.2 正则化减少过拟合 以L2正则化为例,我们通过对权重项施以惩罚,在参数更新时,达到权重衰减的目的。权重衰减意味着衰减的神经元对神经网络的影响减小,使得原本复杂的神经网络变得简单,甚至简单到像Logistic回归一样,每层只具有一个神经元。 神经元作用的衰减让原本非线性的分类趋于线性分类,这样就一定程度避免了过拟合。 下图反映了神经网络正则化的过程,以及分类效果。 如图红色传播路线,正则化的神经网络变得简单化,最后得到的分类效果也更合理,具有更好的泛化效果。
正则化代码