前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Regularizing your neural network

Regularizing your neural network

作者头像
小飞侠xp
发布2018-08-29 15:15:31
2400
发布2018-08-29 15:15:31
举报

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

  • 反向随机失活(inverted dropout) 定义一个向量d,d3表示第三层的dropout向量

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

Other regularization methods

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

  • 数据扩增

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

  • early stopping 运行梯度下降时,代价函数J的优化过程单调下降趋势,如图。

我们不但可以绘制代价函数loss,还可以绘制验证集误差,你会发现验证集误差通常会呈先下降,然后在某个节点 处开始上升。early stopping的作用就是,就在那个点停止训练。

Normalizing inputs

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

  • 零均值
  • 归一化方差 我们希望无论是训练集还是测试集都是通过相同的μ,σ2定义的数据装换 1.第一步是零均值化 :

它是一个向量,x等于每个训练数据 x减去μ,意思是移动训练集,直到完成零均值化 2 .第二步是归一化方差 ,注意特征x1的方差比特征x2的方差要大得多 。

每个特征都有方差,注意,我们已经完成了零均值 ,x2就是y2的方差,然后把所有数据除以σ2向量

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.12.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Regularizing
  • Why regularization reduces overfitting?
  • Understanding Dropout
  • Other regularization methods
  • Normalizing inputs
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档