【迁移学习论文四】Multi-Adversarial Domain Adaptation论文原理及复现工作

Multi-Adversarial Domain Adaptation 多对抗域适应

前言

  • 好久没有更新了,所以这周开始记录下来,也好督促自己。
  • 记录本人预备研究生阶段相关迁移学习论文的原理阐述以及复现工作。

问题

跨域混淆或错误对齐
在这里插入图片描述

文章介绍

这篇文章于2018年发表在AAAI,作者是清华大学龙明盛老师的学生。作者提到,域适应存在两个技术挑战:

  1. 通过最大限度地匹配跨域数据分布的多模式结构来增强正迁移;
  2. 通过防止跨域分布中模式的错误对齐来减轻负迁移。

在这些挑战的激励下,作者提出一种多对抗域自适应(MADA)方法,它捕获多模式结构,以支持基于多个域鉴别器的不同数据分布的细粒度对齐。与以前的方法相比,一个关键的改进是能够同时促进相关数据的正迁移和减轻不相关数据的负迁移。利用线性时间内的反向传播计算梯度,通过随机梯度下降实现自适应。

模型结构

在这里插入图片描述

标签分类器

  • 从图中可以看到,源域样本首先经过 G f G_f Gf层提取到相关特征,然后送入标签分类器 G y G_y Gy得到分类标签
  • 然后使用交叉熵损失计算分类损失。标签分类器几乎是所有模型必备的一项。这里不过多赘述。

局部域分类器

  • 我们可以看到上面的蓝色线条,这就是局部域分类器。

    • 首先 G f G_f Gf提取到目标域和源域的特征,然后经过GRL后送入局部域分类器。这里产生一个问题,目标域样本的标签我们是不知道的,只知道源域数据标签,那我们如何知道哪个样本应该送入哪个局部域分类器呢?
    • 让经过GRL之后的特征再与各个类别的标签分类概率相乘,然后送入相应类别的局部域分类器,在这个类别的分类概率越高就意味着这个局部域分类器对你的关注度就应该越高。
  • 对抗学习过程是一个双人博弈

    • 第一个参与者是经过训练的域鉴别器 G d G_d Gd,用于区分源域和目标域
    • 第二个参与者是同时经过微调的特征提取器 G f G_f Gf,用于混淆域鉴别器

损失函数

在这里插入图片描述

优点

本文提出的多对抗域自适应网络实现了细粒度自适应,每个数据点 x i x_i xi仅由相关的域鉴别器根据其概率 y i y_i yi进行匹配。这种细粒度的适应可能带来三个好处。

  1. 避免了将每个点只分配给一个域鉴别器的困难,避免了对目标域数据的不准确。
  2. 避免了负迁移,因为每个点只对齐到最相关的类,而不相关的类被概率过滤掉,不会包含在相应的域判别器中,从而避免了不同分布中判别结构的错误对齐。
  3. 用概率加权数据点训练多域鉴别器,自然学习到具有不同参数的多个域鉴别器;这些域具有不同参数的鉴别器促进每个实例的正迁移。

代码

# 前向传播方法
def forward(self, x):# 计算 lambda(lbda)lbda = self.get_lambda_p(self.get_p()) if self.mode == 'Train' else 0# 提取特征features = self.backbone(x)  # 通过特征提取器获取特征features = features.reshape(features.size(0), -1)  # 重塑特征形状为二维# 类别分类器得到类别预测结果class_logits = self.class_classifier(features)class_predictions = F.softmax(class_logits, dim=1)  # 对类别 logits 进行 softmax 得到概率# 对特征进行反转(领域自适应)reverse_features = GRL.apply(features, lbda)# 对每个类别使用独立的领域分类器进行域分类domain_logits = []for class_idx in range(self.num_classes):weighted_reverse_features = class_predictions[:, class_idx].unsqueeze(1) * reverse_features# 域分类器对加权的反转特征进行域分类domain_logits.append(self.domain_classifiers[class_idx](weighted_reverse_features).cuda())return class_logits, domain_logits  # 返回类别 logits 和域 logits
  • 前向传播(forward):

    • 输入数据 x 经过特征提取器(self.backbone)得到特征表示。
    • 特征表示经过类别分类器得到类别的预测结果(class_logits)。
    • 特征表示经过领域分类器,分别针对每个类别(num_classes)进行域分类。
  • 多个域分类器: 对每个类别都有一个独立的领域分类器,以便更好地适应不同类别在不同域中的分布情况。

总结

本文提出了一种新的多对抗域自适应方法来实现有效的深度迁移学习。与以往的领域对抗自适应方法只匹配域间的特征分布而不利用复杂的多模结构不同,该方法进一步利用判别结构,在多对抗自适应框架中实现细粒度分布对齐,同时促进正迁移规避负迁移

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/233034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你使用Cypress进行端到端测试

一、引言 Cypress是一个流行的端到端测试框架,它提供了一个全面的解决方案,可以测试任何在浏览器中运行的内容。不论你是想为一个小型项目添加测试,还是在大型企业级应用中进行端到端测试,Cypress都是一个不错的选择。本文将会手…

智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于阿基米德优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阿基米德优化算法4.实验参数设定…

国家开放大学 河南开放大学形成性考核 平时作业 统一参考资料

试卷代号:1258 房屋建筑混凝土结构设计 参考试题 一、单项选择题(每小题2分,共计40分) 1.( )是将框架结构中的部分跨间布置剪力墙或把剪力墙结构的部分剪力墙抽掉改为框架承重。 A.梁板结构体系 B.框…

评价机器学习模型的指标

为了衡量一个机器学习模型的好坏,需要给定一个测试集,用模型对测试集中的每一个样本进行预测,并根据预测结果计算评价分数。 对于分类问题,常见的评价标准有准确率、精确率、召回率和F值等。给定测试集 𝒯 {(&#x1…

一款电压检测LVD

一、基本概述 The TX61C series devices are a set of three terminal low power voltage detectors implemented in CMOS technology. Each voltage detector in the series detects a particular fixed voltage ranging from 0.9V to 5.0V. The voltage detectors consist…

git缓存区、本地仓库、远程仓库的同步问题(初始化库无法pull和push)

git新建库与本地库同步 gitee使用教程,git的下载与安装接不在叙述了。 新建远程仓库 新建远程仓库必须要使用仓库提供的api,也就是仓库门户网站,例如gitee,github,gitlab等。在上图中使用gitee网址中新建了一个test仓…

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图)

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图) 目录 回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图)效果一览基本介绍…

HarmonyOS(十五)——状态管理之@Prop装饰器(父子单向同步)

上一篇文章我们认识了状态管理的State装饰器(组件内状态),接下来我们学习另外一个状态管理装饰器Prop装饰器。 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的,但是变化不会同步回其父组件。 说明&#…

10分钟微调专属于自己的大模型

本文主要介绍使用魔搭社区轻量级训练推理工具SWIFT,进行大模型自我认知微调,帮助初阶炼丹师快速微调出专属于自己的大模型。 SWIFT(Scalable lightWeight Infrastructure for Fine-Tuning)是魔搭ModelScope开源社区推出的一套完整…

大数据背景下的教育培训流动机构分析探究代码

针对大数据背景下教育培训流动机构的分析探究,首先需要搜集相关数据,例如学生信息、课程信息、培训机构信息等,然后通过数据分析和可视化工具进行探索性分析和建模。以下是一个简化的示例,展示如何使用Python的Pandas和Matplotlib…

C++snprintf和stringstream,一篇就够啦!

文章目录 前言snprintf()sstreamstr()的使用clear()的使用 对于stringstream的疑惑 前言 最近写了一个Github的CJson解析器,这是其中遇到的一个问题,在查询大量资料之后编写了这篇文章。 snprintf() 这个函数位于头文件cstdio中,我们先来看…

泰坦陨落2找不到msvcr120文件的修复方法,分享多种解决方法

在玩泰坦陨落2这款游戏时,有些玩家可能会遇到找不到msvcr120.dll文件的问题。这个问题可能是由于游戏缺少必要的运行库导致的。下面我将分享一些解决这个问题的方法,希望对大家有所帮助。 一、问题分析 msvcr120.dll是Microsoft Visual C Redistributab…

MATLAB - 使用 MPC Designer 线性化 Simulink 模型

系列文章目录 前言 本主题介绍如何使用 MPC Designer 对 Simulink 模型进行线性化。为此,请从包含 MPC 控制器块的 Simulink 模型打开该应用程序。本例中使用 CSTR_ClosedLoop 模型。 open_system(CSTR_ClosedLoop) 在模型窗口中,双击 MPC 控制器模块。…

Vue中英文翻译小结

背景:时局艰难,后端开发被强制写了vue,这不有个需求是中英文翻译,特此记录下,该怎么个翻译法子。 先引入全局的路由国际化文件,zh.js 和 en.js 1.关于插值表达Button里面 {{ $t(reinsop.common.back) }} …

LazyIDA源码阅读

LazyIDA是一款IDA插件,项目地址GitHub - L4ys/LazyIDA: Make your IDA Lazy! 外部引用 from __future__ import division from __future__ import print_function from struct import unpack import idaapi import idautils import idcfrom PyQt5.Qt import QAppli…

【函数调用需要哪些开销,内联函数又做了什么?】

系列文章目录 欢迎大家订阅我的《计算机底层原理》、《自顶向下看Java》专栏,我会持续为大家输出优质内容,能够帮助到各位就是对我最大的鼓励! 目录 系列文章目录 前言 一、函数调用需要哪些开销 1.压栈于弹栈开销: 2.寄存器保存于…

JJJ:组合数据类型2

文章目录 字典的创建和删除 p50字典的创建方式 字典元素的访问及遍历 p51字典操作的相关方法 p52字典生成式集合的创建与删除 p54集合的操作符 p55集合的操作方法、集合的遍历 p56列表、元组、字典、集合的区别 Python 3.11新特性结构模型匹配字典合并运算符 |同步迭代 字典的创…

element-ui 抽屉里面嵌套弹窗

当我们在element-ui 的Drawer 抽屉里面嵌套弹窗时,有时会出现关闭弹窗后,抽屉依然被遮罩层挡着的情况,解决方法是 在 Drawer 里面写 :append-to-body"true" 和 :close-on-click-modal"false",在弹窗里面写 :a…

vue中的事件修饰符、表单双向数据绑定和计算属性

目录 一、事件修饰符 二、表单双向数据绑定 模拟双向数据绑定(双向数据绑定底层原理) 三、计算属性 计算属性和methods方法区别? 计算属性和watch区别? 一、事件修饰符 stop 阻止事件冒泡 prevent 阻止事件默认行为 ca…

Java常见原子性操作

在Java语言中,对基本数据类型的变量读取赋值操作都是原子性的,对引用类型的变量读取和赋值的操作也是原子性的,因此诸如此类的操作是不可被中断的,要么执行,要么不执行,正所谓一荣俱荣一损俱损。 原子操作…