- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
论文重新审视了深度神经网络中的不确定性估计技术,并整合了一套技术以增强其可靠性。论文的研究表明,多种技术(包括模型正则化、分类器改造和优化策略)的综合应用显着提高了图像分类任务中不确定性预测的准确性 。
来源:晓飞的算法工程笔记 公众号 。
论文: SURE: SUrvey REcipes for building reliable and robust deep networks 。
深度神经网络 (DNNs) 已成为结构化数据预测任务中强大且适应性高的工具,但准确评估其预测的可靠性仍然是一个巨大的挑战。在医疗诊断、机器人、自动驾驶和地球观测系统等关键安全领域,过度自信的预测的决策可能会导致严重的后果。因此,确保基于DNN的人工智能系统的鲁棒性至关重要.
解决深度学习中的过度自信问题一直是重大研究工作的焦点,但目前很多方法的一个关键限制是测试场景有限,通常仅限于单个预定义任务(例如故障预测或分布外检测(OOD))的基准数据集。这些方法在涉及更复杂的现实情况时(如数据损坏、标签噪声或长尾类分布等),其有效性仍很大程度上尚未得到充分探索。而且通过实验表明,没有一种方法能够在不同的场景中表现一致。为此,论文提出了一个有效解决所有这些挑战的统一模型.
在论文追求增强不确定性估计的过程中,论文首先检查几种现有方法的综合影响,从而发现一种可以显着改进的综合方法。根据这些方法在模型训练过程中的功能对进行分类:
RegMixup
正则化、正确性排名损失 (CRL
) 和余弦相似性分类器 (CSC
) 等技术,这有助于增加具有挑战性的样本的熵。FMFP
的建议结合了锐度感知最小化 (SAM
) 和随机权重平均 (SWA
),确保模型能够收敛到更平坦的最小值。这些不同技术的协同整合最终形成了论文的新颖方法SURE,该方法利用了每个单独组件的优势,产生了更加稳健和可靠的模型.
在评估SURE时,论文首先关注错误预测(failure prediction),这是评估不确定性估计的关键任务。结果表明,SURE始终优于部署单独技术的模型。这种卓越的性能在CIFAR10、CIFAR-100、Tiny-ImageNet等各种数据集以及ResNet、VGG、DenseNet、WideResNet和DeiT等各种模型架构中都很明显。值得注意的是,SURE甚至超越了OpenMix,这是一种利用额外OOD数据的方法。通过将SURE直接应用到现实场景中,无需或只进行很少的特定于任务的调整,进一步见证了在为模型带来鲁棒性方面的有效性。具体来说,现实世界的挑战包括CIFAR10-C中的数据损坏、Animal-10N和Food-101N中的标签噪声以及CIFARLT中的类分布倾斜。在这些背景下,SURE取得的结果要么优于最新的方法,要么与最新的方法相当。SURE在Food-101N上达到了 88.0% 的令人印象深刻的准确率,显着超过了之前最先进的方法Jigsaw-ViT,该方法通过使用额外的预训练数据达到了 86.7% 的准确率,这证明了SURE在处理复杂的现实数据挑战方面的卓越能力.
本文的主要贡献总结如下:
SURE
,结合模型正则化、分类器和优化策略等多种技术所实现的协同效应。在SURE
方法下训练的模型在故障预测方面始终比在各种数据集和模型架构中部署单独技术的模型取得更好的性能。SURE
始终表现出至少与最先进的方法相当的性能。如图 2 所示,SURE旨在通过两个方面训练可靠且鲁棒的DNN:i)增加难样本的熵; ii) 在优化过程中强制寻找平坦极值(flat minima).
定义 \(\{(\mathbf{x}_{i},\mathbf{y}_{i})\}_{i=1}^{N}\) 表示数据集,其中 \(\mathbf{x}_{i}\) 是输入图像,\(\mathbf{y}_{i}\) 是其标签,\(N\) 是样本数.
SURE中增加难样本熵的方法由三个部分组成:
RegMixup
正则化 \(\mathcal{L}_{mix}\),通过数据增强添加难样本。CSC
)的结果作为输入,可以更好地表达难样本。此外,为了平坦极值,在优化过程中使用锐度感知最小化 (SAM) 和随机权重平均 (SWA).
如上所述,SURE的目标函数由三部分组成,表示为:
Mixup是一种广泛用于图像分类的数据增强方法.
给定两个输入目标对 \((\mathbf{x}_{i},\mathbf{y}_{i})\) 和 \((\mathbf{x}_{j},\mathbf{y}_{j})\),通过线性插值来获得增强样本 \((\tilde{\mathbf{x}}_{i}, {\tilde{\mathbf{y}}}_{i})\):
其中 \(m\) 表示混合系数,遵循Beta分布:
RegMixup正则化 \(\mathcal{L}_{mix}\) 计算增强样本的损失值:
设置 \(\beta=10\),确保两个样本高度混合.
与RegMixup类似,将 \(\mathcal{L}_{mix}\) 作为附加正则化器,与 \((\mathbf{x}_{i},\mathbf{y}_{i})\) 上的原始交叉熵损失 \(\mathcal{L}_{ce}\) 一起使用。 较高的 \(\beta\) 值会导致样本严重混合,促使模型在大量的插值样本上表现出高熵,增加训练的挑战性.
正确性排名损失鼓励DNN将模型的置信度与训练期间收集的正确预测比例信息保持一致(即经常预测正确的图像,其置信度也应该高于不经常预测正确的图像).
对于两个输入图像 \(\mathbf{x}_{i}\) 和 \(\mathbf{x}_{j}\) ,\(\mathcal{L}_{crl}\) 的定义为:
其中 \(c_{i}\) 和 \(c_{j}\) 表示训练期间 \(\mathbf{x}_{i}\) 和 \(\mathbf{x}_{j}\) 被正确预测的比例,\(\mathbf{s}_{i}\) 和 \(\mathbf{s}_{j}\) 表示 \(\mathbf{x}_{i}\) 和 \(\mathbf{x}_{j}\) 的置信度得分,即softmax得分,sign表示符号函数.
\(\mathcal{L}_{crl}\) 旨在将置信度得分与正确性统计数据对齐,难样本在训练过程中不太可能被正确预测,因此鼓励其具有较低的置信度,从而具有较高的熵来进行反向更新.
CSC通过简单地用余弦分类器替换最后一个线性层,在少样本分类中有不错效果。简单而言就是每个类学习一个原型向量,将其与图像的特征网络输出进行余弦相似计算,将结果作为预测分数.
对于图像 \(\mathbf{x}_{i}\) ,分类向量中对应 \(k\) 类的单元表示为 \(\mathbf{s}_{i}^{k}\) ,其定义如下:
其中 \(\tau\) 是温度超参数,\(f_{\theta}\) 是 \(\theta\) 参数化的DNN网络,用于提取输入图像的特征,\(w^{k}\) 代表第 \(k\) 类的原型向量.
CSC鼓励分类器关注从输入图像提取的特征向量与类原型向量之间的方向对齐,这使得它在概念上不同于传统的线性分类器。传统的线性分类器中关注点积得出的幅值(用于进行softmax),而CSC仅关注其方向是否一致。CSC的一个主要好处是能够更好地处理难样品,将难样本视为与多个类原型向量在余弦角度相等,从而比使用点积的传统线性分类器提供更有效的可解释性和潜在更高的熵.
论文联合采用锐度感知最小化(SAM)和随机权重平均(SWA)来增强平面最小值.
由于参数量巨大,深度模型存在较多的局部极值,而优化过程就是在寻找其中一个极值。一般认为,平坦的极值比尖锐的极值的泛化能力更强。为此,SAM通过寻找邻域平坦的参数来增强模型泛化能力,从而使DNN具有一致的小损失,避免陷入尖锐的局部极值.
对于论文的目标函数 \({\mathcal{L}}_{total}\) 和DNN参数 \({\boldsymbol{\theta}}\),SAM优化器寻求满足以下公式的 \(\theta\):
其中 \(\epsilon\) 是扰动向量,\(\rho\) 是论文寻求最小化损失锐度的邻域大小.
SAM算法在 \(\ell_2\) 范数小于 \(\rho\) 的范围内寻找使损失最大化的扰动向量 \(\epsilon\)(此过程需要基于 \(\theta\) 产生的梯度进行计算),然后基于 \(\theta + \epsilon\) 产生的新梯度反向更新模型参数 \(\theta\),交替进行上面两个步骤来最小化扰动损失.
SWA通过在训练过程中平均模型权重来提高DNN的泛化能力.
从标准训练阶段开始,SWA开始对后续每个周期的权重进行平均,权重更新为:
其中 \(\theta_{t}\) 表示 \(t\) 周期时的模型权重,\(T\) 是应用SWA的周期总数.
使用以随机梯度下降(SGD)作为基础优化器的SAM进行训练,动量为 0.9,初始学习率为 0.1,权重衰减为 5e-4,采用余弦退火学习率策略,数据批次大小为128。总共训练 200 个周期,SWA起始周期设置为 120,将SWA的学习率设置为 0.05,以增强训练的有效性和模型鲁棒性。设置公式 (3) 中的 \(\beta\) = 10 以进行混合数据增强,所有超参数(包括 \(\lambda_{mix}\)、\(\lambda_{crl}\) 和 \(\tau\))均根据验证集表现上进行调整.
在对ImageNet预训练模型DeiT-Base进行微调时,设置学习率为 0.01,在 50 个周期内权重衰减为 5e-5,SWA开始周期为 1,学习率为 0.004.
表 1 中展示了CIFAR10、CIFAR100和Tiny-ImageNet上的故障预测结果.
表 2 展示了在长尾数据集CIFAR10-LT和CIFAR100-LT与最先进方法比较.
表 3 和表 4 展示了在含噪声标签的Animal-10N和Food-101N上的 top-1 准确率.
在实际应用中,环境条件容易频繁变化,例如天气从晴朗到多云,再到下雨。对于模型来说,在这种分布或领域偏移下保持可靠的决策能力至关重要。图 3 展示了在偏移数据集CIFAR10-C上评估使用CIFAR10的干净训练集训练的模型的性能比较.
论文在表 5 中分析了每个组件对SURE在CIFAR100上的性能贡献.
图 4 中可视化了CIFAR100-LT IF=10上的置信度分布,SURE明显比MSP和FMFP带来更好的置信度分离.
如果本文对你有帮助,麻烦点个赞或在看呗~ 更多内容请关注 微信公众号【晓飞的算法工程笔记】 。
最后此篇关于SURE:增强不确定性估计的组合拳,快加入到你的训练指南吧|CVPR2024的文章就讲到这里了,如果你想了解更多关于SURE:增强不确定性估计的组合拳,快加入到你的训练指南吧|CVPR2024的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试使用增强的 for 循环遍历 Iterable,但我无法确定何时处理最后一个值。 public void apply(Tuple key,
我正在使用以下代码在 Sheet2 的 A:H 范围内查找和替换 Sheet1 中存在的单词列表(ColA 用于 FIND 单词,ColB 用于 REPLACE 单词)。它执行这项工作,但非常缓慢。可
我正在使用 Hibernate (JPA2) hibernate.hbm2ddl.auto=update用于测试和 hibernate.hbm2ddl.auto=validate用于生产。 我想要做的
基本问题: 为什么我只能用 Scala 编写: println(10) 为什么我不需要写: Console println(10) 后续问题: 如何引入一个新方法“foo”,它像“println”一样
我正在尝试将 Maven 项目迁移到 Bazel,但在 Datanucleus 增强方面遇到了麻烦。 后 jar -file 已构建,Datanucleus 会查看其中的内部并执行一些字节码操作以增强
正在使用 css3 转换进行漂亮的导航。为此还编写了一些 javascript。 但不幸的是它看起来有点凌乱。你们能给我一些优化 javascript 代码的技巧吗? 笔--> http://code
我想将自定义任务绑定(bind)到默认构建器发布周期中。我想在项目编译、打包、标记和部署之后但在增加版本号并提交之前运行此代码。 我将如何融入发布周期的这一部分? 最佳答案 不幸的是,release
我使用ElasticSearch 6.6。我的应用程序通过从不同数据源提取数据来构建ES索引。搜索未指定数据源。它只是建立一个类似的查询: GET employerdata/_search { "
我正在使用此代码将“k1 = v1; k2 = v2; k3 = v3; kn = vn”字符串解析为映射。 qi::phrase_parse( begin,end,
我正在试图弄清楚作业的一部分,但我已经把头撞在墙上有一段时间了。我正在尝试将 DNA 序列转录为 RNA 序列。然而,我收到了 ArrayOutOfBoundsException。我不熟悉使用增强的
我需要对基于 python Google App Engine 的应用程序的警告进行分类。我从 GAE stackdriver 下载日志。我认为 GAE Stackdriver 错误报告位于 http
我有一个 django charField,通过 is_valid() 方法进行检查。用户应该在此字段中输入有效的逻辑表达式,因此我编写了一个解析方法,如果表达式不正确,该方法会引发异常。 如何增强
我编写了以下控制台应用程序,要求用户输入一天。 我需要一些帮助才能改进,以便他们为一周中的所有日子提供正确的答案。 如果用户输入除星期一以外的任何其他日期,则输出为“今天”、“昨天”、“明天”,并在这
我在使用带有 ES6 let 关键字的模块模式(扩充)时遇到错误。 这有效。 var Example = ( Example => { Example.name = ""; retur
我只是问是否线程安全可以使用 我明确指出“doSomething()”是线程安全的。 最佳答案 线程安全取决于您正在迭代的 Collection,而不是 enhanced for 的使用。如果 Col
我有一个非常符合 this Jquery demo 的要求,这是一个简单的购物车演示。基本上,我需要对该演示进行两项改进。 我需要文本输入以及可用的“产品”。因此,当我拖放其中一种产品时,文本字段应随
我正在三个表 messages、message_recipients 和 users 上运行查询。 messages表的表结构: id int pk message_id int message te
这个问题已经有答案了: In detail, how does the 'for each' loop work in Java? (29 个回答) 已关闭 4 年前。 由于增强的 for 循环是只读
我在 css 中制作了一个很酷的鼠标悬停,当父级鼠标悬停时它会显示动画 gif。 这是我的代码:http://codepen.io/clemeeent/pen/oggzMa 问题是我将有大约 40 天
目前,当使用 Knockout foreach 绑定(bind)时,您可以使用 $index 访问当前索引。我想让其他类似的功能可用于我的内部绑定(bind) - 例如: array(让我访问正在操作
我是一名优秀的程序员,十分优秀!