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

news2024/12/24 2:53:56

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.coloradmin.cn/o/1322560.html

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

相关文章

评价机器学习模型的指标

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

系统设计——系统安全

HTTPS 是如何工作的? 安全超文本传输​​协议(HTTPS)是超文本传输​​协议(HTTP)的扩展。HTTPS 使用传输层安全性(TLS)传输加密数据。如果数据在网上被劫持,劫持者得到的只是二进制…

selenium-wire简介

一.简介 以下来自chatGPT回答: selenium-wire是一个基于selenium的Python库,它扩展了selenium的功能,使得我们可以在自动化测试中直接访问和修改浏览器的网络请求和响应。selenium-wire可以拦截和修改HTTP请求和响应,从而可以在…

【一周安全资讯1216】欧盟就AI监管《人工智能法案》达成历史性协议;赛迪发布《中国网络安全测评服务市场研究报告 (2023)》

要闻速览 1、欧盟就全球首个AI监管《人工智能法案》达成历史性协议 2、我国牵头提出的国际标准《信息技术 网络安全 第7部分:网络虚拟化安全指南》正式发布 3、《粤港澳大湾区(内地、香港)个人信息跨境流动标准合同实施指引》发布 4、赛迪顾…

三相异步电机动态数学模型推导及矢量控制仿真

文章目录 **原文链接,点击跳转**三相异步电机动态数学模型及矢量控制仿真1、异步电机三相方程2、坐标变换3、磁链3/2变换推导4、两相静止坐标系下的方程5、两相旋转坐标系下的方程6、以 ω-is-Ψr 为状态变量的状态方程7、矢量控制及 matlab 仿真 原文链接&#xff…

【C语言】数据结构——链式二叉树实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 导读: 我们在前面学习了单链表,顺序表,栈和队列,小堆。 今天我们来学习链式二叉…

WPF仿网易云搭建笔记(7):HandyControl重构

文章目录 专栏和Gitee仓库前言相关文章 新建项目项目环境项目结构 代码结果结尾 专栏和Gitee仓库 WPF仿网易云 Gitee仓库 WPF仿网易云 CSDN博客专栏 前言 最近我发现Material Design UI的功能比较简单,想实现一些比较简单的功能,比如消息提示&#xff0…

抖音直播间websocket礼物和弹幕消息推送可能出现重复的情况,解决办法

在抖音直播间里,通过websocket收到的礼物消息数据格式如下: {common: {method: WebcastGiftMessage,msgId: 7283420150152942632,roomId: 7283413007005207308,createTime: 1695803662805,isShowMsg: True,describe: 莎***:送给主播 1个入团卡,priority…

解决goview栈内存溢出导致打包报错问题

最近搞低代码大屏使用goview打包时遇到问题 报错&#xff1a; vite v4.3.6 building for production... transforming (8931) node_modules\monaco-editor\esm\vs\base\common\navigator.js <--- Last few GCs ---> [24864:000001B515BA39F0] 65979 ms: Scavenge 2002.0…

VueStu01-Vue是什么

1.概念 Vue 是一个 用于构建用户界面 的 渐进式 框架 。 2.构建用户界面 基于数据渲染出用户看到的页面。 3.渐进式 Vue的学习是循序渐进的&#xff0c;可以学一点用一点&#xff0c;不必全部学完才能用。哪怕你只学了 声明式渲染 这一个小部分的内容&#xff0c;你也可以完成…

Eclipse_03_如何加快index速度

1. ini配置文件 -Xms&#xff1a;是最小堆内存大小&#xff0c;也是初始堆内存大小&#xff0c;因为堆内存大小可以根据使用情况进行扩容&#xff0c;所以初始值最小&#xff0c;随着扩容慢慢变大。 -Xmx&#xff1a;是最大堆内存大小&#xff0c;随着堆内存的使用率越来越高&a…

vue内容渲染

内容渲染指令用来辅助开发者渲染DOM元素的文本内容。常用的内容渲染指令有3个 1.v-text 缺点&#xff1a;会覆盖元素内部原有的内容 2.{{}}&#xff1a;插值表达式在实际开发中用的最多&#xff0c;只是内容的占位符&#xff0c;不会覆盖内容 3.v-html&#xff1a;可以把带有标…

SVM —— 理论推导

SVM 支持向量线性可分最大间隔超平面最大间隔超平面的推导支持向量分类间隔的推导最优化问题 对偶问题拉格朗日乘子法强对偶性 SVM 优化软间隔解决问题优化目标及求解 核函数线性不可分核函数的作用常见核函数 SVM 算法优缺点 支持向量机&#xff08;Support Vector Machine&am…

一、Java基础语法

注意&#xff1a; ​ 用记事本打开本文档&#xff0c;格式较差。 ​ 可安装typora软件后再次打开。 ​ 安装包位于&#xff1a;day01\资料\其他软件\阅读笔记的软件\typora-setup-x64.exe day01 - Java基础语法 1. 人机交互 1.1 什么是cmd&#xff1f; 就是在windows操作…

BearPi Std 板从入门到放弃 - 先天神魂篇(7)(RT-Thread 定时器-软件定时器)

简介 RT-Thread 软件定时器的简单使用步骤 创建项目 参考 BearPi RT-Thread项目创建 定时器管理接口 定时器时钟节拍 定时器管理相关函数 定时器类型 #define RT_TIMER_FLAG_ONE_SHOT 0x0 //一次性计时器 #define RT_TIMER_FLAG_PERIODIC 0x2 // 周期性定时器 #…

博特激光:紫外激光打标机在玻璃行业的应用

随着科技的飞速发展&#xff0c;紫外激光打标机在玻璃行业的应用日益广泛。这种高效、高精度的打标设备为玻璃制品的标识和加工带来了革命性的变革&#xff0c;助力企业提升生产效率和产品质量。 ​ ​ 一、玻璃制品标识 紫外激光打标机采用高能量密度的激光束&#xff0c;能够…

Postman接口自动化测试之——批量执行(集合操作)

集合定义&#xff1a;在接口自动化测试过程中将一组请求&#xff08;多条请求&#xff09;保存到一起进行集中管理。方便执行过程中的维护、导出和执行等。 创建集合 在引导页点击“Collection”&#xff0c;或者在“Collection”标签点击图标&#xff1b; 字段解释 集合描述…

初识Redis缓存,一文掌握Redis重要知识文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

LazyIDA源码阅读

LazyIDA是一款IDA插件&#xff0c;项目地址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…

idea过往各版本下载

idea过往各版本下载 https://www.jetbrains.com/zh-cn/idea/download/other.html