当前位置: 首页 > news >正文

TENT:熵最小化的Fully Test-Time Adaption

摘要

在测试期间,模型必须自我调整以适应新的和不同的数据。在这种完全自适应测试时间的设置中,模型只有测试数据和它自己的参数。我们建议通过test entropy minimization (tent[1])来适应:我们通过其预测的熵来优化模型的置信度。我们的方法估计归一化统计量,并优化通道仿射变换,以在线更新每个批次。Tent降低了ImageNet和CIFAR-10/100上图像分类的泛化误差,并在ImageNet- c上达到了新的最先进的误差。Tent处理从SVHN到MNIST/MNIST- m /USPS的数字识别的source-free domain 适应,从GTA到cityscape的语义分割,以及在VisDA-C基准上。这些结果是在不改变训练的情况下在测试时间优化的一个epoch中获得的。

背景

当训练(源)数据与测试(目标)数据不同时,准确性会受到影响,这种情况称为dataset shift.在测试期间,模型可能对训练期间不知道的变化很敏感,无论是自然变化还是损坏,例如意外的天气或传感器退化。然而,可能有必要在不同的数据分布上部署模型,因此需要进行调整。

在测试过程中,模型必须只适应给定的参数和目标数据。这种完全的测试时适应(fully test-time adaptation)设置不能依赖于源数据或监督。

任务需求:

1. 可用性。出于带宽、隐私或利润的考虑,模型可能在没有源数据的情况下发布。
2. 效率。在测试期间(重新)处理源数据在计算上可能不实用。
3. 准确性。如果不进行adaption,模型可能太不准确,无法达到其目的。

为了适应测试过程,我们将模型预测的熵最小化。我们称这个目标为test entropy,并以此为我们的方法命名tent。我们选择熵是因为它与error和shift的联系

熵与error有关,因为更有信心的预测总体上更正确(图1)。

熵与由于损坏引起的shift有关,因为损坏越多导致熵越大,随着损坏程度的增加,与图像分类损失的等级相关性很强(图2)。


 

为了最小化熵,tent通过估计statistics 和optimizing affine parameters(仿射参数) batch-by-batch 对目标数据的推理进行归一化和转换。这种选择的low-dimensional, channel-wise feature modulation 在测试期间的adapt是有效的,即使是在线更新。Tent不限制或改变模型训练:它独立于给定模型参数的源数据。如果模型可以运行,就可以进行调整。最重要的是,tent不仅有效地减少了熵,还减少了误差。

affine parameters 
通常用来描述一种线性变换,该变换包括平移、旋转、缩放和剪切等操作。在神经网络中,仿射变换常常用于定义神经网络层的权重矩阵和偏置向量,从而实现输入数据的线性变换

相关工作

Train-Time Adaptatv

领域自适应通过跨域损失L(x s, xt)对源和目标进行联合优化,以减轻偏移。这些损失优化特征融合,adversarial invariance, 或者共享代理任务。Transduction 对训练和测试进行联合优化,以更好地拟合特定的测试实例。虽然在它们的设置中有效,但当拒绝源/训练和目标/测试的联合使用时,两者都不适用。Tent只会在target上adapt。这些无源方法对多个epoch进行多损失离线优化,这比tent需要更多的调优和计算,但可以通过更多的计算获得更高的精度。Tent在线优化,只有一个损耗和调制的有效参数化,以强调在推理期间充分适应测试时间。我们鼓励在没有原始数据的情况下,在改编的前沿研究这些作品。

Test-Time Adaptation

Tent adapt 通过test-time optimization and normalization去更新模型。

(Test-time adaptation of predictions),即根据较容易和特定的情况调整较困难和不确定的情况(Jain & Learned-Miller, 2011),为像我们这样基于确定性的模型适应方案提供了灵感。

测试时间训练Test-time training(TTT) (Sun et al., 2019b)也在测试期间优化,但其损失不同,必须改变训练。TTT依赖于一个代理任务,比如识别图像的旋转,因此它的损失取决于代理的选择。

TTT改变训练,在适应目标之前优化源上的代理损失。Tent 适应没有代理任务和不改变训练

对特征统计进行规范化是domain adaption的常用方法。批量归一化Li et al. (2017);Carlucci et al.(2017)在训练过程中分离源统计和目标统计。Schneider et al. (2020);Nado等人(2020)在测试期间估计目标统计量以提高泛化。Tent建立在测试时间规范化的基础上,以进一步减少泛化错误。

Entropy Minimization

熵最小化是域自适应的关键正则化器(Carlucci et al., 2017;Shu et al., 2018;Saito等人,2019;Roy等人,2019),半监督学习(Grandvalet & Bengio, 2005;李,2013;Berthelot et al., 2019)和few-shot learning (Dhillon et al., 2020)。正则化熵惩罚数据分布中高密度的决策,以提高不同类别的准确性(Grandvalet & Bengio, 2005)。这些方法在训练过程中与其他有监督和无监督的附加数据损失一起使熵正则化。Tent是第一个去在测试中最小化熵的方法。为适应数据集的变化,没有其他损失或数据。熵损失很常见;我们的贡献是展示熵作为完全测试时间适应的唯一损失。

 

Feature Modulation

调制使模型随其输入而变化。我们优化了比完整模型更简单的调制,以实现稳定和有效的适应。我们对通道仿射变换进行调制,使其与规范化相结合(Ioffe & Szegedy, 2015;Wu & He, 2018),以及他们对不同任务的调节灵活性(Perez et al., 2018)。这些归一化和调节方法在训练期间通过监督损失优化调制,但在测试期间保持固定。我们在测试过程中利用无监督损失对调制进行优化,使其能够适应不同的目标数据。

贡献

1)我们强调只有目标数据而没有源数据的完全测试时间适应设置。为了强调推理过程中的实际适应性,我们对离线和在线更新进行基准测试。

2)我们将熵作为自适应目标进行研究,并提出了一种测试时间熵最小化方案,通过减少测试数据上模型预测的熵来减少泛化误差。

3)对于损坏的鲁棒性,tent在ImageNet-C上达到44.0%的错误率,优于最先进的鲁棒训练(50.2%)和测试时间标准化的强基线(49.9%)。

4)对于领域自适应,tent能够online和source free 地适应数字分类和语义分割,甚至可以与使用源数据并进行更多优化的方法相媲美

Fully Test-Time Adaption

一组输入数据和标签:X,Y

source distribution: Xs, Ys

target distribution: Xt, Yt

带参数 θ的模型fθ(x)Xs, Ys 上训练的不一定会生成当在偏移的目标数据 Xt 上

我们的fully test-time adaptation 设置只需要模型fθ(x)和未标记的目标数据Xt在推理过程中进行自适应。

方法:TEST ENTROPY MINIMIZATION VIA FEATURE MODULATION

我们在测试期间优化模型,通过调节其特征来最小化其预测的熵。我们把我们的方法tent称为测试熵(test entropy)。Tent需要一个兼容的模型compatible model、最小化目标an objective to minimize (章节3.1)和优化参数parameters to optimize over(章节3.2)来完全定义算法(章节3.3)。图3概述了我们完全适应测试时间的方法。

在测试期间没有提供监督,因此模型必须已经经过训练。测量预测的熵需要预测的分布,所以模型必须是概率性的。

快速迭代优化需要梯度,因此模型必须是可微的。用于监督学习的典型深度网络满足这些模型要求。

3.1 ENTROPY OBJECTIVE

我们的test-time 目标L(xt) 是去最小化模型预测 yˆ = fθ(xt)的熵  H(yˆ)  

特别的,我们参考信息熵 

用于类c的yˆc

熵是一个无监督的目标,因为它只依赖于预测而不是注释。然而,作为预测的度量,它与被监督的任务和模型直接相关。

相比之下,自监督学习的代理任务与监督任务没有直接关系。

代理任务从输入xt  在没有标签y的情况下 派 生出一个自监督标签y'。这些代理的例子包括旋转预测(Gidaris等人,2018)、上下文预测(Doersch等人,2015)和跨通道自动编码(Zhang等人,2017)。代理任务的太多进展可能会干扰监督任务的性能,自监督适应方法必须相应地限制或混合更新(Sun et al., 2019b;a)。因此,需要谨慎选择与领域和任务兼容的代理,为代理模型设计体系结构,并在任务和代理目标之间平衡优化。我们的熵目标不需要这样的努力。

3.2 MODULATION PARAMETERS

模型参数θ是test-time优化的自然选择,也是训练时间熵最小化的先验选择。然而,θ是我们设置中训练/源数据的唯一表示,改变θ可能会导致模型偏离其训练。此外,f可能是非线性的,θ可能是高维的,这使得优化对测试时间的使用过于敏感和低效。

为了稳定性和效率,我们只更新线性(scales and shifts)和低维(通道方向)的特征调制。

本图展现了我们调制的两个步骤

1)normalization by statistics

输入x

输出 x¯ = (x − µ)/σ

其中平均值µ和标准差σ

2)transformation by parameters

输入 x¯

输出 x‘ = γx¯ + β

仿射参数  scale γ, shift β

注意,统计量µ,σ是从数据中估计的,而参数γ, β是通过损失优化的

3.3 ALGORITHM

Initialization

优化器对于源模型中的每个归一化层l和通道k收集仿射变换参数{γl,k, βl,k},其余参数θ\ {γl,k, βl,k}被放回原处。源数据的归一化统计{µl,k, σl,k}被丢弃。

Iteration

每一步更新一个batch的数据的normalization statistics 和 transformation parameters。在向前传递期间,依次估计每层的归一化统计量。在反向传播的过程中transformation参数 γ, β由预测熵∇H(y^)的梯度更新。注意这里的transformation更新遵循当前批的预测,因此它只影响下一个批(除非forward重复)。每个额外的计算点只需要一个梯度,所以我们默认使用这个方案来提高效率。

Termination

对于在线adaption,不需要终止,只要有测试数据,迭代就会继续。对于离线adaption,首先更新模型,然后重复推理。当然,适应可以通过多个epoch的更新来继续

实验

数据集

corruption robustness:

CIFAR-10/CIFAR-100

ImageNet

domain adaptation:

SVHN

MNIST/MNIST-M/USPS

模型

corruption:

residual networks(R-26) CIFAR-10/CIFAR-100  (R-50)ImageNet

domain adaption: (R-26)


 

实验结果

总结

Tent通过最小化测试时间熵来减少移位数据的泛化误差。在最小化熵的过程中,模型根据自己预测的反馈进行自我调整。这才是真正的自我监督的自我提升。这种类型的自我监督完全由被监督任务定义,不像代理任务旨在从数据中提取更多的监督,但它仍然显著地减少了错误。然而,由于corruption 和其他变化造成的错误仍然存在,因此需要更多的适应。接下来的步骤应该追求测试时间适应更多和更困难类型的转移,在更一般的参数,并通过更有效和高效的损失。

Shifts 

Tent减少了各种转换的错误,包括图像损坏,数字外观的简单变化以及模拟到真实的差异。

Parameters

Tent通过规范化和转换来调整模型,但模型的大部分保持固定。test-time adaption可以更新更多的模型,但问题是要确定既具有表现力又可靠的参数,这可能与损失的选择相互作用。

Losses

Tent使熵最小化。对于更强的adaption,对于一般的但偶然的测试时间优化是否有有效的损失?熵在任务中是通用的,但在范围上是有限的。它需要批量优化,并且不能一次在一个点上偶然更新。

相关文章:

TENT:熵最小化的Fully Test-Time Adaption

摘要 在测试期间,模型必须自我调整以适应新的和不同的数据。在这种完全自适应测试时间的设置中,模型只有测试数据和它自己的参数。我们建议通过test entropy minimization (tent[1])来适应:我们通过其预测的熵来优化模型的置信度。我们的方法估计归一化…...

研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结 前言 见《研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug》 见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《…...

机器人3D视觉引导半导体塑封上下料

半导体塑封上下料是封装工艺中的重要环节,直接影响到产品的质量和性能。而3D视觉引导技术的引入,使得这一过程更加高效、精准。它不仅提升了生产效率,减少了人工操作的误差,还为半导体封装技术的智能化升级奠定了坚实的基础。 传统…...

(十二)Head first design patterns代理模式(c++)

代理模式 代理模式:创建一个proxy对象,并为这个对象提供替身或者占位符以对这个对象进行控制。 典型例子:智能指针... 例子:比如说有一个talk接口,所有的people需要实现talk接口。但有些人有唱歌技能。不能在talk接…...

C++从零开始的打怪升级之路(day21)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.删除有序数组中的重复项 26. …...

《设计模式的艺术》笔记 - 观察者模式

介绍 观察者模式定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。 实现 myclass.h // // Created by yuwp on 2024/1/12. //#ifndef DESIGNPATTERNS_MYCLASS_H #define DESIGNPATTERNS_MYCLA…...

Java如何对OSS存储引擎的Bucket进行创建【OSS学习】

在前面学会了如何开通OSS,对OSS的一些基本操作,接下来记录一下如何通过Java代码通过SDK对OSS存储引擎里面的Bucket存储空间进行创建。 目录 1、先看看OSS: 2、代码编写: 3、运行效果: 1、先看看OSS: 此…...

ModuleNotFoundError: No module named ‘half_json‘

问题: ModuleNotFoundError: No module named ‘half_json’ 原因: 缺少jsonfixer包 解决方法: pip install jsonfixerjson修正包地址: https://github.com/half-pie/half-json...

深入探究 Android 内存泄漏检测原理及 LeakCanary 源码分析

深入探究 Android 内存泄漏检测原理及 LeakCanary 源码分析 一、什么是内存泄漏二、内存泄漏的常见原因三、我为什么要使用 LeakCanary四、LeakCanary介绍五、LeakCanary 的源码分析及其核心代码六、LeakCanary 使用示例 一、什么是内存泄漏 在基于 Java 的运行时中&#xff0…...

Linux CentOS使用Docker搭建laravel项目环境(实践案例详细说明)

一、安装docker # 1、更新系统软件包: sudo yum update# 2、安装Docker依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 3、添加Docker的yum源: sudo yum-config-manager --add-repo https://download.docker.com/linux/cen…...

第六课:Prompt

文章目录 第六课:Prompt1、学习总结:Prompt介绍预训练和微调模型回顾挑战 Pre-train, Prompt, PredictPrompting是什么?prompting流程prompt设计 课程ppt及代码地址 2、学习心得:3、经验分享:4、课程反馈:5、使用Mind…...

网络安全(初版,以后会不断更新)

1.网络安全常识及术语 资产 任何对组织业务具有价值的信息资产,包括计算机硬件、通信设施、IT 环境、数据库、软件、文档 资料、信息服务和人员等。 漏洞 上边提到的“永恒之蓝”就是windows系统的漏洞 漏洞又被称为脆弱性或弱点(Weakness)&a…...

开始学习Vue2(脚手架,组件化开发)

一、单页面应用程序 单页面应用程序(英文名:Single Page Application)简 称 SPA,顾名思义,指的是一个 Web 网站中只有唯一的 一个 HTML 页面,所有的功能与交互都在这唯一的一个页面内完成。 二、vue-cli …...

平替heygen的开源音频克隆工具—OpenVoice

截止2024-1-26日,全球范围内语音唇形实现最佳的应该算是heygen,可惜不但要魔法,还需要银子;那么有没有可以平替的方案,答案是肯定的。 方案1: 采用国内星火大模型训练自己的声音,然后再用下面…...

【自动化测试】读写64位操作系统的注册表

自动化测试经常需要修改注册表 很多系统的设置(比如:IE的设置)都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候,经常需要去修改注册表 Windows注册表简介 注册表编辑器在 C:\Windows\regedit…...

php二次开发股票系统代码:腾讯股票数据接口地址、批量获取股票信息、转换为腾讯接口指定的股票格式

1、腾讯股票数据控制器 <?php namespace app\index\controller;use think\Model; use think\Db;const BASE_URL http://aaaaaa.aaaaa.com; //腾讯数据地址class TencentStocks extends Home { //里面具体的方法 }2、请求接口返回内容 function juhecurl($url, $params f…...

uniapp 在static/index.html中添加全局样式

前言 略 在static/index.html中添加全局样式 <style>div {background-color: #ccc;} </style>static/index.html源码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-…...

acrobat调整pdf的页码和实际页码保持一致

Acrobat版本 具体操作 现在拿到pdf的结构如下&#xff1a; pdf页码实际页码1-10页无页码数11页第1页 操作&#xff0c;选择pdf第10页&#xff0c;右键点击 具体设置 最终效果...

ctfshow-命令执行

大佬文章 L i n u x \rm Linux Linux 下空格绕过 无参数 r c e \rm rce rce 无字符 r c e \rm rce rce web29 通配符&#xff1a; *&#xff1a;匹配任意多个字符 ?&#xff1a;匹配任意一个字符 []&#xff1a;匹配某个范围的字符&#xff08; [ a d ] [ad] [ad] 表示 …...

【Python基础015】集合的用法

1、定义 集合是无序可变&#xff0c;元素不能重复。实际上&#xff0c;集合底层是字典实现&#xff0c;集合的所有元素都是字典中的 “ 键对象”&#xff0c;因此是不能重复的且唯一的。 2、创建 &#xff08;1&#xff09;使用{}创建 a {1, 2, 3} # 集合存储整数b {1, 2,…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...