域对抗(域适应)训练

article/2025/11/8 16:11:22

1. 引入

在传统监督学习中,我们经常需要大量带标签的数据进行训练,并且需要保证训练集和测试集中的数据分布相似。如果训练集和测试集的数据具有不同的分布,训练后的分类器在测试集上就没有好的表现。这种情况下该怎么办呢?

域适应(Domain Adaption),也可称为域对抗(Domain Adversarial),是迁移学习中一个重要的分支,用以消除不同域之间的特征分布差异。其目的是把具有不同分布的源域(Source Domain) 和目标域 (Target Domain) 中的数据,映射到同一个特征空间,寻找某一种度量准则,使其在这个空间上的“距离”尽可能近。然后,我们在源域 (带标签) 上训练好的分类器,就可以直接用于目标域数据的分类。

如上图所示,图a为源域样本分布(带标签),图b为目标域样本分布,它们具有共同的特征空间和标签空间,但源域和目标域通常具有不同的分布,这就意味着我们无法将源域训练好的分类器,直接用于目标域样本的分类。因此,在域适应问题中,我们尝试对两个域中的数据做一个映射,使得属于同一类(标签)的样本聚在一起。此时,我们就可以利用带标签的源域数据,训练分类器供目标域样本使用。

2. DANN简介(Domain-Adversarial Neural Networks)

 Domain adaptation 过程中最关键的一点就是如何做到将源域样本和目标域样本混合在一起,并且还能保证被同时分开,DANN的主要任务之一就是这个。

如上图所示,DANN结构主要包含3个部分:

  • 特征提取器 (feature extractor) - 图示绿色部分:1)将源域样本和目标域样本进行映射和混合,使域判别器无法区分数据来自哪个域;2)提取后续网络完成任务所需要的特征,使标签预测器能够分辨出来自源域数据的类别
  • 标签预测器 (label predictor) - 图示蓝色部分:对来自源域的数据进行分类,尽可能分出正确的标签。
  • 域判别器(domain classifier)- 图示红色部分:对特征空间的数据进行分类,尽可能分出数据来自哪个域。

2.1 DANN整体流程

特征提取器提取的信息会传入域分类器,之后域分类器会判断传入的信息到底是来自源域还是目标域,并计算损失。域分类器的训练目标是尽量将输入的信息分到正确的域类别(源域还是目标域),而特征提取器的训练目标却恰恰相反(由于梯度反转层的存在),特征提取器所提取的特征(或者说映射的结果)目的是是域判别器不能正确的判断出信息来自哪一个域,因此形成一种对抗关系。

特征提取器提取的信息也会传入Label predictor (类别预测器)了,因为源域样本是有标记的,所以在提取特征时不仅仅要考虑后面的域判别器的情况,还要利用源域的带标记样本进行有监督训练从而兼顾分类的准确性。

 2.2 梯度反转层(Gradient reversal layer)

在反向传播更新参数的过程中,梯度下降是最小化目标函数,而特征提取器任务是最大化label分类准确率但最小化域分类准确率,因此要最大化域判别器目标函数。因此,在域分类器和特征提取器中间有一个梯度反转层(Gradient reversal layer),在粉色部分的参数向Ld减小的方向优化,绿色部分的梯度向Ld增大的方向优化,用一个网络一个优化器就实现了两部分有不一样的优化目标,形成对抗的关系。

具体的:GRL就是将传到本层的误差乘以一个负数(-\lambda),这样就会使得GRL前后的网络其训练目标相反,以实现对抗的效果。

 PyTorch代码实现:

import torch
from torch.autograd import Functionclass GRL(Function):def __init__(self,lambda_):super(GRL, self).__init__()self.lambda_=lambda_def forward(self, input):return inputdef backward(self, grad_output):grad_input = grad_output.neg()return grad_input*self.lambda_x = torch.tensor([1., 2., 3.], requires_grad=True)
y = torch.tensor([4., 5., 6.], requires_grad=True)z = torch.pow(x, 2) + torch.pow(y, 2)
f = z + x + yGrl = GRL(lambda_=1)
s = 6 * f.sum()
s = Grl(s)print(s)
s.backward()
print(x.grad)
print(y.grad)

结果:

tensor(672., grad_fn=<GRL>)
tensor([-18., -30., -42.])
tensor([-54., -66., -78.])

这个运算过程对于tensor中的每个维度上的运算为:

f(x)=(x^{2}+x)*6

那么对于x的导数为:

\frac{\mathrm{d} f}{\mathrm{d} x} = 12x+6

所以当输入x=[1,2,3]时,原本对应的梯度为:[18,30,42],由于GRL存在,梯度为:[-18,-30,-42]

2.3 损失计算

在训练的过程中,对来自源域的带标签数据,网络不断最小化标签预测器的损失 (loss)。对来自源域和目标域的全部数据,网络不断最小化域判别器的损失。

以单隐层为例,对于特征提取器就是一层简单的神经元(复杂任务中就是用多层):

对于类别预测器:

Loss: 

因此在源域上,训练优化目标就是:

 对于域分类器:

 

 Loss: 

 训练优化目标是:

总体的损失函数是:

 其中,迭代过程,通过最小化目标函数来更新标签预测器的参数,最大化目标函数来更新域判别器的参数。

 

3. 与GAN对比

生成对抗网络包含一个生成器(Generator)和一个判别器(Discriminator)。生成器用来生成假图片,判别器则用来区分,输入的图片是真图片还是假图片。生成器希望生成的图片可以骗过判别器(以假乱真),而判别器则希望提高辨别能力防止被骗。两者互相博弈,直到系统达到一个稳定状态(纳什平衡)。

在域适应问题中, 存在一个源域和目标域。和生成对抗网络相比,域适应问题免去了生成样本的过程,直接将目标域中的数据看作生成的样本。因此,生成器的目的发生了变化,不再是生成样本,而是扮演了一个特征提取(feature extractor)的功能。

Reference:

【1】论文 Domain-Adversarial Training of Neural Networks  15-239.pdf (jmlr.org)

【2】基于对抗的迁移学习方法: DANN域对抗网络 - 知乎 (zhihu.com)

【3】<EYD与机器学习>迁移学习:DANN域对抗迁移网络 - 知乎 (zhihu.com)

【4】(24条消息) pytorch 实现 GRL Gradient Reversal Layer_t20134297的博客-CSDN博客


http://chatgpt.dhexx.cn/article/2i5lMixu.shtml

相关文章

DFN

1.视频教程&#xff1a; B站、网易云课堂、腾讯课堂 2.代码地址&#xff1a; Gitee Github 3.存储地址&#xff1a; Google云 百度云&#xff1a; 提取码&#xff1a; DFN-Tensorflow版本 解释一下BorderNetWork是如何起作用的&#xff0c;是如何进行融合的&#xff0c;有问题&…

DANN:Unsupervised Domain Adaptation by Backpropagation

本篇是迁移学习专栏介绍的第十三篇论文&#xff0c;发表在ICML15上。论文提出了用对抗的思想进行domain adaptation&#xff0c;该方法名叫DANN(或RevGrad)。核心的问题是同时学习分类器 、特征提取器 、以及领域判别器 。通过最小化分类器误差&#xff0c;最大化判别器误差…

【深度域适配】二、利用DANN实现MNIST和MNIST-M数据集迁移训练

知乎专栏链接&#xff1a;https://zhuanlan.zhihu.com/p/109057360 CSDN链接&#xff1a;https://daipuweiai.blog.csdn.net/article/details/104495520 前言 在前一篇文章【深度域适配】一、DANN与梯度反转层&#xff08;GRL&#xff09;详解中&#xff0c;我们主要讲解了DANN…

基于DANN的图像分类任务迁移学习

注:本博客的数据和任务来自NTU-ML2020作业&#xff0c;Kaggle网址为Kaggle. 数据预处理 我们要进行迁移学习的对象是10000张32x32x3的有标签正常照片&#xff0c;共有10类&#xff0c;和另外100000张人类画的手绘图&#xff0c;28x28x1黑白照片&#xff0c;类别也是10类但无标…

【ICML 2015迁移学习论文阅读】Unsupervised Domain Adaptation by Backpropagation (DANN) 无监督领域自适应

会议&#xff1a;ICML 2015 论文题目&#xff1a;Unsupervised Domain Adaptation by Backpropagation 论文地址&#xff1a;http://proceedings.mlr.press/v37/ganin15.pdf 论文代码&#xff1a;https://github.com/fungtion/DANN 问题描述&#xff1a;深度学习的模型在source…

【深度域自适应】二、利用DANN实现MNIST和MNIST-M数据集迁移训练

前言 在前一篇文章【深度域自适应】一、DANN与梯度反转层&#xff08;GRL&#xff09;详解中&#xff0c;我们主要讲解了DANN的网络架构与梯度反转层&#xff08;GRL&#xff09;的基本原理&#xff0c;接下来这篇文章中我们将主要复现DANN论文Unsupervised Domain Adaptation…

【深度域适配】一、DANN与梯度反转层(GRL)详解

CSDN博客原文链接&#xff1a;https://blog.csdn.net/qq_30091945/article/details/104478550 知乎专栏原文链接&#xff1a;https://zhuanlan.zhihu.com/p/109051269 前言 在当前人工智能的如火如荼在各行各业得到广泛应用&#xff0c;尤其是人工智能也因此从各个方面影响当前…

【ICML 2015迁移学习论文阅读】Unsupervised Domain Adaptation by Backpropagation (DANN) 反向传播的无监督领域自适应

会议&#xff1a;ICML 2015 论文题目&#xff1a;Unsupervised Domain Adaptation by Backpropagation 论文地址&#xff1a; http://proceedings.mlr.press/v37/ganin15.pdf 论文代码&#xff1a; GitHub - fungtion/DANN: pytorch implementation of Domain-Adversarial Trai…

Domain Adaptation(领域自适应,MMD,DANN)

Domain Adaptation 现有深度学习模型都不具有普适性&#xff0c;即在某个数据集上训练的结果只能在某个领域中有效&#xff0c;而很难迁移到其他的场景中&#xff0c;因此出现了迁移学习这一领域。其目标就是将原数据域&#xff08;源域&#xff0c;source domain&#xff09;尽…

【迁移学习】深度域自适应网络DANN模型

DANN Domain-Adversarial Training of Neural Networks in Tensorflow域适配&#xff1a;目标域与源域的数据分布不同但任务相同下的迁移学习。 模型建立 DANN假设有两种数据分布&#xff1a;源域数据分布 S ( x , y ) \mathcal{S}(x,y) S(x,y)和目标域数据分布 T ( x , y ) …

【深度域自适应】一、DANN与梯度反转层(GRL)详解

前言 在当前人工智能的如火如荼在各行各业得到广泛应用&#xff0c;尤其是人工智能也因此从各个方面影响当前人们的衣食住行等日常生活。这背后的原因都是因为如CNN、RNN、LSTM和GAN等各种深度神经网络的强大性能&#xff0c;在各个应用场景中解决了各种难题。 在各个领域尤其…

Domain-Adversarial Training of Neural Networks

本篇是迁移学习专栏介绍的第十八篇论文&#xff0c;发表在JMLR2016上。 Abstrac 提出了一种新的领域适应表示学习方法&#xff0c;即训练和测试时的数据来自相似但不同的分布。我们的方法直接受到域适应理论的启发&#xff0c;该理论认为&#xff0c;要实现有效的域转移&#…

DANN:Domain-Adversarial Training of Neural Networks

DANN原理理解 DANN中源域和目标域经过相同的映射来实现对齐。 DANN的目标函数分为两部分&#xff1a; 1. 源域分类损失项 2. 源域和目标域域分类损失项 1.源域分类损失项 对于一个m维的数据点X&#xff0c;通过一个隐含层Gf&#xff0c;数据点变为D维&#xff1a; 然后经…

DaNN详解

1.摘要 本文提出了一个简单的神经网络模型来处理目标识别中的域适应问题。该模型将最大均值差异(MMD)度量作为监督学习中的正则化来减少源域和目标域之间的分布差异。从实验中,本文证明了MMD正则化是一种有效的工具,可以为特定图像数据集的SURF特征建立良好的域适应模型。本…

[Tensorflow2] 梯度反转层(GRL)与域对抗训练神经网络(DANN)的实现

文章目录 概述原理回顾 (可跳过)GRL 层实现使用 GRL 的域对抗(DANN)模型实现DANN 的使用案例 !!!后记 概述 域对抗训练&#xff08;Domain-Adversarial Training of Neural Networks&#xff0c;DANN&#xff09;属于广义迁移学习的一种, 可以矫正另一个域的数据集的分布, 也可…

DANN 领域迁移

DANN&#xff08;Domain Adaptation Neural Network&#xff0c;域适应神经网络&#xff09;是一种常用的迁移学习方法&#xff0c;在不同数据集之间进行知识迁移。本教程将介绍如何使用DANN算法实现在MNIST和MNIST-M数据集之间进行迁移学习。 首先&#xff0c;我们需要了解两个…

DANN-经典论文概念及源码梳理

没错&#xff0c;我就是那个为了勋章不择手段的屑&#xff08;手动狗头&#xff09;。快乐的假期结束了哭哭... DANN 对抗迁移学习 域适应Domain Adaption-迁移学习&#xff1b;把具有不同分布的源域&#xff08;Source Domain&#xff09;和目标域&#xff08;Target Domain…

EHCache 单独使用

参考&#xff1a; http://macrochen.blogdriver.com/macrochen/869480.html 1. EHCache 的特点&#xff0c;是一个纯Java ,过程中&#xff08;也可以理解成插入式&#xff09;缓存实现&#xff0c;单独安装Ehcache &#xff0c;需把ehcache-X.X.jar 和相关类库方到classpath中…

ehcache 的使用

http://my.oschina.net/chengjiansunboy/blog/70974 在开发高并发量&#xff0c;高性能的网站应用系统时&#xff0c;缓存Cache起到了非常重要的作用。本文主要介绍EHCache的使用&#xff0c;以及使用EHCache的实践经验。 笔者使用过多种基于Java的开源Cache组件&#xff0c;其…

Ehcache 的简单使用

文章目录 Ehcache 的简单使用背景使用版本配置配置项编程式配置XML 配置自定义监听器 验证示例代码 改进代码 备注完整示例代码官方文档 Ehcache 的简单使用 背景 当一个JavaEE-Java Enterprise Edition应用想要对热数据(经常被访问&#xff0c;很少被修改的数据)进行缓存时&…