一文详解超参数调优方法

©PaperWeekly 原创 · 作者|王东伟

单位|Cubiz

研究方向|深度学习

本文介绍超参数(hyperparameter)的调优方法。

神经网络模型的参数可以分为两类:

  1. 模型参数,在训练中通过梯度下降算法更新;

  2. 超参数,在训练中一般是固定数值或者以预设规则变化,比如批大小(batch size)、学习率(learning rate)、正则化项系数(weight decay)、核函数中的 gamma 等。

超参数调优的目标通常是最小化泛化误差(generalization error),也可以根据具体任务自定义其他优化目标。泛化误差是指预测未知样本得到的误差,通常由验证集得到,关于验证集可以参阅 Cross-validation (statistics). Wikipedia.。

调优的方法如网格搜索(grid search)、随机搜索(random search)、贝叶斯优化(bayesian optimization),是比较常用的算法,下文将作介绍。其他算法如基于梯度的优化(gradient-based optimization)、受启发于生物学的进化算法(evolution strategy)等,读者可以自行了解。

网格搜索 Grid search

网格搜索就是遍历所有可能的超参数组合,找到能得到最佳性能(比如最小化泛化误差)的超参数组合,但是由于一次训练的计算代价很高,搜索区间通常只会限定于少量的离散数值,以下用一段伪代码说明:

def train(acf, wd, lr):
        优化目标函数得到模型M
        由验证集得到泛化误差e
        return e

learning_rate = [0.0001, 0.001, 0.01, 0.1]
weight_decay = [0.01, 0.1, 1]
activation = ['ReLU', 'GELU', 'Swish']

optimum = {'error': 1e10}

# grid search
for acf in activation:
        for wd in weight_decay:
                for lr in learning_rate:
                        error = train(acf, wd, lr)
                        if error < optimum['error']:
                                optimum['error'] = error
                                optimum['param'] = {
                                        'acf': acf,
                                        'wd': wd,
                                        'lr': lr
                                }

随机搜索 Random search

随机搜索在预先设定的定义域内随机选取超参数组合。实验证明随机搜索比网格搜索更高效,主要原因是随机搜索可以搜索连续数值并且可以设定更大的搜索空间,因此有几率得到更优的模型。另外,对于仅有少数超参数起决定性作用的情况,随机搜索对于重要参数的搜索效率更高。

如图 1,假设参数 2 几乎对优化目标没有影响,而参数 1 很重要,在同样进行 9 次采样的搜索中,网格搜索实际上仅对参数 1 采样了 3 次,而随机搜索为 9 次。关于随机搜索的实验可以查阅论文 Random Search for Hyper-Parameter Optimization. James Bergstra, Yoshua Bengio. 2012.。

▲ 图1

贝叶斯优化 Bayesian optimization

给定一组超参数,为了计算相应的模型泛化误差,我们需要进行一次完整的模型训练,对于大型的深度学习模型可能需要花上几个小时的时间。注意到网格搜索和随机搜索中,不同的超参数采样是相互独立的,一个直接的想法是,能否充分利用已采样数据来决定下一次采样,以提高搜索效率(或者说减少采样次数)。

早在 1960 年,就有科学家 Danie G. Krige 用类似的方法用于金矿分布的估计,他用已开采的少数矿点对金矿分布进行建模,后来这类方法被称为 Kriging 或高斯过程回归(Gaussian process regression, GPR)。

本文将介绍基于高斯过程的贝叶斯优化,其他类型的贝叶斯优化算法将在文末作简要总结。此外,本文关于 GPR 的数学原理部分参考了 MIT 出版的 Gaussian Processes for Machine Learning. C. E. Rasmussen, C. K. I. Williams. 2006(下文简称GPML),读者可自行查阅。

3.1 算法简介

超参数优化可以视为求解泛化误差的极值点:

其中, 为训练集和验证集, λ 为带参数模型。

以下为了方便讨论并且与相关领域的论文保持一致,我们用 表示待优化的目标函数,并且假设我们的目标是求极大值:

贝叶斯优化的算法如下:

可以看到,贝叶斯优化每次迭代都充分利用历史采样信息得到新的采样点,采样函数 的目标是让新的采样点尽可能接近极值点,因此,贝叶斯优化有可能以更少的采样得到优化结果。

GP 模型可以理解为函数,不过其对于未知输入 的预测不是一个确定的数值,而是一个概率分布。对于给定的 将得到正态分布的均值 μ 和方差 σ ,也就是说, 将给出目标函数值 的概率分布,即 μ σ

图 2 为 3 次采样后(也就是已知样本数量为 3)GP 模型拟合结果的可视化,样本输入为 1 维,其中黑色曲线为均值 μ ,蓝色区域为一个标准差的置信区间。

▲ 图2,源:https://arxiv.org/abs/1012.2599

3.2 高斯过程

具体地,我们假设随机变量集合 为高斯过程,其由均值函数(mean function) 和协方差函数(covariance function) 定义:

其中:

通常我们假设均值函数为常数 。协方差函数的常见选择是平方指数(squared exponential,SE)函数,也叫高斯核:

容易发现,上述协方差函数描述了不同输入之间的距离,或者说相似性(similarity)。对于回归或者分类问题,一个合理的假设是,距离较近的输入 x 有相近的目标函数值(或者类别标签)y,比如在分类问题中,距离测试样本更近的训练样本将提供更多关于测试样本类别的信息。可以说,协方差函数“编码”了我们对目标函数的假设。

现在,假如我们有了一些观测数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值