【deeplearning.ai】改善深层神经网络:超参数调试、正则化以及优化

依据训练集和验证集选择算法和调超参
  1. 在训练集上用不同模型训练,选取几个拟合效果好的模型
  2. 将这几个模型应用在验证集上,选择最优的一个或几个
      在步骤2上,可以通过正则化等手段优化模型;步骤1是为了选择模型。
L2 L 2 正则化为什么能起作用?

  从贝叶斯的角度上看,正则化等价于对模型参数引入先验分布。在后验概率估计上,增加高斯分布先验,就是 L2 L 2 正则化;增加拉普拉斯分布先验,就是 L1 L 1 正则化。【这些分布的先验知识是对权重w而言的】。从求导推导过长看,增加了 L2 L 2 先验,相当于在原本权重更新时,减去梯度的计算之前 wαJw w − α ∂ J ∂ w ,对w进行了削减,即 (1α2m)wαJw ( 1 − α 2 m ) w − α ∂ J ∂ w 。其结果就是造成最后的权重 w w 比不添加正则化时小,极端一点看,若α较大,则 w0 w → 0 ,导致 z=wTx+b0 z = w T x + b → 0 。而 z0 z → 0 时,通过 sigmoid s i g m o i d 函数,会基本展示不出非线性【即在sigmoid中间段,其基本呈线性传递】,因而导致模型的表达能力减弱,从而起到预防过拟合的作用。

dropout正则化

  dropout正则化在计算机视觉应用比较多,因为计算机视觉的数据一般比较少。通常在我们没有足够多的数据时,导致存在的过拟合现象,我们才使用dropout正则化。【因为使用了dropout正则化后,我们优化的凭证Cost就不再是每次迭代都递减的了。这在某种程度上是很难计算的,因为我们失去了调试工具。】

为什么归一化能加速模型拟合?

  若未归一化前,数据分布呈现狭长状,即不同元素的取值范围差别大,则代价函数在不同元素上取得最优解需要的学习率不同。因此模型需要选择其中最小的学习率,以达到整个模型拟合的效果。而如果归一化了,则可以统一学习率,用较大的学习率去拟合数据,因而能加快模型拟合。

这里写图片描述

网络模型的超参数
  1. 模型方面:隐藏层层数、每层的神经元个数
  2. 优化方面:数据的mini-batch大小、学习率 α α 的大小、学习衰减率、优化函数的参数 β β (假设是动量梯度下降法)、正则化项的系数 λ λ
      其中最重要,最需要调试的参数是学习率 α α ;其次是优化函数的参数 β β 、每层神经元个数和mini-batch的大小;
Batch-Normalize(BN)

  Batch-Normalize操作使网络每一层的输入归一化,即将 a[i] a [ i ] 归一化,但是由于某些原因(如激活函数的效果等)就将这个归一化的操作提到了激活函数之前。

BN操作为什么起作用?

  神经网络是多隐藏层叠起来的,其某一层的输入受之前所有层参数的控制,即convariat shift,也就是说该输入的分布是一直在变化的,这给该层的参数优化带来麻烦。BN操作将其分布固定为 01 均 值 为 0 , 方 差 为 1 的分布,使用 βγ β 、 γ 之后的均值受参数控制,但也固定分布。因此,BN操作就是讲每层的输入分布固定下来,使优化参数变得简单,也减少某参数梯度过大问题的出现,因而能加速模型拟合。

优化算法

神经网络各优化算法

优化算法前置知识
指数加权(移动)平均

  一种计算连续变量的离散值平均的方式。其计算方式如下:

vi=αVi1+βθi v i = α V i − 1 + β θ i
V0=0,α+β=1α=0.9β=0.1 其 中 V 0 = 0 , α + β = 1 , 如 α = 0.9 , β = 0.1
   vi v i 可看做第i天之前的平均(实际上是 11α 1 1 − α ),而 θi θ i 是第 i i 天的离散值。这种动态求平均的方法,即考虑了前面的元素,也不会综合太过“久远”的无用的信息。【αvi线
  该计算方式在前几天的计算中很不准确,如第1天只有 0.1θ1 0.1 θ 1 ,所以有偏差修正: vi1βt=αvi1+βθi v i 1 − β t = α v i − 1 + β θ i

这里写图片描述

梯度下降的优化
动量梯度下降法

  计算梯度:

vdw=βvdw+(1β)Jw v d w = β v d w + ( 1 − β ) ∂ J ∂ w
   和之前的笔记所不同的是,这里的梯度前面多了个系数 (1β) ( 1 − β ) ,视频里提及之前笔记的那种没有系数的形式,学习率 α α 要根据 (1β) ( 1 − β ) 相应变化,可能是不好调参吧。而且,如果没有系数,相当于 vdw v d w 变为 vdw11β v d w ∗ 1 1 − β ,这是会变大的,更可能会出现动量过大,跳出最小值的情况。
  更新参数:
w=wαvdw w = w − α v d w

RMSprop

  计算梯度:

Sdw=βSdw+(1β)(w)2 S d w = β S d w + ( 1 − β ) ( ∂ w ) 2

  更新方式:
w=wαwSdw w = w − α ∂ w S d w

   这个跟之前笔记里的AdaDelta方法基本一模一样

局部最优解

  视频里说到,一直以来,我们担心神经网络陷入局部最优解,是像下图左边的那种,每个元素方向梯度都为 0 0 <script type="math/tex" id="MathJax-Element-57">0</script>,且都是“凸”方向的极小值点。但是在高纬度中,梯度全为0且都是“凸”极值点的坑不多,大部分还是像下图右边的那种鞍点。因此,我们的优化目标应该是逃离鞍点,而不是过度担心“局部最优解”。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值