【转载】自监督学习详细介绍(学习笔记)

2023-10-27

原文链接 https://blog.csdn.net/Cloris_Sue/article/details/105343762

一、相关文献:

fast.ai上面关于自监督学习的资料:Self-supervised learning and computer vision.
GitHub上面每年使用自监督学习的论文列表:Awesome Self-Supervised Learning.
相关微信推送

二、自监督学习的介绍

1.自监督学习的由来

机器学习中基本的学习方法有:监督学习(supervised learning)、半监督学习(semi-supervised learning)和无监督学习(unsupervised learning)。他们最大的区别就是模型在训练时需要人工标注的标签信息,监督学习利用大量的标注数据来训练模型,使模型最终学习到输入和输出标签之间的相关性;半监督学习利用少量有标签的数据和大量无标签的数据来训练网络;而无监督学习不依赖任何标签值,通过对数据内在特征的挖掘,找到样本间的关系,比如聚类。
使用监督学习时我们需要足够的标记数据。为了获得这些信息,需要手工标记数据(图像/文本),这是一个既耗时又昂贵的过程。还有一些领域,比如医疗领域,获取足够的数据本身就是一个挑战。而在使用无监督学习的时候,例如自编码器,仅仅是做了维度的降低而已,并没有包含更多的语义特征,对下游任务并没有很大的帮助。
因此我们想要在不需要手工标记数据的情况下,训练过程还能对任务本身有很大的帮助,可以包含更多的语义特征,自监督学习因此被提出。

2.自监督学习的定义

自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。
也就是说,自监督学习不需要任何的外部标记数据,这些标签是从输入数据自身中得到的。自监督学习的模式仍然是Pretrain-Fintune的模式,即先在pretext上进行预训练,然后将学习到的参数迁移到下游任务网络中,进行微调得到最终的网络。

3.自监督学习的pretext

在计算机视觉中使用自监督学习最需要回答的问题是:“你应该使用什么pretext?”其实你有很多选择。下面是其中的一些,以及描述它们的论文,在每个部分都有一篇论文的图片展示了这种方法。

3.1图像旋转

论文:Unsupervised Representation Learning by Predicting Image Rotations (ICLR18),如图,文章提出,通过训练ConvNets来识别输入图像的2D旋转来学习图像特征。在质量和数量上证明了这个看似简单的任务,实际上为语义特征学习提供了非常强大的监督信号。其生成的标签为人为旋转图片后得到的数据。在这里插入图片描述

3.2图像着色

论文:Colorful Image Colorization|Real-Time User-Guided Image Colorization with Learned Deep Priors。使用图像灰度化来作为图像的输入数据,对应的彩色图像为标签数据训练网络。为了解决这个问题,模型必须了解图像中出现的不同物体和相关部分,这样它才能用相同的颜色绘制这些部分。因此对下游任务提供了帮助。
在这里插入图片描述

3.3图像修复

论文:Context encoders: Feature learning by inpainting。我们可以通过随机去掉图像中的某个部分来生成训练数据,原数据作为训练标签来进行预训练,对于下游任务,Pathak等人表明,在PASCAL VOC 2012语义分割的比赛上,生成器学到的语义特征相比随机初始化有10.2%的提升,对于分类和物体检测有<4%的提升。
在这里插入图片描述
上面只是举例介绍了一下自我监督的pretext有哪些,还有很多工作,大家可以去GitHub论文列表中查找相应的论文。

4.自监督学习的主要方法

自监督学习的方法主要可以分为 3 类:1. 基于上下文(Context based) 2. 基于时序(Temporal Based)3. 基于对比(Contrastive Based)

4.1基于上下文(Context Based)

基于数据本身的上下文信息,我们其实可以构造很多任务,比如在 NLP 领域中最重要的算法 Word2vec 。Word2vec 主要是利用语句的顺序,例如 CBOW 通过前后的词来预测中间的词,而 Skip-Gram 通过中间的词来预测前后的词。
而在图像中,图像拼图(将图像分割,预测每一部分的相对位置或者预测出这是哪一种打乱方式)、图像修复(上述例子中提到)、图像着色(上述例子中提到)、图像旋转(上述例子中提到)等任务都是典型的作为pretext的例子。
比较特殊的最近的任务还有两种:一种是自监督学习和具体任务紧密结合的方法(Task Related Self-Supervised Learning)Boosting Few-Shot Visual Learning with Self-Supervision_ICCV2019),另一种是自监督和半监督学习进行结合(SL: Self-Supervised Semi-Supervised Learning_ICCV2019)。

4.2基于时序(Temporal Based)

之前介绍的方法大多是基于样本自身的信息,比如旋转、色彩、裁剪等。而样本间其实也是具有很多约束关系的,这里我们来介绍利用时序约束来进行自监督学习的方法。最能体现时序的数据类型就是视频了(video)。
第一种思想是基于帧的相似性Time-Contrastive Networks: Self-Supervised Learning from Video,对于视频中的每一帧,其实存在着特征相似的概念,简单来说我们可以认为视频中的相邻帧特征是相似的,而相隔较远的视频帧是不相似的,通过构建这种相似(position)和不相似(negative)的样本来进行自监督约束。
另外,对于同一个物体的拍摄是可能存在多个视角(multi-view),对于多个视角中的同一帧,可以认为特征是相似的,对于不同帧可以认为是不相似的。
还有一种想法是来自 ICCV 2015 Unsupervised Learning of Visual Representations Using Videos.的基于无监督追踪方法,首先在大量的无标签视频中进行无监督追踪,获取大量的物体追踪框。那么对于一个物体追踪框在不同帧的特征应该是相似的(positive),而对于不同物体的追踪框中的特征应该是不相似的(negative)。
除了基于特征相似性外,视频的先后顺序也是一种自监督信息。比如ECCV 2016, Misra, I. Shuffle and Learn:unsupervised learning using temporal order verification等人提出基于顺序约束的方法,可以从视频中采样出正确的视频序列和不正确的视频序列,构造成正负样本对然后进行训练。简而言之,就是设计一个模型,来判断当前的视频序列是否是正确的顺序。

4.3基于对比(Contrastive Based)

相关资料:https://ankeshanand.com/blog/2020/01/26/contrative-self-supervised-learning.html
对比约束,它通过学习对两个事物的相似或不相似进行编码来构建表征,这类方法的性能目前来说是非常强的,主要思想是通过构建正样本(positive)和负样本(negative),然后度量正负样本的距离来实现自监督学习,即样本和正样本之间的距离远远大于样本和负样本之间的距离,可以使用点积的方式构造距离函数,然后构造一个 softmax 分类器,以正确分类正样本和负样本。这应该鼓励相似性度量函数(点积)将较大的值分配给正例,将较小的值分配给负例:
在这里插入图片描述
通常这个损失也被称为 InfoNCE,后面的所有工作也基本是围绕这个损失进行的。

三、选择一个pretext

选择的任务必须是这样的,如果解决了这个任务,就需要了解数据,这也是解决下游任务所需要的,也就是说下游任务和pretext要有一定的相关性。例如,科研学者经常使用一种叫做自动编码器的pretext。这是一个模型,它可以将一个输入图像转换成一个大大简化的形式(使用瓶颈层),然后将其转换回尽可能接近原始图像的内容。它有效地利用压缩作为借口任务。然而,解决这个问题不仅需要重新生成原始图像的内容,还需要重新生成原始图像中的任何噪声。因此,如果您的下游任务是您想要生成更高质量的图像,那么这将是一个糟糕的借口任务的选择。你也应该确保这个借口任务是一个人可以做的事情。例如,您可以将生成未来视频帧的问题作为借口任务。但是如果你试图生成的框架在未来太远了,那么它可能是一个完全不同的场景的一部分,以至于没有任何模型能够自动生成它。

四、对下游任务进行微调

一旦利用一个pretext预训练了模型,就可以进行微调了。在这一点上,应该把这当作一个迁移学习的问题,因此应该小心不要伤害预先训练的weight。参考ULMFiT论文中讨论的内容,例如逐步解冻、有区别的学习率和单周期训练。
总的来说,我建议不要花太多时间来创建完美的pretext,而应该尽可能地快速、简单地构建所能构建的任何东西。然后你就可以知道它是否适合你的下游任务。通常情况下并不需要一个特别复杂的pretext来完成下游任务。因此很容易在设计pretext上浪费时间。

五、Consistency loss

在自监督训练的基础上,可以增加一个非常有用的技巧,这在NLP中被称为“一致性损失(Consistency loss)”,在计算机视觉中被称为“噪声对比估计(noise contrastive estimation)”。基本思想是这样的:pretext是一些混乱原数据的事情,比如模糊部分,旋转,移动补丁,或者(在NLP中)改变单词位置或者把一个句子翻译成外语然后再翻译回来。在每种情况下,都希望原始项和“混乱”项在pretext中给出相同的预测,并在中间表示中创建相同的特性。并且也希望同样的东西,当以两种不同的方式“混乱”时(例如,一个图像旋转了两个不同的量),也应该有相同的一致表示。
因此,我们在loss函数中添加了一些内容,以惩罚为相同数据的不同版本获取不同的答案。这是一幅图片,来自谷歌的文章,提出了 Advancing Semi-supervised Learning with Unsupervised Data Augmentation
在这里插入图片描述
说这是“有效的”将是一个巨大的轻描淡写…例如,在上述文章中讨论的方法完全打破了我们之前的状态,他们使用的标签数据比我们少1000倍!
Facebook人工智能最近发表了两篇论文,在计算机视觉环境中使用了这一想法:Self-Supervised Learning of Pretext-Invariant Representations and Momentum Contrast for Unsupervised Visual Representation Learning。就像NLP中的谷歌论文一样,这些方法超越了以前最先进的方法,并且需要更少的数据。

六、扩展阅读

Self-supervised Visual Feature Learning with Deep Neural Networks: A Survey
Revisiting Self-Supervised Visual Representation Learning
Self-Supervised Representation Learning

                                </div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【转载】自监督学习详细介绍(学习笔记) 的相关文章

  • 系统架构设计师-软件架构设计(1)

    目录 一 软件架构的概念 1 架构的本质 2 架构的作用 二 架构发展历史 三 架构的 4 1 视图 1 逻辑视图 Logical View 2 开发视图 Development View 3 进程视图 Process View 4 物理视
  • 2023年26家大厂Java面试题整理了360道(分布式+微服务+高并发)

    前言 2023年的金三银四还有不到1个月的时间就结束了 这两个月 你收获了多少 前段时间一直有粉丝问我 有没有今年一些大厂Java面试题总结 最新抽时间整理了一些 分享给大家 大家一起共享学习 由于文章太长 有些解析没有详细列出 文末有获取
  • C++的STL库常用API--list

    list的简介 list是一个双向链表容器 可高效地进行插入删除元素 list不可以随机存取元素 所以不支持at pos 函数与 操作符 list使用之前的准备 include
  • Android 代码混淆

    Android混淆最佳实践 1 混淆配置 因为开启混淆会使编译时间变长 所以debug模式下不开启 我们需要做的是 1 将release下minifyEnabled的值改为true 打开混淆 2 加上shrinkResources true
  • 机器学习——LR(线性回归)、LRC(线性回归分类)与人脸识别

    忆如完整项目 代码详见github https github com yiru1225 转载标明出处 勿白嫖 star for projects thanks 目录 系列文章目录 一 LR的概念 原理与LR用于简单数据的预测 1 LR简介

随机推荐

  • oracle杂记---运维常用

    查看索引是否被使用 绝不妥协绝不低头 博客园 ORACLE 动态执行SQL语句 Eric Zhai ITeye博客
  • 程序猿关注的微信公众号和网站

    36氪 wow36kr 功能介绍 36氪 36Kr com 是中国领先的科技新媒体 我们报道最新的互联网科技新闻以及最有潜力的互联网创业企业 账号主体 北京协力筑成传媒科技有限公司 商标保护 氪 36 硅发布 guifabucom 功能介绍
  • ios 浏览器can't find variable:wx完美解决

    问题描述 通过以下插件发现报错 can t find variable wx ios 浏览器 wx config debug false appId appId timestamp timestamp nonceStr nonceStr s
  • 虚拟机基于寄存器基于栈的概念和区别

    基于寄存器与基于栈的虚拟机 什么是虚拟机 虚拟机是借助于操作系统对物理机器的一种模拟 但是我们今天所讲述的虚拟机概念比较狭义 与vmware或者virtual box不同 而是针对具体语言所实现的虚拟机 例如在JVM或者CPython中 J
  • HTML+CSS+JS实现简单计算器

    本文运用前端代码实现一个简单的计算器界面 并通过JS实现了基本的运算功能 加 减 乘 除 清屏 退格 取余 取倒 1 编写前端界面
  • qt post上传文件

    QNetworkAccessManager的post接口可以接收多种参数 一般使用QByteArray发送普通文本请求 如果要带文件内容做参数 就需要用到QHttpMultiPart类型的参数 封装formData 这里定义的是一个stat
  • 最大连续子段和

    最长公共子序列 题目描述 给出一个长为n的数列 a1 a2 an 求和最大的连续子序列 即找到一对 i j i lt j 使ai ai 1 aj的和最大 输出这个和 输入格式 第一行为正整数n 第二行n个用空格分开的整数 表示a1 a2 a
  • Ubuntu20.04+RTX3060+Nvidia驱动+cuda11.1+cudnn8.0.5

    Ubuntu20 04 RTX3060 Nvidia驱动配置过程 记录一下踩那么多坑之后的成功步骤 我下的Ubuntu的gcc版本为9 4 0 step1 apt get换源及更新 1 备份原本的源 cd etc apt cp source
  • 一个fb账号创建几个bm

    Facebook Business Manager 商务管理平台 是专为管理您的Facebook页面和广告帐户而设计的工具 通过使用商务管理平台 功能如下 管理对您的Facebook页面和广告帐户的访问权限 查看谁有权访问您的网页和广告帐户
  • Spring中最简单的过滤器和监听器

    1 过滤器概念引入 Filter也称之为过滤器 它是Servlet技术中最实用的技术 Web开发人员通过Filter技术 对web服务器管理的所有web资源 例如Jsp Servlet 静态图片文件或静态 html 文件等进行拦截 从而实现
  • UE4 蓝图之间交互

    小白欢迎评论 共同探讨 共同进步 获取其他蓝图 及蓝图内属性 的方法 有几种方法 下面来依次记录一下 根据不同情况可以适当选取一种合适的方法 1 两个普通蓝图类之间的直接交互 在蓝图类中申请公开变量 然后在外部赋值 即可交互 剩下就可以调用
  • 函数模板、模板函数,完全特例化、部分特例化

    一 函数模板 1 定义 建立一个通用函数 它所用到的数据的类型 包括返回值类型 形参类型 局部变量类型 可以不具体指定 而是用一个虚拟的类型来代替 实际上是用一个标识符来占位 等发生函数调用时再根据传入的实参来逆推出真正的类型 2 举例 t
  • accept函数笔记

    include
  • markdown 文本内跳转,生成目录

    生成目录的方法 一 数据集获取及预处理 1 1 数据集导入 1 1 2数据集划分 1 2 二 binary classification 二元分类器 2 自己实现交叉验证函数 2 1 confusion matrix 2 2 precisi
  • MySQL数据库的导入与导出

    1 数据库的导入 1 1 新建一个数据库名称 create database 数据库名 students 如下 create database students 1 2 使用use命令进入该数据库 如下 use students 1 3 导
  • 监控流媒体服务器的搭建和使用

    需求的提出 海康 大华 宇视等视频监控系统 都有自己的流媒体服务器平台 为什么要还需要通用的流媒体服务器产品呢 这个问题可以从几个方面回答 1 经济性 传统监控厂商的流媒体服务器 由于主要面向城市建设和大型安防项目 往往造价和报价相对较高
  • Android pm 命令详解

    一 pm命令介绍与包名信息查询 1 pm命令介绍 pm工具为包管理 package manager 的简称 可以使用pm工具来执行应用的安装和查询应用宝的信息 系统权限 控制应用 pm工具是Android开发与测试过程中必不可少的工具 sh
  • QT QString与char *之间的转换

    1 QString转char 先将QString转换为QByteArray 再将QByteArray转换为char QString str hello QString转char QByteArray ba str toLatin1 char
  • 启动过滤器异常

    org apache catalina core StandardContext filterStart 启动过滤器异常 org apache catalina core StandardContext filterStart 启动过滤器异
  • 【转载】自监督学习详细介绍(学习笔记)

    原文链接 https blog csdn net Cloris Sue article details 105343762 一 相关文献 fast ai上面关于自监督学习的资料 Self supervised learning and co