AutoML-第一章 超参数优化

2023-11-13

第一章:超参数优化

摘要

最近对具有许多超参数的复杂且计算成本很高的机器学习模型(例如自动化机器学习(AutoML)框架和深度神经网络)的兴趣引起了对超参数优化(HPO)的重新研究。在本章中,我们概述了 HPO 最主要的方法。我们首先讨论基于无模型方法和贝叶斯优化的黑盒函数优化方法。 由于许多现代机器学习应用程序对计算的高需求使得纯黑盒优化的成本极其高昂,因此我们接下来将重点介绍现代多保真方法,该方法使用黑盒函数便宜得多的变体来近似评估超参数设置的质量。最后,我们指出有待解决的问题和未来的研究方向。

简介

每个机器学习系统都有超参数,自动机器学习(AutoML)的最基本任务是自动设置这些超参数,以优化性能。特别是最近的深度神经网络,关键取决于神经网络的体系结构,正则化和优化的各种超参数选择。自动化超参数优化(HPO)有几个重要的用例。它可以

  • 减少应用机器学习所需的人力。 这在 AutoML 的应用中尤其重要。
  • 提高机器学习算法的性能(通过针对当前问题进行定制裁剪);这在多项研究中为重要的机器学习基准带来了新的最佳性能。
  • 提高科学研究的可重复性和公平性。显然,自动 HPO 比手动搜索具有更高的可重复性。因为不同的方法只有在针对手头的问题进行了相同水平的调整时,才可以公平地比较它们,所以它可以促进公平性。

HPO 问题的历史可追溯到 1990 年代,而且还早就确立了不同的超参数配置最适合于不同的数据集。相比之下,HPO 可用于使通用管道适应特定的应用程序域,这是一个全新的见解。 如今,人们还普遍认为调节后的超参数优于普通机器学习库提供的默认设置。

由于公司越来越多地使用机器学习,因此 HPO 也引起了巨大的商业兴趣,并且在公司内部工具中作为机器学习云服务的一部分发挥了越来越大的作用,或者自身作为一种服务。

HPO 面临几个挑战,使其成为实践中的难题:

  • 对于大型模型(例如,在深度学习中),复杂的机器学习管道或大型数据集而言,函数评估可能非常昂贵。

  • 配置空间通常很复杂(包含连续,类别分类和条件超参数的组合)且高维。此外,并不总是清楚需要优化算法的哪个超参数,以及在哪个范围内。

  • 我们通常无法获得关于超参数的损失函数的梯度。此外,经典优化中通常不使用的目标函数的其他属性(例如凸度和平滑度)通常不适用。

  • 由于训练数据集的大小有限,因此无法直接针对泛化性能进行优化。

本章的结构如下。首先,我们正式定义 HPO 问题并讨论其变体(第1.2节)。然后,我们讨论用于解决 HPO 的黑盒优化算法(第1.3节)。接下来,我们关注于现代的多保真方法,该方法通过采用比完整模型评估更低开销的近似性能指标,即使在非常昂贵的模型中也可以使用 HPO(第1.4节)。然后,我们概述了最重要的 AutoML 超参数优化系统及其应用(第1.5节),并在本章结束时讨论了开放性问题(第1.6节)。

问题陈述

使 A \mathcal{A} A 表示具有 N N N 个超参数的机器学习算法。 我们用 Λ n \Lambda_n Λn 表示第 n n n 个超参数的域,而总超参数配置空间表示为 Λ = Λ 2 × Λ 2 × … Λ N \Lambda = \Lambda_2 \times \Lambda_2 \times \ldots \Lambda_N Λ=Λ2×Λ2×ΛN 。 一个超参数向量用 λ ∈ Λ \lambda \in \Lambda λΛ 表示,并将 A \mathcal{A} A 的超参数实例化到 λ \lambda λ 表示为 A λ \mathcal{A}_{\lambda} Aλ

超参数的域可以是实值(例如学习率),整数值(例如层数),二进制(例如是否使用提早停止)或分类的(例如选择优化器)。对于整数和实值超参数,由于实际原因,这些域大多是有界的,只有少数例外。

此外,配置空间可以包含条件,即,仅当另一个超参数(或超参数的某种组合)取某个值时,超参数才可能相关。条件空间采取有向无环图 (DAG) 的形式。 这样的条件空间,例如发生在机器学习管道的自动调整中,其中不同的预处理和机器学习算法之间的选择被建模为分类超参数,称为全模型选择(FMS)或组合算法选择和超参数优化问题(CASH)。它们在优化神经网络的架构时也会出现,例如层数可以是整数超参数,而仅当网络深度至少为 i i i 时, i i i 层的每层超参数才有效。

给定一个数据集 D \mathcal{D} D ,我们的目标是找到
λ ∗ = arg ⁡ min ⁡ λ ∈ Λ E ( D t r a i n , D v a l i d ) ∼ D V ( L , A λ , D t r a i n , D v a l i d ) \lambda^* = \arg \min_{\lambda \in \Lambda} \mathbb{E}_{(D_{train}, D_{valid}) \sim D} V(\mathcal{L}, \mathcal{A}_{\lambda}, D_{train}, D_{valid}) λ=argλΛminE(Dtrain,Dvalid)DV(L,Aλ,Dtrain,Dvalid)
其中 V ( L , A λ , D t r a i n , D v a l i d ) V(\mathcal{L}, \mathcal{A}_{\lambda}, D_{train}, D_{valid}) V(L,Aλ,Dtrain,Dvalid) 衡量训练数据 D t r a i n D_{train} Dtrain 上具有超参数 λ \lambda λ 的算法 A \mathcal{A} A 生成模型的损失,并在可用数据 D v a l i d D_{valid} Dvalid 上进行评估。实际上,我们只能访问有限的数据 D ∼ D D \sim \mathcal{D} DD ,因此需要近似等式中的期望值。

验证协议 V ( ⋅ , ⋅ , ⋅ , ⋅ ) V(\cdot, \cdot, \cdot, \cdot) V(,,,) 的常见选择是用户提供的损失函数的保持和交叉验证误差(例如错误分类率);请参见 Bischl 等[16]概述了验证协议。已经提出了几种减少评估时间的策略:可以仅在折叠子集[149],仅在数据子集[78,102,147]或少量迭代上测试机器学习算法;我们将在1.4节中更详细地讨论其中一些策略。最近在多任务[147]和多源[121]优化上的工作引入了其他低开销的辅助任务,可以代替式1.1进行查询。这些可以提供低开销的信息来帮助 HPO,但不一定要在感兴趣的数据集上训练机器学习模型,因此不能产生可用的模型作为副产品。

优化的替代方法:组装和边际化

用本章其余部分描述的技术来求解方程1.1,通常需要将机器学习算法 A \mathcal{A} A 与多个超参数向量 λ t \lambda_t λt 拟合。除了在这些参数上使用 arg ⁡ min ⁡ \arg\min argmin 算子之外,还可以构造一个整体(旨在将给定验证协议的损失降至最低)或整合所有超参数(如果考虑的模型是概率模型)。 我们指的是Guyon等 [50]及其中的参考文献用于比较频率学派和贝叶斯模型选择。

当 HPO 确定了许多好的配置时,仅选择单个超参数配置可能会很浪费,并且将他们结合为一个整体可以提高性能[109]。这在具有较大配置空间(如 FMS 或 CASH)的 AutoML 系统中特别有用,在这种情况下,良好的配置可能非常不同,这会增加集成带来的潜在收益[4,19,31,34]。为了进一步提高性能,自动 Frankensteining[155] 使用 HPO 在通过 HPO 找到的模型的输出上训练堆叠模型[156]。然后使用传统的整合策略将第二层模型进行组合。

到目前为止讨论的方法在 HPO 程序之后应用了集成。虽然它们在实践中提高了性能,但基本模型并未针对集成进行优化。也可以直接优化模型,以最大程度地改善现有的集成。

最后,在处理贝叶斯模型时,通常可以整合机器学习算法的超参数,例如使用证据最大化[98],贝叶斯模型平均[56],切片采样[111]或经验贝叶斯[103]。

针对多个目标进行优化

在实际应用中,通常需要权衡两个或多个目标,例如模型的性能和资源消耗[65](另请参见第3章)或多个损失函数[57]。 可能的解决方案可以通过以下两种方法获得。

首先,如果已知对次要性能指标的限制(例如最大内存消耗),则可以将该问题表述为约束优化问题。 我们将在第1.3.2.4节中讨论贝叶斯优化中的约束处理。

其次,更普遍的是,可以应用多目标优化来搜索 Pareto 前沿,这是一组配置,这些配置是目标之间的最佳折衷,从某种意义上说,对于 Pareto 前沿上的每个配置,没有其他配置可以更好地实现对于至少一个目标和其他所有目标的折衷。然后,用户可以从 Pareto 前沿选择配置。我们建议有兴趣的读者阅读有关该主题的更多文献[53,57,65,134]。

黑盒超参数优化

通常,每种黑盒优化方法都可以应用于 HPO 。 由于问题的非凸性,通常首选全局优化算法。但是,在优化过程中的某些局部性可以帮助在通常可用的少数函数评估中取得进展。我们首先讨论无模型黑盒 HPO 方法,然后介绍黑盒贝叶斯优化方法。

无模型黑盒优化方法

网格搜索是最基本的 HPO 方法,也称为全因子设计[110]。用户为每个超参数指定一组有限的值,然后网格搜索评估这些集合的笛卡尔积。 这遭受了维度诅咒,因为所需的函数评估数量随配置空间的维数增长呈指数增长。网格搜索的另一个问题是,增加离散化的离散程度会大大增加所需的函数求值数

网格搜索的一种简单替代方法是随机搜索[13]。顾名思义,随机搜索会随机抽样配置,直到耗尽搜索预算为止。当某些超参数比其他一些更为重要时(在许多情况下该属性都有效[13,61]),这比网格搜索更好。直觉上,当使用固定预算的 B B B 函数评估运行时,对于每 N N N 个超参数网格搜索可以评估的不同值的数量仅 B 1 / N B^{1/N} B1/N ,而随机搜索将为每个超参数探索 B B B 个不同值; 图示见图1.1。

相对于网格搜索的其他优势包括更容易的并行化(因为工作器不需要彼此通信并且失败的工作器不会在设计中留下漏洞)和灵活的资源分配(因为人们可以在随机搜索设计中添加任意数量的随机点仍然产生随机搜索设计;等效不适用于网格搜索)。

随机搜索是一个有用的基准,因为它不对正在优化的机器学习算法做出任何假设,并且在有足够资源的情况下,可以预期的是,其性能会任意接近最佳值。因此,交替使用随即搜索和更复杂的优化策略可以确保最快的收敛速率,并且还可以增加能够改进基于模型的搜索的探索[3,59]。随机搜索也是初始化搜索过程的一种有用方法,因为它会探索整个配置空间,因此通常会以合理的性能找到设置。但是,它不是灵丹妙药,而且通常比指导搜索方法花费更长的时间来识别性能最好的超参数配置之一:例如,当不从 N N N 个布尔超参数配置空间进行替换而是分别使用好、坏设置且不交互的进行采样时,将需要预计 2 N − 1 2^{N - 1} 2N1 次函数评估才可以找到最佳值,而引导搜索可以在 N + 1 N + 1 N+1 次功能评估中找到最佳值,如下所示:从任意配置开始,遍历超参数并一次更改一个,如果性能得到改善,则保留所得到的配置;如果没有,请恢复更改的超参数值。因此,我们在以下各节中讨论的引导式搜索方法通常会胜过随机搜索[12,14,33,90,153]。

基于种群的方法(例如遗传算法,进化算法,进化策略和粒子群优化)是一种优化算法,可维护种群(即一组配置),并通过应用局部扰动(所谓的突变)和不同的组合来改善种成员(所谓的交叉)以获得新一代更好的配置。这些方法在概念上很简单,可以处理不同的数据类型,并且令人尴尬地是并行的[91],因为可以在 N N N 个计算机上并行评估 N N N 个成员。

基于种群的最著名方法之一是协方差矩阵自适应进化策略(CMA-ES [51])。 这种简单的进化策略从多元高斯模型中采样配置,基于种群个体的成功情况,多元高斯模型的均值和协方差在每一代中都会更新。CMA-ES 是最有竞争力的黑盒优化算法之一,通常主导着 “黑盒优化基准”(BBOB)挑战[11]。

有关基于种群的方法的更多详细信息,请参见[28,138]。我们将在第 1.5 节中讨论在超参数优化中的应用,在第 3 章中讨论对神经体系结构搜索的应用,以及第 8 章中讨论有关 AutoML 管道的遗传编程。

贝叶斯优化

贝叶斯优化是用于昂贵黑盒函数的全局优化的最新优化框架,该框架最近通过在调整深度神经网络以进行图像分类[140,141],语音识别和神经语言建模[105]方面获得最新结果,在 HPO 中获得了关注 [22],并展示了对不同问题设置的广泛适用性。有关贝叶斯优化的深入介绍,请参考 Shahriari 等人的优秀教程[135]和Brochu 等[18]。

在本节中,我们首先简要介绍贝叶斯优化,介绍其中使用的替代模型,介绍其对条件和约束配置空间的扩展,然后讨论对超参数优化的一些重要应用。

贝叶斯优化的许多最新进展不再将 HPO 视为黑盒,例如多保真 HPO(请参见第1.4节),带元学习的贝叶斯优化(请参见第2章)以及将管道结构考虑在内的贝叶斯优化[159,160]。 此外,贝叶斯优化的许多最新发展并没有直接针对 HPO,而是通常可以很容易地应用于HPO,例如新的采集函数,新的模型和内核以及新的并行化方案。

贝叶斯优化简述

贝叶斯优化是一种具有两个关键要素的迭代算法:概率代理模型和确定下一个要评估的点的采集函数。在每次迭代中,用代理模型拟合目前为止对目标函数所做的所有观察。然后,采集函数使用概率模型的预测分布,并确定不同候选点的效用,在探索和利用之间进行权衡。与评估昂贵的黑盒函数相比,采集函数的计算成本较低,因此可以进行全面优化。

尽管存在许多采集函数,但期望改进(EI)[72]:
E [ I ( λ ) ] = E [ max ⁡ ( f m i n − y , 0 ) ] \mathbb{E}[\mathbb{I}(\lambda)] = \mathbb{E}[\max(f_{min - y}, 0)] E[I(λ)]=E[max(fminy,0)]
是常规选择,因为如果模型在配置 λ \lambda λ 上的预测值 y y y 服从正态分布,上式可以进行闭式计算:
E [ I ( λ ) ] = ( f m i n − μ ( λ ) ) Φ ( f m i n − μ ( λ ) σ ) + σ ϕ ( f m i n − μ ( λ ) σ ) \mathbb{E}[\mathbb{I}(\lambda)] = (f_{min} - \mu(\lambda)) \Phi\left(\frac{f_{min} - \mu(\lambda)}{\sigma} \right) + \sigma \phi\left(\frac{f_{min} - \mu(\lambda)}{\sigma} \right) E[I(λ)]=(fminμ(λ))Φ(σfminμ(λ))+σϕ(σfminμ(λ))
其中 ϕ ( ⋅ ) \phi(\cdot) ϕ() Φ ( ⋅ ) \Phi(\cdot) Φ() 是标准正态分布的概率密度和概率分布函数, f m i n f_{min} fmin 是至今为止的最佳观测值。

图 1.2 表示一维函数的贝叶斯优化。我们的目标是通过最大化由下橙色曲线表示的采集函数,使用高斯过程替代(虚线显示为预测,黑线表示不确定性)来最小化虚线。(顶部)观测值附近的采集值较低,并且最高采集值位于预测函数值较低且预测不确定性相对较高的点。(中)虽然新观测值的左侧仍有很大差别,但右侧的预测均值要低得多,因此在该位置产生下一个观测值。(下图)尽管在真实最大值附近几乎没有不确定性,但由于其在目前的最佳点上有期望改进,因此在此处进行了下一次评估 。

代理模型

传统上,贝叶斯优化使用高斯过程[124]来建模目标函数,因为其表现力,平滑且对不确定性估计校准良好,以及预测分布的闭式可计算性。一个高斯过程 G ( m ( λ ) , k ( λ , λ ′ ) ) \mathcal{G}(m(\lambda), k(\lambda, \lambda')) G(m(λ),k(λ,λ)) 由均值 m ( λ ) m(\lambda) m(λ) 和协方差函数 k ( λ , λ ′ ) k(\lambda, \lambda') k(λ,λ) 完全指定,尽管在贝叶斯优化中通常假定均值函数是连续的。在无噪声情况下的均值和方差预测 μ ( ⋅ ) \mu(\cdot) μ() σ 2 ( ⋅ ) \sigma^2(\cdot) σ2() 可以通过以下方法获得:
μ ( λ ) = k ∗ T K − 1 y ,    σ 2 ( λ ) = k ( λ , λ ) − k ∗ T K − 1 k ∗ \mu(\lambda) = k^T_* K^{-1} y, \; \sigma^2(\lambda) = k(\lambda, \lambda) - k^T_* K^{-1}k_* μ(λ)=kTK1y,σ2(λ)=k(λ,λ)kTK1k
其中 k ∗ k_* k 表示 λ \lambda λ 与所有先前观测值之间的协方差向量, K K K 是所有先前评估的配置的协方差矩阵, y y y 是观测的函数值。高斯过程的质量仅取决于协方差函数。 常见的选择是 Mátern 5 / 2 内核,其超参数由马尔可夫链蒙特卡罗[140]集成。

标准高斯过程的一个缺点是它们对数据点的数量呈三次方,当可以提供许多函数评估(例如使用许多并行工作器,或者由于使用较低保真度而使函数评估更低开销)时限制了它们的适用性。三次方可以通过可伸缩的高斯过程近似来避免,例如稀疏的高斯过程,它们仅通过使用原始数据集的一个子集作为诱导点来构建内核矩阵 K K K 来近似整个高斯过程。 尽管允许使用高斯过程 (GP) 进行贝叶斯优化以扩展到成千上万个数据点,以优化随机 SA T求解器的参数[62],但人们对其不确定性估计值的校准存在争议,并且其对标准 HPO 的适用性尚未得到测试[104,154]。

使用标准内核的高斯过程的另一个缺点是它们对高维的可扩展性较差。因此,已经提出了许多扩展来有效地处理具有大量超参数的配置空间的固有属性,例如使用随机嵌入[153],在配置空间的分区上使用高斯过程[154],圆柱核[114],和加性核[40,75]。

由于其他一些机器学习模型比高斯过程更具可扩展性和灵活性,因此将这些模型应用于贝叶斯优化的研究也很多。首先,(深度)神经网络是一个非常灵活且可扩展的模型。将它们应用于贝叶斯优化的最简单方法是作为特征提取器来预处理输入,然后将最后隐藏层的输出用作贝叶斯线性回归的基础函数[141]。通过使用随机梯度哈密顿蒙特卡洛[144]训练的贝叶斯神经网络,也可以对网络权重进行更复杂的完全贝叶斯处理。神经网络在经过 ∼ 250 \sim 250 250 次函数评估后的贝叶斯优化上,倾向于比高斯过程更快,也可以使用大规模并行处理。深度学习的灵活性还可以在更复杂的任务上实现贝叶斯优化。例如,可以使用变分自动编码器将复杂的输入(例如自动统计学家的结构化配置,请参见第9章)嵌入到实值向量中,以便常规的高斯过程可以处理它[92]。对于多源贝叶斯优化,基于分解机的神经网络体系结构[125]可以包含有关先前任务的信息[131],并且扩展到能够解决 CASH 问题[132]。

贝叶斯优化的另一种可选模型是随机森林[59]。虽然 GP 在较小的配置空间上的性能优于随机森林[29],但随机森林本身可以处理较大的,离散和条件配置空间,而标准 GP 不能很好地处理[29,70, 90]。此外,随机森林的计算复杂度可以更好地扩展到许多数据点:使用 GP 对 n n n 个数据点进行拟合和预测方差的计算复杂度分别为 O ( n 3 ) O(n^3) O(n3) O ( n 2 ) O(n^2) O(n2) ,而随机森林的复杂度仅是 O ( n log ⁡ n ) O(n \log n) O(nlogn) O ( log ⁡ n ) O(\log n) O(logn) 。由于这些优点,使用随机森林进行贝叶斯优化的 SMAC 框架[59]赋能了著名的 AutoML 框架 Auto-WEKA [149]和 Auto-sklearn [34](在第4和6章中进行了介绍)。

除了对给定配置 λ \lambda λ 下观测值 t t t 的概率 p ( y ∣ λ ) p(y|\lambda) p(yλ) 进行建模,Tree Parzen Estimator (TPE [12,14]) 对密度函数 p ( λ ∣ y < α ) p(\lambda|y < \alpha) p(λy<α) p ( λ ∣ y ≥ α ) p(\lambda|y \ge \alpha) p(λyα) 进行建模。给定一个百分数 α \alpha α(通常设置为15%),将观测值分为好观测值和坏观测值,并使用简单的 1-Parzen 窗口对这两个分布进行建模。比率 p ( λ ∣ y < α ) p ( λ ∣ y ≥ α ) \frac{p(\lambda|y < \alpha)}{p(\lambda|y \ge \alpha)} p(λyα)p(λy<α) 与预期的改进采集函数有关,并用于提出新的超参数配置。TPE 将 Parzen 估计器树用于条件超参数,并在这种结构化 HPO 任务上表现出良好的性能[12,14,29,33,143,149,160],概念上是简单的,并且自然地可以并行化[91]。 它也是 AutoML 框架 Hyperopt-sklearn [83](在第5章中进行了介绍)背后的主力军。

最后,我们还注意到,还有其他没有遵循贝叶斯优化范式的基于代理的方法:Hord [67]使用确定性 RBF 代理,Harmonica [52]使用压缩传感技术来调整深层神经网络的超参数。

配置空间描述

贝叶斯优化最初是为优化框约束的实值函数而设计的。但是,对于许多机器学习超参数(例如神经网络中的学习率或支持向量机中的正则化),通常最优化指数项的指数以描述变化,例如从 0.001 0.001 0.001 0.01 0.01 0.01 的变化期望与从 0.1 0.1 0.1 1 1 1 的变化具有相似高度的影响。称为输入扭曲[142]的技术允许在优化过程中通过将每个输入维替换为 Beta 分布的两个参数并对其进行优化来自动学习此类转换。

框约束的一个明显限制是用户需要预先定义这些约束。为避免这种情况,可以动态扩展配置空间[113,136]。可替代地,分布估计样式算法 TPE [12] 能够处理在其上放置先验(通常是高斯)的无限空间。

整数和离散超参数需要特殊处理,但可以通过对内核和优化过程的少量修改而很容易地集成到常规贝叶斯优化中(请参见[58]的12.1.2节,以及[42])。其他模型,例如因式分解机和随机森林也可以自然地处理这些数据类型。

条件超参数仍然是研究的一个活跃领域(有关最新 AutoML 系统中条件配置空间的描述,请参见第 5 和 6 章)。它们可以自然地通过基于树的方法,例如随机森林[59]和树 Parzen 估计器( TPE)[12] 进行处理,但是由于高斯处理相对于其他模型的众多优势,因此还提出了用于结构化配置空间的多内核[4, 12, 63, 70, 92, 96, 146]。

约束贝叶斯优化

在现实情况下,通常需要满足一些约束条件,例如内存消耗[139,149],训练时间[149],预测时间[41,43],压缩模型的精度[41],能源使用[43]或仅仅是为了在训练过程中不失败[43]。

约束可能是隐式的,因为只有二元观测值(成功或失败)可用[88]。AutoML 中的典型示例是内存和时间限制,以允许在共享计算系统中训练算法,并确保单个慢速算法配置不会占用可用于 HPO 的所有时间[34,149](另请参见第4和6章)。

约束也可能只是未知的,这意味着我们可以观察和建模辅助约束函数,但是在评估目标函数后才能知道约束违规[46]。一个例子是支持向量机的预测时间,它只能通过训练来获得,因为它取决于训练过程中选择的支持向量的数量。

对违反约束进行建模的最简单方法是定义一个惩罚值(至少与最坏的可观察损失值一样差)并将其用作对失败运行的观测值[34,45,59,149]。更高级的方法对违反一个或多个约束的可能性进行建模,并积极搜索具有低损耗值的配置,这些配置不太可能违反任何给定约束[41,43,46,88]。

使用信息理论采集函数的贝叶斯优化框架允许将目标函数的评估和约束条件解耦,以动态选择下一步要评估的函数[43,55]。当评估感兴趣的功能和约束需要非常不同的时间量时(例如评估深度神经网络的性能和内存消耗[43]),这就变得很有优势。

多保真优化

数据集大小的增加和模型的复杂度的增长是 HPO 的主要障碍,因为它们使黑盒性能评估更加昂贵。如今,在大型数据集上训练单个超参数配置可能很容易超过数小时,并且可能要花费几天的时间[85]。

因此,加速手动调节的一种常用技术是在一个小的数据子集上探测一个算法/超参数配置,通过只训练几次迭代,通过在特征子集上运行,通过仅使用一个或几交叉验证折叠,或在计算机视觉中仅使用缩减采样后的图像。 多保真方法将这种手动启发式方法转化为形式化的算法,使用实际损失函数的所谓低保真近似值来最小化这些近似值,从而在优化性能和运行时间之间进行权衡,但是在实践中,获得的加速效果通常超过了近似误差。

首先,我们回顾一下在训练过程中为算法的学习曲线建模的方法,如果预料到增加更多资源无法提供更好的效果,则可以停止训练过程。其次,我们讨论简单的选择方法,该方法仅选择有限组给定算法/超参数配置中的一个。第三,我们讨论了多保真度方法,该方法可以主动决定哪种保真度将提供有关找到最佳超参数的最多信息。我们也参考第二章(讨论如何在数据集中使用多保真方法)和第 3 章(描述了神经体系结构搜索的低保真度近似)。

学习基于曲线的提前停止预测

本节以在 HPO 中的多保真方法开始,该方法评估和建模 HPO 期间的学习曲线[82,123],然后决定是否为给定的超参数配置增加更多资源或停止训练过程。学习曲线的示例是在不断增加的数据集子集上训练的同一配置的性能,或者针对每次迭代(如果性能的计算成本很高,则为每 i i i 次迭代)测量的迭代算法的性能。

在预测终止的背景下使用学习曲线外推法[26],其中使用学习曲线模型外推某个配置的部分观察到的学习曲线,如果预测到该配置未达到优化过程目前位置最佳模型的性能,则停止训练过程。每个学习曲线都被建模为来自各个科学领域的 11 11 11 个参数函数的加权组合。这些函数的参数及其权重通过马尔可夫链蒙特卡洛进行采样,以最大程度地减少拟合观察到的部分学习曲线的损失。这产生了预测分布,该分布允许基于超过最好模型的概率来停止训练。当与贝叶斯优化相结合时,预测终止条件所提供的错误率比用于优化神经网络的现成黑盒贝叶斯优化要低。平均而言,该方法将优化速度提高了两倍,并且能够找到用于 CIFAR-10 的(当时)最新神经网络(不需要数据增强)[26]。

虽然上面的方法由于不跨不同的超参数配置共享信息而受到限制,但是可以通过使用基本函数作为贝叶斯神经网络的输出层来实现[80]。从而可以针对任意超参数配置预测基本函数的参数和权重,以及完整的学习曲线。另外,有可能使用先前的学习曲线作为基函数外推器[21]。尽管实验结果对于所提出的方法是否优于预先指定的参数函数尚无定论,但不必手动定义它们是一个明显的优势。

Freeze-Thaw 贝叶斯优化[148]是将学习曲线完全集成到贝叶斯优化的建模和选择过程中的方法。对机器学习模型进行几次迭代,然后冻结,而非终止该配置。然后,贝叶斯优化可以决定解冻某个冻结的模型,这意味着可以继续对其进行训练。另外,该方法也可以决定开始新的配置。Freeze-Thaw 使用规则的高斯过程对收敛算法的性能进行建模,并引入与指数衰减函数相对应的特殊协方差函数,以按学习曲线高斯过程对学习曲线进行建模。

基于赌博机 (Bandit-Based) 的算法选择方法

在本节中,我们将介绍一些方法,这些方法根据性能的低保真近似值来确定给定有限算法组中的最佳算法。到最后,我们还将讨论具有自适应配置策略的潜在组合。我们更关注基于赌博机策略的变体 “连续减半和超频” ,因为这些变体已显示出强大的性能,尤其是在优化深度学习算法方面。严格来说,我们将在本小节中讨论的一些方法也可以对学习曲线进行建模,但是它们没有提供基于这些模型选择新配置的方法。

然而,首先,我们简要介绍多保真算法选择方法的历史演变。2000 年,Petrak [120] 指出,仅对一小部分数据测试各种算法是一种选择算法的强大而廉价的机制。后来的方法使用迭代算法消除方案,如果它们在数据子集上的性能不佳,如果它们的性能比一组最高性能的配置差[86],如果它们的性能比用户指定因子的最佳配置差,或者甚至算法的最佳性能比最知名的算法差[128],则丢弃该参数。同样,如果超参数配置在一个或几个交叉验证折上表现不佳,则有可能丢弃它们[149]。最后,Jamieson 和 Talwalkar [69] 提出使用最初由 Karnin 等人为 HPO 引入的对等算法。

连续减半是一种非常简单但功能强大的算法,因此是进行多保真算法选择的流行策略:对于给定的初始预算,查询该预算的所有算法;然后,移除效果最差的一半,将预算加倍,并依次重复进行操作,直到只剩下一个算法为止。这个过程如图 1.3 所示。Jamieson 和 Talwalkar [69]对几种通用的方法进行了基准测试,发现连续减半在所需的迭代次数和所需的计算时间两方面都表现良好,如果算法能够很好地收敛,则该算法在理论上会优于统一的预算分配策略,并优于文献中的许多众所周知的赌博机策略,例如 UCB 和 EXP3 。

虽然连续减半是一种有效的方法,但它却遭受了预算与配置数量之间的折衷。给定总预算,用户必须事先决定是尝试许多配置并只为每个分配较小的预算,还是仅尝试少数几个配置并为其分配较大的预算。分配的预算太少会导致过早终止良好的配置,而分配的预算过大则会导致运行不良的配置太长时间,从而浪费资源。

HyperBand [90] 是一种规避策略,旨在从随机采样的配置中进行选择时解决此问题。它将总预算分为配置数量与预算的几种组合,然后在每个随机配置的集合中将连续减半作为子例程调用。由于规避策略包括仅在最大预算上运行某些配置,在最坏的情况下,与最大预算上的普通随机搜索相比,HyperBand 最多花费一个恒定的时间。在实践中,由于使用廉价的低保真评估,HyperBand 已显示出可以改善数据子集,特征子集和迭代算法上的寻常 (vanilla) 随机搜索和黑盒贝叶斯优化(例如用于深层神经网络的随机梯度下降)。

尽管 HyperBand 在深度神经网络方面取得了成功,但对于不使配置建议策略应用于函数评估的情况非常受限。为了克服这一局限性,最近的方法 BOHB [33] 结合了贝叶斯优化和 HyperBand 来达到两全其美的效果:强大的随时性能(开始时在 HyperBand 中使用低保真度来快速改进)和强大的最终性能(长时间运行中,可以通过将 HyperBand 的随机搜索替换为贝叶斯优化来获得良好的性能)。 BOHB 还有效地使用并行资源,并处理从几个到几十个超参数的问题域。BOHB 的贝叶斯优化组件类似于 TPE [12] ,不同点在于但使用多维核密度估计器。它仅适合已执行至少 ∣ Λ ∣ + 1 |\Lambda| + 1 Λ+1 个评估(超参数的数量加 1)的最高保真度的模型。因此,BOHB 的第一个以最低保真度拟合,随着时间的流逝,接受较高保真度训练的模型将接管,而在连续减半时仍使用较低保真度。从经验上看,BOHB 的性能优于几种最新的 HPO 方法,在调整支持向量机,神经网络和强化学习算法等方面,包括本节中介绍的大多数方法[33]。进一步结合了 HyperBand 和贝叶斯优化的其他方法已经被提出[15,151]。

多保真评估也可以通过其他方式与 HPO 结合,不只是在较低保真度和最高保真度之间切换,而是可以对原始数据的一个子集执行 HPO 并提取性能最佳的配置以便使用它们作为完整数据集上 HPO 的初始设计[152]。要加快解决 CASH 问题的速度,还可以根据在小型数据子集的不良性能,从配置空间迭代删除整个算法(及其超参数)[159]。

自适应选择保真度

上一小节中的所有方法均遵循预定义的保真度。有时,可能希望主动选择给前一个观测值的要评估的保真度,以防止错误指定。

多任务贝叶斯优化[147]使用多任务高斯过程对相关任务的性能进行建模,并在优化过程中自动学习任务的相关性。该方法可以基于成本敏感的信息理论采集函数,在较廉价的低保真任务与昂贵的高保真目标任务之间动态切换。在实践中,所提出的方法开始在更廉价的任务上探索配置空间,并且仅在优化的后期部分切换到更昂贵的配置空间,从而将 HPO 所需的时间减少了一半。多任务贝叶斯优化还可以用于传输先前优化任务中的信息,更多详细信息参照第 2 章。

多任务贝叶斯优化(以及前面小节中介绍的方法)需要预置一组保真度。这可能不是最佳的,因为可能会错误指定[74,78],并且可以处理的保真度很少(通常为五个或更少)。因此,为了利用保真度典型的平滑的依赖关系(例如,使用的数据子集的大小),将保真度视为连续的(例如,选择完整数据集的连续百分比以评估配置),平衡信息增益和评估所需的时间[78],通常会产生更好的结果。要利用领域知识,即性能通常会随着数据量的增加而提高,而收益却不断减少,可以为数据子集构建一个特殊的内核[78]。多任务贝叶斯优化的一般化可以提高性能,并且与黑盒贝叶斯优化相比可以实现 10-100 倍的提速。

除了使用信息理论采集函数,具有上置信界(UCB)采集函数的贝叶斯优化也可以扩展到多保真度[73,74]。尽管第一个这样做的方法 MF-GP-UCB [73] 需要预置保真度,但是后来的 BOCA 算法[74]却不需要这一要求。BOCA 还已应用于具有不止一个连续保真度的优化,并且我们希望将来有更多不止一个连续保真度的 HPO 引起人们的兴趣。

一般而言,可以自适应选择其保真度的方法比第 1.4.2 节中讨论的概念上更简单的基于赌博机的方法更具吸引力,并且功能更强大。但是在实践中,我们注意到要成功选择保真度需要强壮的模型。当模型不强壮时(因为它们还没有足够的训练数据,或者由于模型不匹配),这些方法可能会花费太多时间来评估更高的保真度,第 1.4.2 节中讨论的更可靠的固定预算计划可能会在给定时间内产生更好的性能。

在 AutoML 中的应用

在本节中,我们将对最重要的超参数优化系统及其在自动化机器学习中的应用进行历史回顾。

自 1990 年代以来,网格搜索就一直用于超参数优化[71,107],并在 2002 年得到早期机器学习工具的支持[35]。最早应用于 HPO 的自适应优化方法是贪婪深度优先搜索[82]和模式搜索[109],模式搜索不仅改进了默认的超参数配置,也改进了网格搜索。遗传算法于 2004 年首次应用于调整 RBF-SVM 的两个超参数 C C C γ \gamma γ [119],并在比网格搜索更少的时间内提高了分类性能。同年,进化算法被用来学习支持向量机的三个不同内核的组合,内核超参数并共同选择特征子集。所学的内核组合能够胜过每个优化的内核。本着类似的精神,同样在 2004 年,遗传算法被用于选择 SVM 或神经网络使用的特征和超参数[129]。

CMA-ES 于 2005 年首次用于超参数优化[38],当时,CVM-ES 用于优化 SVM 的超参数 C C C γ \gamma γ ,每个维度输入数据的内核长度尺度 l i l_i li,以及完整的旋转和缩放矩阵。最近,CMA-ES 被证明是并行 HPO 的绝佳选择,当在 30 个GPU上并行优化深度神经网络的 19 个超参数时,其性能优于最新的贝叶斯优化工具[91]。

在 2009 年,Escalante 等[30]将 HPO 问题扩展到完整模型选择问题上,其中包括选择预处理算法,特征选择算法,分类器及其所有超参数。通过使用 HPO 能够从多个现成的机器学习算法构建机器学习管道,作者凭经验发现他们可以将其方法应用于任何数据集,而无需领域知识,并证明了他们的方法适用于各种域 [32, 49]。他们提出方法:粒子群模型选择(particle swarm model selection PSMS),使用改良的粒子群优化器来处理条件配置空间。为了避免过度拟合,PSMS 扩展了一种定制的集成策略,该策略结合了多代的最佳解决方案[31]。由于粒子群优化最初是设计用于连续配置空间的,所以 PSMS 被横向扩展以使用遗传算法来优化管道结构,而仅使用粒子群优化来优化每条管道的超参数[145]。

据我们所知,贝叶斯优化在 HPO 上的首次应用可以追溯到 2005 年,当时 Frohlich 和 Zell [39] 使用在线高斯过程和 EI 来优化 SVM 的超参数,从而实现了比网格搜索快 10 倍的加速(分类,2个超参数)和 100 倍的加速(回归,3个超参数)。 Tuned Data Mining [84] 提出使用贝叶斯优化来调整整个机器学习管道的超参数;具体而言,它使用单个固定管道并调整分类器的超参数以及每个分类的分类阈值和分类权重。

在 2011 年 Bergstra 等 [12] 率先应用贝叶斯优化来调整深层神经网络的超参数,优于手动搜索和随机搜索。此外,他们证明了 TPE 比基于高斯过程的方法具有更好的性能。TPE 以及随机森林的贝叶斯优化也成功地用于结合神经体系结构搜索和超参数优化[14,106]。

将贝叶斯优化应用于 HPO 的重要的另一步是由 Snoek 等完成的。在 2012 年的《机器学习算法的实用贝叶斯优化》[140]一书中描述了在 Spearmint 系统中实现的基于高斯过程的 HPO 的几个技巧,并获得了用于深度神经网络的超参数优化的最好结果 。

Auto-WEKA [149](另见第4章)独立于完整模型选择范例,引入了组合算法选择和超参数优化(Combined Algorithm Selection and Hyperparameter Optimization CASH)问题,其中将分类算法的选择建模为分类变量,对算法超参数进行建模作为条件超参数,基于随机森林的贝叶斯优化系统 SMAC [59] 用于在结果的 786 维配置空间中进行联合优化。

近年来,多保真方法变得非常流行,尤其是在深度学习中。首先,使用基于数据子集,特征子集和迭代算法短期运行的低保真度近似值,Hyperband [90] 表现优于不考虑这些较低保真度的黑盒贝叶斯优化方法。而后,最近在 Falkner 等 2018 年论文《 BOHB:规模化的鲁棒和高效超参数优化》[33] 中引入了鲁棒,灵活和可并行化的贝叶斯优化和 Hyperband 组合,其在很多问题上都优于 Hyperband 和黑盒贝叶斯优化,包括调整支持向量机,各种类型的神经网络和强化学习算法。

在撰写本文时,我们针对在 HPO 的实际应用中应使用的工具提出以下建议:

  • 如果适用多保真(即,如果可以定义感兴趣的目标函数的实质上更廉价的版本,以使这些目标的性能与感兴趣的全部目标函数的性能大致相关),我们建议使用 BOHB [33] 作为一种鲁棒、高效、通用和可并行化的默认超参数优化方法。
  • 如果不适用多保真度:
    • 如果所有超参数都是实值,并且只能承受几十个函数评估,我们建议使用基于高斯过程的贝叶斯优化工具,例如 Spearmint [140] 。
    • 对于大型的和有条件的配置空间,我们建议基于随机森林的 SMAC [59] 或 TPE [14],因为它们在此类任务上的强大性能[29]。
    • 对于纯实值空间和相对廉价的目标函数,即可以对该函数进行数百次评估,我们建议使用 CMA-ES [51] 。

未解决的问题和未来的研究方向

在本章结束时,我们讨论了一些未解决的问题,当前的研究问题以及我们预期将对 HPO 影响的潜在进一步发展。值得注意的是,尽管它们具有相关性,但我们忽略了关于超参数重要性和配置空间定义的讨论,因为它们属于元学习的范畴,可以在第 2 章中找到。

基准和可比性 (Benchmarks and Comparability)

考虑到现有 HPO 方法的广度,一个自然的问题是每种方法的优点和缺点是什么?为了在不同的 HPO 方法之间进行公平的比较,随着新的 HPO 变式(例如多保真度优化)的出现,社区需要设计并商定一套随时间扩展的通用基准。作为一个特定的示例,我们可能要提到 COCO 平台(比较连续优化器 comparing continuous optimizers 的缩写),该平台提供了用于连续优化的基准和分析工具,并用作年度黑盒优化基准(Black-Box Optimization Benchmarking BBOB)挑战的工作平台[ 11]。沿着 HPO 中类似路线的努力已经产生了超参数优化库(HPOlib [29])和专门用于贝叶斯优化方法的基准集[25]。但是,这些方法都没有获得与COCO 平台相似的吸引力。

另外,社区需要明确定义的度量,但是当前不同的工作使用不同的度量。评估有所不同的一个重要方面是,评估是否报告用于优化的验证集或单独测试集的性能。前者有助于单独研究优化器的强度,而不会出现从验证到测试集时评估中添加的噪声的情况;另一方面,某些优化器可能会比其他优化器过拟合,这只能通过使用测试集进行诊断。评估不同的另一个重要方面是,评估是在给定数量的函数评估之后还是在给定的时间量之后报告性能。后者考虑了评估不同的超参数配置之间的时间差异,并包括优化开销,因此反映了实际需要。但是,前者更方便,并且无论使用何种硬件,都能获得相同的结果,从而有助于实现可复现性。为了提高可复现性,尤其是对使用时间的研究应该发布一个实现版本。

我们注意到,在使用新基准时,必须与强基准进行比较,这是为什么 HPO 方法应与随附的实现一起发布的另一个原因。不幸的是,缺乏通用的软件库,例如,在深度学习研究中没有通用的软件库可以实现所有基本构建模块[2,117]。一个简单而有效的基线,应该可以将其简单地包含在经验研究中,Jamieson 和 Recht [68] 建议与随机搜索的不同并行化水平进行比较,以证明其比常规随机搜索的速度更快。与其他优化技术进行比较时,与可靠的实现进行比较非常重要,因为例如贝叶斯优化的简单版本已显示出较差的性能[79,140,142]。

基于梯度的优化

在某些情况下(例如,最小二乘支持向量机和神经网络)可能会获得模型选择标准相对于某些模型超参数的梯度。与黑盒 HPO 不同,在这种情况下,对目标函数的每次评估都会产生整个超梯度向量而不是单个浮点值,从而可以实现更快的 HPO。

Maclaurin 等 [99] 介绍了一种程序,它通过对具有动量的随机梯度下降的整个训练过程进行反向传播(使用一种新颖的,内存高效算法)来计算关于神经网络的所有连续超参数的验证性能的准确梯度。通过基于梯度的方法可以高效处理多个超参数,从而为模型的超参数化提供新的范例,并在模型类,正则化和训练方法上获得灵活性。 Maclaurin 等证明了基于梯度的 HPO 在许多高维 HPO 问题上的适用性,例如分别针对每个迭代和层优化神经网络的学习率,针对神经网络中每一层优化权重初始化规模超参数,在逻辑回归 (对率回归) 中优化 l 2 l_2 l2 罚分中的每个个体参数,并学习全新的训练数据集。一个小缺点是,在整个训练过程中进行反向传播的代价是训练过程的时间复杂度的两倍。所介绍的方法也可以推广与其他参数更新算法一起使用[36]。为了克服通过完整的训练过程进行反向传播的必要性,以后的工作允许分别对训练过程中交替的单独验证集执行超参数更新[5,10,36,37,93]。

简单模型的超参数[118]和神经网络结构的基于梯度的优化的最新示例(请参阅第3章)显示了令人鼓舞的结果,优于最新的贝叶斯优化模型。尽管需要高度指定模型,但是基于梯度的超参数优化可允许调整数百个超参数这一事实可以大大改善 HPO。

可扩展性

尽管最近在多保真度优化方面取得了成功,但仍然存在机器学习问题,由于其规模巨大,HPO 尚未直接解决这些问题,并且可能需要新颖的方法。在此,规模既可以表示配置空间的大小,也可以表示各个模型评估的开销。例如,关于 ImageNet 挑战数据集上的深层神经网络的 HPO 尚无任何工作[127],这主要是因为即使在数据集上使用简单的神经网络,训练的成本也很高。有趣的是,哪个方法可以超越第 1.3 节的黑盒方法,例如第 1.4 节中介绍的多保真方法,基于梯度的方法或元学习方法(在第 2 章中介绍)是否可以解决此类问题。第 3 章介绍了在较小的数据集上学习神经网络构造块并将其应用于 ImageNet 的最初成功案例,但是训练过程的超参数仍然是手动设置的。

鉴于并行计算的必要性,我们期待着充分利用大规模计算集群的新方法。尽管存在关于并行贝叶斯优化的大量工作[12,24,33,44,54,60,135,140],但第 1.3.2.2 节[141] 中描述的神经网络除外,到目前为止,尚无方法证明对数百个工作器的可扩展性。尽管它们很受欢迎,并且此类 HPO 仅期望应用于深度神经网络[91],但基于种群的方法尚未显示出可适用于对几千个数据点以上的数据集的超参数优化。

总体而言,我们希望出现更复杂,更专业的方法,以摆脱黑盒的局面,从而将超参数进一步扩展到更多有趣的问题。

过拟合和泛化性

HPO 的一个为解决的问题是过拟合。如问题陈述中所述(请参阅第 1.2 节),我们通常只有有限数量的数据点可用于计算要优化的验证损失,因此不必针对未见检验的数据点的泛化性能进行优化。与将机器学习算法过拟合到训练数据类似,此问题是关于将超参数过度拟合到有限验证集;实验也证明了这一点[20,81]。

减少过拟合程度的一种简单策略是对每个函数评估采用不同的训练和验证划分。结果表明,通过保留和交叉验证策略,可以提高 SVM 调优的泛化性能[95]。最终配置的选择可以通过不根据最差观测值进行选择,而可以根据贝叶斯优化中使用的高斯过程模型的最低预测平均值进行选择,从而得到进一步的加强[95]。

另一种可能方法是使用单独的保留集来评估 HPO 发现的配置,以避免偏向于标准验证集[108,159]。泛化性能的不同近似值可能会导致不同的测试性能[108],并且有报告称,有几种重采样策略可能会导致支持向量机的 HPO 出现可测量的性能差异[150]。

对抗过拟合的另一种方法可能是找到目标函数的稳定最佳而非陡峭最佳。这个想法是,对于稳定的最优,对于超参数的轻微扰动,最优值附近的函数值不会发生变化,而对于陡峭的最优则函数值会发生变化。当将找到的超参数应用于新的,未见的数据点集(即测试集)时,稳定的最佳优化会产生更好的泛化。以此为基础构建的采集函数对支持向量机 HPO 仅略有过拟合,而常规的贝叶斯优化则表现出较强的过拟合[112]。

更进一步对抗过拟合的方法是 1.2.1 节中提出的集成方法和贝叶斯方法。考虑所有这些不同的技术,就如何最好地避免过度拟合,并没有普遍认可的技术,这取决于用户来确定哪种策略在其特定的 HPO 问题上效果最佳。我们注意到,最佳策略实际上可能因 HPO 问题而异。

任意规模的管道构建

到目前为止,我们讨论的所有 HPO 技术都假设机器学习管道的组件有限或神经网络中的最大层数有限。对于机器学习管道(请参阅本书第二部分中介绍的 AutoML 系统),使用多个特征预处理算法并在问题需要时进行动态添加可能会有所帮助,通过超参数扩大搜索空间以选择适当的预处理算法及超参数本身。虽然标准黑盒优化工具的搜索空间可以轻松地包含几个额外的预处理器(及其超参数)作为条件超参数,但很难支持不限数量的预处理器。

树状管道优化工具包(TPOT [115],另请参见第8章)是一种更原生地处理任意大小管道的方法,该工具包使用遗传编程并通过语法描述了可能的管道。TPOT 使用多目标优化来权衡管道复杂性和性能,从而避免生成不必要的复杂管道。

管道创建的另一个范例是使用分层计划。最近的 ML-Plan [101,108] 使用分层任务网络,与 Auto-WEKA [149] 和 Auto-sklearn [34] 相比,显示出了优势。

到目前为止,这些方法并不能始终胜过具有固定管道长度的 AutoML 系统,但是更大的管道可能会提供更多的改善。类似地,神经体系结构搜索产生了复杂的配置空间,将在第 3 章中介绍处理它们的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoML-第一章 超参数优化 的相关文章

随机推荐

  • 30天自制操作系统(第02天)–汇编语言学习和MakeFile入门

    第二天 我们将之前的程序进一步翻译成汇编语言 进一步了解启动程序到底做了些啥 还记得第一天中有一部分程序主体么 以及最开头的代码 我们把它们翻译成汇编看看 hello os TAB 4 ORG 0x7c00 指名程序的装载地址 以下一段是标
  • 关于使用快慢指针进行单向链表环存在性判定的若干问题的进一步思考

    文章目录 面试官问这个问题的目的是什么 快慢指针的工作原理 快慢指针究竟几步可以定位环 快指针的速度只能是双倍速么 其他判定单向链表环路的方法 小结 费曼算法 1 写下这个问题 2 真正地努力思考 3 写下解决办法 物理学家Murray G
  • 苹果手机怎样批量删除照片

    https jingyan baidu com article 851fbc37953b183e1f15ab02 html 喜欢使用苹果手机拍照的朋友 会经常删照片 那怎样操作更快呢 今天就为大家分享苹果手机怎样批量删除照片 工具 原料 苹
  • git命令详解

    一 简介 git作为应用广泛的一种分布式版本控制系统 其与svn比较最大的差别就是一个是分布式 一个是集中式 git在每个开发者的本地有一个完整的版本库 当在本地处理工作时 无需联网便可修改提交 当需要与其它开发者交互时 只需要提交自己的修
  • 陀螺研究院×BSN丨解析区块链视角下的消费者权益保护访谈全文发布

    3月是我国消费者权益保护月 在近日播出的3 15晚会中 央视曝光了科勒卫浴 宝马 Max Mara多家知名商店安装人脸识别摄像头 手机清理软件泄露老人隐私 瘦肉精羊等多个极其恶劣的消费者权益侵害行为 可以看出 随着数据时代的渐行渐近 消费者
  • switch怎么切换服务器账号,任天堂eshop如何换区 switch账号如何切换其他服地区

    任天堂eshop里面的游戏因为注册地区不同 游戏的售价也相应不同 因为汇率的影响 游戏的售价产生了高低差价 这种差价可以让玩家买到较低价的游戏 操作起来方法就是在switch里进行账号切换 怎样切换任天堂账号地区呢 一起来看下吧 1 首先需
  • /usr/lib64/sa/sa1脚本解释

    usr lib64 sa sa1脚本解释 前言 脚本原文 脚本解释 附 前言 这个脚本是 Linux 系统上的 sysstat 工具的一部分 在 etc cron d sysstat这个定时任务下执行 用来收集系统性能数据 需要配合 etc
  • 休眠后网络无法自动连接——网卡属性没有电源管理选项

    问题描述 1 每次休眠过后网卡都是无法连接网络的状态 需要手动禁用 gt 开启网卡后才会恢复正常 2 同时网卡属性里没有电源管理选项 环境 Win10 网卡设备 realtek pcie gbe family controller 解决办法
  • 遗传算法超详细图解

    遗传算法 Genetic Algorithm 顾名思义 是一种基于自然选择原理和自然遗传机制的启发式搜索算法 该算法通过模拟自然界中生物遗传进化的自然机制 选择 交叉和变异操作 将好的遗传基因 最优目标 不断遗传给子代 使得后代产生最优解的
  • webpack对js文件和eslint做缓存处理

    一 什么是webpack的cache Webpack的缓存通常是指模块缓存和构建缓存 1 模块缓存 通过缓存模块的内容 可以避免重复读取和解析同一个模块的开销 Webpack默认是开启模块缓存的 即第一次编译时会将已经加载的模块信息缓存到内
  • MAX30102血氧模块检测心率和血氧

    1 完成 CubeMX初始化配置 1 1 利用CubeMX完成HAL库工程模板和初始化 通过选择芯片型号创建CubeMX工程 在弹出的对话框中输入开发板上的芯片型号 STM32F103RB 在右侧筛选栏中选择Tx型 即开发板上芯片所用的LQ
  • 7个高清图片素材网,免费/可商用

    1 菜鸟图库 https www sucai999 com pic html v NTYwNDUx 菜鸟图库是一个综合性素材网站 这里面有很多设计 图片 视频 音频等素材 图片素材全部都是高清无水印 基本都能免费下载 还有部分素材是可以商用
  • c#输出当前日期和当前时间_如何在C#中的当前日期时间添加小时数?

    我们在C 中使用DateTime类的AddHours 方法 Syntax 句法 DateTime DateTime AddHours double 以下C 代码在当前日期时间添加小时数 using System namespace Cons
  • 父类和子类

    尽管很多知名译本都把C 面向对象里有继承关系的类称作基类和派生类 但人们很多口语化的表达里还是叫他们父类和子类 毕竟 你继承了我嘛 非亲非故的 谁让你继承 恰逢今天父亲节 我们就来聊聊C 里对父亲和儿子这一关系的设计 读程序 品人生 什么东
  • 优雅/粗暴地关闭TCP连接--close-shutdown的选择

    一个 TCP 连接需要经过三次握手进入数据传输阶段 最后来到连接关闭阶段 在最后的连接关闭阶段 我们需要重点关注的是 半连接 状态 因为 TCP 是双向的 这里说的方向 指的是数据流的写入 读出的方向 比如客户端到服务器端的方向 指的是客户
  • Lua封装延时执行函数

    延时执行函数 function delayTimeGuideEvent target func times 延迟时间执行函数 local delaytime 1 if times then delaytime times end getRo
  • Spring入门学习—Spring IOC

    一 什么是Spring Spring是一个轻量级的IOC DI和AOP容器的开源框架 目标 使现有技术更加易用 推进编码最佳实践 内容 IOC容器 AOP实现 数据访问支持 简化JDBC ORM框架 声明式事务 Web集成 设计理念 面向B
  • 平凡的世界

    1975年的二三月间 一个平平常常的日子 细蒙蒙的雨丝夹着一星半点的雪花 正纷纷淋淋地向大地飘洒着 时令已快到惊蛰 雪当然再不会存留 往往还没等落地 就已经消失得无影无踪了 黄土高原严寒而漫长的冬天 看来就要过去 但那真正温暖的春天 还远远
  • gitcode代码仓库的基本使用

    gitcode代码仓库的基本使用 一 gitcode官网简介 二 本地配置 1 安装git工具 2 配置本地git信息 3 查看git个人信息 二 创建本地仓库 1 创建本地工作区 2 将文件放入暂存区 3 将暂存区文件放入本地仓库 4 查
  • AutoML-第一章 超参数优化

    第一章 超参数优化 摘要 最近对具有许多超参数的复杂且计算成本很高的机器学习模型 例如自动化机器学习 AutoML 框架和深度神经网络 的兴趣引起了对超参数优化 HPO 的重新研究 在本章中 我们概述了 HPO 最主要的方法 我们首先讨论基