深度学习笔记(二十二)超参数调试处理

一、调试超参数时的重要程度(偏主观)

最重要:学习率 α \alpha α
次重要:动量梯度下降中的 β \beta β、隐藏单元数、Mini-batch数量
次次重要:网络层数、学习衰减率
不那么重要:Adam算法中的 β 1 、 β 2 、 ε \beta_1、\beta_2、\varepsilon β1β2ε

深度学习笔记(二十二)超参数调试处理_第1张图片
一个重要的原则就是不要用网格取值来搜索超参数取值,要尽可能搜索随机取值,特别是在超参数非常多,搜索维度特别大的时候。搜索的过程是从粗到细的,找到几个比较好的取值后,缩小搜索范围进一步精化范围。
深度学习笔记(二十二)超参数调试处理_第2张图片

二、为超参数选择合适的范围

适当的搜索标尺
如果是为隐藏单元个数或网络层数选值,很好办,在考虑范围内随机取值对比即可。那么学习率呢?学习率最小可以取0.0001,最大可以取1,在这个范围内测试的话,90%的搜索资源用在了0.1到1之间,对吧,这样看上去似乎不合理,如图。
深度学习笔记(二十二)超参数调试处理_第3张图片
不采用这种线性坐标轴呢,我们采用对数标尺坐标轴,也就是每10倍在坐标轴标记一次,这样搜索的几率更平等了,如图。
深度学习笔记(二十二)超参数调试处理_第4张图片
其实这一点大家很容易想到,在该课程中用更科学的表述讲述了这个道理。
在Python中是怎么样实现这种随机数的?

r = -4 * np.random.rand()
alpha = 10 ** r

第一行代码中 r ∈ [ − 4 , 0 ] r\in [-4,0] r[4,0]
第二行代码中 a l p h a ∈ [ 1 0 − 4 , 1 ] . alpha\in [10^{-4},1]. alpha[104,1].

指数加权平均参数的搜索
对于 β \beta β,并不是那么好对付。我们期望从0.9到0.999中选取最佳值,应该怎么做?当然不能线性划分(其实也不是那么“当然”,不能用线性轴的原因是当取值接近1的时候,结果的敏感度会很高,和前部分的敏感度是不同的,所以不能用线性轴搜索),那么借助上一例中的0.001到0.1可以解决问题。
r ∈ [ − 3 , − 1 ] r\in [-3,-1] r[3,1]

β = 1 − 1 0 r \beta=1-10^r β=110r
关于结果敏感度的问题,有如下说明:
β \beta β从0.9000到0.9005,平均的样本数从10个变到10.05个;从0.9990到0.9995,平均的样本数从1000个变到2000个。由此可见,是不是不应该使用线性轴,而是应该使用更合理的标尺。

三、超参数训练实践:Pandas VS Caviar

需要每隔一段时间Re-test重新测试你的超参数。
深度学习笔记(二十二)超参数调试处理_第5张图片
两种调参的模式

  • Pandas 熊猫模式 Babysitting专一照顾一个孩子
  • Caviar 鱼类模式 同时哺育大量孩子

基于不同程度的运算能力,可以选择这两种模式调参,Pandas是运算能力较弱时,花费大量时间对单个模型逐个参数调优。而Caviar则时同时对大量模型(包含不同的超参数)进行训练,在一段时间后同时得到结果,进行对比。
深度学习笔记(二十二)超参数调试处理_第6张图片

你可能感兴趣的:(【深度学习/神经网络】Deep,Learning)