3.5 自动化机器学习
前面提到,元学习的目标之一是实现General AI,使机器具备从已有模型推演出完成新任务模型的能力。自动化机器学习AutoML是类似的概念,让机器学习变得自动化,使机器学习模型具有更好的适应性,遇到新问题时,可以自动学习机器学习模型,用来解决新问题,而且效果比人类手动调试的模型更好。然而,AutoML和元学习是不完全重合的领域,AutoML大部分的工作是在研究神经网络模型的超参数优化,包括神经网络模型结构的优化和结构中超参数的优化,在所有可能的超参数组合中,找到最优的超参数组合,其对应的神经网络模型达到了全局最优的表现。早期的元学习模型大多研究超参数的优化,而近期的元学习研究更多集中在让机器快速准确地完成分布外任务。
3.5.1 超参数优化
神经网络模型的超参数包括以下两部分。
(1)离散的超参数,描述的是神经网络结构的设计。例如,CNN中卷积层和池化层叠合的结构设计,重复的层数,以及池化层的选择;还有高速路神经网络模型中不同层之间捷径连接的设计,捷径中门函数的选择,Inception模块的插入。在神经网络结构中常有重复的层结构和模块,可以灵活拼装成神经网络模型,满足实际应用需要,提高模型精度。
(2)连续的超参数,描述的是神经网络模型中的参数设计。例如,前文提到的学习率参数、动量参数等。
连续超参数的选择依赖于离散超参数,离散超参数决定了神经网络模型的结构,例如,深度、宽度等,连续超参数的设定依赖于神经网络的结构。给定超参数之后,神经网络模型的结构就确定了,即可以开始进行训练。
常见的做法是专家根据理论和经验来优化超参数,给出表现更好的深度神经网络模型。AutoML的目的是自动化机器学习,通过超参数优化,在所有超参数组合中寻找最优的组合,得到最优深度神经网络模型。AutoML通过自动化方式搜索到的最优神经网络模型比人工调试的更优,而且,超参数取值的选择越多,考虑的可变超参数数目越多,可选的超参数组合越多,那么,AutoML搜索出来的最优深度神经网络模型越好。
AutoML自动化寻优花费大量时间和计算资源,找到的最优模型只能匹配人工调试的最优模型。看起来似乎不值得,但是人工智能学者们认为,计算能力发展得很快,过去需要很久计算得到的结果,现在很快就能得到,计算资源的花销并不是方法研究中的重点,关键是方法本身是否会带来更好的深度神经网络模型,方法是否具有更好的推广性,能否更好地下沉到实际应用的各个领域,以推动全面智能化的发展。虽然AutoML花销很大,但是自动化便于人们学会使用,得到的模型效果不差,适用于任何深度学习领域,因此,AutoML会成为主流的深度神经网络模型设计者。
常见的超参数优化方法有随机搜索[29]、遗传演化算法、强化学习、元学习、贝叶斯优化等,避免困在局部最优中,努力达到全局最优。这些常见的超参数优化方法有这样一些比较:
(1)随机搜索方法可以避免局部最优,但是搜索计算量较大。
(2)遗传演化算法可以有效地避免局部最优,但是计算量仍然较大。
(3)强化学习方法将离散超参数的选择视为行动,将模型的表现视为奖励,通过有序的优化方法选择最优行动,最优行动对应最优超参数组合和最优的深度网络模型。
(4)元学习方法多和强化学习、遗传演化算法结合起来进行模型超参数的研究,在每个超参数组合下,元学习器可以根据以往训练的经验,不经过大量的训练迭代,就可以预测出该超参数组合下模型的表现,从而加速超参数优化的过程。
(5)连续超参数的优化基于给定的离散超参数的设定。首先设置离散超参数确定神经网络模型的结构,然后在此结构上优化连续超参数。因此,连续超参数的优化依赖于离散超参数的优化,对于有依赖关系的超参数组合优化问题,贝叶斯优化方法具有优势。
在AutoML考虑的超参数组合非常多的情况下,遍历所有的超参数组合几乎是不可能的,而且所有超参数组合中真正带来好的表现的组合非常少。在这样的情况下,搜索方法需要很有效率,而且不陷入局部最优值,这样才能在这样稀疏的环境中找到最优神经网络模型。
3.5.2 元学习和自动化机器学习
元学习的思路是,在新任务上,更新神经网络模型,适应新任务的处理,希望神经网络模型拥有更多的自由度,更加灵活,能在新任务上进行简单快速的优化,以形成准确的推理。自动化机器学习在大量的神经网络模型超参数组合上进行搜索,例如,神经网络的深度、每一层的宽度、ResNet基础模块或者Inception模块的插入和重复堆叠、池化层和卷积层的组合堆叠、捷径的使用、学习率、动量参数、批尺寸等,对神经网络的这些超参数取值进行自由组合,找到表现最优的神经网络模型。AutoML耗费大量的时间和计算资源,需要加速搜索的过程和加速每个超参数组合下模型的训练过程,且避免陷入局部最优的超参数组合,努力找到全局最优的神经网络模型,在新任务上更快地找到结构最优且超参数最优的神经网络模型。
自动化机器学习的计算量花销大,为了打败人工调试的机器学习模型,AutoML需要考虑实际中人工调试时会考虑的所有超参数选项,在这些超参数组合中,找到模型表现最优的超参数组合。由于需要遍历的超参数组合非常多,元学习思想可以用在自动化机器学习神经网络模型中,加速模型超参数组合下模型的探索,更快地找到最优的神经网络模型。元学习框架可以起到这样一些作用:
(1)累积训练经验,预判超参数组合下神经网络模型的表现,指导基础学习器优先探索预测表现好的超参数组合。通过早期的训练迭代就可预判最终训练的结果,可节省每个超参数组合下训练的时间。
(2)将每个超参数组合视为一个任务,元学习器综合许多任务的训练经验,找到不同任务之间的相似性,在新任务上无须迭代训练就能给出模型表现的预判,并且指示探索新任务的方向,根据预判推荐下一个要遍历的超参数组合。
(3)将每个超参数组合视为一个任务,于是变成了找到最优任务的问题。借鉴贝叶斯元学习的思想,通过任务的先验分布和后验分布,在探索新任务之后,不断更新任务的分布,根据任务分布,计算任务专属参数的分布。
(4)AutoML让模型从简单到复杂进行演化,使用进化算法,借鉴生物进化过程中从最早的单细胞生物到后来具有智能的复杂生物体的由简入繁的进化过程。在搜索的过程中,让模型的复杂度只上升不下降,元学习器使用遗传演化算法更新基础学习器中的超参数组合,优先探索预判表现好的超参数组合。
(5)将已训练任务的结果保存在记忆模块中,通过注意力机制提取记忆,对新任务进行快速准确的推理。使用记忆模块累积模型训练经验,为新任务提供初始值,加速任务的遍历,更快找到最优的超参数组合。
如此一来,元学习框架被融入AutoML,起到了加速和指导AutoML训练的效果。好的初始值通过快速的训练迭代就能得到好的结果,而加速遍历超参数组合有利于节省时间,节省下来的时间可以遍历更多的超参数组合。通过对超参数组合进行预判,探索的都是更优的超参数组合,这样的搜索方法更有效率。
除此之外,元学习模型还包括许多思想,在后面的章节中我会一一介绍,它们都可以被应用到AutoML中。这里简要介绍了这样一些元学习模型,它们可以用在AutoML中加速最优神经网络模型的自动化搜索。举例说明,将元学习模型用在AutoML中的思路有以下这些。
(1)设计端对端(End-to-End)的神经网络模型更新方法(Update Strategy),可快速给出适应新任务的准确模型。一般认为,可求导的模型更新方法更有效率,例如,使用梯度反向传播,模型无关元学习方法(MAML)通过随机梯度算法更新参数,提高深度神经网络模型的适应性,以便更好地应用到新任务上。将在其他任务上AutoML寻到的最优神经网络模型经过端对端的更新,找到新任务上的最优神经网络模型,避免了浪费时间使用AutoML从头开始寻找最优模型。
(2)设计神经网络模型的局部更新方法(Local Update),只更新神经网络中对于适应新任务至关重要的部分参数,以节省计算量和时间。例如,在CNN中,输入数据在最先进入的层中对图像的平移不变特征进行提取,而所有图像中特征提取的层都是类似的,因为它们的功能是类似的。对于不同的图像任务,使用的特征提取层也是类似的,因此更新特征提取层的参数对于适应新任务而言并不至关重要。更为重要的是,更新全连接层或者上采样层以及输出层中的参数,这些参数对于适应新任务而言至关重要。对于不同的任务,这些和输出层更接近的层中的参数变化很大,在给定训练时长的要求下,需要优先更新靠近输出层的参数,其次才是更新其他参数。在其他类似任务上,AutoML寻到的最优神经网络模型上使用局部更新方法,找到新任务上的最优神经网络模型。
(3)存储模型更新过程中用过的梯度值,用于加速新的模型更新过程。在神经网络模型中添加记忆模块,从输入任务数据集提取特征、模型训练结果等有效信息,将这些信息存储在记忆模块中,记忆模块具有信息存储、信息搜索、信息遗忘等功能。处理新任务时,可以从记忆模块中搜索到过去相关任务的训练经验,且记忆模块可以被添加到任何深度神经网络模型中,用于加速模型的训练和提高模型的泛化能力。将AutoML处理过的任务特征和任务模型存储起来,在新任务上提取有用的记忆用于借鉴,可更快地在新任务上找到最优神经网络模型。
(4)将学习器中的超参数选择视为强化学习框架下的行动策略,依靠行动策略的优化来计算最优的超参数组合,从而找到全局最优的学习器形式。这里的元学习器使用强化学习框架,在新任务上优化行动策略来更新模型,以适应新任务的处理。强化学习模型的训练往往需要花费大量的时间和计算资源,因此在模型设计时需要适当地简化和加速,让模型更有效率,将AutoML中的超参数组合视为行动策略,通过元强化学习的框架找到最优超参数组合对应的最优神经网络模型。
(5)使用循环神经网络模型RNN作为元学习器,将元学习器作为控制器,控制神经网络模型结构和参数的更新,也可以用RNN作为元学习器控制强化学习模型中超参数的更新。在元学习中,考虑学习器的优化时,常常采用多层元学习器的结构来提高元学习模型的适应性,以适应差异更大、更多样的任务。例如,在论文列表中的论文[30]中给出的多层循环神经网络RNN元学习器模型就可以实现这样的效果。首先,任务中的数据规模可拓展,多层RNN元学习器在数据批次、模型批次、任务批次等层面上进行归纳推演,从而适应规模更加多变的任务;其次,学习器在训练时间上也很灵活,根据任务需求和硬件条件,对数据批尺寸、模型批尺寸、任务批尺寸进行调控,从而调控学习器的训练时长。在AutoML中使用RNN的元学习器作为控制器和预测器,控制超参数组合遍历的方向,预测尚未探索的超参数组合中有潜力打败目前最优模型的组合。在AutoML中优先探索有潜力的组合,加速AutoML的训练过程,并且帮助AutoML找到更靠近全局最优的模型。
本节对元学习方法的思想进行了简介,在后面的章节中还会依次介绍度量学习、元学习器、贝叶斯学习等元学习中的主要思想和方法,它们和自动化机器学习的结合有无限的可能,元学习和自动化机器学习的结合不止本节列出的这些,读者可以继续探索和挖掘。
3.5.3 加速自动化机器学习
接下来介绍两篇论文,它们使用元学习器作为超参数组合下模型最终表现的预测。在AutoML按照一定规则遍历所有超参数组合时,原本需要在每个超参数组合下,训练神经网络模型,迭代很多次,计算网络模型最终的表现。使用元学习器对每个超参数组合的表现进行预测,根据几十个超参数组合下模型训练的完整经验,再根据每个新超参数组合下迭代几次的表现,就可以预测出迭代多次之后的表现。这样做可以节省每个超参数组合下模型训练的时间,更快地决定该超参数组合是否会给出更好的结果。如果会给出更好的结果,就迭代多次,如果不会给出更好的结果,就尽快舍弃,并开始探索下一个超参数组合。元学习器的预测能力是影响此时AutoML算法表现的重要因素之一。
Tobias Domhan等作者在2015年的论文“Speeding up Automatic HyperparameterOptimization of Deep Neural Networks by Extrapolation of Learning Curves”[34]中介绍了AutoML和元学习结合的雏形。这里考虑的是超参数的优化,在不同超参数的组合下,训练神经网络模型,计算模型的精度,通过对学习率曲线(Learning Curve)进行样本外预测,来预判神经网络模型的精度。不需要经过太多轮次的训练,就能对超参数组合的效果进行判断,缩短了遍历所有超参数组合的寻优过程所需要的时间。这里,通过早期学习率曲线预测模型的最终表现,可以将其视为元学习器模块。
常见的学习率曲线有以下两种:
(1)神经网络模型的表现对迭代轮次或者训练时间作图。
(2)神经网络模型的表现对训练数据集的大小作图。
两种学习率曲线的用处分别是:
(1)根据早停规则,判断模型表现,判断模型训练是否应该早停。
(2)了解为了达到目标精度需要的训练数据集的大小,从而收集相应大小的有标注数据集。
图3.12给出了第一种学习率曲线的规律:
(1)最开始,迭代轮次增加,神经网络模型表现逐渐变好。
(2)迭代轮次过了临界值,再增加迭代轮次,神经网络模型表现变差,认为是正在训练的神经网络模型出现了过拟合,可以在临界值时停止对神经网络模型的训练,这种做法称为早停。
(3)学习率曲线的形状类似,可以使用早期学习率曲线预测后期曲线的走势,以及训练完成时模型的最终表现。
图3.12 学习率曲线早停示意图
早停规则的两层含义:
(1)在迭代轮次超过临界值之前停止训练,即在过拟合出现之前停止训练。
(2)根据早期学习率曲线的表现预测后来的表现,在不可能超越已经找到的最优模型表现时停止训练,开启下一个超参数组合的探索。
使用参数回归模型(Parametric Regression Model)对学习率曲线进行建模:
其中,t是学习率曲线中的第t个训练迭代轮次,f是对学习率曲线建模的参数模型,θ是学习率曲线模型中的参数,ε是服从高斯分布的残差。
论文中提到,参数模型f有11种选择,形状大致都是图3.12所示的模样。为了对学习率曲线有更好的预测,参数模型的选择至关重要。学习率曲线预测结果的好坏,直接关系到是否会提前舍弃一个超参数组合的模型。显然,不能舍弃任何好的超参数组合,也不能浪费时间训练不好的超参数组合。因此,提高超参数组合下模型表现的预测能力,有利于提高AutoML算法的表现。
实际中使用的参数模型是这11种模型的线性组合:
其中,K是可供选择的参数模型的总数,参数θ包括权重参数wk、参数模型的参数θk、残差的方差σ2。可使用贝叶斯回归来求解这个参数模型组合,其中,权重参数设定为非负的。
训练过几次之后,通过早期学习率曲线的表现预测模型训练很多轮次之后的表现,提前结束预测表现不好的模型训练。通过这样的预判实现了以下效果:
(1)节省了AutoML寻找全局最优的神经网络模型所需的时间。
(2)搜索到了更好的全局最优模型。
(3)预判确实提前终止了最终表现不好的模型训练。
之后,在类似的思想中,Bowen Baker等作者在2018年的论文“Accelerating Neural Architecture Search Using Performance Prediction”[35]中提出了使用模型表现预测来加速AutoML的寻优过程。文中指出,元学习器可用于神经网络模型的表现预测,元学习器记录了训练过的超参数组合下的模型表现,预测新的超参数组合下模型的表现,舍弃预测结果不好的超参数组合,只去探索预测会有更好表现的超参数组合。实际应用中,在这样的思想下,提高元学习器中的预测器精度,有利于加速寻优的过程,找到更好的最优解。可以考虑用以下思路来提高预测器的精度:
(1)考虑包括模型结构、超参数组合、早期学习率曲线等许多因素,预测模型表现。
(2)考虑用少量完整训练经历中观察的学习率曲线进行集成,用于预测其他学习率曲线。
论文中使用了类似的思想,使用元学习器来预测超参数组合下神经网络模型的表现,减少了训练模型花费的时间和计算量。这里,元学习器中的预测器得到了改进,使用了有序回归模型(Sequential Regression Model,SRM)对模型表现进行预测,提高了预测精度,改善了AutoML整体的表现。在训练过程中,积累经验,不断对模型T轮训练迭代之后的精度进行预测。这里,记录了迭代轮次之前的所有模型精度:
其中,是1轮训练迭代之后模型的精度。不仅如此,还记录了迭代轮次之间模型精度的增长:
其中,是第t轮迭代和第轮迭代之间模型精度的增量,是模型精度增量的二阶差值。对于超参数组合,其记录了模型训练过程中精度的变化:
其中,指的是第1个超参数组合,是第1个超参数组合下神经网络模型训练到第τ个轮次后,记录的每个训练轮次的精度、精度的增量、精度的二阶差值。预测器是从超参数组合和训练过程中记录的精度到最终模型精度的映射:
其中,是超参数组合下的模型特征,例如,动量参数等超参数;T是模型训练轮次数的最大值;yT是模型训练完成时的精度,即需要预测的精度;训练轮次较小时,准确预测yT就能节省很多训练时间。有序回归模型SRM在第1个轮次一直到第T-1个轮次不断预测,每次预测多考虑一个数据点,即新加入一个轮次训练精度数据点,每次加入一个数据点,预测的结果变化可能不会太大。预测使用回归方法——例如,最小二乘法(Ordinary Least Squares,OLS)、随机森林(Random Forest)、支持向量机回归模型(Support Vector Machine Regression,SVR)等——计算回归系数。回归预测方程的确定建立在100个完整训练的神经网络模型基础上,在这100个完整训练轮次的经历中,训练SRM模型,估计预测方程。
图3.13给出了加速自动化机器学习的示意图,示意图简略地描述了元学习框架如何加速自动化机器学习过程,示意图中主要包括以下步骤:
(1)在少量超参数组合上进行完整训练,获得完整学习率曲线,元学习器总结学习率曲线的规律,对学习率曲线进行建模。
(2)之后,在新的超参数组合下,只需要进行早期训练,即可根据早期学习率曲线预测训练完成时的模型精度。
(3)综合这些超参数组合下模型的表现,预测尚未探索的超参数组合对应的模型精度,指导探索预测模型精度高的超参数组合。
图3.13 加速自动化机器学习示意图
加速自动化机器学习引入了模型表现的预测器作为元学习器,实现了对AutoML算法的加速,元学习器的主要功能有以下两项:
(1)根据少量模型迭代的步骤,预测多次迭代后模型训练完成时的表现,节省每个超参数组合下模型迭代所需要的时间。在给定时间下,AutoML可以遍历更多的超参数组合,找到更好的最优神经网络模型。
(2)根据少量的模型训练经验,预测尚未探索过的超参数组合下模型的表现,指导AutoML优先探索预测表现更好的超参数组合。
加速自动化机器学习有以下优势:
(1)让AutoML更快地从超参数组合估计出模型的最终表现,节约时间。
(2)在神经网络模型的训练过程中及时总结经验,给出寻优方向,加速训练过程。
(3)让AutoML在有限时间内遍历更多的超参数组合,找到更接近全局最优的神经网络模型。
对加速自动化机器学习有以下探讨:
(1)加速的效果依赖于模型表现的预测器,预测模型不能过拟合,预测精度极大地影响了AutoML寻优的效果,在预测模型的构建上,需要格外谨慎。
(2)在加速过程中,需要考虑超参数组合对模型精度预测的影响。在不同超参数组合下,及时更新预测器,不断积累经验,给出更加切合超参数组合的预测。
3.5.4 决策式自动化机器学习
Matthias Feurer等作者在2015年的论文“Efficient and Robust Automated Machine Learning”[36]中提出了一种AutoML思路,选择常用的机器学习方法,对机器学习模型中的超参数组合进行决策,进而对参数进行估计,以此实现自动化机器学习。决策式自动化机器学习将机器学习模型和超参数的选择视为决策,超参数有连续超参数和离散超参数两种,对应的是连续的决策选项和离散的决策选项。根据以往的经验,决定这样的任务数据集通常采用怎样的机器学习模型训练,超参数是怎样选择的,元学习器为新任务数据集提供建议,找到合适的机器学习模型进行训练,更快地实现自动化机器学习,找到全局最优的神经网络模型。
AutoML通过优化目标函数,对于任务,自动化地找到最优决策,以及相应的最优机器学习模型。这里的AutoML考虑的不仅是神经网络模型,还考虑所有常用的机器学习模型,用来处理日常生活中的任务。例如,教师使用的分析影响学生考试成绩重要因素的模型,通过模型,教师得知如何在这些重要因素上进行改进,提高学生的成绩;投资分析师对资产价格进行分析,找到影响价格的重要因素,对资产合理价格区间进行预测。对于不同的任务,常用的机器学习模型有决策树、随机森林、支持向量机模型等。
没有任何一个机器学习算法在所有任务的数据集上都表现最优,机器学习算法的表现极度依赖模型中超参数组合的选取。对于不同的任务,目标函数不同,可选的机器学习模型库也不同,超参数组合的决策选项也不同。普适的AutoML算法需要考虑不同任务的目标函数、可选机器学习模型库、超参数的决策选项库。元学习总结了过去使用过的不同机器学习模型处理不同任务数据集的经验,为新任务数据集的处理给出指导。
图3.14描述了决策式自动化机器学习示意图,元学习框架在决策式自动化机器学习中起到了以下作用:
(1)选择合适的机器学习模型和相应的超参数组合。在大量训练任务上,找到哪些元特征较好地反映了数据集最合适的模型和训练方式。对很多任务数据集进行训练,记录下这些数据集的元特征。根据元特征,为数据集选取最合适的机器学习模型,以及数据集的有效训练方式。
(2)对于新任务,元学习框架综合为许多任务数据集选取合适的机器学习模型的经验,为新任务数据集推荐合适的机器学习模型库和相应的超参数组合初始值,新任务接下来根据元学习框架给出的初始模型进行迭代。
AutoML根据元学习推荐的机器学习模型库和相应的参数初始值,使用贝叶斯优化,对模型进行训练迭代。如图3.14所示,决策式自动化机器学习分为以下几个阶段。
图3.14 决策式自动化机器学习示意图
(1)元学习器训练大量任务数据集,提取有效的元特征,记录这些特征、学习模型,估计元特征到合适的机器学习模型和模型训练方式的映射。
(2)元学习器根据大量处理任务数据集的经验,在处理新任务时,提供合适的初始机器学习模型和合适的初始值,在更好的初始模型下,AutoML可以更快地迭代出较好的模型。
(3)AutoML对新任务数据集进行预处理,在预处理时选取根据经验来说较好的预处理模型;然后,使用预处理的数据集对初始模型进行训练迭代,逐渐优化,并且记录模型训练结果。
(4)最后,将训练过的机器学习模型的训练结果进行集成。
处理新任务时,需要选择这样一些模型:
(1)从任务数据集获取元特征的模型(Feature Preprocessing)。
(2)任务数据集预处理模型(Data Preprocessing)。
(3)机器学习模型(Machine Learing Algorithm)。
决策式自动化机器学习方法以元学习框架为开端,积累经验,在新任务上推荐合适的机器学习模型和初始值。建立在好的初始模型的基础上,新任务上模型的训练和迭代会事半功倍。在新任务上对初始机器学习模型进行训练迭代,记录下所有训练过的机器学习模型的结果,最后,以这些机器学习模型训练结果的集成为结尾,给出最优的机器学习框架,为新任务提供最优的结果。
决策式自动化机器学习有以下优势:
(1)使用元学习框架积累处理任务的经验,适用于所有任务,包括差别很大的任务,可以解决很多实际问题,对于自动化机器学习的应用和推广具有深刻的意义。
(2)使用集成学习将已训练的机器学习模型结果进行集成,给出任务的处理方案。这样的方案具有更好的表现,没有浪费任何迭代训练模型的经验成果。
对决策式自动化机器学习有以下探讨:
使用几十个元特征来对数据集的模型和初始值给出建议,本身就是很难的问题,尤其是在任务复杂多变,且数据集特别大的情况下,元特征的选取会变得更加困难。因此,这样的模型更适用于简单的任务,生活中很多数据分析问题都是简单的实际问题,不需要非常复杂的模型就可以很好地解决,使用AutoML自动化地解决这一类问题仍然具有深刻的意义。
3.5.5 渐进式自动化机器学习
渐进式AutoML将模型的寻优过程设定为由简入繁的过程,从简单的神经网络模型开始,让模型逐渐变得复杂,寻找最优的神经网络模型。有时每一步添加的元素都带来了增益,但是新添加的元素却有可能让过去添加的元素变得没有增益了。因此,时不时地回望、测试一下最近添加的元素组合是否带来了增益。对过去添加的元素组合进行检查,如果舍弃过去添加过的元素组合没有导致模型表现变差,可以舍弃过去添加过的元素组合,让模型变得简化一些。很多AutoML寻优神经网络模型的算法都是渐进式的,从最简单的模型开始逐渐添加元素,例如,神经元、连接、捷径、卷积层、池化层、残差模块、Inception模块等,组合起来,在模型逐渐变复杂的过程中,模型的表现也越来越好,直到找到表现最好的神经网络模型。
在AutoML寻找最优神经网络模型的过程中,一定要避免陷入局部最优,让自动找到的神经网络模型靠近全局最优,打败人类调试得到的最优网络模型。因此,常用的搜索方法是随机搜索、遗传演化算法和强化学习算法,其中,随机搜索最缓慢,遗传演化算法和强化学习算法更常用。前面章节中提到过元学习加速自动化机器学习算法,这种做法非常常见,通过元学习思想预测怎么改变现有的神经网络模型,获得最大的收益,指导模型寻优的过程,或者在少量训练之后就能预测模型表现,加速超参数组合的遍历。
来自约翰斯·霍普金斯大学、谷歌人工智能实验室和斯坦福大学的Liu Chenxi等作者在2018年的论文“Progressive Neural Architecture Search”[37]中提出了一种渐进式神经网络模型搜索方法PNAS(Progressive Neural Architecture Search),用于加速在AutoML中搜索全局最优神经网络模型。论文中介绍了这样简单的经验:
(1)预测神经网络模型表现的预测器越好,指导AutoML遍历的超参数组合越优质。
(2)加速AutoML做得越好,AutoML可遍历的超参数组合越优质,找到的神经网络模型越好。
遗传演化算法在渐进式自动化机器学习中应用很多。在遗传演化算法中,从空模型开始,在模型中添加元素,看到模型的表现逐渐变好,直到模型的表现不再变得更好,就认为获得了最优的神经网络模型。遗传演化算法常用来改进神经网络模型的结构,在原有模型的基础上,添加新元素,例如,神经元、连接、卷积层、池化层等,同时,使用随机梯度下降法来估计神经网络模型中的参数。
遗传演化算法在现有模型上选择添加神经元或者神经网络层等,让模型逐渐长大,观察模型表现的变化。例如,在PNAS论文[37]中,卷积神经网络模型CNN的基础结构是卷积层和池化层,所有的CNN都可以看作卷积层和池化层堆叠而成的,在空的CNN模型基础上添加卷积层和池化层,可以形成很多CNN模型。对于像素点较多的高清图片,CNN模型的层会更多,以对高清图片中的特征进行提取。在PNAS论文[37]中,在CNN基础结构模块中,添加的两个元素在以下神经网络层中选择:3×3卷积层、5×5卷积层、7×7卷积层、1×7卷积层和7×1卷积层组合、3×3平均值池化层、3×3最大值池化层等。同时,添加的两个神经网络层之间的连接方式也需要选择,形成的CNN模型具有更多灵活度,有利于最终寻找到更优的神经网络模型。在不添加其他元素的情况下,保持模型的复杂度不变,遗传演化算法还可以对神经网络模型进行变形(Mutation),查看变形后的神经网络模型表现是否更好,继续寻找全局最优的神经网络模型。
在遗传演化算法对神经网络模型的结构进行演化的同时,对神经网络模型表现的预测器也进行了训练。正如前面章节中提到的,预测器是从神经网络结构和验证集精度到模型最终精度的映射,在每个训练轮次后,都会同时对预测器进行迭代更新。提高预测器的精度并不容易,在PNAS论文[37]中,使用预测器对所有尚未遍历过的模型的精度进行了排序,预测器给出的排序和实际这些模型精度的排序之间的相关性系数都是正数,在0.1和0.6之间,是正相关的,但是并不是完美的正相关关系。将预测器视为元学习器,指导超参数的遍历,预测器指导模型探索有希望带来更好表现的超参数组合,因此,预测器对尚未探索过的模型的精度的判断很重要,判断越准确,越有利于更快地找到好的神经网络模型。PNAS论文[37]中使用的预测器是神经网络模型集成的预测器,预测器的表现很好,带来了AutoML模型更好的加速,找到了更优的神经网络模型。未来,在与更多机器学习模型相结合时,作为元学习器的预测器会不断进步,带来更好的AutoML算法。
类似地,来自谷歌大脑(Google Brain/Research)的Esteban Real等作者在2020年的论文“AutoML-Zero: Evolving Machine Learning Algorithms From Scratch”[38]中使用遗传演化算法进行渐进式自动化机器学习,从空的程序开始演化,添加命令行,形成自动化的机器学习算法。这样做需要大量的计算,但是计算能力发展很快,文中认为计算量大但是好用的算法在未来会受到欢迎。人工进行算法的调试会引入人为的偏差(Human Bias),不同人建模的经验不同,知识的储备不同,在算法调试中会有个人的特点和偏好,即使人工找到的算法超过了已有的最好算法,但是仍然不是所有存在的算法中最好的。AutoML旨在通过大量的计算,将算法寻优变得自动化,使用计算机去寻找最优算法,以省去人工对算法调试的麻烦。
AutoML-Zero给出的算法是从空程序开始的,通过遗传演化算法不断添加命令行,直到模型的效果达到预期,此时的模型就是自动化机器学习给出的最优模型。通过添加命令行的方式,AutoML-Zero考虑了很多机器学习方法的可变选项,包括神经网络模型中正则方法的选取、数据增强方式的选取等。在前面的章节中,我们介绍过神经网络模型中的正则方法,列出了十几种常见的神经网络正则化方法,包括随机失活和批归一化,这些正则化方法均可以选用。前面章节中还列出过很多种批归一化的变体,涉及很多种神经网络模型中的规范化方法,也可以选用这些方法。在实际中,人工进行算法的调试时,会考虑到这些常见的选项组合来进行神经网络模型的调试,为了达到比人工调试出的算法更好的效果,AutoML也需要考虑将这些选项作为超参数进行选择,在很多选项的基础上找到全局最优的神经网络模型。
AutoML-Zero考虑了很多神经网络模型设计中的可变选项,由于超参数组合特别多,实际上这些超参数组合中真正效果好的模型很少,于是造成了这样的情形:需要遍历的超参数组合搜索域很大,而搜索域中有效的解很稀疏。此时,使用遗传演化算法进行搜索是较合适的,其既能提高搜索的效率,又能有效地避免陷入局部最优,靠近全局最优。在AutoML-Zero中使用了以下方法来提高搜索的效率,找到更好的最优模型,更靠近全局最优:
(1)检查算法程序是不是等价的,是否已经训练过。
(2)让算法变得和过去训练过的算法更不一样。
AutoML-Zero设计的空算法程序包括三个部分:框架初始化(Setup)、预测器(Predict)、学习器(Learn)。除此之外,还有一个算法评价(Evaluate)程序,将任务数据集分为训练集和验证集,使用框架初始化、预测器和学习器,在训练集上对算法进行训练,在验证集上计算算法的精度。算法中这三部分的作用如下。
(1)框架初始化:定义算法中的变量,并且对变量的值进行初始化。
(2)预测器:根据算法中变量的值,输出算法的预测结果。
(3)学习器:最小化损失函数,对算法中变量的值进行优化,训练算法。
可以看到,任何机器学习模型都可以用包括这样三部分的程序来表示,使用这样的算法表示方法来进行演化是合理的。演化过程是由简到繁的,每次演化通过添加命令行的方式增加程序的复杂程度。由于AutoML-Zero考虑的超参数选项较多,可供添加的命令行选择也很多。
AutoML-Zero中的算法变异方法有以下这些:
(1)在函数程序中随机插入或者删除命令行。
(2)将函数程序中的命令行全部随机重排序。
(3)将函数程序中某一个设定的选项更换成其他选项。
AutoML-Zero中的演化方法有以下步骤:
(1)使用P个空算法,开始进行由简到繁的演化。
(2)从P个算法中随机抽取T个算法,在这T个算法中找到表现最好的那个作为父算法(Parent)。
(3)在父算法的基础上进行算法变异,生成子算法(Child)。
(4)在记忆模块中将最旧的算法删除,将新生成的子算法记录下来。
通过这样的方式,AutoML-Zero实现了灵活多变的模型设置,给出了从空模型到最优模型的演化方法。接下来通过一个简单的例子给出渐进式自动化机器学习的全貌,让读者对元学习、遗传演化算法、渐进式AutoML的结合方式有更加宏观的了解。
图3.15给出了简化的渐进式自动化机器学习的示意图,示意图中包括以下步骤。
图3.15 渐进式自动化机器学习示意图
(1)为机器学习模型构建空模型、空模块、空程序、空的卷积神经网络结构、空的神经网络结构等。在演化时,在空模型上添加模型,在空模块上添加模块,在空程序中添加命令行,在空的卷积神经网络结构中添加卷积层和池化层等,在空的神经网络结构中添加神经元、网络层、连接等。在这些添加行动中,有许多选项,使用元学习器来预测这些可选行动中会带来模型最好表现的选项,并且探索相应的添加行动,可获得当下最优的机器学习模型。
(2)接下来,对当下最优的机器学习模型进行变异,生成子模型。让子模型继续演化,在子模型的基础上继续选择添加模型、模块、命令行、卷积层和池化层、神经元、网络层和连接等行动。元学习框架又会对添加行动后的模型表现进行预测,推荐会给模型带来最好表现的选项,形成新的最优机器学习模型,接着对当下最优的机器学习模型进行变异。
(3)如此周而复始,不断地在模型中添加元素,模型从简单变得复杂,直到模型表现趋于稳定,得到最终的模型,以此作为渐进式自动化机器学习寻找到的最优模型。
渐进式自动化机器学习有以下优势:
(1)在超参数组合极多的情况下,机器学习模型的自由度很大,可以选用的机器学习模型非常多,但是其中有用的、效果最好的机器学习模型很少,在整个搜索域内,有用有效的解非常稀疏。此时,使用随机搜索在探索超参数组合上会浪费很多时间,不能有效地靠近最优解。在这种情况下,使用遗传演化算法从简到繁来搜索最优算法,能高效地找到最优解,在最优解的基础上找到更优解,逐渐靠近全局最优解。
(2)在演化过程得到的模型能被有效地改进和更新,元学习框架在演化过程中积累经验,对添加行动中的选项进行预判,推荐带来模型表现最好增益的添加选项,加速演化过程,让演化变得更有效率。
(3)对当下最优机器学习模型进行变异能有效地生成子模型,避免陷入局部最优解。在子模型的基础上继续进行由简到繁的演化,让模型变得更加复杂,这里的子模型和当下最优机器学习模型之间的复杂度是相同的。
对渐进式自动化机器学习有以下探讨:
(1)遗传演化算法从空模型开始演化,让模型从简到繁,在解稀疏的空间中寻找解,会花费大量的时间和计算量,但这样计算得到的模型效果很好,可以避免局部最优,靠近全局最优。由于计算量很大,对于复杂的任务,数据集极其巨大,需要的最优模型复杂度非常高,那么从空模型到达最优模型需要的时间就更多,且每次对最优模型进行变异生成子模型时,子模型也会变得非常多。可以考虑进一步使用元学习框架,避免每次都从空模型开始演化,而是从元学习框架建议的初始模型开始演化。
(2)渐进式模型需要回头看。添加每一步行动后,模型的表现变得更好,但是新添加的行动可能会让过去添加的行动变得不必要,需要回头看。对很多步的添加组合起来检查,在舍弃过去添加过的元素组合并没有使模型表现变差时,需要及时舍弃,让模型变得简化一些。