2020-6-9 吴恩达-改善深层NN-w3 超参数调试(3.2 为超参数选择合适的范围--选择合适的标尺)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

3.2 为超参数选择合适的范围 Using an appropriate scale to pick hyperparameters

上节课学习了在超参数范围中,随机取值可以提升你搜索超参数空间的效率。但随机取值并不是在有效范围内的随机均匀取值,而是选择合适的标尺,用于探究这些超参数,这很重要。在本节课中,我会教你怎么做。

1.选择合适的标尺–学习率 α \alpha α

例1:假设你要选取隐藏单元的数量 n [ l ] n^{[l]} n[l],对于给定层,比如 l = 1 l=1 l=1,你取值的范围是从50到100中的某个点。
在这里插入图片描述

如上图。
你可以看到一条从50-100的数轴,在其中随机取点,这是一个搜索特定超参数的很直观的方式。

例2:或者,如果你要选取神经网络的层数,我们称之为字母 L L L。你也许会选择层数为2到4中的某个值,接着顺着2,3,4随机均匀取样才比较合理。
在这里插入图片描述

例3:你还可以应用网格搜索,你会觉得2,3,4,这三个数值是合理的。

以上3个是在你考虑范围内随机均匀取值的例子,这些取值还蛮合理的,但对某些超参数而言不适用。

再来看下面的例子。

假设你在搜索超参数 α \alpha α(学习速率),你怀疑其值最小是0.0001或最大是1。
在这里插入图片描述

观察上图。
如果你画一条从0.0001到1的数轴,沿其随机均匀取值,那90%的数值将会落在0.1到1之间。结果就是,在0.1到1之间,应用了90%的资源,而在0.0001到0.1之间,只有10%的搜索资源,这看上去不太对。
在这里插入图片描述

观察上图。此时,改用对数标尺搜索超参数的方式会更合理。
因此这里不使用线性轴,分别依次取0.0001,0.001,0.01,0.1,1,在对数轴上均匀随机取点。这样,在0.0001到0.001之间,就会有更多的搜索资源可用,还有在0.001到0.01之间等等。

在python中,你可以这样做

  • r=-4*np.random.rand() r ∈ [ − 4 , 0 ] r\in [-4,0] r[4,0]
  • α = 1 0 r \alpha=10^r α=10r α ∈ [ 1 0 − 4 , 1 0 0 ] \alpha \in [10^{-4},10^0] α[104,100]
    在这里插入图片描述

所以标尺最左边数字是10-4,最右边是数字100

更加通常的情况就是,你会在10a和10b之间取值。
本例中,

  • 10a=0.0001,所以a=-4
  • 10b=1,所以b=0

r ∈ [ a , b ] r\in [a,b] r[a,b],即 r ∈ [ − 4 , 0 ] r\in [-4,0] r[4,0]
最后你可以设置 α \alpha α 的值,基于随机取样的超参数 α = 1 0 r \alpha=10^r α=10r

总结,对数轴上取值的过程

在对数坐标下取值,取最小值的对数就得到 a 的值(a=log0.0001),取最大值的对数就得到 b 值(b=log1)
你在对数轴上的10a到10b区间取值
在a,b间随意均匀的选取r值
将超参数设置为10r

2.指数加权平均– β \beta β的取值范围

另一个棘手的例子是给 β \beta β 取值,用于计算指数的加权平均值。

假设你认为 β \beta β 是0.9到0.999之间的某个值,也许这就是你想搜索的范围。

请记住,当计算指数的加权平均值时,取0.9就像在10个值中计算平均值,有点类似于计算10天的温度平均值,而取0.999就是在1000个值中取平均。

如果你想在0.9到0.999区间搜索,那就不能用线性轴取值,也就是随机均匀在此区间取值,对吧?考虑这个问题最好的方法就是探究 1 − β 1-\beta 1β 的值。

此值在0.1到0.001区间内,所以我们会给 1 − β 1-\beta 1β 取值,大概是从0.1到0.001。
在这里插入图片描述

应用之前介绍的方法,那就是10-1和10-3

注意,之前我们把最小值写在左边,最大值写在右边,但在这里,我们颠倒了大小,左边的是最大值,右边的是最小值。

所以你要做的就是在[-3,-1]里随机均匀的给r取值。
设定 1 − β = 1 0 r 1-\beta=10^r 1β=10r,所以 β = 1 − 1 0 r \beta=1-10^r β=110r,然后这就变成了在特定的选择范围内超参数随机取值。希望用这种方式得到想要的结果,你在0.9到0.99区间探究的资源,和在0.99到0.999区间探究的一样多。
在这里插入图片描述

如果你想研究更多正式的数学证明,关于为什么我们要这样做,为什么用线性轴取值不是个好办法,这是因为当 β \beta β 接近1时,所得结果的灵敏度会变化,即使有微小的变化。
在这里插入图片描述

所以 β \beta β 在0.9到0.9005之间取值,无关紧要,你的结果几乎不会变化。
β \beta β 值如果在0.999到0.9995之间,这会对你的算法产生巨大影响。

上面这两种情况下,是根据大概10个值取平均。而这里,它是指数的加权平均值。

根据公式 1 1 − β \frac 1{1-\beta} 1β1(学习率 α \alpha α依据其变化,参见动量梯度下降),当 β \beta β 接近1时(在0.999到0.9995之间),就会对细微的变化变得很敏感。所以整个取值过程中, β \beta β要更加密集在接近1的区间内取值。或者说,当 1 − β 1-\beta 1β 接近于0时,你就可以更加有效的分布取样点,更有效率的探究可能的结果。

通过本节课介绍,希望能帮助你选择合适的标尺,来给超参数取值。如果你没有在超参数选择中作出正确的标尺决定,别担心,即使你在均匀的标尺上取值,如果数值总量较多的话,你也会得到还不错的结果,尤其是应用从粗到细的搜索方法,在之后的迭代中,你还是会聚焦到有用的超参数取值范围上。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值