热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

迁移学习论文(五):LearningSemanticRepresentationsforUnsupervisedDomainAdaptation论文原理及复现工作

目录前言原理阐述文章介绍模型结构模型总述超参数设置总结前言本文属于我迁移学习专栏里的一篇,该专栏用于记录本人研究生阶段相关迁移学习论文的原理阐述以及复现工作。本专栏

目录

  • 前言
  • 原理阐述
    • 文章介绍
    • 模型结构
      • 模型总述
    • 超参数设置
  • 总结


前言
  • 本文属于我迁移学习专栏里的一篇,该专栏用于记录本人研究生阶段相关迁移学习论文的原理阐述以及复现工作。
  • 本专栏的文章主要内容为解释原理,论文具体的翻译及复现代码在文章的github中。

原理阐述

文章介绍


  • 这篇文章于2018年发表在ICML会议,作者是Shaoan Xie、Zibin Zheng、Liang Chen、Chuan Chen。
  • 这篇文章解决的主要问题是如何利用伪标签来进行域适应。之前的方法都忽略了样本的语义信息,比如之前的算法可能将目标域的背包映射到源域的小汽车附近。 这篇文章最要的贡献就是提出了 moving semantic transfer network 这个网络,简称mstn,其主要是通过对齐源域(有标签)和 目标域(伪标签,网络预测一个标签)相同类别的中心,以学习到样本的语义信息。

模型结构


  • 模型是这样的:
    在这里插入图片描述

模型总述


  • 上述模型的G特征提取器和F标签分类器以及D域分类器与DANN中的特征提取器、标签分类器和全局域分类器是一样的,这里不展开研究了。
  • 这个论文有价值的地方在于使用了伪标签,提出了semantic transfer loss,这个论文中的方法其实我也有考虑到过,我是受了DAAN的启发,但DAAN应该是受了该文的启发,因为DAAN是2019年发表的。DAAN中的局部域分类器也是将样本的每个类单独分开计算损失,但是DAAN计算的是域分类损失,而MSTN考虑的是MSE,因为相同类别经过特征提取之后的特征应当是相近的,这对应域适应中的条件概率损失。
  • 但是MSTN考虑到了两个问题,1.每次抽取样本可能会使得某些类别没有抽取到样本,那么就无从计算MSE。2.伪标签可能是不准确的,这样可能导致相反的效果,比如使一个书包的特征和一个汽车的特征进行对齐。
  • MSTN的解决办法非常有意思:
    在这里插入图片描述
    对每个类维护一个全局特征CTk或者CSkC^k_{T}或者C^k_{S}CTkCSk,每次使用CTk或者CSkC^k_{T}或者C^k_{S}CTkCSk来计算损失,CTk或者CSkC^k_{T}或者C^k_{S}CTkCSk的计算同时考虑当前的CTk或者CSkC^k_{T}或者C^k_{S}CTkCSk和本次根据样本生成的平均特征。所以就算本次抽取样本中没有某一类的样本,也可以根据该类上一次的CTk或者CSkC^k_{T}或者C^k_{S}CTkCSk来计算,同时假如有错误的伪标签也因为占比不大所以影响不大。
  • 其实MSTN这种解决办法也是尽可能的削弱错误影响,并没有根本上解决这些问题。

超参数设置


  • 学习率采用衰减,
    在这里插入图片描述
    p是迭代次数占总的比例,学习率每次迭代更新一次,

def train(epoch, model, sourceDataLoader, targetDataLoader,DEVICE,args):learningRate=args.lr/math.pow((1+10*(epoch-1)/args.epoch),0.75)

  • 损失函数在这里插入图片描述
    三项分别是标签分类损失,域分类损失,semantic transfer loss,其中γ=λγ=λγ=λ,λ遵循下面的公式:
    在这里插入图片描述
    里面的上图的γ可不是损失函数中的γ,上图的p设置为当前batchid占总的比例,如下代码所示:

lenSourceDataLoader = len(sourceDataLoader)for batch_idx, (sourceData, sourceLabel) in tqdm.tqdm(enumerate(sourceDataLoader),total=lenSourceDataLoader,desc='Train epoch {}'.format(epoch),ncols=80,leave=False):p = float(batch_idx + 1 + epoch * lenSourceDataLoader) / args.epoch / lenSourceDataLoaderalpha = 2. / (1. + np.exp(-10 * p)) - 1

  • CNN 采用的是AlexNet作为基本结构,fc7后面接了一个bottleneck layer(瓶颈层,主要作用是降维)。
  • 鉴别器,我们采用的是RevGard相同的结构:x-》1024-》1024-》2
  • 超参数的设置:θ = 0.7。

总结
  • 该文总体来说提供了一种思路,但是我觉得伪标签的问题其实并没有办法真正解决,会限制该类模型的上限并不会很高。

推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
author-avatar
生活趣图分享
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有