多模态回归—不止L1与L2损失

本文探讨了在处理多模态回归目标时,L1和L2损失的局限性,并介绍了多bin损失方法,该方法通过将目标范围离散化为多个区间(bin),结合分类与回归来更有效地解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:本篇博文为译文,翻译自Patrick Langechuan Liu 发表在towards data science的博文 “Multimodal Regression — Beyond L1 and L2 Loss”

原博文链接:https://towardsdatascience.com/anchors-and-multi-bin-loss-for-multi-modal-target-regression-647ea1974617

原博文撰写时间:2019-09-30


深度学习最著名的应用是图像分类,其目标是训练神经网络从N个预定义的可能性中选择一个. 经过训练的神经网络可以从许多类别中分辨出一小块图像中的物体类型(例如猫). 这种情况下,常用的softmax损失函数即可表现很好. 然而,有时候网络的输出不是离散的类别,而是连续的值,这就是事情开始变得复杂的地方(This is where things start to get complicated).

(笔者注解:这不就是分类与回归任务中需要的损失函数不同嚒)

分类与回归

当面对一个连续的回归目标时,很容易想到将L1或L2损失直接应用到原始目标上,看它效果如何. 如果回归目标是单峰的(unimodal)(或者在分布中只有一个明显的峰值,非常像高斯),L2范数应该工作得很好. 然而,如果目标是超过单峰的,L2损失则不能得到很好的效果.

本文旨在讨论更有条理的(principled)方法来得到连续回归目标的损失,而且不止于高斯目标分布.

单峰分布及以上

0. 为什么L2损失在某些情况下会失败?

从概率的观点来看,L2损失假定潜在的目标分布是高斯分布(因此是单峰的). 最小化L2损失,或均方误差(MSE),均是最大化对数似然高斯(log-likelihood of a Gaussian). L2损失鼓励网络将所有模态的损失最小化,这将导致对任何单一模态的估计都可能很差. 特别是在图像重建应用中,使用L2损失通常会导致图像模糊. 这是由于假设噪声是高斯分布失败造成的.

使用L2损失回归双峰数据分布的失败示例

请注意,L1损失也不好. L2损失假设高斯先验,L1损失假设拉普拉斯先验(Laplacian prior),也是一种单峰分布. 直观地看,平滑L1损失(smooth L1 loss),或Huber损失,是L1和L2损失的组合,也假设了一个单峰的基本分布.

首先将回归目标的分布可视化,并考虑比L2更能反映和容纳目标数据分布的其他损失函数,才是更加合理的做法. 例如,如果目标分布是双峰的,一种直观的方法是查找目标属于哪个模式(或bin),然后对距模态中心的偏移进行回归.

这正是所谓的多bin损失(或混合分类/回归损失,离散/连续损失)所做的. 在CVPR 2017年的论文《3D Bounding Box Estimation Using Deep Learning and Geometry》中,首次提出了这种损失用于角度回归. 最初的背景是在单眼3D车辆检测中返回一个范围在[-π, π)的连续方向角. 从那时起,它被广泛应用于三维物体检测中的汽车方向回归,包括仅使用单眼图像(如Multi-level fusion、MonoPSR和FQNet)和使用点云(如Frustum PointNet和AVOD).

1. 在多Bin(Multi-Bin)损失之前(预备知识)

由于回归目标的范围较大,以及周期性带来的角度不确定性,方向估计可能是回归中最困难的问题之一.

在论文Crafting a multi-task CNN for viewpoint estimation (BMVC 2016)和Render for CNN: Viewpoint Estimation in Images Using CNNs Trained with Rendered 3D Model Views (CVPR 2015)中,作者总结了几种用于方向预测的方法(它们有不同的形式),分别是:

  1. 预测cos(θ)和sin(θ)
  2. 预测cos(θ-π/3), cos(θ) and cos(θ+π/3)
  3. 基于softmax交叉熵损失,直接将其划分为n个bins
  4. 基于加权交叉熵损失,使用几何结构感知分类(geometrically structure aware classification, GSA cls)

3和4的主要区别在于,传统的交叉熵只考虑了一个bin(包含ground truth的bin)的预测,而几何感知交叉熵损失考虑了所有bin,并以ground truth到每个bin中心的距离进行加权. 3和4只将得分最高的bin作为最终预测.

不同的方向预测方法

2. 原始多Bin(Multi-Bin)损失(用于角度回归)

原始的Multi-Bin损失将目标范围离散化,并将其划分为n个重叠的bin. 对于每个bin,神经网络模型既估计输出目标位于第i个bin内的置信概率Ci,也估计ground truth到bin中心的距离以作为输出目标的加权值. 总的multi-bin损失基本上是分类损失项(通常是softmax)和位置回归项(通常是L2或L1或平滑L1损失)的加权平均值.

注意在训练和推理过程中存在差异. 在训练过程中,所有包含ground truth角的bin被强制用于估计正确的目标. 在推理过程中,选择具有最大置信度的bin,并将该bin的估计残差应用于计算最终输出.

这一思想可以推广到角回归(angle regression)以外的许多情况. 关于重叠bin(overlapping bins)的一个简短说明:这对于均匀分布更重要,但对于多模态分布(multimodal distribution)就不那么重要了,因为对于后者,在bin边界上的样本要少得多.

2.1 Bin 宽度选择

如果回归目标中没有明确的聚类模式,且目标范围较宽,建议使用标准差作为bin尺度,正如论文GS3D: An Efficient 3D Object Detection Framework for Autonomous Driving (CVPR 2019)所推荐. 这比直接回归目标的效果好得多.

2.2 改进的 Multi-Bin Loss

在论文3D-RCNN: Instance-level 3D Object Reconstruction via Render-and-Compare (CVPR 2018)中,作者提出了不同的multi-bin损失. 它也将连续目标范围离散化为bins,但不是使用softmax挑选出唯一正确的bin,而是使用bin中心的加权平均(期望)作为最终预测,并使用L1进行正则化. 这样,就没有必要回归到bin中心的偏移量. 这与GSA的公式非常接近.

2.3 Anchor Boxes in Object Detection (对象检测中的锚框)

新进入目标检测领域的人可能会对锚框(anchor boxes)的概念感到困惑,锚框在许多现代目标检测网络架构中很流行,如Faster RCNN、RetinaNet和YOLOv2.

锚定法将图像空间(包括位置、比例、高宽比)划分为离散的bins,并在相应的bin中细化对象区域.

锚框被设计用于将所有可能的实例框的连续空间离散为具有预定义位置、比例和高宽比的有限数量的框.

锚框类似于深度学习中卷积的滑动窗口.

Image for post
人脸检测中的滑动窗口
DL中的锚框是一种以卷积方式应用滑动窗口的方法

从另一个角度来看,锚框和multi-bin损失背后的原理是极其相似的.

锚框和multi-bin损失通过对锚框(或multi-bin损失中的bin)进行分类并对到锚框/bin的残差进行回归,解决了一个非常复杂的多模态回归问题.

实际上,锚框是设计来捕获基于训练数据集的比例和高宽比,正如YOLOv2中解释的那样. 这与FQNet中基于多bin损失和k-means聚类的车辆大小回归非常相似.

3. The Takeaways(使用技巧)

可视化:在盲目应用L2范数之前,应先检查目标分布.

分治法:将目标范围划分为多个bin(重叠或不重叠),对目标所在bin/anchor进行分类,然后对残差进行回归.

另一个有用的技巧是执行目标标准化,以得到均值为零,方差为1的目标. 虽然在传统的机器学习中,标准化通常是在feature上使用,而target不需要,但是我发现如果我们也进行目标标准化的话,会让训练变得更容易.

<think>嗯,用户想了解循环一致性损失函数和L1正则化损失函数的区别联系,还有它们的应用场景。首先,我需要回忆这两个概念的定义和作用。 循环一致性损失函数,我记得是在像CycleGAN这样的生成对抗网络中用的,主要是为了确保两个生成器互相转换后能恢复原始数据。比如图像转换中,从A域转换到B域再转回来,应该和原图一致。这个损失函数通常用L1或L2范数来衡量重建的误差,比如$L_{cycle} = \mathbb{E}[\|G(F(x)) - x\|_1]$,其中G和F是两个生成器。 而L1正则化损失函数,应该是机器学习中用来防止过拟合的一种方法,通过在损失函数中加入权重的绝对值之和,比如$L_{total} = L_{data} + \lambda \sum |w_i|$。L1正则化倾向于产生稀疏的权重,有助于特征选择。 接下来要比较它们的异同点。相同点可能包括都使用L1范数作为度量,都作为损失函数的一部分。不同点方面,循环一致性损失主要用于生成模型的结构约束,确保数据的一致性;而L1正则化则是为了模型的简化,防止过拟合,作用于模型参数。 应用场景的话,循环一致性损失多用于无监督的图像转换、风格迁移,比如CycleGAN。L1正则化则常见于需要特征选择或稀疏解的场景,比如线性回归、Lasso回归。 还需要注意两者的数学形式和目标不同。循环一致性是数据层面的约束,L1正则化是参数层面的约束。另外,循环损失可能结合其他损失函数一起使用,而L1正则化通常是单独添加到损失函数中。 可能用户混淆了它们的作用,需要明确各自的应用背景。同时,引用中的资料提到了正则化的目的是防止过拟合,而循环一致性是关于模型结构的约束,这可以作为支持点。 最后,要确保回答结构清晰,分点说明异同和应用场景,并正确引用相关的参考文献,比如正则化的作用[^2][^3],以及偏置一般不正则化的原因[^4]。</think>### 循环一致性损失函数L1正则化损失函数的比较 #### 一、定义核心目标 1. **循环一致性损失函数** 主要用于生成对抗网络(如CycleGAN)中,通过强制两个生成器之间的双向映射保持一致性,例如图像转换领域中的$x \to G(x) \to F(G(x)) \approx x$。数学形式通常为L1或L2范数: $$L_{cycle} = \mathbb{E}[\|G(F(x)) - x\|_1] + \mathbb{E}[\|F(G(y)) - y\|_1]$$ 其目标是确保数据在跨域转换后能恢复原始特征[^1]。 2. **L1正则化损失函数** 用于防止模型过拟合,通过对权重参数的绝对值之和进行惩罚,推动模型稀疏性: $$L_{total} = L_{data} + \lambda \sum |w_i|$$ 例如Lasso回归中,L1正则化通过稀疏化权重实现特征选择。 #### 二、异同点分析 | **维度** | **循环一致性损失** | **L1正则化损失** | |-------------------|--------------------------------------------|------------------------------------------| | **作用对象** | 数据层面的重建误差(如生成器输出) | 模型参数(如权重$w$) | | **核心目标** | 保持跨域转换的结构一致性 | 防止过拟合,增强模型泛化能力 | | **数学形式** | 基于输入数据的L1/L2范数 | 基于参数的L1范数 | | **稀疏性** | 不直接导致稀疏性 | 通过惩罚项强制参数稀疏化 | | **应用场景** | 无监督图像翻译、多模态生成任务 | 特征选择、高维数据建模(如Lasso回归) | #### 三、联系 1. **L1范数的使用**:两者均利用L1范数作为误差度量,但循环一致性损失关注数据重建误差,而L1正则化关注参数复杂度。 2. **损失函数组合**:循环一致性损失其他损失(如对抗损失)结合,类似L1正则化数据损失联合优化。 #### 四、应用场景对比 - **循环一致性损失** - **图像翻译**:如CycleGAN中将马转换为斑马并保持内容一致。 - **跨模态生成**:文本到图像的循环重建任务。 - **L1正则化损失** - **特征选择**:在回归模型中筛选重要特征(如基因数据建模)。 - **稀疏表示**:压缩感知、信号处理中减少参数冗余。 #### 五、总结 循环一致性损失是**任务驱动的结构约束**,而L1正则化是**模型复杂度的正则化工具**。两者虽均涉及L1范数,但作用层次和目标不同。实际应用中,L1正则化可其他损失(包括循环一致性损失)叠加使用,例如在生成模型中同时约束参数稀疏性和数据一致性[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值