自动超参优化简述

机器学习建模是一个十分依赖建模工程师本身的知识和经验的工作,它涉及对问题背景的理解,数据的清理、变形和分析,特征的选择和构造(特征工程)以及模型的训练、调优和评估。只有专业高级人才才能优质并高效地完成整个流程,这就意味着机器学习建模的人力成本是非常高的。Prophet机器学习平台的愿景,就是降低机器学习建模的成本,普及机器学习模型的应用。若能将上述建模过程自动化,必定是必要且有益的。

自动机器学习,即AutoML,所涉及的领域和范围很广泛。它包括且不限于:自动特征分析、自动特征工程、自动模型调优等。目前,比较成熟的技术是自动模型调优,所以Prophet平台的AutoML功能属于自动模型调优这个范畴。

模型从训练数据中学习信息,以完成诸如分类、回归等任务。有许多决定模型结构和控制训练过程的参数,即超参数(Hyper Parameter)。选择不同的超参数,训练出来模型会具有不同的性能。此处“性能”不是指计算效率,而是模型执行它的任务(例如分类)的优秀程度。想要训练出高性能的模型,就要在训练开始时设置合适的超参数。

为了体现超参数的重要性和复杂性,此处举例介绍一些超参数以及它们的作用。比如,在决策树模型中,树的最大深度就是一个超参数,它是一个整数。决策树的训练过程就是树的生长和叶子节点的分裂过程。训练算法检查当前所有叶子节点,决定是否需要将其分裂成两个新的叶子节点。分裂后,原来的叶子节点就变成了非叶子节点。这个过程持续进行下去,最终产生许多叶子节点。“最大深度”超参数意味着,在当前树的深度到达这个数值时,分裂过程停止。

那么,树的深度对模型的性能有何种影响呢?树的深度越大,叶子节点越多,树在样本超空间中形成的分界面就越复杂,模型的自由度越高;反之,树的深度越小,叶子节点越少,树的分界面越简单,模型自由度越低。自由度高、分界面复杂的模型表达能力强,能学习到数据的复杂分布,但在数量有限的训练样本上容易发生过拟合(Overfitting);自由度低、分界面简单的模型表达能力低,不易过拟合,但是很有可能无法抓取数据中的复杂信息,容易发生欠拟合(Underfitting)。所以,“最大深度”超参数也是控制模型自由度的一种正则化(Regularization)手段。它在不同问题、不同数据上对模型的最终性能有着复杂且不直观的影响。

上面说,决策树训练算法决定是否要分裂,以及如何分裂某个叶子节点。它具体的做法是:对落到该叶子节点的训练样本计算一个指标,该指标衡量这个叶子节点中的训练样本是否足够“单纯”,即它们是否绝大部分属于同一个类别。若这种“纯度”指标达到一定数值,则认为落到该叶子节点的训练样本大致可以视为同一类别,则不再分裂该叶子节点。反之,若该指标没有达到要求,则选择某个特征并确定一个阈值,根据该特征的值是否超过阈值而将该叶子节点中的训练样本分成两类,各落入一个新的叶子节点。这样,原来的一个叶子节点就分裂成了两个。而选择特征并确定阈值的依据,就是该特征及阈值是否能最大化分裂出来的两个新叶子节点上的“纯度”指标。

这个“纯度”指标有不同的选择,比如熵(Entropy)、基尼系数(Gini Index)等。指标的选择无关自由度,但也会影响模型的性能。所以,指标的选择也是一个超参数。这个超参数不是数值,而是在几种选项中的选择。遗憾的是,不存在某一个指标,比如熵,能够在所有问题上表现胜过其它指标。这又是一个与问题本身和数据有关,且以隐晦复杂的方式影响模型最终性能的超参数。

单棵决策树的表达能力是有限的,若一味增加树的深度则很容易造成过拟合,降低模型性能。可采用模型集成(Ensemble)的方法:同时训练多棵树,预测时取它们预测值的平均或它们预测类别的多数投票,这就是随机森林(Random Forest)。

随机森林中决策树的数量又是一个超参数,它也能影响模型的自由度。树越多则自由度越高;树越少则自由度越低。除此以外,训练每棵树时是否要采样训练样本,采样比例是多少。如果特征很多,训练每棵树时是否要采样特征,采样比例是多少。凡此种种,众多决策都体现在超参数中,难以一一罗列。

上面以决策树和随机森林为例的那些超参数,属于确定模型结构的超参数。还有一些超参数控制模型的训练过程。例如,从最简单的逻辑回归到最复杂的深度神经网络,都可以纳入神经网络这个范畴。运用计算图(Computing Graph)工具可以随心所欲搭建任意复杂的神经网络,并且统一以计算图上的反向传播(Back Propagation)加梯度下降法(Gradient Descent)来训练神经网络的参数。

梯度下降法以神经网络的参数为自变量,以训练样本的特征和标签为常量,以损失函数(Loss Function)的值为因变量,计算损失函数值对神经网络的参数的梯度,得到参数空间中使损失函数值上升最快的方向,向该方向的反方向移动一个距离。从任意参数值开始,迭代执行此步骤,使损失函数值下降,期待找到使损失函数值尽可能小的神经网络参数。仅此一个过程,又涉及众多选择和超参数。

首先,上面说梯度下降法的每一次迭代沿着损失函数值当前梯度方向的反方向前进一个距离,这个距离叫做步长或学习率(Learning Rate),是一个重要的超参数。若步长过大,每一次梯度下降迭代前进的距离过远,则有可能忽略损失值地形的细小地貌,错过要寻找的较优点,甚至使训练过程不收敛。若步长设置得过小,则训练过程会很慢。损失函数值的地形复杂,其中存在鞍点、局部极小点等梯度为零向量的点。较大的步长可以帮助模型跳出局部极小点。笼统来说,步长仍与模型自由度挂钩,是一种正则化手段。较大的步长相当于施加了较强的正则化。

梯度下降的迭代过程何时终止,这又是一个选择。可以设定总的迭代次数,那么这个次数就又成为一个超参数。可以设置梯度长度(模)的阈值(一个很小的值),当梯度的长度小于该阈值时,则认为接近或到达了梯度为零的区域,它有可能是某个局部极小点,于是就此终止迭代。阈值又是一个超参数。

步长也可以随着训练进行而动态改变,通过一个随着迭代次数变化的函数指定每一步迭代的步长。一般是随着迭代次数的增多而逐渐减少步长,因为我们认为随着迭代次数增多,我们接近了要寻找的较优参数值,这时的步长应该小一些,以精细探索当前区域。这个步长对迭代次数的函数的形式不一,但毋庸赘言,其中又会有一些超参数控制该函数的形态。

人们对原始的梯度下降法提出了很多改进。梯度下降法只利用了损失函数在某个参数点附近的一阶近似信息,即泰勒展开的第一项。而函数局部更精确的信息蕴含在函数在当前参数点的二阶信息——赫森矩阵(Hessian)中,这是泰勒展开的第二项。赫森矩阵的计算量是巨大的,所以现在诸多对梯度下降的改进都是靠积累历史梯度(之前迭代中计算的梯度)来模拟函数形态的二阶信息。

这些方法包括但不限于:冲量法、AdaGrad、RMSProp、ADAM等等。每种改进都以某种方式积累历史梯度信息,并将它们融入当前的前进方向。每一种改进算法都又有若干超参数。以上远远没有列举出全部与梯度下降算法有关的超参数,它们非显式地,以微妙的方式影响着神经网络的训练过程。

在深度学习领域,神经网络早已打破了模型种类的划分。运用计算图可以自由搭建任意网络结构。比如全连接层、卷积层、RNN、LSTM、残差网络、Attention、Transformer等等。这些指的都不是某一种模型或网络,而是一种网络结构,或者说组件。

在实践中,这些组件被证明对某类问题具有较好的效果,于是人们可以自由搭配这些组件,构造更复杂的神经网络。比如在多模态的问题中,样本可以是一张图片加一个句子,标签是一个类别。这时候,可以用一系列卷积层来接受图片输入,当然插在其间的池化自不必说。用一个RNN接受句子,将两部分的输出进行变形和连接,然后输入给若干全连接层,最后形成模型的分类输出。

每一种结构有都有许多设计选择:卷积核的尺寸和步长,池化层的尺寸,全连接层各层的维度,激活函数的类型,RNN隐藏层的维度等等。这些还都是可以用一个超参数——数值或选项来概括的结构特点,若想要在更灵活的无穷连接方式中寻找最优网络结构,那就会有更多选择——难以用数字和选项概括的选择,这属于网络形态的优化。

正则化(Regularization)是一种控制模型自由度的手段。当前,深度学习的成就离不开基于GPU的强大的计算力,强大的计算力是为了应对超大的数据量。无论是视觉问题还是自然语言类问题,深度学习都需要一个巨大的训练集。同时,每一个样本的维度也是巨大的。只有在如此巨大的训练集上,深度神经网络才能学习出正确有用的信息。

那么,模型的自由度也就必须大,也就是说模型要足够复杂。但复杂的模型容易造成过拟合,必须依靠强力的正则化手段来约束模型的自由度。深度学习的整个成就可以概括成:在强大的正则化约束下,运用强大的计算力训练自由度足够高的模型。

最强大,最有效的正则化手段就是大量数据。除此以外,还有其他一些正则化手段,比如正则、正则。它们通过给损失函数加惩罚项以限制算法在参数空间中自由搜索。Dropout通过每次迭代随机改变(删减)网络节点,为网络训练添加随机性。Batch Normalization调整每一层输出的分布来对抗数据的分布特定随着往深度网络后部前进而改变。

这里仍是列举了很少几个例子。每一种正则化手段又有超参数,比如正则和正则的强度,它是一个实数。每一个节点在每一轮迭代中被Dropout的概率。这些超参数影响正则化的强度,进而影响模型训练的效果。仍然,这些影响是非直观的、隐晦的。即便是知识扎实、经验丰富的建模工程师也无法随心所欲地通过调整这些超参数直接达到训练更好的模型的目的。这是一个试验、观察、重复的无休止的过程。

以上仅仅是列举了机器学习领域中极少的一部分模型和极少的一部分超参数。可见,要掌握所有模型的所有超参数,理解每种超参数对模型结构、训练过程以及最终的模型效果有可能会产生什么样的影响,需要具备多么广博和深入的专业知识,只有该领域的高级人才方能做到,而且是一个极度费时费力的工作。

可否利用大的计算力自动进行超参数的选择?这就是自动超参数优化。自动超参数优化解决的问题是:在超参数空间中寻找能使模型性能最佳的超参数。超参数空间指的是包括哪些超参数以及每个超参数的取值范围。有哪些超参数取决于要使用哪种模型以及采用哪种训练算法。比如,若要训练随机森林,则超参数包括树的最大深度,叶子节点的分裂指标,森林中树的数量等。若要用梯度下降法训练CNN,则超参数包括:卷积核尺寸,全连接层的数量,每层的维度,激活函数的类型,学习率等。

要在其中进行搜索的超参数空间不一定包含这种模型和训练算法的所有超参数,对每一种超参数也不是取遍它的全部可能取值。选择哪些超参数,确定每个超参数的取值范围,这是应用自动超参数优化算法的人在算法启动前指定的。

所以说,永远没有完全的“自动”,人的参与和预设是不可避免的。这个动作还是需要人类的专业知识。人知道面对当前这个数据和模型,哪些超参数可能会有影响,则将它们加入到自动超参数优化中来。每种超参数取值的最优值大致处于一个什么区间,比如人们知道学习率取10,000一定不会有好效果,甚至会导致训练过程发散,所以人们会给自动超参数优化指定一个合理的学习率区间,比如[0.0001, 0.05]。关于超参数空间的指定,在“技术方案”一节会有详细说明。

使模型性能最佳,这就要看评价模型的指标是什么。对于回归问题,指标可以是均方误差、根均方误差、平均绝对误差、R2系数等。对于二分类问题,指标可以是正确率、查准率(精确率)、查全率(召回率)、F1 score、真阳率(等于查全率)、假阳率、ROC曲线下的面积(AUC Under ROC)等。对于诸如排序、物体检测、文本翻译等更复杂的问题,还有其他众多特定的评价指标。

使用者要告诉超参数优化算法优化哪个指标。其实指标具体是什么,超参数优化算法并不关心,它只关心需要最大化还是最小化某个(指标)值就可以了。若要同时优化两个乃至多个指标,则需要构造一个公式将多个指标糅合进来,比如加权求和,或将需要最大化的指标放在分子,将需要最小化的指标放在分母。可见,这里再次涉及人类的预设和选择。

通过前面的介绍可知,一套超参数的特定取值与最终模型的评价指标之间具有复杂的关系。只有通过设置这套超参数值,在训练集上训练并在验证集上评价模型,才能得到这一套特定的超参数值对应的评价指标。注意这个对应关系具有一定随机性,因为模型的训练过程具有随机性。用同一套超参数两次训练并评价模型,会得到稍有不同的评价指标值。但统计上这种随机性背后具有分布的确定性,我们才能说某套特定的超参数能训练出较好的模型。

由此可知,自动超参数优化本质上是一个非参数优化过程,又叫黑盒优化。它与前文介绍的梯度下降法等优化算法不同。在那些算法里,我们知道(损失)函数的数学表达式,这个表达式也许很复杂,例如深度神经网络,但其数学结构是明确的,并且可以求导。这样,我们通过计算图中的反向传播逐节点求雅可比矩阵,可计算出损失值在当前参数(注意不是超参数)的梯度,根据梯度我们就知道了能使损失值下降最快的方向并沿着那个方向探索参数(再次注意,不是超参数)空间。

对于自动超参数优化来说,从一套超参数值到模型评价指标之间的“函数”,是一次训练和评估,这里面没有明确的数学结构,只能把这个“函数”看作黑盒。提供一组输入(一套超参数值),黑盒返回一个输出(评价指标值)。可以把大量超参数组合提供给黑盒并得到它们对应的评价指标,以某种方法从中摸索确定超参数空间中的搜索方向。这就是黑盒优化,也就是自动超参数优化广义的原理。

没有表达式,我们无从得知黑盒函数的形态。但若我们在一套超参数值,即超参数空间中的一个点附近随机选择若干组超参数值,即在超参数空间中随机选择若干当前点的临近点,将它们送给黑盒,黑盒返回这些超参数点的评价指标值。利用这些点以及它们对应的值可以估计黑盒函数的形态。利用这种估计确定能使黑盒函数的输出,即模型评价指标上升或下降的方向。所有的黑盒优化算法无非是估计方法有所不同。

最简单的超参数优化算法是网格搜索(Grid Search)。网格搜索的超参数搜索空间很简单:选择参与搜索的超参数,为每个超参数选择有限数量的一组值。网格搜索通过排列构造每一个超参数的每个可能取值的组合。假如参与搜索的有m个超参数,各个超参数的指定取值数量分别是k(i),i=1…m,则网格搜索会构造并尝试k(1) * k(2) * … * k(m)组超参数。对每组超参数进行模型训练和评估,从中选择最优的一组。

实际应用中一般不会只进行一轮网格搜索。假如,指定给超参数的取值是p(1) < p(2) < … < p(k),而在最终找到的最优超参数值组合中的取值是pk,说明从p(1)到p(k)变化时,评估指标值是越来越优的,也说明在>p(k)的区域内也许会有更好的超参数值。此时,在时间和计算力允许的情况下应该开启新一轮搜索,超参数p的取值范围应该指定在>p(k)的区域内。这个动作其实就体现了上文所说:根据黑盒函数的返回值估计函数形态,根据形态估计确定搜索方向。而在网格搜索这里,这个沿特定方向的搜索是手动,而不是自动的。所以,网格搜索是一种很初级的超参数搜索方式。

另外,网格搜索中,无论与其它超参数排列组合出多少套超参数取值,对于只尝试了种取值,这无疑是一种懒惰和浪费。随机搜索(Random Search)对这一点进行了改进。随即搜索仍然是先选择参与搜索的超参数,但是对于每一个超参数不是指定若干特定值,而是指出一个采样方式。比如,对于类别选项式的超参数(例如决策树叶节点分烈指标取“熵”还是”基尼系数“)指定每种取值的选择概率。一般是均匀分布,即每种选择的概率相同。对于数值型超参数,比如正则化强度,可以指定采样分布,例如一定范围内的均匀分布或指定均值和标准差的正态分布。

使用者指定搜索次数,每次根据指定好的分布采样一组超参数值,进行模型训练和评估,最后选择评价指标最优的超参数值。相对于网格搜索,随机搜索的好处在于它对每一个超参数能尝试更多的取值。另外随机搜索的超参数组合数是使用者指定的,使用者可以掌握搜索的规模。而网格搜索的组合数是所有超参数的不同取值数量之积,使用者对其没有直接的控制。想控制也可以,但需要实现进行无聊的计算。

无论是网格搜索还是随机搜索,它们的本质都是猜测一批超参数组合,然后从这些超参数组合中选取令模型评价指标最优的那一组。它们都没有尝试在超参数空间中摸索试探能使评价指标更好的方向,所以它们是最简单、最平凡的一类超参数优化算法。

更高级的黑盒优化算法会尝试在超参数空间中寻找使模型评价指标更优的方向,并沿着该方向继续探索新的超参数组合。遗传算法是其中一个有趣的例子。遗传算法的灵感来自于自然界的生物演化。在繁殖过程中,某物种雌雄个体的基因经过组合产生一个后代个体的基因。后代个体的基因发生一定变异,在自然环境中竞争以获取繁殖机会。物种个体是否适应它的生活环境,决定它能否在竞争中获胜从而将它的基因传递下去。

应用遗传算法,首先需要将候选解决方案进行编码(类比基因),这种编码要允许在两个方案之间组合,在一个方案上变异。以超参数优化的例子来说,可以采用这样一种方案,将参加优化的各个超参数与它们的某个取值以特定分隔符连接成一个字符串,例如:

其中,alpha、beta、gamma和delta是参与搜索的四个超参数,例如学习率、正则化方法、正则化强度等。abcd是这四个超参数相应的某个取值,例如学习率取0.002,正则化方法是“l2”,正则化强度是0.01等。分号是超参数之间的分隔符。这样的编码就代表了一组超参数,或者说代表了建模问题的一个方案。一个编码类比为物种的一个个体的基因。

基因的变异非常简单。每一个超参数以一定概率,比如0.2,发生变化。对于连续数值型的超参数,变化值可以是取自零均值且方差较小的正态分布,例如:

其中a(new)是超参数alpha新的取值,它是旧的取值a(old)加上一个小随机扰动。注意,编码(基因)的变异不应过于剧烈,这体现在发生变异的概率应较低,发生的变异应该较小。但是,对于离散类型的超参数,例如正则化方法,一旦发生变异都是较为剧烈的,比如从“l2”变异为“l1”。所以对于离散类型的超参数,其发生变异的概率应该比连续类型的超参数更低。

编码(基因)还应有进行组合的能力,即由两个编码组合生成一个新的编码。这类比亲代父母繁殖出一个新的子代个体。对于上述编码,可以采用这样的组合方式:随机选择一个位置,比如2,从第2个分隔符(分号)将两个编码切开,分为前后两个部分。将两个编码的后面部分交换后与前面部分连接形成新的完整编码。这样,两个编码经过组合就形成了两个新的编码。

每一个个体是一组超参数,个体对环境的适应性由用这组超参数训练出来的模型的评价指标来衡量。评价指标越优,则个体对环境的适应力越强,它应该获得更多机会繁殖后代,将它的基因传递下去。

遗传算法这样进行,首先随机初始化一个群体,其中包括N个个体,N称为人口。每个个体就是一组超参数组合。对每一个体进行模型训练和评估,按照模型的评价指标对个体排序,选出其中评价指标最优,即适应性最佳的Top K%个体。随机从这Top K%个体种选择一对进行繁殖(组合)。这个动作进行N/2次,则生成新的N个个体,再对这些个体进行变异,就生成了子代,即新一代个体。这个过程进行M次,即一共繁殖M代,最后一代个体中最优的一个就是要寻找的最佳超参数组合。

遗传算法的发明人John Holland在其著作《自然与人工系统中的适应》(Adaptation In Natural And Artificial Systems: An Introductory Analysis With Applications To Biology, Control, And Artificial Intelligence,1975)中证明了遗传算法确实能在超参数空间中寻找使模型指标优化的方向。

从上面介绍中可见,诸如人口N、变异概率、连续值随机变异的分布(方差)等又是需要算法使用者指定的参数——超参数优化算法的超参数。没有任何方法是纯不需要人参与的。但是这些“超-超参数”要比模型的超参数更容易选择和设定,甚至可以采取固定的配置,这就避免的超参数优化算法仍需要调参。

由遗传算法这个例子可以看出,黑盒优化算法都需要进行数量不少的试探。对于超参数优化来说,一次试探就是一次模型训练和评估。因为本质上,黑盒优化算法都是在不知道被优化函数的数学结构的前提下,通过试探估计函数的局部形态。

模拟退火(Anneal)算法的灵感来自于一种金属热处理工艺。将金属缓慢加热到一定温度,然后以适宜速度冷却,此过程有利于消除金属中晶体的排列缺陷,增强金属性能。最朴素的模拟退火算法是这样:随机选择一组超参数组合作为初始值,之后执行次迭代,每次迭代对初始值进行随机变化。这个变化完全可以采用遗传算法中的变异方法,总之就是在超参数空间中当前点的周围随机选择一个点。若该新超参数组合的模型评价指标优于当前的超参数组合,则取该新超参数组合作为新的值,这与朴素的随机猜测是一致的。但是,若新超参数组合的评价指标不优于当前超参数组合,模拟退火算法仍以一定的概率选择新超参数组合。概率如此计算:

假设希望评价指标越低越好,即评价指标是某种损失(Loss)。delta E是新超参数组合的评价指标与当前超参数组合的评价指标之差。当新超参数组合不优于当前超参数组合时,delta E >= 0,即-delta E <= 0。-delta E越小,即新超参数组合越逊于当前超参数组合,根据p的式子,采用新超参数组合的概率越低。

概率p还受控于一个数值——温度。容易看出,-deltaE相同的情况下,T越大则p越大,算法更倾向于采用(不优于当前超参数组合的)新超参数组合。T之所以称为温度,是因为温度越高,系统分子动能越大。若将指标值视作势能,指标越低则势能越低。系统倾向于落入并维持在势能较低的地方——势阱。温度越高,相当于为系统注入了更多动能,系统就具备更大的跳出势阱的能力。

随着迭代进行,以某种方式逐渐降低温度,则系统越来越“冷却”。在每一步迭代中,算法越倾向于只向指标更低的地方迁移。降低温度的方法与前文介绍的随着训练降低学习率的方法相似,可以采用相同的指数下降函数。从这里可以看出两种方法的相似性——逐渐降低学习率也是一种“模拟退火”。

每一步迭代,若发现了指标更优的点则迁移过去,这是很正常的,毕竟目的就是寻找指标更优的点。但是若每一次都只向更优的点迁移,则容易陷入局部极小点。算法需要更多随机性,这样才有更大的“创造力”使它摆脱局部最优,尽量寻找更优的点。模拟退火通过引入温度机制为搜索算法掺入随机性。模拟退火算法中更高的温度类似于遗传算法中更高的变异概率和变异方差。

以上就是模型训练所面对的超参数优化问题,就是常说的模型调优问题。我们介绍了AutoML中的超参数自动优化算法的基本原理,并阐述了几种算法的原理。还存在许多其它黑盒优化算法,在此不再详述。本质上,所有这些方法都是相同的:通过试探,估计超参数空间中使模型评价指标更优的方向,大体上沿此方向探索,同时引入一定随机性,使算法更具“创造性”以不至受困于局部最优。

应用超参数自动优化技术,可使得建模工程师免于手动一次次地试探建模,同时可以放松建模工程师对各类模型,各个超参数的含义以及它们对模型性能的影响的理解的要求,使更广大的工程师也能够进行模型调优。使用超参数自动优化算法,需要:

  1. 确定参与搜索的超参数以及它们各自的取值空间;
  2. 选择超参数自动优化(黑盒优化)算法;
  3. 设定超参数自动优化算法的参数;

这三个步骤仍然需要应用者具备一定的理论水平和对问题的分析能力,但是这些选择和设定的数量和复杂性已经远小于手工调参,这就是超参数自动优化技术的意义。

自动超参数优化技术的风险存在于两个方面:效果和性能。效果,是指自动超参数优化是否以及多大程度上能够找到使模型效果最佳的超参数组合。我们知道,超参数调优是一个对建模工程师的理论知识、实践经验以及对当前具体问题的分析了解要求非常高的任务。严格来讲,对于每一个不同的问题和数据,都没有统一的模型调优方法。那么,忽略具体问题就必然会承担一定的信息损失。

自动机器学习就其最小范畴来说,至少包括:自动特征选择,自动特征构造和自动超参数调优。自动特征选择比较容易,可以根据特征与标签(目标)之间的诸如相关性之类统计指标选择出与目标最相关的特征。自动特征构造是困难的,它往往需要工程师从具体的问题出发,考虑现有特征与目标的联系方式,创造性地从现有特征中构造新特征,并反复增减、尝试。现实问题中带来最大效果提升的往往是特征工程,即新特征的引入。将自动建模归结为自动超参数调优,就已经丧失了一部分能动性。

       将一个极度依赖人员的素质和能力的工作交给机器自动完成,可想见,必然会带来一定程度的损失。首先,难以跳出“优化算法有超参数,优化优化算法的超参数的算法又有超参数”的怪圈。黑盒优化算法有很多种,首先,选择超参数优化算法本身就是一个问题。上文虽然给出了各个算法的特点和适用场景,但那只是非常粗劣的描述,许多算法的适用场景的描述也都是重叠的。那些描述无非从三点出发:

  • 计算力是否充足;
  • 每次试探耗时是否很长;
  • 待搜索的超参数空间是否很大。

这三点判断都是模糊的,没有一定标准。无法定量定义计算力是否充足,一次试探耗时是否很长、超参数空间是否很大。这三点判断仍要依赖建模工程师的经验和判断。另外,众多算法的适用场景往往也有很大重叠。比如,多种算法都适用于超参数空间大且试探时间短,那么此时该如何取舍?这又是一个没有标准问题的答案。而且,实践中很难把待解决的问题套到那几种适用场景中去。

超参数空间对于超参数优化算法来说只是一个输入。算法不管要搜索哪几个超参数,取值范围是什么。超参数空间指定好,算法只要开始工作就好。但是,是否能够寻找到足够好的超参数组合,往往很大程度上取决于超参数搜索空间。

之前我们看到,每一种机器学习模型都有大量超参数。实践中不可能将每一种超参数都加入超参数优化算法的搜索空间。这个取舍并非是自动的,但往往是关键的。这个决策仍需要建模工程师的水平和经验。

超参数优化算法本身又有参数。例如,遗传算法的人口和变异概率,模拟退火的温度系数指数衰减率等等。当然,这些参数比模型的超参数少很多,通用性也大一些。它们一定程度上不像模型超参数一样需要精细调节。但它们毕竟是参数,若采用固定取值试图包打天下,势必对最终效果有所影响。

以上谈的是效果上的风险,事情的另一面就是资源的投入。若为了取得好效果而投入太多资源,就要考虑是否得不偿失。若投入了大量资源却未取得好效果,就更加不值得。我们一再强调,所有超参数优化算法都是黑盒优化算法,其本质都是通过大量试探来估计被优化函数的形态,从而使图寻找最优解。它们对计算量的需求都是巨大的。

对于网格搜索,若想多探索几个超参数,每个超参数多尝试几个值,则产生的超参数组合数量巨大。比如,想调节n个超参数,每个超参数探索m个不同取值,则会产生n的m次方组超参数组合。对于遗传算法,每一代的人口N不能过小,否则“基因池”过小,“近亲繁殖”严重,容易陷入局部最优。

随机搜索和模拟退火都可以由使用者指定尝试次数。比如模拟退火,每一次迭代就是一次试探。这可以避免尝试次数不受控制地膨胀,但是,迭代次数过少,解在超参数空间中“行走”的距离太近,也难以找到足够好的超参数组合。就好像训练模型的梯度下降法,迭代次数过小会导致欠拟合。SMBO家族的算法,如TPE、GP等,要求的尝试次数相对少一些,但是数学技术永远不能替代真实信息,而真实信息就蕴含在试探之中。没有足够的信息,超参数优化算法永远不可能达到足够好的效果。

试探次数巨大,每一次试探的成本就很关键。对于机器学习建模的超参数自动优化来说,每一次试探就是在训练集上训练一个模型,并且在验证集上评估这个模型,得到模型的评价指标。而训练和评估模型不是一个低成本的动作。

当今,随着网络和存储技术的发展,我们往往拥有海量的数据,即大数据(Big Data),从中能产生很大的训练集。哪怕较简单(训练时间成本较低)的传统机器学习模型,在较大训练集上一次训练的时间成本也是几十秒至分钟级。深度神经网络在一个中等数据集上的训练时间往往会达到小时级乃至天级。应用超参数优化算法,100次尝试算是很少的了,若串行地处理某个深度神经网络的超参数优化,则需要数百小时的时间成本,这是难以承受的。

可以通过将尝试过程并行化以节约时间成本,但这就带来了更大的计算力成本。况且,不同的超参优化算法可并行化的程度是不一样的。例如,网格搜索和随机搜索允许完全并行化。若需要一百次尝试,可以将一百次训练和评估放在一百个计算节点上同时进行,最后比较评价指标获得最终结果。但是,对于遗传算法,新一代只能在上一代之后产生。若每一代的人口是N,可在N个计算节点上并行训练和评估这一代个体。之后的杂交和变异计算成本约为零。但是,下一代个体只有等上一代都完成后才能产生。若繁殖M代,所需的时间成本就是M * T,T是模型训练和评估所需的时间。遗传算法往往需要繁殖很多代才能得到较优的结果。模拟退火以及SMBO类算法都是几乎无法并行的,因为它们需要之前尝试的结果来决定下一次试探的方向。

可见,模型训练和评估的高成本极大限制了超参数自动优化算法的使用范围和效果。它作为一种辅助技术,仍然需要建模工程师的参与和监督。偶尔情况下,自动超参数优化能取得出乎意料的好结果,但是场景不合适或使用不当也会造成计算资源的极大浪费。使用者必须认真评估面对的问题,以决定是否要采用这种技术。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇