Test-time adaptation & Unsupervised Domain Adaptation

文章探讨了无监督域自适应方法,如特征匹配和预测调整在模型泛化中的应用。介绍了Test-TimeAdaptation(T3A)通过调整类原型来提升模型表现,以及TENT通过最小化预测熵来适应新域。此外,还提到了使用拉普拉斯最大似然估计的在线测试时间适应方法,以及ContrastiveTest-TimeAdaptation结合伪标签和对比学习优化特征表示。最后,文章讨论了部分标签学习中的对比学习和标签歧义消除策略。
部署运行你感兴趣的模型镜像

学习笔记,参考有风险

无监督域自适应(test-time adaptation)方法:

(1)特征匹配(特征提取时):熵最小化,原型调整,信息最大化,批归一化统计对齐。
(2)预测调整(分类时)
(3)test-time training:训练数据可得
(4)test-time adaptation:训练数据不可得
在这里插入图片描述

2021-NIPS-Test-Time Classifier Adjustment Module for Model-Agnostic Domain Generalization(T3A)

通过构建支持集来调整类原型,使其具有更统一的表示:把在不同域上训练好的模型当作一个特征提取器,然后在测试数据上采用一个最近邻分类。因为采用了最近邻,所以需要给每个类维持一个类别原型,这个类别原型会随着测试数据的变化而动态变化。只调整顶部的线性分类器,将在源域上训练的线性分类器的输出层替换为一个伪原型分类器:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2021-ICLR-TENT: fully test-time adaption by entropy minimization

提出fully test-time adaptation,通过修改特征来最小化预测熵,以调节BN参数。
在这里插入图片描述
在测试阶段,目标函数从CE变为Entropy,并且更新参数时,只更新BN层中的β\betaβγ\gammaγ

2022-CVPR-Parameter-free Online Test-time Adaptation

使用拉普拉斯最大似然估计鼓励相邻样本在特征空间中具有相似预测(分类结果)。 test-time adaptation methods只在有限的实验设置下表现良好,错误的超参数选择会导致性能下降。受测试时条件的不确定性启发,提出:
(1)用拉普拉斯调整最大似然估计(LAME)解决域自适应问题,调整模型的输出(而不是它的参数)
Alt
(2)使用concave-convex procedure优化整体损失:在每次迭代中,将当前解Z~(n){\tilde Z^{(n)}}Z~(n)作为目标的紧上界的最小值。
在这里插入图片描述
在这里插入图片描述

2022-CVPR-Contrastive Test-Time Adaptation

(1)伪标签增强:使用弱增强数据,利用记忆队列得到软近邻,实现软近邻投票,得到精细伪标签
(2)自监督对比学习:使用强增强数据进行自监督对比学习,优化特征。
(3)正则化:通过强弱一致性,使聚类得到的标签、模型的预测值一致。

2022-CVPR-Self-Taught Metric Learning without Labels

(1)基于教师网络,预测数据间的class-equivalence relation,并将预测的关系作为伪标签,优化学生网络。
(2)基于学生网络,计算其基于动量的移动平均,用于优化教师网络。
(3)将近邻的重叠程度作为衡量语义相似的指标。语境化的语义相似度精确地近似于类等价性。

2023-CVPR-Feature Alignment and Uniformity for Test Time Adaptation

将Test Time Adaptation作为特征修订问题,通过实现对齐和一致性来完成特征修正。其中,对齐指相似的图像应该具有相似的表示,一致性指不同类别的图像在空间中尽可能均匀地分布:
(1)特征一致性:
提出了自蒸馏策略,在不同层间传递信息,保证当前batch和以往batch内表征的一致性。
在这里插入图片描述
(2)特征对齐:
提出记忆化的空间局部聚类,对齐未来batch内的邻域样本之间的表示。
在这里插入图片描述
(3)解决噪声标签
为了解决常见的噪声标签问题,提出熵和一致性滤波器来选择和删除可能的噪声标签。在计算原型时,过滤具有高熵的噪声特征,因为不可靠的样本通常较高的熵。
在这里插入图片描述

2022-ICLR-CONTRASTIVE LABEL DISAMBIGUATION FOR PARTIAL LABEL LEARNING(PICO)

部分标签学习:使每个样本具有一个粗糙的标签候选集

解决问题:
(1)表示学习
(2)标签歧义消除:在标签集中识别真实标签,依赖良好的特征表示,且假设距离较近的样本具有相同标签。但是标签不确定使得特征学习困难。

PICO:通过对比标签歧义消除,实现部分标签学习。为来自相同类别的样本产生紧密对齐的表示,并促进标签歧义消除。
(1)构造伪正对完成对比学习,实现部分标签学习。
(2)基于类原型的标签歧义消除算法

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

在自然语言处理(NLP)领域,无监督域自适应(Unsupervised Domain Adaptation, UDA)的目标是将模型从一个有标签的源域适应到一个未标记的目标域,而无需目标域的标注数据。这种技术在实际应用中非常关键,尤其是在目标域数据难以获得或标注成本较高的情况下。以下是一些有效的UDA技术方案: ### 1. 基于上下文学习的方法 一种有效的UDA方法是基于上下文学习的策略。这种方法通过从目标未标记语料库中检索与源域查询语义相似的示例,将这些示例作为上下文与源查询结合,形成输入提示。通过这种方式,模型能够更好地理解源输入与目标上下文之间的任务差异,从而提高适应性能。这种方法特别适用于大规模语言模型(LLMs),因为它能够利用丰富的上下文信息来减少源域和目标域之间的表面形式差异[^2]。 ### 2. 对抗训练 对抗训练是一种常用的UDA技术,它通过引入一个域分类器来区分源域和目标域的特征。域分类器的目标是最大化其对源域和目标域的区分能力,而特征提取器的目标是生成域不变的特征,使得域分类器无法区分。通过这种对抗机制,模型能够学习到跨域的通用特征表示,从而提高在目标域上的性能。对抗训练通常与其他损失函数结合使用,以进一步提升模型的适应能力[^4]。 ### 3. 自训练 自训练是一种迭代过程,其中模型首先在源域上进行训练,然后使用该模型为未标记的目标域数据生成伪标签。这些伪标签随后被用来重新训练模型。通过多次迭代,模型能够逐渐适应目标域的数据分布。为了防止某些类别在伪标签生成过程中逐渐占主导地位,可以引入类平衡策略。此外,空间先验也可以用来细化生成的伪标签,从而提高模型的适应性能[^3]。 ### 4. 知识蒸馏 知识蒸馏是一种将知识从一个大模型(教师模型)转移到一个小模型(学生模型)的技术。在UDA中,知识蒸馏可以用于将源域上的知识转移到目标域上。例如,可以使用一个教师模型来生成目标域数据的伪标签,然后使用这些伪标签来训练学生模型。通过这种方式,学生模型能够更好地适应目标域的数据分布[^5]。 ### 5. 一致性正则化 一致性正则化是一种通过强制模型在不同扰动下对同一输入产生一致输出的技术。在UDA中,可以通过对输入数据进行不同的增强或扰动,然后要求模型对这些扰动后的输入产生一致的预测来实现一致性正则化。这种方法能够提高模型对目标域数据的鲁棒性,从而提高适应性能[^5]。 ### 6. 多任务学习 多任务学习是一种将UDA与其他相关任务结合的方法。通过同时优化多个任务的损失函数,模型能够学习到更丰富的特征表示,这些特征表示对多个任务都有用。这种方法能够提高模型在目标域上的泛化能力,尤其是在目标域数据与源域数据存在较大差异的情况下。 ### 示例代码 以下是一个简单的基于上下文学习的UDA方法的示例代码,使用了Hugging Face的Transformers库: ```python from transformers import AutoTokenizer, AutoModelForSequenceClassification from transformers import Trainer, TrainingArguments # 加载预训练模型和分词器 model_name = "bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2) # 定义训练参数 training_args = TrainingArguments( output_dir="./results", num_train_epochs=3, per_device_train_batch_size=16, per_device_eval_batch_size=64, evaluation_strategy="epoch", logging_dir="./logs", logging_steps=10, ) # 定义Trainer trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=test_dataset, ) # 训练模型 trainer.train() # 使用模型进行预测 def predict(text): inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) outputs = model(**inputs) probs = torch.softmax(outputs.logits, dim=1) return probs.detach().numpy() # 示例预测 text = "This is an example text from the target domain." prediction = predict(text) print(f"Prediction: {prediction}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二苏旧局吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值