基于matlab的fisher线性判别及感知器判别_Deep Domain Adaptation论文集(一):基于label迁移知识...

6bbfd0ebc834a191addd1e863c6ea94d.png

本系列简单梳理一下《Deep Visual Domain Adaptation: A Survey》这篇综述文章的内容,囊括了现在用深度网络做领域自适应DA(Domain Adaptation)的各个方面的一些文章。

原文链接:Deep Visual Domain Adaptation: A Survey


Class Criterion

类别准则:使用标签信息作为指导在不同领域之间迁移知识

  • Distilling the knowledge in a neural network

Hinton 2015年的工作,distilling knowledge是一个实用的trick,使用软标签soft label替代硬标签hard label将不同类别之间的关系保存。这种关系可以从源域迁移到目标域。

6fbb8ad5e2e961a575cbf6356f94e131.png
图片来自如何理解soft target这一做法? - YJango的回答 - 知乎https://www.zhihu.com/question/50519680/answer/136406661
  • Simultaneous deep transfer across domains and tasks.

源域有label,目标域有少量label。在普通的domain adaptation分类器与域判别器的基础上,再加一个soft label判别器,迁移源域中类别的关系信息。通过源域训练的分类器,对源域数据进行分类,得到不同类别之间的关系(比如一共三个类别,瓶子、水杯、键盘,那么如果水杯的概率是0.6,瓶子可能是0.3,键盘是0.1,由此看出水杯和瓶子联系更紧密)。所以对于目标域中的标签是水杯的数据,我们希望训练出来的 {水杯,瓶子,键盘} = {0.6, 0.3, 0.1} 而不是one-hot的 {1, 0, 0} ,这样视为将label之间的关系也进行了迁移,可以通过这些少数的目标域label对网络进行fine-tune。

45654ecac49d1da7e6f63412401a1fed.png
  • Fine-grained Recognition in the Wild: A Multi-Task Domain Adaptation Approach

源域有label,目标域有少量label。在上篇文章的基础上,将soft label判别器加入细粒度识别任务。细粒度识别就是比较精细的图像识别,比如识别的是不同品种的狗,不同牌子的汽车等。

c36a7f6e6b289fb61c26a8ea2bd3d3ba.png
  • Deep Transfer Metric Learning

源域有label,目标域无label。结合线性判别分析(LDA)和最大均值差异(MMD),将源域和目标域距离尽量近(MMD约束)的情况下,类内距离最小,类间距离最大(LDA约束)。

9aec0b0979f6223271c45b6e374efcd9.png
  • Unified Deep Supervised Domain Adaptation and Generalization

源域有label,目标域有少量label。。这篇文章在域判别的时候构造了语义对齐损失(即类内差距)和分离损失(即类间差距),用上了目标域label的信息。一般的DA方法,无法保证在特征空间里,不同domain里相同label的数据特征是一样的。即源域第一类数据特征可能经过映射后和目标域第二类一样。作者还利用了一些技巧,使得即使只有一个目标与域样本的情况下,也能对模型起到改善作用。

38312b8270726b596306384a0e5cf5f3.png
  • Learning To Detect Unseen Object Classes by Between-Class Attribute Transfer

源域有label,目标域无label也无数据。使用高层次的语义属性,识别没有见过的label。但是需要人工定义属性层,属于这方面开创性的工作。

e683ce27751833035f3490da6fc6deaf.png
  • Mind the Class Weight Bias: Weighted Maximum Mean Discrepancy for Unsupervised Domain Adaptation

提出了weighted MMD模型。源域有label,目标域无label,设计伪标签。考虑源域label的先验分布与目标域的不一样,设置pseudo-label,提出weighted MMD模型。利用CEM(classification EM algorithm)算法进行优化求解。主要的贡献有两个点:

第一,提出weighted MMD模型,将MMD度量改为如下形式:

其中,

是目标域和源域标签的先验信息,如果先验是一样的,则
,weighted MMD退化为MMD。

第二, 利用CEM算法进行求解,其实是本质是解一个非凸问题,所以要用类似EM算法的机制。首先E步,通过源域训练CNN求出目标域的后验概率

。然后C步,根据后验概率,给目标域打上pseudo-label,然后求出参数
。最后M步,根据参数
和源域目标域的数据以及pseudo-label和目标函数,更新网络参数。

819258dd3d6f82c51355773926da8d22.png
  • Asymmetric tri-training for unsupervised domain adaptation

源域有label,目标域无label,设计伪标签。设计三个网络,

用来分类源域和目标域的数据,目标域数据满足一定条件(阈值)才会有pseudo-label伪标签。第三个网络
用来调整特征提取网络
,使得打上的伪标签更可靠,并影响其他未被
打上伪标签的目标域数据的标签判别,希望更多的数据满足阈值被打上伪标签。

75f9c30cd3100fcc87256c215fafcfe2.png
  • Deep transfer network: Unsupervised domain adaptation

这篇文章提出了DTN方法。源域有label,目标域无label,设计伪标签。不同之处在于,假设条件分布

是不一样的。做法是先用一些基础的分类器,在源域上训练好,再给目标域打上pseudo-label伪标签。利用源域和目标域的数据和标签和伪标签,在MMD的准则下,对齐边缘分布
和条件分布

其中边缘分布MMD为:

条件分布MMD为:

但是要想计算

,则需要知道目标域的label,但是目标域是没有label的,所以刚开始需要一个基础的分类器如SVM、MLPs等给目标域打上pseudo label。然后基于pseudo label对齐条件分布MMD,然后再更新pseudo label,如此往复,直到达到迭代停止条件。

53906871ce342ab23594f98d4559bfc6.png
  • Unsupervised Domain Adaptation with Residual Transfer Networks

源域有label,目标域无label,设计伪标签。作者假设源域和目标域的条件分布也有差异,也就是特征空间里面同样的一个点

,可能对应不同的label,和上面的DTN是一样的假设,但是做法不一样。该文章认为条件分布不一样是由一个扰动函数
导致的,但是可以通过两层残差项(residual block)联系起来。

a798edd8213e35544ac2d19af15ec3b6.png

如有错误,欢迎交流指正。^_^

转载请注明出处!!^_^

知乎:种豆南山下

个人学术主页:

About me​www.caokai.site
4125fa321acd7773eaa0da074bfbc7f6.png

Domain Adaptation系列文章:

种豆南山下: 迁移学习: 领域自适应(Domain Adaptation)的理论分析

种豆南山下: Domain Adaptation:不用深度网络,如何处理源域和目标域异构问题?

种豆南山下: Deep Domain Adaptation论文集(一):基于label迁移知识

种豆南山下: Deep Domain Adaptation论文集(二):基于统计差异

种豆南山下: Deep Domain Adaptation论文集(三):基于深度网络结构差异&几何差异

种豆南山下: Deep Domain Adaptation论文集(四):基于生成对抗网络GAN

种豆南山下: Deep Domain Adaptation论文集(五):基于数据重构的迁移方法

种豆南山下: Deep Domain Adaptation论文集(六):源域与目标域特征空间不一致的处理方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于基于DSAN的域自适应回归迁移学习,在PyTorch中的实现可以按照以下步骤进行: 1. 导入必要的库: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader ``` 2. 定义DSAN模型的网络结构: ```python class DSAN(nn.Module): def __init__(self): super(DSAN, self).__init__() # 定义你的网络结构 # ... def forward(self, x): # 定义前向传播过程 # ... return outputs ``` 3. 定义域自适应损失函数(根据DSAN的具体损失函数设计): ```python class DomainAdaptationLoss(nn.Module): def __init__(self): super(DomainAdaptationLoss, self).__init__() # 定义你的损失函数 def forward(self, source_outputs, target_outputs): # 计算源域和目标域的损失 # ... return loss ``` 4. 定义训练循环: ```python def train(model, source_dataloader, target_dataloader, optimizer, criterion, device): model.train() for epoch in range(num_epochs): for i, (source_data, target_data) in enumerate(zip(source_dataloader, target_dataloader)): source_inputs, source_labels = source_data target_inputs, _ = target_data source_inputs = source_inputs.to(device) source_labels = source_labels.to(device) target_inputs = target_inputs.to(device) optimizer.zero_grad() source_outputs = model(source_inputs) target_outputs = model(target_inputs) loss = criterion(source_outputs, source_labels, target_outputs) loss.backward() optimizer.step() if (i+1) % print_every == 0: print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}' .format(epoch+1, num_epochs, i+1, total_steps, loss.item())) ``` 5. 加载数据集并进行域自适应回归迁移学习: ```python source_dataset = ... target_dataset = ... source_dataloader = DataLoader(source_dataset, batch_size=batch_size, shuffle=True) target_dataloader = DataLoader(target_dataset, batch_size=batch_size, shuffle=True) model = DSAN().to(device) optimizer = optim.Adam(model.parameters(), lr=learning_rate) criterion = DomainAdaptationLoss() train(model, source_dataloader, target_dataloader, optimizer, criterion, device) ``` 请注意,上述代码中的一些细节需要根据你的具体情况进行修改,例如网络结构、损失函数和数据集的加载方式等。此外,还需要根据具体需求进行超参数的设置。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值