Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

无需手工设计,从零开始搜索损失函数

针对各种任务设计合适的损失函数往往需要消耗一定的人力成本,一种名为AutoLoss-Zero的新型通用框架可以从零开始搜索损失函数,使成本大大降低。

近年来,自动机器学习(AutoML)在模型结构、训练策略等众多深度学习领域取得了进展。然而,损失函数作为深度学习模型训练中不可或缺的部分,仍然缺乏良好的探索。目前,多数研究工作仍然使用交叉熵损失(Cross-Entropy Loss)、范数损失(L1/L2 Loss)来监督网络训练。尽管这类损失函数在多数情况下可以取得不错的效果,但它们与网络在测试时使用的评估指标之间大多存在差异,而这种差异会对模型训练效果造成损伤。


目前对于损失函数进行改进的工作可以分为两类:

  • 手工设计。手工设计损失函数依赖于设计者对特定任务和评价指标的专业知识和理解,因此很难在不同任务上进行推广。

  • 自动设计。自动设计损失函数的工作尝试自动搜索较优的损失函数,但当前的工作都仅仅关注于某个特定任务(如语义分割)或特定评价指标(如mAP),对特定情形进行了针对性设计,因此其可推广性也存在疑问。


为了尽可能减少针对各种任务设计合适的损失函数时所需的人力成本,来自香港中文大学、商汤科技等机构的研究者设计了一个通用的损失函数搜索框架AutoLoss-Zero。为了确保通用性,该方法的搜索空间由一些基本的数学运算组成,而不包括对于某个评价指标的针对性设计。由于此类搜索空间中有效的损失函数十分稀疏,研究者提出了高效且通用的拒绝机制和梯度等价性检测,以提高搜索的效率。给定任意任务和评价指标,AutoLoss-Zero可以以合理的开销(4张V100,48h内)从随机初始化开始,搜索到与手工设计的损失函数表现相似或更优的损失函数
 


论文地址:https://arxiv.org/abs/2103.14026

该研究的主要贡献包括:

  • AutoLoss-Zero是首个通用于各种任务的损失函数搜索框架,其搜索空间由基本数学运算构成,无需先验知识,可以极大地减少损失函数设计所需的人力。该研究在多项计算机视觉任务(目标检测语义分割实例分割姿态估计)上验证了AutoLoss-Zero的有效性;

  • 该研究提出了高效的拒绝机制,从而快速地筛选掉绝大多数没有希望的损失函数。同时,该研究提出了一个基于梯度的等价性检测,以避免对于彼此等价的损失函数进行重复的评估;

  • 实验表明,该方法搜索出的损失函数可以很好地迁移到不同数据集和网络结构上。


搜索空间

该研究首先定义了搜索目标。给定任意任务上的评价指标 ξ ,该方法尝试搜索一个最优的损失函数  L(y ̂,y;N_ω ),其中N_ω表示参数为ω的网络,y ̂表示网络的预测,y表示网络的训练目标。因此,搜索目标可以表示为一个嵌套优化(nested optimization):



其中优化目标 f(L;ξ) 表示损失函数 L 在评价指标 ξ 上的得分,ω^* (L) 表示使用损失函数L训练的网络参数,E(⋅) 表示数学期望,S_train 和S_eval 表示搜索过程中使用的训练集和验证集

该搜索空间由一些基础的数学运算组成,这个集合称为 H,如下表所示。

表1. 搜索空间候选运算

该方法将损失函数表示为一个计算图 G。G 是一个有根树(rooted tree),其中叶子节点表示损失函数的输入(即网络预测 y ^和训练目标 y),根节点表示损失函数的输出 o,其他的中间节点从表中的数学运算里采样得到。此外,该方法还添加一个常数 1 作为损失函数的候选输入,以增加其表示能力。在整个运算图内,所有的张量(tensor)都保持同样的形状 (N,C,H,W),分别代表(batch, channel, height, width)四个维度的尺寸。计算图 G 的输出 o 会被融合(aggregate)为最终的损失值:
 


在一些任务中,损失函数由多个分支组成(如目标检测中的分类和边框回归分支)。在这种情况下,我们将每个分支表示为一个独立的计算图 G,并将它们的损失值求和作为最终的损失值。搜索对所有的分支同时进行。

搜索算法

该方法使用进化算法对损失函数进行搜索。图1为整个搜索算法的流程图。

图 1. 搜索算法流程图

在搜索初始化阶段,我们首先随机生成 K(默认K=20)个损失函数作为初始种群。此后,每一次更新随机采样当前种群内 T(默认T=5%)比例的损失函数,并对其中在代理任务上得分最高的一个进行变异(mutation),得到后代个体,并加入种群。在种群的更新过程中,只有最新的 P=2500 个个体会被保留。

由于搜索空间中有效的损失函数十分稀疏,尽管代理任务相对于最终的网络训练已经相当简化,但对于每个候选的损失函数都进行代理任务上的评估,时间成本仍然是不可接受的。为此,研究者设计了一个损失函数拒绝机制(loss-rejection protocol),对候选的损失函数进行初步筛选。在损失函数的随机生成和变异过程中,如果候选子代个体无法通过筛选,则重新进行随机生成/变异,直到得到可以通过筛选的损失函数,用于代理任务上的评估。此外,该方法在对候选的损失函数进行评估前,会先检测其是否与已评估过的损失函数等价(gradient-equivalence-check strategy),若等价则跳过代理任务的网络训练,复用之前相同个体的分数。

接下来,我们来看下搜索算法中的几个关键部分。

随机初始化

损失函数随机初始化的过程如图2所示。计算图从根节点开始,递归地从候选运算集合 H 中随机采样运算符作为其子节点。每个节点的子节点数由这个节点所代表的运算的操作数决定。该方法固定随机初始化的计算图深度为 D(默认D=3),在当前节点深度达到 D 后,其从候选的输入集合 {y ^,y,1} 中有放回地随机采样子节点,这些子节点即为计算图的叶子节点。

图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;ξ) 低于此阈值的损失函数被认为是没有希望(unpromising)的,会被直接拒绝。在此过程中并没有网络计算的参与,而是直接对输入进行优化,这使得该损失函数拒绝机制十分高效。实验表明,在一个 GPU 上,每分钟可以筛选 500~1000 个候选损失函数。这大大提高了算法探索搜索空间的能力。

梯度等价性检测

为了避免对于相互等价的损失函数进行重复的代理任务评估,对于每个评估过的损失函数,该方法记录其相对于上文「损失函数拒绝机制」中使用的B个样本的梯度的二范数,即。若两个损失函数对于这B个样本,其梯度二范数均相同(取两位有效数字),则我们认为这两个损失函数是等价的,并将较早的损失函数的代理任务分数复用于新的损失函数

实验

该研究在语义分割目标检测实例分割姿态估计等四项计算机视觉任务上从随机初始化开始进行了搜索。此外,该研究对搜索得到的损失函数的泛化性进行了研究,并对前文所提到搜索算法中的各项技术对于搜索效率的影响进行了分析。

语义分割

该研究使用 PASCAL VOC 数据集对语义分割任务中主流的 6 个评价指标进行了搜索,并使用得到的损失函数对 DeepLab V3+ 网络进行了重新训练(re-train)。表 2 为该研究的实验结果。该研究将搜索得到的损失函数与常见的基于手工设计的损失函数及自动搜索的损失函数(ASL, Auto Seg-Loss)进行了比较。结果表明,在主流的几个评价指标上,AutoLoss-Zero 搜索到的损失函数达到或超过了当前最好的结果,仅在 BIoU 这一指标上略低于为专门关注语义分割任务的 ASL 方法,但也大大超过了现有基于手工设计的损失函数
 

表2. 语义分割实验结果

该研究还对搜索得到的损失函数的在不同数据集和不同网络结构上的泛化性进行了验证。表3中,该研究使用ResNet50-DeepLabV3+ 网络在PASCAL VOC上搜索,并将得到的损失函数应用于不同数据集(Cityscapes)和不同网络结构(PSPNet)。表3中的结果表明,该方法搜索得到的损失函数具有良好的泛化性。
 

表3. 语义分割泛化性

目标检测

该研究使用 Faster R-CNN 在 COCO 数据集上进行实验。对于 Faster R-CNN 中的四个损失函数分支(RPN 网络的分类、回归,Fast R-CNN 子网络的分类、回归),该方法同时进行搜索。表 4 给出了该方法与常用的 IoULoss、GIoULoss,以及针对目标检测任务进行损失函数搜索的工作 CSE-AutoLoss-A 进行比较的 结果。实验表明,该方法搜索到的损失函数与这些损失函数表现相似。
 

表4. 目标检测实验结果

该研究也对目标检测搜索得到的损失函数的泛化性进行了实验。表 5 为实验结果。
 

表5. 目标检测泛化性

实例分割

该研究使用 Mask R-CNN 在 COCO数 据集上进行实验,并对五个损失函数分支同时进行搜索。表 6 表明该方法搜索到的损失函数与手工设计的损失函数表现相近。
 

表 6. 实例分割实验结果

姿态估计

该研究在 COCO 上对姿态估计任务进行了实验。表 7 为实验结果。该研究与姿态估计中常用的均方误差损失(MSE Loss)进行了比较,实验表明,AutoLoss-Zero 从零开始搜索到的损失函数表现略好于 MSE Loss。
 

表7. 姿态估计实验结果

搜索效率

该搜索算法基于进化算法。为了提高搜索效率,研究者设计了损失函数拒绝机制(Loss-Rejection Protocol)和梯度等价性检测(Gradient-Equivalence-Check Strategy)。如图 4 所示,研究者发现这些模块可以有效地提高搜索的效率。尤其是在目标检测任务上,由于同时对 4 个分支进行搜索,搜索空间尤为稀疏,这使得在没有损失函数拒绝机制的情况下,搜索过程无法在合理的时间内(约 400 次代理任务评估)找到任何分数大于 0 的损失函数。这表明高效的拒绝机制是搜索有效的关键。
 

图4. 搜索效率对比

研究者在表 8 中进一步分析了各个模块给搜索效率带来的提升。“满血”的 AutoLoss-Zero 可以在 48 小时内(使用 4 块 V100 GPU)探索超过10^6 个候选损失函数,这使得它可以在庞大而稀疏的搜索空间内有效地探索。
 

表8. 目标检测任务的搜索效率分析。(“# Explored Losses”表示算法在48小时内探索的损失函数数量。“Stop Training for Invalid Loss Values”表示网络在代理任务的前20轮更新内即由于出现NaN或Inf而停止了训练。)
理论损失函数AutoML
2
相关数据
商汤科技机构

作为人工智能软件公司,商汤科技以“坚持原创,让AI引领人类进步”为使命,“以人工智能实现物理世界和数字世界的连接,促进社会生产力可持续发展,并为人们带来更好的虚实结合生活体验”为愿景,旨在持续引领人工智能前沿研究,持续打造更具拓展性更普惠的人工智能软件平台,推动经济、社会和人类的发展,并持续吸引及培养顶尖人才,共同塑造未来。

http://www.sensetime.com
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

范数技术

范数(norm),是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域,是一个函数,其为向量空间内的所有向量赋予非零的正长度或大小。半范数反而可以为非零的向量赋予零长度。

交叉熵技术

交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

先验知识技术

先验(apriori ;也译作 先天)在拉丁文中指“来自先前的东西”,或稍稍引申指“在经验之前”。近代西方传统中,认为先验指无需经验或先于经验获得的知识。先验知识不依赖于经验,比如,数学式子2+2=4;恒真命题“所有的单身汉一定没有结婚”;以及来自纯粹理性的推断“本体论证明”

语义分割技术

语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类。图像语义分割是AI领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环。

实例分割技术

实例分割是检测和描绘出现在图像中的每个不同目标物体的任务。

目标检测技术

一般目标检测(generic object detection)的目标是根据大量预定义的类别在自然图像中确定目标实例的位置,这是计算机视觉领域最基本和最有挑战性的问题之一。近些年兴起的深度学习技术是一种可从数据中直接学习特征表示的强大方法,并已经为一般目标检测领域带来了显著的突破性进展。

姿态估计技术

姿势估计是指检测图像和视频中的人物形象的计算机视觉技术,以便确定某人的某个肢体出现在图像中的位置。

推荐文章
暂无评论
暂无评论~