Unsupervised Domain Adaptation by Backpropagation

Ganin Y. and Lempitsky V. Unsupervised Domain Adaptation by Backpropagation. ICML 2015.

监督学习非常依赖标签数据, 但是获得大量的标签数据在现实中是代价昂贵的一件事情, 这也是为何半监督和无监督重要的原因.
本文提出一种利用GRL来进行domain adaptation的方法, 感觉本文的创新点还是更加偏重于结构一点.

主要内容

image-20210214090228048

接下来的叙述的方式可能和原文的有一点点的出入.

首先整个网络的框架包括一个用于提取特征的Gf, 可见其是共享的, 提取的到的特征会分别进入上下两个Gc,Gd.
其中, Gc 是普通的分类器, 当然这要求最开始的输入我们是有对应的标签的, Gf+Gc也就是我们最后所需要的整个网络.
Gd的最后是一个二分类器, 用于区别输入的样本是来自有标签的数据集还是目标数据集.

我们来看一下损失

i=1N,di=0Lyi(θf,θc)+λi=1NLdi(θf,θd)

首先关于Gf,Gc最小化Ly, 关于Gd则是最小化Ld, 同时关于Gf最大化Ld.

直观上讲就是, 我们要求Gf提取的特征使得分类器能够区分出输入的类别, 而下半部分则是一种对抗的思想, Gf提取的特征希望Gd不能够区别出输入来自有标签的域还是目标域, 对应的Gd是努力去区别开来.

为了实现这一点, 本文利用了一种GRL的技术, 即梯度从Gd回传到Gf的时候会变换梯度的方向.

代码

import torch
from torch.autograd import Function

class RevGrad(Function):

    @staticmethod
    def forward(ctx, inputs):
        return inputs

    @staticmethod
    def backward(ctx, grad_outputs):
        return grad_outputs.neg()

posted @   馒头and花卷  阅读(361)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示