精华内容
下载资源
问答
  • 原标题:一文详解超参数调优方法©PaperWeekly 原创 · 作者|王东伟单位|Cubiz研究方向|深度学习本文介绍超参数(hyperparameter)的调优方法。神经网络模型的参数可以分为两类:模型参数,在训练中通过梯度下降...

    原标题:一文详解超参数调优方法

    ©PaperWeekly 原创 · 作者|王东伟

    单位|Cubiz

    研究方向|深度学习

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

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

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

    超参数,在训练中一般是固定数值或者以预设规则变化,比如批大小(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

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

    deftrain(acf, wd, lr):

    优化目标函数得到模型M

    由验证集得到泛化误差e

    returne

    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

    foracf inactivation:

    forwd inweight_decay:

    forlr inlearning_rate:

    error = train(acf, wd, lr)

    iferror < 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,比如在分类问题中,距离测试样本更近的训练样本将提供更多关于测试样本类别的信息。可以说,协方差函数“编码”了我们对目标函数的假设。

    现在,假如我们有了一些观测数据 ,其中, 。令 ,根据高斯过程的性质, 和测试样本 服从联合高斯分布:

    其中, 是元素值全为 1 的向量。 为格莱姆矩阵(Gram matrix)。

    可以证明,对于服从联合高斯分布的随机向量 和 ,

    有:

    因此:

    到这里,我们几乎完成了贝叶斯优化的 GP 模型拟合部分,接下来,还需要作一些调整。

    3.3 观测值噪声

    在实际的项目中,目标函数的观测值 通常带有随机噪声 ϵ,即:

    一般来说,我们可以假设噪声服从零均值高斯分布, ϵ σ,并进一步假设不同观测样本的噪声独立同分布,因此对于带噪声的观测样本,其关于协方差函数的先验变成:

    注意到我们增加了参数 σ,表示目标函数的方差。

    容易得到:

    其中, 为单位矩阵, , σ, σ。

    进一步得到:

    3.4 GP模型的超参数

    注意到,以上关于 概率分布的预测包含参数 σ σ,我们称之为 GP 模型的超参数。需要指出的是,GP 模型是一种非参数(non-parametric)模型(这里的参数应该类比神经网络的权重和偏置),超参数是独立于模型拟合过程的自由参数。

    回顾对于目标函数 的先验假设:

    在无观测数据的情况下,符合该先验的函数构成一个函数集合。通过多元高斯分布采样(参阅[GPML, Appendix A, A.2]),我们可以得到 σ时, 关于 的一种采样结果(考虑到可视化的便利性, 为 1 维),并由插值方法得到函数曲线,如图 3:

    ▲图3

    可以看到 l 与采样函数随着 变化的剧烈程度有关。关于其他超参数如何影响 GP 模型的探讨,请参阅 [GPML, Chapter 5]。

    通过最大化边缘似然(marginal likelihood) ,可以得到 GP 模型超参数的最优值,通常称该方法为极大似然估计(maximum likelihood estimate, MLE)。 为观测数据, 之所以被称为边缘似然来源于其积分表达式:

    我们可以通过高斯分布的性质得到上述积分结果,不过我们已经从上文得到观测值服从高斯分布:

    即:

    取 log 得到:

    其中, 为矩阵行列式, σ。

    可以看到 仅仅取决于均值常数 ,矩阵 的参数 和随机噪声 σ。我们把 σ统一表示为 ,其中 表示 。由相关的矩阵求导公式(参阅 [GPML, Appendix A, A.3]),容易求得 │关于 的梯度:

    其中, , 。

    此外,容易得到:

    其中, , 表示第 列的列向量。

    接下来我们可以通过类似梯度上升的优化算法得到最优参数值。

    其他 GP 模型的超参数优化方法,如极大后验估计(maximum a posteriori, MAP)和完全贝叶斯估计(fully Bayesian) 可参阅 A Tutorial on Bayesian Optimization. Peter I. Frazier. 2018.。

    3.5 协方差函数

    不同的协方差函数本质上隐含了对目标函数性质的不同假设。如果协方差函数是关于 的函数,那么它具有平移不变性,我们称它是平稳协方差函数(stationary covariance function),进一步,如果是关于 的函数,则该函数具有各向同性(isotropic)。可见,SE 函数是平稳的且各向同性的。

    对于完全取决于内积 的函数,我们称之为内积协方差函数(dot product covariance function),它具有旋转不变形,但不是平稳的。一个内积协方差函数的例子:

    平滑性(smoothness)。随机过程的平滑性由均方可微性(mean square differentiability)决定,比如,SE 函数对应的高斯过程是无限均方可微的。关于均方导数、均方可微的定义你可以自行了解。

    以下介绍几个常见的平稳协方差函数形式。为了简洁,令 。

    a. 伽马指数函数(γ-exponential covariance function)

    除了 (相当于 SE)以外,它是非均方可微的。图4展示了 时的采样。

    ▲ 图4

    b. 马顿函数(The Matérn class of covariance functions)

    其中, ν为修正贝塞尔函数(modified Bessel function), ν为伽玛函数(gamma function)。图 5 展示了 ν时的采样。

    ▲图5

    马顿函数在 ν均方不可微,而在 ν时为高阶均方可微。在一些论文中建议用 ν的马顿函数作为先验,它是二阶均方可微的,具有以下形式:

    c. 二次有理函数(rational quadratic covariance function)

    图6展示了 时的采样。

    ▲图6

    以上协方差函数还有各向异性(anisotropic)的版本,可以通过替换 得到, 为对角矩阵。注意到各向同性的 SE 函数只有一个超参数 ,其各向异性版本则有 个超参数, 为 的维度。

    3.6 采样函数

    现在我们已经可以根据已有观测数据 得到一个用于预测新样本的 GP 模型 ,接下来我们考虑采样函数(acquisition function)的部分。采样函数的作用是让每一次采样都尽可能接近目标函数的极大值/极小值,以此提升极值点搜索效率。具体地,我们用 表示给定 GP 模型的采样函数,对于目标函数的下一次采样:

    GP 模型给出的是目标函数的均值 μ和方差 σ,一个直接的策略是,选择更大概率比当前观测数据的目标函数值更大的点(假设我们的目标是寻找极大值),令 为当前观测数据的最大值,可以得到采样函数:

    其中, 是标准正态累积分布函数。

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

    通过分析可知,采样函数 倾向于以很高的概率略大于 的点,而不是以较低的概率大于 更多的点;前者更侧重以更高的把握取得提升(exploitation),后者侧重于探索高风险高收益的区域(exploration)。过于强调 exploitation 会导致优化过程陷入局部极值点,强调 exploration 则可能导致优化目标一直无法得到提升。因此采样函数的主要设计原则就是平衡 exploitation 和 exploration。以下列出几个常见的采样函数。

    a. Probability of improvement (PI)

    上述公式由 得到, 可以控制 exploration 的程度。论文作者建议对参数 建立一个规划表,在早期采样中设置高一些以强调 exploration,然后逐渐调低数值至零。

    b. Expected improvement (EI)

    其中, 是标准高斯分布的概率密度函数。EI 通过分析采样值提升的数学期望 得到, 同样用于平衡 exploitation-exploration,相关论文通过实验表明 可以在几乎所有实验案例中取得不错的表现。

    c. Upper confidence bound (UCB & GP-UCB)

    UCB 由体现预期收益的部分 μ和体现风险的部分 κ σ构成,并通过参数 κ控制 exploration。

    GP-UCB的 随采样进度 t 而变化,在原论文中实验采用的公式是:

    实验中 δ。 表示对 的定义域 进行离散化取值得到的点数量,比如对于 1 维的情况, ,每隔 取一个 值,则 。论文还提到在实验中通过对 缩小 5 倍,可以获得性能提升 Gaussian Process Optimization in the Bandit Setting: No Regret and Experimental Design. Niranjan Srinivas, Andreas Krause, Sham M. Kakade, Matthias Seeger. 2009.。

    总结

    协方差函数的选择。SE 函数是最常用的,但是因为基于 SE 的高斯过程是无限均方可微的,可见 SE 隐含了对目标函数平滑性的极端假设,因此有论文建议用 ν的马顿函数 Practical Bayesian Optimization of Machine Learning Algorithms. Jasper Snoek, Hugo Larochelle, Ryan P. Adams. 2012.。

    均值函数。常数是比较常见的均值函数设置,如果目标函数可能有某种变化趋势,可以考虑采用参数化的均值函数,形如A Tutorial on Bayesian Optimization. Peter I. Frazier. 2018.,或者基于概率模型的方法[GPML, Chapter 2]。

    采样函数的选择。对于选择哪个采样函数目前没有明确的规则,有论文提出用组合采样函数的方法可以得到比单独使用更好的实验表现,参阅 Portfolio Allocation for Bayesian Optimization. Eric Brochu, Matthew W. Hoffman, Nando de Freitas. 2010.。其他采样函数,如 knowledge-gradient The Knowledge-Gradient Policy for Correlated Normal Beliefs. Peter Frazier, Warren Powell, Savas Dayanik. 2008.,entropy search (ES) Entropy Search for Information-Efficient Global Optimization. Philipp Hennig, Christian J. Schuler. 2012.,predictive entropy search (PES) Predictive Entropy Search for Efficient Global Optimization of Black-box Functions. José Miguel Hernández-Lobato, Matthew W. Hoffman, Zoubin Ghahramani. 2014.,结合 fully Bayesian 的GP EI MCMC Practical Bayesian Optimization of Machine Learning Algorithms. Jasper Snoek, Hugo Larochelle, Ryan P. Adams. 2012.,提升采样函数效率的 mixture cross-entropy algorithm Surrogating the surrogate: accelerating Gaussian-process-based global optimization with a mixture cross-entropy algorithm. R ́emi Bardenet, Bal ́azs K ́egl. 2010.。

    其他贝叶斯优化算法。采用随机森林建模的 Sequential Model-based Algorithm Configuration (SMAC) Sequential Model-Based Optimization for General Algorithm Configuration. Frank Hutter, Holger H. Hoos, Kevin Leyton-Brown. 2011.,更适合高维度、离散化、超参数间有条件依赖的 Tree Parzen Estimator (TPE) Algorithms for Hyper-Parameter Optimization. James Bergstra, R ́emi Bardenet, Yoshua Bengio, Bal ́azs K ́egl. 2011.,以及提升 GP 模型计算效率的 SPGPs 和 SSGPs Taking the Human Out of the Loop: A Review of Bayesian Optimization. Bobak Shahriari, Kevin Swersky, Ziyu Wang, Ryan P. Adams, Nando de Freitas. 2016.。

    最新的进展。2018年一篇关于贝叶斯优化的总结性论文 A Tutorial on Bayesian Optimization. Peter I. Frazier. 2018.,比较新的超参数优化算法 Hyperband Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization. Lisha Li, Kevin Jamieson, Giulia DeSalvo, Afshin Rostamizadeh, Ameet Talwalkar. 2017.,结合了TPE和Hyperband的BOHB BOHB: Robust and Efficient Hyperparameter Optimization at Scale. Stefan Falkner, Aaron Klein, Frank Hutter. 2018.,Hyperband 和 BOHB 代码实现 HpBandSter. 2018.。

    附录:部分算法的Python代码示例

    a. 多元高斯分布采样。原理参阅[GPML, Appendix A, A.2]。

    frommatplotlib importpyplot asplt

    importnumpy asnp

    # SE协方差函数

    kernel_se = np.vectorize( lambdax1, x2, l: np.exp(-(x1 - x2) ** 2/ ( 2* l ** 2)))

    defsample_se(x, l, mean= 0):

    # x为numpy数组,e.g. x = np.arange(-5, 5, 0.05)

    x1, x2 = np.meshgrid(x, x)

    n = len(x)

    sigma = kernel_se(x1, x2, l) + np.identity(n) * 0.000000001

    L = np.linalg.cholesky(sigma)

    u = np.random.randn(n)

    y = mean + L @ u

    returny

    c = [ 'red', 'green', 'blue']

    l = [ 3, 1, 0.3]

    fori inrange(len(l)):

    x = np.arange( -5, 5, 0.05)

    y = sample_se(x, l[i])

    plt.plot(x, y, c=c[i], linewidth= 1, label= 'l=%.1f'% l[i])

    plt.xlabel( 'input, x')

    plt.ylabel( 'output, f(x)')

    plt.legend(loc= 'best')

    plt.show

    output:

    b. 由观测数据集(X, Y)得到新样本的均值 和方差 。

    frommatplotlib importpyplot asplt

    importnumpy asnp

    # 目标函数

    objective = np.vectorize( lambdax, std_n= 0: 0.001775* x** 5- 0.055* x** 4+ 0.582* x** 3- 2.405* x** 2+ 3.152* x + 4.678+ np.random.normal( 0, std_n))

    # 超参数

    mean, l, std_f, std_n = 5, 1, 1, 0.0001

    # SE协方差函数

    kernel = lambdar_2, l: np.exp(-r_2 / ( 2* l** 2))

    # 训练集,以一维输入为例

    X = np.arange( 1.5, 10, 3.0)

    X = X.reshape(X.size, 1)

    Y = objective(X).flatten

    # 未知样本

    Xs = np.arange( 0, 10, 0.1)

    Xs = Xs.reshape(Xs.size, 1)

    n, d = X.shape

    t = np.repeat(X.reshape(n, 1, d), n, axis= 1) - X

    r_2 = np.sum(t** 2, axis= 2)

    Kf = std_f** 2* kernel(r_2, l)

    Ky = Kf + std_n** 2* np.identity(n)

    Ky_inv = np.linalg.inv(Ky)

    m = Xs.shape[ 0]

    t = np.repeat(Xs.reshape(m, 1, d), n, axis= 1) - X

    r_2 = np.sum(t** 2, axis= 2).T

    kf = std_f** 2* kernel(r_2, l)

    mu = mean + kf.T @ Ky_inv @ (Y - mean)

    std = np.sqrt(std_f** 2- np.sum(kf.T @ Ky_inv * kf.T, axis= 1))

    x_test = Xs.flatten

    y_obj = objective(x_test).flatten

    plt.plot(x_test, mu, c= 'black', lw= 1, label= 'predicted mean')

    plt.fill_between(x_test, mu + std, mu - std, alpha= 0.2, color= '#9FAEB2', lw= 0)

    plt.plot(x_test, y_obj, c= 'red', ls= '--', lw= 1, label= 'objective function')

    plt.scatter(X.flatten, Y, c= 'red', marker= 'o', s= 20)

    plt.legend(loc= 'best')

    plt.show

    output:

    c. 贝叶斯优化示例。

    frommatplotlib importpyplot asplt

    importnumpy asnp

    # 目标函数

    objective = np.vectorize( lambdax, sigma_n= 0: 0.001775* x** 5- 0.055* x** 4+ 0.582* x** 3- 2.405* x** 2+ 3.152* x + 4.678+ np.random.normal( 0, sigma_n))

    # 采样函数 - GP-UCB

    GPUCB = np.vectorize( lambdamu, sigma, t, ld, delta= 0.1: mu + ( 1* 2* np.log(ld * t** 2* np.pi** 2/ ( 6* delta)))** 0.5* sigma)

    # 超参数

    mean, l, sigma_f, sigma_n = 5, 1, 1, 0.0001

    # 迭代次数

    max_iter = 3

    # SE协方差函数

    kernel = lambdar_2, l: np.exp(-r_2 / ( 2* l** 2))

    # 初始训练样本,以一维输入为例

    X = np.arange( 0.5, 10, 3.0)

    X = X.reshape(X.size, 1)

    Y = objective(X).flatten

    plt.figure(figsize=( 8, 5))

    fori inrange(max_iter):

    Xs = np.arange( 0, 10, 0.1)

    Xs = Xs.reshape(Xs.size, 1)

    n, d = X.shape

    t = np.repeat(X.reshape(n, 1, d), n, axis= 1) - X

    r_2 = np.sum(t** 2, axis= 2)

    Kf = sigma_f** 2* kernel(r_2, l)

    Ky = Kf + sigma_n** 2* np.identity(n)

    Ky_inv = np.linalg.inv(Ky)

    m = Xs.shape[ 0]

    t = np.repeat(Xs.reshape(m, 1, d), n, axis= 1) - X

    r_2 = np.sum(t** 2, axis= 2).T

    kf = sigma_f** 2* kernel(r_2, l)

    mu = mean + kf.T @ Ky_inv @ (Y - mean)

    sigma = np.sqrt(sigma_f** 2- np.sum(kf.T @ Ky_inv * kf.T, axis= 1))

    y_acf = GPUCB(mu, sigma, i + 1, n)

    sample_x = Xs[np.argmax(y_acf)]

    x_test = Xs.flatten

    y_obj = objective(x_test).flatten

    ax = plt.subplot( 2, max_iter, i + 1)

    ax.set_title( 't=%d'% (i + 1))

    plt.ylim( 3, 8)

    plt.plot(x_test, mu, c= 'black', lw= 1)

    plt.fill_between(x_test, mu + sigma, mu - sigma, alpha= 0.2, color= '#9FAEB2', lw= 0)

    plt.plot(x_test, y_obj, c= 'red', ls= '--', lw= 1)

    plt.scatter(X, Y, c= 'red', marker= 'o', s= 20)

    plt.subplot( 2, max_iter, i + 1+ max_iter)

    plt.ylim( 3.5, 9)

    plt.plot(x_test, y_acf, c= '#18D766', lw= 1)

    X = np.insert(X, 0, sample_x, axis= 0)

    Y = np.insert(Y, 0, objective(sample_x))

    plt.show

    output:

    参考文献

    [1] Random Search for Hyper-Parameter Optimization. James Bergstra, Yoshua Bengio. 2012.

    [2] Gaussian Processes for Machine Learning. C. E. Rasmussen, C. K. I. Williams. 2006.

    [3] A Tutorial on Bayesian Optimization. Peter I. Frazier. 2018.

    [4] Gaussian Process Optimization in the Bandit Setting: No Regret and Experimental Design. Niranjan Srinivas, Andreas Krause, Sham M. Kakade, Matthias Seeger. 2009.

    [5] Practical Bayesian Optimization of Machine Learning Algorithms. Jasper Snoek, Hugo Larochelle, Ryan P. Adams. 2012.

    [6] A Tutorial on Bayesian Optimization. Peter I. Frazier. 2018.

    [7] Portfolio Allocation for Bayesian Optimization. Eric Brochu, Matthew W. Hoffman, Nando de Freitas. 2010.

    [8] The Knowledge-Gradient Policy for Correlated Normal Beliefs. Peter Frazier, Warren Powell, Savas Dayanik. 2008.

    [9] Entropy Search for Information-Efficient Global Optimization. Philipp Hennig, Christian J. Schuler. 2012.

    [10] Predictive Entropy Search for Efficient Global Optimization of Black-box Functions. José Miguel Hernández-Lobato, Matthew W. Hoffman, Zoubin Ghahramani. 2014.

    [11] Practical Bayesian Optimization of Machine Learning Algorithms. Jasper Snoek, Hugo Larochelle, Ryan P. Adams. 2012.

    [12] Surrogating the surrogate: accelerating Gaussian-process-based global optimization with a mixture cross-entropy algorithm. R ́emi Bardenet, Bal ́azs K ́egl. 2010.

    [13] Sequential Model-Based Optimization for General Algorithm Configuration. Frank Hutter, Holger H. Hoos, Kevin Leyton-Brown. 2011.

    [14] Algorithms for Hyper-Parameter Optimization. James Bergstra, R ́emi Bardenet, Yoshua Bengio, Bal ́azs K ́egl. 2011.

    [15] Taking the Human Out of the Loop: A Review of Bayesian Optimization. Bobak Shahriari, Kevin Swersky, Ziyu Wang, Ryan P. Adams, Nando de Freitas. 2016.

    [16] A Tutorial on Bayesian Optimization. Peter I. Frazier. 2018.

    [17] Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization. Lisha Li, Kevin Jamieson, Giulia DeSalvo, Afshin Rostamizadeh, Ameet Talwalkar. 2017.

    [18] BOHB: Robust and Efficient Hyperparameter Optimization at Scale. Stefan Falkner, Aaron Klein, Frank Hutter. 2018.

    [19] A Tutorial on Bayesian Optimization of Expensive Cost Functions, with Application to Active User Modeling and Hierarchical Reinforcement Learning. Eric Brochu, Vlad M. Cora, Nando de Freitas. 2010.

    [20] Cross-validation (statistics). Wikipedia.

    [21] Markov chain Monte Carlo. Wikipedia.

    • 稿件确系个人 原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

    • PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志返回搜狐,查看更多

    责任编辑:

    展开全文
  • 模型评估和参数调优本博客根据 百面机器学习,算法工程师带你去面试 一书总结归纳,公式都是出自该书.本博客仅个人总结学习,非商业用途,侵删.网址 http://www.ptpress.com.cn1. 准确率准确率是指分类正确的样本...

    模型评估和参数调优

    本博客根据 百面机器学习,算法工程师带你去面试 一书总结归纳,公式都是出自该书.

    本博客仅为个人总结学习,非商业用途,侵删.

    网址 http://www.ptpress.com.cn

    1. 准确率

    准确率是指分类正确的样本占总样本个数的比例, 即

    其中\(n_{correct}\)为被正确分类的样本个数, \(n_{total}\)为总样本的个数。

    准确率存在明显的缺陷,当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。

    2. 精确率与召回率的权衡

    精确率是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例。

    召回率是指分类正确的正样本个数占真正的正样本个数的比例。

    Precision值和Recall值是既矛盾又统一的两个指标, 为了提高Precision值, 分类器需要尽量在“更有把握”时才把样本预测为正样本, 但此时往往会因为过于保守而漏掉很多“没有把握”的正样本, 导致Recall值降低。

    对于一个排序模型来说, 其P-R曲线上的一个点代表着, 在某一阈值下, 模型大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本, 此时返回结果对应的召回率和精确率。

    如下图:整条P-R曲线是通过将阈值从高到低移动而生成的。

    F1_score是精准率和召回率的调和平均值, 它定义为:

    3. 平方根误差的意外

    当构建回归模型时,无论使用哪个模型,得到的RMSE指标都非常高,但是事实的预测误差都小于1%,预测结果相当不错,造成这种RMSE指标居高不下的可能原因是什么?

    RMSE经常被用来衡量回归模型的好坏。下面是RMSR的计算公式:

    其中, \(y_i\)是第i个样本点的真实值, 是第i个样本点的预测值, n是样本点的个数 。

    一般情况下, RMSE能够很好地反映回归模型预测值与真实值的偏离程度。 但在实际问题中, 如果存在个别偏离程度非常大的离群点( Outlier) 时, 即使离群点数量非常少, 也会让RMSE指标变得很差。

    针对这个问题, 有什么解决方案呢 ?

    第一,如果离群点是噪声点的话可以在数据预处理时过滤掉。

    第二,如果不是噪声的,需要提高模型的预测能力,将离群点产生的机制建模进去。

    第三,可以找一个更合适的指标来评估模型。比如 平均绝对百分比误差(Mean Absolute Percent Error, MAPE),它定义为:

    相比RMSE, MAPE相当于把每个点的误差进行了归一化, 降低了个别离群点带来的绝对误差的影响 。

    4. 什么是ROC曲线,如何计算AUC

    ROC曲线的横坐标为假阳性率(False Positive Rate, FPR) ; 纵坐标为真阳性率(True Positive Rate, TPR)。FPR和TPR的计算方法分别为

    上式中, P是真实的正样本的数量, N是真实的负样本的数量,TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被分类器预测为正样本的个数。

    ?事实上, ROC曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的,截断点就是指区分正负预测结果的阈值。

    ?通过动态地调整截断点,从最高的得分开始(实际上是从正无穷开始对应着ROC曲线的零点),逐渐调整到最低得分,每一个截断点都会对应一个FPR和TPR, 在ROC图上绘制出每个截断点对应的位置, 再连接所有点就得到最终的ROC曲线。

    ?如何计算AUC?

    ?AUC是指ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出模型的性能。

    ?计算AUC值只需要沿着ROC横轴做积分就可以了。由于ROC曲线一般都处于y=x这条直线的上方(如果不是的话, 只要把模型预测的概率反转成1-p就可以得到一个更好的分类器,所以AUC的取值一般在0.5~1之间。AUC越大, 说明分类器越可能把真正的正样本排在前面, 分类性能越好 。

    ?ROC曲线和P-R曲线有什么特点?

    ?相比P-R曲线, ROC曲线有一个特点, 当正负样本的分布发生变化时, ROC曲线的形状能够基本保持不变, 而P-R曲线的形状一般会发生较剧烈的变化。

    5. 余弦距离

    在分析两个特征向量之间的相似性时, 常使用余弦相似度来表示。 余弦相似度的取值范围是[-1,1],相同的两个向量之间的相似度为1。 如果希望得到类似于距离的表示, 将1减去余弦相似度即为余弦距离。 因此,余弦距离的取值范围为[0,2], 相同的两个向量余弦距离为0。

    欧氏距离体现数值上的绝对差异, 而余弦距离体现方向上的相对差异。

    例如, 统计两部剧的用户观看行为, 用户A的观看向量为(0,1), 用户B为(1,0); 此时二者的余弦距离很大, 而欧氏距离很小; 我们分析两个用户对于不同视频的偏好, 更关注相对差异, 显然应当使用余弦距离。 而当我们分析用户活跃度, 以登陆次数(单位: 次)和平均观看时长(单位: 分钟)作为特征时, 余弦距离会认为(1,10)、 (10,100)两个用户距离很近; 但显然这两个用户活跃度是有着极大差异的, 此时我们更关注数值绝对差异, 应当使用欧氏距离 。

    6. A/B测试和实验组对比组

    为什么需要进行在线A/B测试?

    离线评估无法完全消除模型过拟合的影响, 因此, 得出的离线评估结果无法完全替代线上评估结果。

    离线评估无法完全还原线上的工程环境。 一般来讲, 离线评估往往不会考虑线上环境的延迟、 数据丢失、 标签数据缺失等情况。 因此, 离线评估的结果是理想工程环境下的结果。

    线上系统的某些商业指标在离线评估中无法计算,如用户点击率、 留存时长、 PV访问量等

    如何进行A/B测试和划分实验组和对比组?

    进行A/B测试的主要手段是进行用户分桶, 即将用户分成实验组和对照组, 对实验组的用户施以新模型, 对对照组的用户施以旧模型。 在分桶的过程中, 要注意样本的独立性和采样方式的无偏性, 确保同一个用户每次只能分到同一个桶中, 在分桶过程中所选取的user_id需要是一个随机数, 这样才能保证桶中的样本是无偏的。

    7. 模型评估方法

    Holdout检验:

    Holdout 检验是最简单也是最直接的验证方法, 它将原始的样本集合随机划分成训练集和验证集两部分。

    交叉检验:

    k-fold交叉验证: 首先将全部样本划分成k个大小相等的样本子集; 依次遍历这k个子集, 每次把当前子集作为验证集, 其余所有子集作为训练集, 进行模型的训练和评估; 最后把k次评估指标的平均值作为最终的评估指标。 在实际实验中, k经常取10

    留一验证:每次留下1个样本作为验证集, 其余所有样本作为测试集。 在样本总数较多的情况下, 留一验证法的时间开销极大。 留一验证是留p验证的特例。 留p验证是每次留下p个样本作为验证集, 而从n个元素中选择p个元素有 种可能, 因此它的时间开销更是远远高于留一验证。

    自助法:

    自助法是基于自助采样法的检验方法。 对于总数为n的样本集合, 进行n次有放回的随机抽样, 得到大小为n的训练集。 n次采样过程中, 有的样本会被重复采样, 有的样本没有被抽出过, 将这些没有被抽出的样本作为验证集, 进行模型验证, 这就是自助法的验证过程 。

    在自助法的采样过程中, 对n个样本进行n次自助抽样, 当n趋于无穷大时,最终有多少数据从未被选择过?

    一个样本在一次抽样过程中未被抽中的概率为

    , n次抽样均未抽中的概率为

    。 当n趋于无穷大时, 概率为

    根据重要极限,

    ,所以有

    因此, 当样本数很大时, 大约有36.8%的样本从未被选择过, 可作为验证集。

    8. 超参数调优方法

    网格搜索:

    通过查找搜索范围内的所有的点来确定最优值 。

    网格搜索法一般会先使用较广的搜索范围和较大的步长, 来寻找全局最优值可能的位置; 然后会逐渐缩小搜索范围和步长, 来寻找更精确的最优值。 这种操作方案可以降低所需的时间和计算量, 但由于目标函数一般是非凸的, 所以很可能会错过全局最优值。

    随机搜索:

    不再测试上界和下界之间的所有值, 而是在搜索范围中随机选取样本点。 它的理论依据是, 如果样本点集足够大, 那么通过随机采样也能大概率地找到全局最优值, 或其近似值。

    贝叶斯优化算法 :

    网格搜索和随机搜索在测试一个新点时, 会忽略前一个点的信息;而贝叶斯优化算法则充分利用了之前的信息 。贝叶斯优化算法通过对目标函数形状进行学习, 找到使目标函数向全局最优值提升的参数。

    具体来说, 它学习目标函数形状的方法是, 首先根据先验分布, 假设一个搜集函数; 然后, 每一次使用新的采样点来测试目标函数时, 利用这个信息来更新目标函数的先验分布; 最后, 算法测试由后验分布给出的全局最值最可能出现的位置的点。

    需要注意的地方, 一旦找到了一个局部最优值, 它会在该区域不断采样, 所以很容易陷入局部最优值。 为了弥补这个缺陷, 贝叶斯优化算法会在探索和利用之间找到一个平衡点, “探索”就是在还未取样的区域获取采样点;而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。

    9. 过拟合与欠拟合

    过拟合是指模型对于训练数据拟合呈过当的情况 ,模型在训练集上的表现很好, 但在测试集和新数据上的表现较差。

    欠拟合指的是模型在训练和预测时表现都不好的情况。

    降低“过拟合”风险的方法 ?

    从数据入手, 获得更多的训练数据,更多的样本可以让模型学习到更多的有效特征,减少噪声的影响。直接增加实验数据比较困难,可以通过数据增强的方式扩充。

    降低模型复杂度。 在数据较少时, 模型过于复杂是产生过拟合的主要因素, 适当降低模型复杂度可以避免模型拟合过多的采样噪声。 例如, 在神经网络模型中减少网络层数、 神经元个数等; 在决策树模型中降低树的深度、 进行剪枝等 。

    正则化方法。 给模型的参数加上一定的正则约束, 比如将权值的大小加入到损失函数中。 以L2正则化为例:

    集成学习方法。 集成学习是把多个模型集成在一起, 来降低单一模型的过拟合风险, 如Bagging方法 。

    降低“欠拟合”风险的方法 ?

    添加新特征。 当特征不足或者现有特征与样本标签的相关性不强时, 模型容易出现欠拟合。 通过挖掘“上下文特征”“ID类特征”“组合特征”等新的特征, 往往能够取得更好的效果。 在深度学习潮流中, 有很多模型可以帮助完成特征工程, 如因子分解机、 梯度提升决策树、 Deep-crossing等都可以成为丰富特征的方法。

    增加模型复杂度。 简单模型的学习能力较差, 通过增加模型的复杂度可以使模型拥有更强的拟合能力。 例如, 在线性模型中添加高次项, 在神经网络模型中增加网络层数或神经元个数等。

    减小正则化系数。

    原文:https://www.cnblogs.com/hhhuang/p/12329150.html

    展开全文
  • 每个算法工程师都应该了解的流行超参数调优技术。作者:Sivasai Yadav Mudugandla编译:McGL公众号:PyVision(欢迎关注,专注CV,偶尔CS)4 Hyper-Parameter Tuning Techniqueshttps://medium....

    每个算法工程师都应该了解的流行超参数调优技术。

    作者:Sivasai Yadav Mudugandla
    编译:McGL
    公众号:PyVision(欢迎关注,专注CV,偶尔CS)

    4 Hyper-Parameter Tuning Techniques

    https://medium.com/swlh/4-hyper-parameter-tuning-techniques-924cb188d199

    a767c44b132ec5a387b75f451477e770.png

    引言

    维基百科上说“超参数优化(optimization)调优(tuning)是为学习算法选择一组最优超参数的问题”


    机器学习工作流中最难的部分之一是为模型寻找最佳的超参数。机器学习模型的性能与超参数直接相关。超参数调优越多,得到的模型就越好。调整超参数真的很难又乏味,更是一门艺术而不是科学。


    超参数(Hyper-parameter)


    超参数是在建立模型时用来控制算法行为的参数。这些参数不能从正常的训练过程中学习。他们需要在训练模型之前被分配。

    82fec142b4a70605302e7f2d8f5eed6d.png
    Dr.Mukesh Rao的超参数样本清单

    目录

    1. 传统或手动调参
    2. 网格搜索
    3. 随机搜索
    4. 贝叶斯搜索


    1. 传统或手动调参


    在传统的调优中,我们通过手动检查随机超参数集来训练算法,并选择最适合我们目标的参数集。
    让我们看看代码:

    #importing required libraries
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.model_selection import KFold , cross_val_score
    from sklearn.datasets import load_wine
    
    wine = load_wine()
    X = wine.data
    y = wine.target
    
    #splitting the data into train and test set
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.3,random_state = 14)
    
    #declaring parameters grid
    k_value = list(range(2,11))
    algorithm = ['auto','ball_tree','kd_tree','brute']
    scores = []
    best_comb = []
    kfold = KFold(n_splits=5)
    
    #hyperparameter tunning
    for algo in algorithm:
      for k in k_value:
        knn = KNeighborsClassifier(n_neighbors=k,algorithm=algo)
        results = cross_val_score(knn,X_train,y_train,cv = kfold)
    
        print(f'Score:{round(results.mean(),4)} with algo = {algo} , K = {k}')
        scores.append(results.mean())
        best_comb.append((k,algo))
    
    best_param = best_comb[scores.index(max(scores))]
    print(f'nThe Best Score : {max(scores)}')
    print(f"['algorithm': {best_param[1]} ,'n_neighbors': {best_param[0]}]")

    缺点:

    1. 不能保证得到最佳的参数组合。
    2. 这是一种反复试验的方法,因此会消耗更多的时间。


    2. 网格搜索


    网格搜索是一种基本的超参数调整技术。它类似于手动调优,为网格中指定的所有给定超参数值的每个排列建立模型,并评估和选择最佳模型。考虑上面的例子,它有两个超参数 k_value =[2,3,4,5,6,7,8,9,10] algorithm = [‘auto’ , ’ball_tree’ , ’kd_tree’ , ’brute’],在这种情况下,它总共构建了9 * 4 = 36个不同的模型。

    1bc7da4f957b8ec372b368eca18bc0af.gif

    让我们来了解一下 sklearn 的 GridSearchCV 是如何工作的,

    from sklearn.model_selection import GridSearchCV
    
    knn = KNeighborsClassifier()
    grid_param = { 'n_neighbors' : list(range(2,11)) , 
                  'algorithm' : ['auto','ball_tree','kd_tree','brute'] }
                  
    grid = GridSearchCV(knn,grid_param,cv = 5)
    grid.fit(X_train,y_train)
    
    #best parameter combination
    grid.best_params_
    
    #Score achieved with best parameter combination
    grid.best_score_
    
    #all combinations of hyperparameters
    grid.cv_results_['params']
    
    #average scores of cross-validation
    grid.cv_results_['mean_test_score']

    缺点:


    由于它尝试每一种超参数组合,并根据交叉验证分数选择最佳组合,这使得 GridsearchCV 极其缓慢。


    3. 随机搜索


    使用随机搜索代替网格搜索的动机是,在许多情况下,所有的超参数可能并非同等重要。随机搜索从超参数空间中随机选择参数组合,参数按 n_iter 给定的迭代次数进行选择。随机搜索已经被实践证明比网格搜索得到的结果更好。

    558790748d1951781d81412a2b034d10.gif

    让我们了解一下 sklearn 的 RandomizedSearchCV 是如何工作的,

    from sklearn.model_selection import RandomizedSearchCV
    
    knn = KNeighborsClassifier()
    
    grid_param = { 'n_neighbors' : list(range(2,11)) , 
                  'algorithm' : ['auto','ball_tree','kd_tree','brute'] }
    
    rand_ser = RandomizedSearchCV(knn,grid_param,n_iter=10)
    rand_ser.fit(X_train,y_train)
    
    #best parameter combination
    rand_ser.best_params_
    
    #score achieved with best parameter combination
    rand_ser.best_score_
    
    #all combinations of hyperparameters
    rand_ser.cv_results_['params']
    
    #average scores of cross-validation
    rand_ser.cv_results_['mean_test_score']

    缺点:
    随机搜索的问题是它不能保证给出最佳的参数组合。


    4. 贝叶斯优化


    贝叶斯优化属于一类被称为sequential model-based optimization(SMBO)的优化算法。这些算法使用先前对损失 f 的观测,来确定下一个(最佳)点来取样 f。该算法大致可以概括如下。

    1. 使用先前计算过的点 X1: n,计算损失 f 的后验期望值。
    2. 在一个新的点 Xnew取样损失 f ,它最大化了 f 的期望的某些效用函数。该函数指定 f 域的哪些区域是最适合采样的。


    重复这些步骤,直到达到某种收敛准则。

    08f806d89def236e6841d12c14f0600b.gif

    让我们用 scikit-optimize 的BayesSearchCV来理解这一点安装: pip install scikit-optimize

    from skopt import BayesSearchCV
    
    import warnings
    warnings.filterwarnings("ignore")
    
    # parameter ranges are specified by one of below
    from skopt.space import Real, Categorical, Integer
    
    knn = KNeighborsClassifier()
    #defining hyper-parameter grid
    grid_param = { 'n_neighbors' : list(range(2,11)) , 
                  'algorithm' : ['auto','ball_tree','kd_tree','brute'] }
    
    #initializing Bayesian Search
    Bayes = BayesSearchCV(knn , grid_param , n_iter=30 , random_state=14)
    Bayes.fit(X_train,y_train)
    
    #best parameter combination
    Bayes.best_params_
    
    #score achieved with best parameter combination
    Bayes.best_score_
    
    #all combinations of hyperparameters
    Bayes.cv_results_['params']
    
    #average scores of cross-validation
    Bayes.cv_results_['mean_test_score']


    实现贝叶斯搜索的另一个类似的库是 bayesian-optimization

    安装 : pip install bayesian-optimization缺点:
    在2维或3维搜索空间中,需要十几个样本才能得到一个良好的替代曲面(surrogate surface); 增加搜索空间的维数需要更多的样本。



    总结


    在找到参数的最佳组合的保证和计算时间之间总是有一个权衡。如果你的超参数空间(超参数个数)非常大,那么使用随机搜索找到超参数的潜在组合,然后使用该局部的网格搜索(超参数的潜在组合)来选择最优特征。

    References

    1. https://thuijskens.github.io/2016/12/29/bayesian-optimisation/
    2. scikit-optimize Documentation
    3. bayesian-optimization Documentation
    展开全文
  • 1. Dynamic Sampling (动态采样)The purpose of dynamic sampling is to improve server performance by determining more accurate selectivity and cardinality estimates.More accurate selectivity and ...

    1. Dynamic Sampling (动态采样)

    The purpose of dynamic sampling is to improve server performance by determining more accurate selectivity and cardinality estimates.

    More accurate selectivity and cardinality estimates allow the optimizer to produce better performing plans.

    (动态采样的目的是为了通过更精确的seletivity值cardinality值来提高服务器性能,更精确的seletivity值cardinality值可以让优化器提供更好的执行计划。)

    Estimate single-table predicate selectivities when collected statistics cannot be used or are likely to lead to significant errors in estimation.

    Estimate table cardinality for tables without statistics or for tables whose statistics are too out of date to trust.

    (当没有使用statistics统计信息或者可能导致评估错误的时候,可以提前预估出来单表的selectivities值。

    当表没有收集统计信息时,或者表的统计信息过期的时候,可以估算出表的cardinality值。)

    2. How Dynamic Sampling Works(动态采样如何工作)

    The primary performance attribute is compile time.

    Oracle determines at compile time whether a query would benefit from dynamic sampling.

    If so, a recursive SQL statement is issued to scan a small random sample of the table's blocks,

    and to apply the relevant single table predicates to estimate predicate selectivities.

    The sample cardinality can also be used, in some cases, to estimate table cardinality.

    (主要的性能影响被归因于编译时间。ORACLE来判断在编译的时候,动态采样是否对查询是否有意。如果是,那么sql语句会发起

    相对应表的快的小部分随机采样,然后应用相关的单表去前瞻性预估相应的selectivities值。

    3. When to Use Dynamic Sampling(什么时候使用动态采样)

    (1) A better plan can be found using dynamic sampling.

    使用动态采样可以更好的生成执行计划

    (2) The sampling time is a small fraction of total execution time for the query.

    动态采样的时间占查询执行的时间一小部分

    (3) The query will be executed many times.

    查询语句将被执行许多次

    4. How to Use Dynamic Sampling to Improve Performance

    (如何使用动态采样提高性能)

    Level 0: dynamic sampling will not be done.

    (动态采样不会收集)

    Level 1: (default value) dynamic sampling will be performed if all of the following conditions are true:

    默认值,如果如下的条件全部满足的时候,那么动态采样将被执行

    (1) There is more than one table in the query.

    有超过一个表的查询

    (2) Some table has not been analyzed and has no indexes.

    一些表没有被分析,而且没有index

    (3) The optimizer determines that a relatively expensive table scan would be required for this unanalyzed table.        优化器认为这个没有被分析的表会消耗相当昂贵的表扫描资源)

    Level 2: Apply dynamic sampling to all unanalyzed tables.

    The number of blocks sampled is the default number of dynamic sampling blocks.

    (针对所有没有被分析的表应用动态采样,采样blocks的数量是默认的动态采样的数量)

    Level 3: Apply dynamic sampling to all tables that meet Level 2 criteria, plus all tables for which standard selectivity estimation used a guess for some predicate

    that is a potential dynamic sampling predicate.

    The number of blocks sampled is the default number of dynamic sampling blocks.

    (根据level2的标准,应用动态采样到所有的表,以及为一些标准selectivity值的表使用一些采样预测,采样blocks的数量是默认的动态采样的数量)

    Level 4: Apply dynamic sampling to all tables that meet Level 3 criteria, plus all tables that have single-table predicates that reference 2 or more columns.

    The number of blocks sampled is the default number of dynamic sampling blocks.

    (根据level3的标准,应用动态采样到所有的表,以及一些大于2列的单表的预测。采样blocks的数量是默认的动态采样的数量)

    Level 5: Apply dynamic sampling to all tables that meet the Level 4 criteria using 2 times the default number of dynamic sampling blocks.

    (根据level4的标准,应用动态采样到所有的表,并且采样blocks的数量是默认的动态采样的数量的2倍)

    Level 6: Apply dynamic sampling to all tables that meet the Level 5 criteria using 4 times the default number of dynamic sampling blocks.

    (根据level5的标准,应用动态采样到所有的表,并且采样blocks的数量是默认的动态采样的数量的4倍)

    Level 7: Apply dynamic sampling to all tables that meet the Level 6 criteria using 8 times the default number of dynamic sampling blocks.

    (根据level6的标准,应用动态采样到所有的表,并且采样blocks的数量是默认的动态采样的数量的8倍)

    Level 8: Apply dynamic sampling to all tables that meet the Level 7 criteria using 32 times the default number of dynamic sampling blocks.

    (根据level7的标准,应用动态采样到所有的表,并且采样blocks的数量是默认的动态采样的数量的32倍)

    Level 9: Apply dynamic sampling to all tables that meet the Level 8 criteria using 128 times the default number of dynamic sampling blocks.

    (根据level8的标准,应用动态采样到所有的表,并且采样blocks的数量是默认的动态采样的数量的128倍)

    Level 10: Apply dynamic sampling to all tables that meet the Level 9 criteria using all blocks in the table.

    (根据level9的标准,应用动态采样到所有的表,并且采样表中所有的blocks)

    Increasing the value of the parameter results in more aggressive application of dynamic sampling, in terms of both the type of tables sampled (analyzed or unanalyzed) and the amount of I/O spent on sampling.

    Dynamic sampling is repeatable if no rows have been inserted, deleted, or updated in the table being sampled.

    (增加这个参数的值,从表的采样和I/O消耗的角度来说,动态采样将导致更多资源的征用。

    在被采样的表中,即使没有记录被insert, deleted, update,采样的操作仍会被重复。)

    来自:http://space.itpub.net/9252210/viewspace-608724

    展开全文
  • 第一个区的第一个块段头块(segmentheader)。其中一些块(第4、9、10、19和21块)被缓存在高速缓存中。一个数据库进程对这个段执行一次串行的全扫描(并行全扫描有其特殊的行为,将在后面介绍),并不能通过一次单独的...
  • 本篇对XGBoost主要参数进行解释,方括号内是对应scikit-learn中XGBoost算法模块的叫法...1. eta [default=0.3, alias: learning_rate]学习率,可以缩减每一步的权重值,使得模型更加健壮: 典型值一般设置:0.01-...
  • 学习器模型中一般有两个参数:一类参数可以从数据中学习估计得到...我们搜索超参数空间学习器模型找到最合理的超参数,可以通过以下方法获得学习器模型的参数列表和当前取值:estimator.get_params()sklearn 提...
  • rf中的超参数主要森林中的决策树的数量(n_estimators) 以及每个树在分割节点时考虑的特征的数量(max_features)。 并且超参数优化的标准程序是通过交叉验证来解决过度拟合问题。1)Random Search with Cross ...
  • 为什么随机森林的树深度往往大于 GBDT 的树深度 其实就机器学习算法来说,其泛化误差可以分解为两部分,偏差(bias)和方差(variance)。偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力...
  • 作者:吴毅, 王远立TiKV 底层使用了 RocksDB 作为存储引擎,然而 RocksDB 配置选项很多,很多情况下只能通过反复测试或者依靠经验来调优,甚至连 RocksDB 的开发者都自嘲,他们没办法弄清楚每个参数调整对性能的影响...
  • 译注:文内提供的代码和运行结果有一定差异,可以从这里下载完整...所以大家其实也可以小小修改一下代码,不一定完全跟着教程做~ ^0^需要提前安装好的库:numpy,matplotlib,pandas,xgboost,scikit-learn简介如果你...
  • 使用Optuna进行超参数调整模型超参数是模型外部的配置,无法从数据中估计其值。我们无法知道给定问题上模型超参数的最佳值。...'超参数但是为什么我们担心超参数呢?这是因为这些参数直接控制训练算法的行为。这些...
  • 什么是超参数?学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter)。还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper parameter)。超参数是...
  • 我国环保标准规定固定污染源排放的污染...烟气在线监测系统汇总图所有需要转换标准状态下干烟气的计算都离不开烟气参数的准确测量,例如污染物排放总量的计算离不开烟气流量的监测,湿基测量的污染物浓度数据转换...
  • 1、为什么要用神经网络?对于非线性分类问题,如果用多元线性回归进行分类,需要构造许多高次项,导致特征特多,学习参数过多,从而复杂度太高。在神经网络中引入激活函数一个重要的原因就是为了引入非线性。2、CNN...
  • 让我们回想一下,曾经作为编程新手的我们是如何调优程序的?通常是在没有数据的情况下依靠主观臆断来瞎蒙,稍微有些经验的同学则会对差异代码进行二分或者逐段调试。这种定位问题的方式不仅耗时耗力,而且还不具有...
  • 采样计算梯度1. 随机梯度下降法有什么问题?通过对代价函数求权重的梯度,我们可以一次性对所有的参数 进行优化,但是如果每次等全部计算完成再优化升级,我们将等待很长时间(对于很大的语料库来说)。所以我们采用...
  • 本文转载自微信公众号「编程珠玑」,作者守望先生 。转载本文请联系编程珠玑公众号。原文链接:https://mp.weixin.qq.com/s/pZtqz2tl4ArbCnzdDdDPwQ为了取得...为什么要性能优化也许是想要支持更高的吞吐量,想要...
  • 选自Machine Learning Performance Improvement Cheat Sheet作者:Jason Brownlee翻译&整理 By Sam之前讲了一些机器学习的算法和特征工程...这里有一份关于模型调优的备忘录,每当出现上述问题的时候或者是建模...
  • 前言在当下的时代,懂高并发性能调优,一定是你在技术进阶赛道变得牛逼的加分项。不论,你是开发,架构还是管理岗,亦或者是其他互联网相关岗位。 因为毫不夸张的说,在现在动辄过千万级的并发流量环境下,懂得并发...
  • 前言在当下的时代,懂高并发性能调优,一定是你在技术进阶赛道变得牛逼的加分项。不论,你是开发,架构还是管理岗,亦或者是其他互联网相关岗位。 因为毫不夸张的说,在现在动辄过千万级的并发流量环境下,懂得并发...
  • 9.1 什么是变量绑定,为什么要做变量绑定 232 9.2 为什么说OLTP必须要求变量绑定而OLAP不应该绑定变量 241 9.3 bind peaking 248 第10章 SQL_TRACE和10046事件 254 10.1 SQL_TRACE 254 10.2 TKPROF工具 256 ...
  • 12.2.3 采样算法 239 12.2.4 频繁模式树算法 239 12.2.5 分区算法 241 12.2.6 其他类型的关联规则 242 12.2.7 关联规则的附加考虑 244 12.3 分类 244 12.4 聚类 246 12.5 其他数据挖掘...
  • s Subclass ->指定设备的子类名称,subclass包括什么类型可用参数P显示; t Type ->指定设备类型名称; 查看系统中所有的外置物理磁盘 lsdev -Cc pdisk -s ssar -H name status location description pdisk0 ...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

参数调优为什么要采样