深度学习笔记(11) 超参数调试

深度学习笔记(11) 超参数调试


1. 选择合适的范围

关于训练深度最难的事情之一是要处理的参数的数量
学习速率 a 到 Momentum(动量梯度下降法)的参数 β
如果使用Momentum或Adam优化算法的参数,β1,β2和ε
还得选择层数
也许还得选择不同层中隐藏单元的数量
也许还想使用学习率衰减
使用的不是单一的学习率a,可能还需要选择mini-batch的大小

最为广泛的学习应用是a,学习速率是需要调试的最重要的超参数
例如Momentum参数β,0.9就是个很好的默认值
当应用Adam算法时,一般从不调试β1,β2和ε,总是选定其分别为0.90.99910 -8
还会调试mini-batch的大小,以确保最优算法运行有效

在这里插入图片描述
当给超参数取值时

  • 采用由粗糙到精细的策略
    通过试验超参数的不同取值,可以选择对训练集目标而言的最优值或对于开发集而言的最优值,或在超参搜索过程中最想优化的东西
  • 随机取值可以提升搜索效率
    随机取值并不是在有效范围内的随机均匀取值,而是选择合适的标尺
    在这里插入图片描述
    假设要选取隐藏单元的数量n[l]
    假设选取的取值范围是从50到100中某点
    这种情况下,在从50-100的数轴上可以随机在其取点
    这是一个搜索特定超参数的很直观的方式
    在这里插入图片描述
    如果要选取神经网络的层数L
    也许会选择层数为2到4中的某个值,顺着2,3,4随机均匀取样才比较合理
    这是在几个在考虑范围内随机均匀取值的例子,这些取值还蛮合理的
    但对某些超参数而言不适用
    在这里插入图片描述
    假设在搜索超参数a(学习速率),假设怀疑其值最小是0.0001或最大是1
    如果画一条从0.0001到1的数轴,沿其随机均匀取值
    那90%的数值将会落在0.1到1之间
    反而,用对数标尺搜索超参数的方式会更合理
    因此这里不使用线性轴
    分别依次取0.0001,0.001,0.01,0.1,1,在对数轴上均匀随机取点
    在Python中,可以这样做,使
    import numpy as np
    import math
    
    r = -4 * np.random.rand()
    a = math.pow( 10, r )
    
    那么a∈[10-4,100]

另一个棘手的例子是给β 取值,用于计算指数的加权平均值
假设认为β是0.9到0.999之间的某个值,当计算指数的加权平均值时
取0.9就像在10个值中计算平均值
有点类似于计算10天的温度平均值
而取0.999就是在1000个值中取平均
不要随机均匀在此区间取值

所以最好的方法就是,探究1-β,此值在0.1到0.001区间内
设定了1-β=10r,β=1-10r
在这里颠倒了大小,左边的是最大值,右边的是最小值
所以要做的就是在[-3,-1]里随机均匀的给 r 取值


2. 超参数调试实践

在这里插入图片描述
如果拥有足够的计算机去平行试验许多模型:
那绝对采用鱼子酱方式,尝试许多不同的超参数

如果没有许多计算资源或足够的CPU和GPU下:
采用熊猫方式,在小批量的训练过程中,耐心地调试学习率等


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(10) 优化算法(二)
深度学习笔记(9) 优化算法(一)
深度学习笔记(8) 实践层面(三)
深度学习笔记(7) 实践层面(二)
深度学习笔记(6) 实践层面(一)


谢谢!

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie
应支付0元
点击重新获取
扫码支付

支付成功即可阅读