机器学习深度学习·神经网络·计算机视觉

Regularizing your neural network

2017-12-21  本文已影响55人  徐凯_xp

Regularizing

如果怀疑神经网络过度拟合了数据,即存在高方差问题那么最先想到的方法可能就是正则化,另一个解决高方差的方法就是准备更多数据,这也是非常可靠的办法,但你可能无法时时准备足够多的训练数据或者获取数据的成本很高。

L2正则化是最常见的正则化类型,加的L2范数;及L1正则化。
如果用的L1正则化,W最终会是稀疏的,W向量中会有很多0。越来越倾向于使用L2正则化
注:在python编程语言中,λ(lambda)是一个保留字段,所以我们用 lambd代替 lambda正则化参数

代价函数是m个训练样本上 的损失之和,至于正则化 再加上lambda/2m 乘以所有参数W的范数的平方之和 。这里W是你的参数矩阵 ,这里矩阵范数的平方:定义为 对于i和j 对矩阵中每一个元素的平方求和 。如果你想为这个求和加上索引 ,这个求和是i从1到n[l-1], j从1到n[l] 。因为w是一个n[l-1]列 、n[l]行的矩阵 。这些是第l-1层和第l层的隐藏单元数量单元数量 。或 这个矩阵的范数称为矩阵的弗罗贝尼乌斯范数 ,使用角标F标记。

Why regularization reduces overfitting?


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


再来看一个例子:
假设我们用的是这样双曲激活函数,g(z)表示tanh(z),我们发现,只要z非常小,并且只取一个小范围的参数,利用了双曲正切函数的线性状态,同理,lamda增大,W会变小,相对于Z也会变小,在一个线性区间。


Understanding Dropout

d3 = np.random.rand( a3.shape[0],a3.shape[1])

Other regularization methods

除了 𝐿2正则化和随机失活( dropout),还有几种方法可以减少神经网络中的过拟合。

假设你正在拟合猫咪图片分类器,如果你想通过扩增训练数据来 解决过拟合,但扩增 数据代价高,而且有时候 我们无法扩增数据,但我们可以添加这类图片来增加数据集。例如 ,水平翻转图片,并把它添加到训练集。除了水平翻转,你也可以随意裁剪图片,可以把原图旋转并随意放大后裁剪的。
对于光学字符识别,我们还可以通过添加数字,随意旋转或扭曲数字来扩增数据

Normalizing inputs

训练神经网络,其中一个加速训练的方法就是归一化输入,假设一个训练集有两个特征,输入特征为2维,归一化需要两个步骤:

tips:如果用它来调整数据,那么用相同的μ,σ2来归一化测试集,而不是在测试集和训练集分别预估μ,σ2。尤其是,你不希望训练集和测试集的归一化有什么不同。其中:μ,σ2是由训练集数据计算得来的。

为什么做归一化:然而如果你归一化特征,代价函数看起来更对称,更容易优化,前提是特征都在相似范围内,不是从1到1000,,0到1的范围而是在-1到1的范围内或相似偏差。
所以如果输入特征处于不同范围内,可能有些特征值从1到1000,那么归一化特征值就非常重要了,如果特征值处于相似范围内 ,那么归一化就不是很重要了,执行这类归一化并不会产生设么危害,我通常会做归一化处理,虽然我不确定能否提高训练或算法速度。

上一篇 下一篇

猜你喜欢

热点阅读