【深度学习:Domain Adversarial Neural Networks (DANN) 】领域对抗神经网络简介

【深度学习:Domain Adversarial Neural Networks】领域对抗神经网络简介

    • 前言
    • 领域对抗神经网络
      • DANN 模型架构
      • DANN 训练流程
      • DANN示例
    • GPT示例

前言

领域适应(DA)指的是当不同数据集的输入分布发生变化(这种变化通常被称为共变量变化或数据变化)时,加强模型训练的一种过程。图 1 展示了一些简单的例子:(a) 显示了一个变量的均值发生了较大偏移;(b) 显示了一个变量的均值发生了较小偏移;© 显示了一个变量的均值发生了较小偏移,而方差发生了较大偏移。

在这里插入图片描述

图 1.数据移位示例

发展议程有两个相互竞争的目标:

  • 判别能力 --在特定领域内对来自不同类别的数据进行判别的能力
  • 领域不变性 - 衡量跨领域数据类别之间相似性的能力

例如,在一个分类模型中,我们期望模型能够区分不同类别之间的差异——因此需要保持其判别能力。与此同时,如果数据发生变化,我们希望提高分类器的领域不变性,使其在接受来自不同领域的输入时表现良好。(关于严谨的理论处理,我们推荐 Ben-David 等人撰写的 “A theory of learning from different domains”)。

领域自适应的一个使用案例涉及 MNIST 数据集,该数据集由手写数字图像组成。该数据集在文献中无处不在,经常被用作测试模型的基准。还有一个名为 MNIST-M 的数据集,其中添加了不同的背景和数字颜色,如图 2 所示。

在这里插入图片描述

图 2.MNIST 和 MNIST-M 示例

虽然这两个数据集有明显的相似性,但MNIST-M数据集的变化使得输入特征的分布与原始MNIST数据集不同。在这种情况下,即使没有来自 MNIST-M 的标签,也可以使用 DA 来帮助模型在 MNIST 和 MNIST-M 上都表现良好。Ganin 和 Lempitsky 的 "反向传播的无监督领域适应 "一文中描述了这种用例。

另一个有用的 DA 例子是处理生物信号(尤其是神经信号)如何随时间或对象而变化的问题。假设我们想开发一款脑机接口应用,需要对人类受试者移动特定手臂或腿部以控制外部假肢装置的想法进行分类。利用源受试者的脑电信号(图 3),我们通常会开发出一个分类器。但是,将该分类器应用于我们的 "目标对象 "可能会导致性能不佳。领域适配可以让我们在目标受试者身上获得更高的性能,而无需从每个受试者身上收集数据。

在这里插入图片描述

图 3. 使用 DA 来解决神经信号如何随时间变化的问题

实现 DA 最常见的方法之一称为样本重新加权。使用这种方法时,我们通过以下步骤开发域分类器:

  1. 将所有源域样本标记为“0”,将所有目标域样本标记为“1”。 训练一个可以返回预测概率
  2. pi(例如逻辑回归或随机森林)的二元分类器,以区分源数据和目标数据。
  3. 当在源域上进行模型拟合时,使用所得概率来获取源域样本的样本权重,使用:

在这里插入图片描述
这会导致看起来最像目标样本的源样本获得更高的权重。虽然我们普遍认为这种方法是积极的,但它也有一些缺点。挑战之一是确定驱动域分类器的准确度。如果太准确,则没有用,因为目标区域和域区域之间不会重叠。

领域对抗神经网络

如果我们有办法同时使用 DA 和学习标签分类怎么办?具有此功能的一种方法是域对抗神经网络(DANN)。它使用具有类标签的源数据和未标记的目标数据。目标是在对抗性训练过程中使用源数据和目标数据来预测目标数据。

在传统的机器学习中,我们通常假设训练数据和测试数据具有相同的分布。但在实际应用中,这种假设往往不成立。例如,一个在晴天条件下训练的图像识别模型,在雨天条件下可能表现不佳。DANN 正是为了解决这种源域和目标域数据分布不一致的问题。

DANN 的核心思想是通过引入一个额外的域分类器(Domain Classifier),使得模型在学习特征表示时同时减少源域和目标域间的分布差异。这个过程可以看作是一种对抗性训练:主网络试图学习对任务有用且域不可分的特征,而域分类器则试图区分这些特征来自哪个域。

DANN 模型架构

DANN 通常包含三个主要部分:

  • 标签预测器(蓝色)(Feature Extractor): 从输入数据中提取有用的特征。
  • 域分类器(粉色)(Task Classifier): 基于特征提取器提取的特征,进行主任务(如图像分类、语音识别等)的学习。
  • 特征提取器(绿色)(Domain Classifier): 尝试区分特征是来自源域还是目标域。征提取器的目标是学习对两个域都有用的特征,而域分类器则努力区分这些特征的来源。这种设置创建了一种对抗关系,促使特征提取器生成越来越难以区分域的特征。

在这里插入图片描述

图 4. 域对抗神经网络架构

DANN 训练流程

DANN训练流程如图4所示:

  • 来自源或目标的输入特征被馈送到特征提取器。
  • 生成的特征被馈送到:
    • 如果输入来自源域,则标记预测器或域分类器(因为只有该数据具有标签)。
    • 域分类器,如果输入来自目标域(因为该数据上没有标签)。
  • 标签预测器和域分类器经过优化,可使用类熵等损失函数来最小化与其各自分类问题相关的误差。
  • 针对特定于 DANN 的特征提取器执行“特殊”优化(如下所述)。

优化特征提取器可以被看作是在生成对域分类不敏感的特征与对标签预测有用的特征之间寻找最佳平衡点。特征提取器的参数经过优化,以最小化标签预测器的损失并最大化域分类器的损失(涉及梯度反转层的使用)。

在生产中,我们将来自目标域的输入提供给特征提取器,特征提取器创建输入到标签预测器的特征以进行标签预测。没有使用域分类器,因此我们在部署模型时可以忽略图4中的粉色部分。

在训练过程中,DANN 采用了一种类似于 GAN(生成对抗网络)的策略。特征提取器和任务分类器被训练以最大化主任务的性能,而域分类器则被训练以区分不同域的特征。通过这种方式,模型能够学习到既对任务有用又对域具有泛化能力的特征。

DANN示例

让我们看几个例子。第一个示例如图 5 所示,其中包含由 scikit-learn Python 包中的 make_blobs 函数生成的合成数据。左边的数据是源数据,右边的数据是目标数据。 0 级为红色,1 级为绿色。

观察数据如何在源域和目标域之间转移。在每个域内,类可以线性分离,但这种转变使该模型的泛化变得非常复杂。

在这里插入图片描述

图 5. 我们的玩具问题的源数据和目标数据

请注意,我们仅使用源域中的标签进行训练,并且仅使用目标域中的标签来计算性能指标。由于训练过程中未使用目标域标签,因此它们在图 6 中呈灰色显示。

在这里插入图片描述

图 6. 我们的玩具问题的标签使用

传统的神经网络在源域上进行训练,然后在目标域上进行测试,其准确率达到 55%。但是,如果我们包含域分类器并使用 DANN 训练过程,则最终的目标域准确率将高达 95%,这证明了 DANN 过程的价值。

一个更真实的例子来自研究生院的自然语言处理 (NLP) 课程项目。其目标是确定来自 Android 论坛的问题对是否相似。不过,带有标记对的训练数据均来自 AskUbuntu 论坛。这个问题非常适合 DANN 架构和训练过程。

当不使用 DANN 训练过程时(即仅使用 AskUbuntu 论坛数据进行训练,然后在 Android 数据上测试模型),曲线下面积 (AUC) 为 0.61。当使用DANN框架及其训练过程时(训练中使用AskUbuntu数据输入和标签以及Android数据输入;不使用Android标签),AUC增加到0.69。当 Android 论坛数据中的少量标签被添加到 DANN 训练过程中时,AUC 增加到 0.76,这是一个很大的改进。

在现实世界中,我们可能没有用于计算指标的目标域的标签。由于我们不想在不计算样本外性能指标的情况下将模型投入生产,因此可以手动标记目标域中的少量数据以用于评估。

我们相信这样的方法可以集成到 ImageNet 或 ULMFiT 等训练模型中,这些模型经常用作预训练模型。使用DANN训练过程可能会生成更多具有领域不变性的模型,从而更好地适应特定的应用程序。

最近,DANN 架构的改进已经发布,我们建议感兴趣的读者探索生成对抗网络 (GAN) 的新发展。尽管如此,即使在最新的工作中,这里描述的对抗性训练过程仍然是 DA 的关键组成部分。

GPT示例

假设我们有一个图像识别任务,源域是室内照片,目标域是室外照片。在这种情况下,DANN 会试图学习在这两个域都有效的特征表示,同时减少由于场景差异(如光照、背景等)引起的性能下降。

为了更好地理解这个概念,我们可以生成一张示意图,展示 DANN 在处理室内和室外图像时的特征提取和分类过程。

在这里插入图片描述
这张图展示了Domain Adversarial Neural Network(DANN)在图像识别任务中的工作原理。您可以看到,图中描绘了两种不同的域:室内和室外场景。特征提取器位于中心,从室内和室外图像中提取特征。这些特征随后被分为两个不同的分类器:任务分类器和域分类器。任务分类器专注于识别图像中的对象,而域分类器则试图区分图像是属于室内还是室外场景。这种结构有助于模型在不同的环境中都能有效地识别和分类图像。

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

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

相关文章

【Spring Cloud】关于Nacos配置管理的详解介绍

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Spring Cloud》。🎯🎯 &am…

Linux学习记录——삼십유 传输层TCP协议(1)

文章目录 1、TCP协议报文1、报头和有效载荷的分离2、TCP可靠性3、序号和确认序号4、16位窗口大小5、6个标志位和紧急指针 2、TCP可靠性1、应答机制2、超时重传机制3、连接管理机制握手挥手 3、流量控制 1、TCP协议报文 UDP属于TCP/IP协议族。 1、报头和有效载荷的分离 从头…

Unity中Shader雾效在场景中的调节技巧

文章目录 前言一、修改棋盘格Shader的Cull可以在属性面板控制1、在属性面板定义CullMode2、在SubShader中,使用CullMode3、这样就可以在不同剔除情况下使用棋盘格场景了 二、调节天际线颜色和雾融为一体1、在摄像机设置不渲染天空盒,渲染单一颜色2、采样…

qt自定义控件的封装

刚学了一个很有意思的东西,前面学了list,Tree,Table三大控件和一部分常用基础控件,但感觉没啥意思,就是用别人的直接用,刚学了一个自定义控件的封装,流程如下: 想把两个不相关的组件封装在一块,直接用ui不行,所以先新添加了qt设计师页面,新添加了一个SmallWidget *ui 在smal…

一篇五分生信临床模型预测文章代码复现——Figure 10.机制及肿瘤免疫浸润(十)——Cibersort——完结

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

Mybatis-Plus的条件构造器QueryWrapper UpdateWrapper详解

文章目录 1. 引言2. Mybatis-Plus简介3. QueryWrapper3.1 基本用法3.2 动态条件拼接3.3 Lambda表达式的高级用法 4. UpdateWrapper4.1 基本用法4.2 动态条件拼接4.3 Lambda表达式的高级用法 5. 拓展功能与未来展望5.1 动态SQL的使用5.2 自定义条件构造器 6. 总结 🎉…

DQL命令查询数据(三)

本课目标 掌握MySQL的多表查询 SQL语句的综合应用 多表连接查询 通过各个表之间共同列的关联性(例如:外键)来查询的 分类: 内连接(INNER JOIN) ,可简写为 JOIN;左外连接(LEFT OUTER JOIN),…

VScode 画图插件

开源免费的插件 随着http://draw.io开源vs code插件之后,它一跃成为最强大的流程图工具。 目前http://draw.io支持3种文件后缀,你只需要新建3种后缀之一的文件就可以在vs code中画流程图,它们分别是: *.drawio*.dio*.drawio.sv…

docker部署simpleDocker

1,安装docker,请参考 linux安装docker 2,安装docker-compose,请参考 Docker-Compose 3,安装simpleDocker 准备docker-compose.yml文件 version: 3 services:redis:container_name: redisimage: redis:latestweb:conta…

7+非肿瘤+WGCNA+机器学习+诊断模型,构思巧妙且操作简单

今天给同学们分享一篇生信文章“Platelets-related signature based diagnostic model in rheumatoid arthritis using WGCNA and machine learning”,这篇文章发表在Front Immunol期刊上,影响因子为7.3。 结果解读: DEGs和血小板相关基因的…

Python笔记02-基础概念、数据类型及字符串格式化

文章目录 字面量注释变量数据类型标识符运算符字符串数据输入 字面量 在代码中,被写下来的固定的值,称之为字面量 Python中常用的有6种值(数据)的类型 如下变量被直接写在程序中,称之为字面量包括 数字和字符串类型 …

STL标准库与泛型编程(侯捷)笔记3

STL标准库与泛型编程(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youbute: 侯捷-STL标准库与泛型编程 B站: 侯捷 - STL Github:STL源码剖析中源码 https://github.com/SilverMaple/STLSourceCo…