当前位置: 首页 > 科技观察

无需手动设计,从头开始搜索损失函数

时间:2023-03-18 16:42:32 科技观察

近年来,自动机器学习(AutoML)在模型结构、训练策略等多个深度学习领域取得了进展。然而,损失函数作为深度学习模型训练的一个组成部分,仍然很少被探索。目前,大多数研究工作仍然使用交叉熵损失(Cross-EntropyLoss)和范数损失(L1/L2Loss)来监督网络训练。虽然这样的损失函数在大多数情况下都能取得很好的效果,但它们与网络在测试时使用的评估指标大多存在差异,这种差异会损害模型训练效果。目前改进损失函数的工作可以分为两类:人工设计。手动设计损失函数依赖于设计者的专业知识以及对特定任务和评估指标的理解,因此难以在不同任务之间进行泛化。自动设计。自动设计损失函数的工作试图自动搜索更好的损失函数,但目前的工作只关注特定任务(如语义分割)或特定评估指标(如mAP),并进行了针对性设计针对特定情况。因此,它的普适性也值得怀疑。为了最大限度地减少为各种任务设计合适的损失函数所需的人力成本,来自香港中文大学、商汤科技等机构的研究人员设计了一个通用的损失函数搜索框架AutoLoss-Zero。为了保证通用性,该方法的搜索空间由一些基本的数学运算组成,不包括评价指标的针对性设计。由于这种搜索空间中的有效损失函数非常稀疏,研究人员提出了一种高效通用的拒绝机制和梯度等价检测来提高搜索效率。给定任何任务和评估指标,AutoLoss-Zero可以从具有合理开销(4个V100,48小时内)的随机初始化开始,搜索性能与手工设计的损失函数相似或更好的损失函数。论文地址:https://arxiv.org/abs/2103.14026本研究的主要贡献包括:AutoLoss-Zero是第一个针对各种任务的通用损失函数搜索框架,其搜索空间由基本的数学运算组成,没有先验知识,可以大大减少损失函数设计所需的人力。该研究验证了AutoLoss-Zero在多项计算机视觉任务(目标检测、语义分割、实例分割、姿态估计)上的有效性;该研究提出了一种高效的拒绝机制,可以快速筛选出绝大多数无望的损失函数。同时,该研究提出了一种基于梯度的等价检测,以避免重复评估彼此等价的损失函数;实验表明,该方法搜索到的损失函数在结构上可以很好地迁移到不同的数据集和网络。搜索空间该研究首先定义了搜索目标。给定任何任务的评估指标ξ,该方法尝试搜索最佳损失函数L(y?,y;N_ω),其中N_ω表示参数为ω的网络,y?表示网络的预测,y表示网络的训练目标。因此,搜索目标可以表示为嵌套优化:其中优化目标f(L;ξ)表示损失函数L在评价指标ξ上的得分,ω^*(L)表示网络参数,E(?)代表数学期望,S_train和S_eval代表搜索过程中使用的训练集和验证集。搜索空间由一些基本的数学运算组成,这个集合称为H,如下表所示。Table1.SearchSpaceCandidateOperations该方法将损失函数表示为计算图G。G是一棵有根树(rootedtree),其中叶子节点表示损失函数的输入(即网络预测y^和训练目标y),根节点代表损失函数的输出o,其他中间节点是从表中抽样得到的数学运算。此外,该方法在损失函数中添加了一个常数1作为候选输入,以提高其表达能力。在整个操作图中,所有张量(tensors)都保持相同的形状(N,C,H,W),分别代表四个维度(batch,channel,height,width)的维度。计算图G的输出o会聚合成最终的损失值:在一些任务中,损失函数由多个分支组成(比如目标检测中的分类和边界框回归分支)。在这种情况下,我们将每个分支表示为一个独立的计算图G,并将它们的损失相加作为最终损失。搜索同时在所有分支上执行。搜索算法该方法使用进化算法来搜索损失函数。图1是整个搜索算法的流程图。图1.搜索算法流程图在搜索初始化阶段,我们首先随机生成K(默认K=20)个损失函数作为初始种群。之后,每次更新随机采样当前种群中T(默认T=5%)所占比例的损失函数,对代理任务得分最高的个体进行变异,得到后代个体加入种群。在种群更新过程中,只会保留最新的P=2500个个体。由于搜索空间中的有效损失函数非常稀疏,虽然代理任务与最终网络训练相比已经相当简化,但在代理任务上评估每个候选损失函数的时间成本仍然难以接受。为此,研究人员设计了一个损失拒绝协议来初步筛选候选损失函数。在损失函数的随机生成和变异过程中,如果候选后代不能通过筛选,则再次进行随机生成/变异,直到得到一个可以通过筛选的损失函数,用于对代理任务的评估。此外,在评估候选损失函数之前,该方法将首先检查它是否与评估的损失函数等价(梯度等价检查策略)。如果等价,则跳过代理任务的网络训练,重复使用与之前相同的个体的分数。接下来,让我们看一下搜索算法的几个关键部分。随机初始化损失函数的随机初始化过程如图2所示。计算图从根节点开始,递归地从候选操作集合H中随机抽取算子作为其子节点。每个节点的孩子数量由该节点表示的操作的操作数决定。该方法将随机初始化的计算图深度固定为D(默认D=3)。当前节点深度达到D后,从候选输入集中有放回地随机采样子节点,这些子节点就是计算图。叶节点。图2.损失函数随机初始化突变基于本研究提出的损失函数表示,研究人员定义了三种不同的突变类型:插入(Insertion)、删除(Deletion)和替换(Replacement)。三种变异类型的示意图如图3所示。图3变异类型在后代的每一代过程中,有10%的概率不发生变异,而是直接复制亲本个体。此外,为了鼓励算法进行探索,损失函数在变异时以50%的概率随机重新初始化。损失函数拒绝机制搜索的目标是找到一个尽可能使评价指标ξ最大化的损失函数L。基于此,研究人员提出了损失函数L与评价指标ξ之间的相关性得分g(L;ξ)来衡量一个损失函数优化评价指标的能力。本研究从训练数据集中随机选取B个样本(实验中统一使用B=5),使用一个随机初始化的网络N_(ω_0)来计算这B个样本,预测网络y^和对应的训练目标y存储为{(y^_b,y_b)}_(b=1)^B。接下来使用候选损失函数L(y^,y)直接通过梯度下降优化网络预测y^,计算优化结果y^*在评价指标ξ上的得分,即g(L;ξ)是优化结果相对于初始预测的改进。得分越高,损失函数对评价指标的优化能力越强。因此,本研究设置了一个阈值η(实验中默认η=0.6),相关得分g(L;ξ)低于该阈值的损失函数被认为没有希望,将被直接拒绝。在这个过程中,没有涉及网络计算,而是直接对输入进行优化,这使得损失函数拒绝机制非常高效。实验表明,在单个GPU上每分钟可以筛选500~1000个候选损失函数。这大大提高了算法探索搜索空间的能力。梯度等价检测为了避免对相互等价的损失函数进行重复的agent任务评估,对于每个评估的损失函数,该方法记录其相对B样本在上面的“损失函数拒绝机制”中的梯度的第二范数,即。如果两个损失函数梯度的二次范数对于B个样本相同(取两位有效数字),那么我们认为这两个损失函数是等价的,将较早的损失函数的代理任务分数重新用于新的损失函数。实验本研究从四个计算机视觉任务的随机初始化开始进行搜索:语义分割、对象检测、实例分割和姿态估计。此外,本研究研究了搜索得到的损失函数的泛化,分析了上述搜索算法中各种技术对搜索效率的影响。语义分割本研究使用PASCALVOC数据集搜索语义分割任务中的6个主流评价指标,并使用得到的损失函数重新训练DeepLabV3+网络。表2是本研究的实验结果。本研究将搜索损失函数与基于手动设计和自动搜索损失函数(ASL,AutoSeg-Loss)的常见损失函数进行比较。结果表明,在几个主流评价指标中,AutoLoss-Zero搜索到的损失函数已经达到或超过了目前最好的结果,仅略低于专注于语义分割任务的ASL方法在BIOU指标上的表现。但它也大大超过了现有的手工设计的损失函数。表2.语义分割实验结果该研究还验证了搜索损失函数在不同数据集和不同网络结构上的泛化性。在表3中,研究使用ResNet50-DeepLabV3+网络在PASCALVOC上进行搜索,并将得到的损失函数应用于不同的数据集(Cityscapes)和不同的网络结构(PSPNet)。表3的结果表明,该方法搜索到的损失函数具有很好的泛化性。表3.语义分割泛化对象检测本研究使用FasterR-CNN在COCO数据集上进行实验。对于FasterR-CNN中的四个损失函数分支(RPN网络的分类、回归,FastR-CNN子网络的分类、回归),该方法同时进行搜索。表4显示了将此方法与常用的IoULoss、GIoULoss和CSE-AutoLoss-A进行比较的结果,CSE-AutoLoss-A是针对目标检测任务的损失函数搜索。实验表明,通过该方法搜索到的损失函数与这些损失函数的行为相似。表4.目标检测实验结果本研究还对从目标检测搜索中获得的损失函数的泛化进行了实验。表5是实验结果。Table5.ObjectDetectionGeneralizationInstanceSegmentation本研究使用MaskR-CNN在COCO数据集上进行实验,同时搜索五个损失函数分支。表6表明,通过这种方法搜索到的损失函数与手工设计的损失函数表现相似。表6.实例分割实验结果姿势估计本研究对COCO上的姿势估计任务进行了实验。表7是实验结果。该研究与姿态估计中常用的均方误差损失(MSELoss)进行了比较,实验表明,AutoLoss-Zero从头开始搜索的损失函数表现略优于MSELoss。表7.姿势估计实验结果搜索效率搜索算法基于进化算法。为了提高搜索效率,研究人员设计了损失函数拒绝机制(Loss-RejectionProtocol)和梯度等价检测(Gradient-Equivalence-CheckStrategy)。如图4所示,研究人员发现这些模块可以有效提高搜索效率。特别是在目标检测任务上,由于同时搜索4个分支,搜索空间极其稀疏,这使得搜索过程在没有损失函数拒绝机制的情况下无法在合理的时间内(大约400次代理任务评估)执行。找到任何一个得分大于0的损失函数。这表明有效的拒绝机制是有效搜索的关键。图4搜索效率对比研究人员进一步分析了表8中各模块带来的搜索效率提升。“满血”的AutoLoss-Zero可以在48小时内探索超过10^6个候选损失函数(使用4个V100GPU),这使其能够高效地探索大而稀疏的搜索空间。表8.对象检测任务的搜索效率分析。(“#ExploredLosses”表示算法在48小时内探索的损失函数数量。“StopTrainingforInvalidLossValues”表示网络在代理任务的前20次更新中因NaN或Inf而停止训练。)