自监督学习应用

1 自监督学习

自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进行训练,从而可以学习到对下游任务有价值的表征。(也就是说自监督学习的监督信息不是人工标注的,而是算法在大规模无监督数据中自动构造监督信息,来进行监督学习或训练。因此,大多数时候,我们称之为无监督预训练方法或无监督学习方法,严格上讲,他应该叫自监督学习)

自监督学习的主要方法

基于上下文:由于数据本身的上下文信息,我们其实可以构造很多任务,比如在NLP领域中最重要

的算法Word2vec。Word2vec主要是利用语句的顺序,例如CBOW通过前后的词来预测中间的词,而Skip-Gram通过中间的词来预测前后的词。

        而在图像中,研究人员通过一种名为 Jigsaw(拼图)的方式来构造辅助任务。我们可以将一张图分成 9 个部分,然后通过预测这几个部分的相对位置来产生损失。比如我们输入这张图中的小猫的眼睛和右耳朵,期待让模型学习到猫的右耳朵是在脸部的右上方的,如果模型能很好的完成这个任务,那么我们就可以认为模型学习到的表征是具有语义信息的。

后续的工作人们又拓展了这种拼图的方式,设计了更加复杂的,或者说更难的任务。首先我们依然将图片分为 9 块,我们预先定义好 64 种排序方式。模型输入任意一种被打乱的序列,期待能够学习到这种序列的顺序属于哪个类,和上个工作相比,这个模型需要学习到更多的相对位置信息。这个工作带来的启发就是使用更强的监督信息,或者说辅助任务越难,最后的性能越好。

        除了这种拼图的模式,还有一种是抠图。想法其实也很简单粗暴,就是我们随机的将图片中的一部分删掉,然后利用剩余的部分来预测扣掉的部分,只有模型真正读懂了这张图所代表的含义,才能有效的进行补全。这个工作表明自监督学习任务不仅仅可以做表征学习,还能同时完成一些神奇的任务。

 

        而对于这种抠图的方式,其实和 nlp 中的 BERT的 MASK LM 训练方式有异曲同工之妙,BERT 在训练时也可以是看做随机扣掉一些词,然后来预测扣掉的词,从而让模型读懂句子。

BERT/Mask LM

        还有一种思路是通过图片的颜色信息,比如给模型输入图像的灰度图,来预测图片的色彩。只有模型可以理解图片中的语义信息才能得知哪些部分应该上怎样的颜色,比如天空是蓝色的,草地是绿色的,只有模型从海量的数据中学习到了这些语义概念,才能得知物体的具体颜色信息。同时这个模型在训练结束后就可以做这种图片上色的任务。

        

        这种基于预测颜色的生成模型带给了人们新的启发,其实这种灰度图和 ab 域的信息我们可以当做是一张图片的解耦表达,所以只要是解耦的特征,我们都可以通过这种方式互相监督的学习表征,著名的 Split-Brain Autoencoders 就在做这样一件事情。对于原始数据,首先分成两部分,然后通过一部分的信息来预测另一部分,最后再合成完成的数据。

        和传统编码器不同的是,这种预测的方式可以促使模型真正读懂数据的语义信息才能够实现,所以相当于间接地约单单束编码器不靠 pixel-wise 层面来训练,而要同时考虑更多的语义信息。

        最后我们要介绍的是根据类似数据增广的方式来寻找自监督上下文。ICLR 2018 [13]的工作是给定一张输入的图片,我们对其进行不同角度的旋转,模型的目的是预测该图片的旋转角度。这种朴素的想法最后带来的增益竟然是非常巨大的,所以数据增强对于自监督学习也是非常有益处的,我个人的想法是数据增强不仅带来了更多的数据,还增加了预训练模型的鲁棒性。

        自监督学习在预训练模型中的成功让研究人员觉得非常兴奋,同时也激发了更多的灵感。我们之前介绍的模型都是在专注如何寻找自监督信息,而自监督学习一定要脱离下游的具体任务吗?答案是否定的,越来越多的工作开始思考自监督学习和具体任务紧密结合的方法(Task Related Self-Supervised Learning)。

基于时序:

(1)基于帧的相似性,对于视频中每一帧,其实存在着特征相似的概念,简单来说,可以认视频中的相邻特征是相似的,而相隔较远的视频帧是不相似的,通过构建这种相似和不相似的样本来进行自监督约束。

(2)基于无监督追踪方法,首先在大量的无标签视频中进行无监督追踪,获取大量的物体追踪框。那么对于一个物体追踪框在不同帧的特征应该是相似的(positive),而对于不同物体的追踪框中的特征应该是不相似的(negative)。

(3)除了基于特征相似性外,视频的先后顺序也是一种自监督信息。

        之前介绍的方法大多是基于样本自身的信息,比如旋转、色彩、裁剪等。而样本间其实也是具有很多约束关系的,这里我们来介绍利用时序约束来进行自监督学习的方法。最能体现时序的数据类型就是视频了(video)。

        第一种思想是基于帧的相似性,对于视频中的每一帧,其实存在着特征相似的概念,简单来说我们可以认为视频中的相邻帧特征是相似的,而相隔较远的视频帧是不相似的,通过构建这种相似(position)和不相似(negative)的样本来进行自监督约束。

        还有一种想法是来自 @Xiaolong Wang 大佬 ICCV 2015 [18]的基于无监督追踪方法,首先在大量的无标签视频中进行无监督追踪,获取大量的物体追踪框。那么对于一个物体追踪框在不同帧的特征应该是相似的(positive),而对于不同物体的追踪框中的特征应该是不相(negative)。

        除了基于特征相似性外,视频的先后顺序也是一种自监督信息。比如ECCV 2016, Misra, I. [19] 等人提出基于顺序约束的方法,可以从视频中采样出正确的视频序列和不正确的视频序列,构造成正负样本对然后进行训练。简而言之,就是设计一个模型,来判断当前的视频序列是否是正确的顺序。

对话:
(1)基于顺序的约束可以用于对话系统中,ACL2019(Wu, Jiawei et al. “Self-Supervised Dialogue Learning.” ACL (2019).)提出的自监督对话系统就是基于这种思想。这篇文章主要是想解决对话系统中生成的话术连贯性的问题,期待机器生成的回复和人类交谈一样是符合之前的说话的风格、习惯等。从大量的历史预料中挖掘出顺序的序列(positive)和乱序的序列(negative),通过模型来预测是否符合正确的顺序来进行训练。训练完成后就拥有了一个可以判断连贯性的模型,从而可以嵌入到对话系统中,最后利用对抗训练的方式生成更加连贯的话术。

(2)BERT的Next Sentence Prediction也可以看作是基于顺序的约束,通过构造大量的上下文样本,目的是让模型理解两个句子之间的联系。这一任务的训练语料可以从语料库中抽取句子对包括两个句子A和B来进行生成,其中50%的概率B是A的下一个句子,50%的概率B是语料中的一个随机句子。该任务预测B是否是A的下一句。

3 基于对比

       第三类自监督学习的方法是基于对比约束的,它通过学习对两个事物的相似或不相似进行编码来构建表征,这类方法的性能目前来说是非常强的。

        其实第二部分所介绍的基于时序的方法已经涉及到了这种基于对比的约束,通过构建正样本(positive)和负样本(negative),然后度量正负样本的距离来实现自监督学习。

核心思想:

样本和正负样本之间的距离远远大于样本和负样本之间的距离:

        这里的x通常也称为[anchor]数据,为了优化anchor数据和其正负样本的关系,我们可以使用点积的方式构造距离函数,然后构造一个softmax分类器,以正确分类正样本和负样本。这应该鼓励相似性度量函数(点积)将较大的值分配给正例,将较小的值分配给负例。

        通常这个损失也被称为 InfoNCE ,后面的所有工作也基本是围绕这个损失进行的。

        CPC同样是一个基于对比约束的自监督框架,主要是可以应用于能够以有序序列表示的任何形式的数据:文本、语音、视频、甚至图象(图象可以被视为像素或块的序列)。

        CPC 主要是利用自回归的想法,对相隔多个时间步长的数据点之间共享的信息进行编码来学习表示,这个表示 c_t 可以代表融合了过去的信息,而正样本就是这段序列 t 时刻后的输入,负样本是从其他序列中随机采样出的样本。CPC的主要思想就是基于过去的信息预测的未来数据,通过采样的方式进行训练。

        数据增广对于自监督学习是有益的,不同数据增广方式的结合比单一增广更好。
同时作者公布了非常多的实验经验,比如自监督学习需要更大的 batch 和更长的训练时间。            自监督学习的“标注”通常来自于数据本身,其常规操作是通过各自的“auxiliary task”来提高学习表征(representation)的质量,从而提高下游任务的质量。

自监督的方法常用的情景或任务:为了解决数据集无标签或者标签较少质量低的问题。

 自我监督方法可以看作是一种具有监督形式的特殊形式的非监督学习方法,这里的监督是由自我监督任务而不是预设先验知识诱发的。与完全不受监督的设置相比,自监督学习使用的数据集本身的信息来构造伪标签。在表示学习方面,自我监督学习具有取代完全监督学习的巨大潜力。人类学习的本质告诉我们,大型注释数据集可能不是必需的,我们可以自发地从未标记地数据集中学习。更为现实的设置是使用少量带注释的数据进行自学习。这称为Few-shot Learning。

 所有的非监督学习方法,例如数据降维(PCA:在减少数据维度的同时最大化的保留原有数据的方差),数据拟合分类(GMM: 最大化高斯混合分布的似然), 本质上都是为了得到一个良好的数据表示并希望其能够生成(恢复)原始输入。这也正是目前很多的自监督学习方法赖以使用的监督信息。基本上所有的encoder-decoder模型都是以数据恢复为训练损失。
 

2自监督学习应用到自动驾驶方面

自监督学习应用到车载激光雷达点云。

存在问题:如何从点云中获得其他交通参与者的运动信息是一个重要课题,并且存在如下挑战:

  • 交通参与者的类别不一样,每个类别都表现出特定的运动行为;
  • 激光雷达点云的稀疏性导致两次激光雷达扫描的情况不能精确地被对应起来;
  • 需要在很短的时间内和有限的车载算力下完成计算。

传统做法:是通过识别场景中其它交通参与者,根据所观测到的历史信息,来预测交通场景会如何变化,从而实现预测。

存在不足:大多数识别模型都是为检测若干已知类别的物体而训练的。在实际情况中,经常会遇上从未出现过的物体类,因此这肯定不是长久之计。

其他做法:通过估计激光雷达点云每个点的3D运动来从点云中估计场景流,但这样做对计算的要求太高了,自动驾驶车又特别需要满足实时性,所以根本无法进行实际应用。

其三基于BEV(Bird’s Eye View)的方式,把激光雷达的点云画成一个个小网格,每个网格单元被称为体柱,点云的运动信息可以通过所有体柱的位移向量来描述,该位移向量描述了每个体柱在地面上的移动大小和方向。

这种表征方法成功简化了运动场景,反正只需要考虑在水平方向上的运动情况,而不用特别考虑垂直方向上的运动。这种方式的所有关键操作都可以通过2D卷积进行,计算速度非常快。但是,这种方式需要依靠大量带有标注的点云数据,但点云数据的标注成本比普通图像更高。一辆自动驾驶汽车每天会产生超过1TB的数据,但仅有不到5%的数据被利用,若能把其他数据也充分利用起来,在没有手工标注的数据上来进行学习,效率必将大幅提升。

用于自动驾驶的自监督“点云运动和学习”

https://arxiv.org/pdf/2104.08683.pdf

为了充分利用BEV中运动表征的优点,研究团队将点云组织成体柱(Pillar),并将与每个体柱相关的运动信息称为体柱运动(Pillar Motio)。假设连续两次扫描之间的体柱或物体的结构形状是不变的。然而,这在大多数情况下是不成立的,因为激光雷达的稀疏扫描,连续的两个点云缺乏精确的点与点的对应。

解决方案是利用从相机图像中提取的光流来提供跨传感器的自监督和正则化。如图2所示,这种设计形成了一个统一的学习框架,包括激光雷达和配对相机之间的交互:

(1) 点云有助于将自车运动(Ego-motion)导致的图像运动从光流中分解出来;

(2) 光流为点云中的体柱运动学习提供了辅助正则化;

(3) 反投影(Back-projected)光流形成的概率运动掩膜(Probabilistic Motion Masking)提升了点云结构的一致性。

注意,与相机相关的模块仅用于训练,在推理阶段不会被使用,因此,在运行时不会对相机相关的模块引入额外的计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中shell的执行流控制

目录 一、for语句 1、for语句的基本格式 2、示例 二、条件语句 1、while…do语句 2、until…do语句 3、if …then语句 4、示例 三、case语句 四、expect应答语句 1、固定答案 2、将expect与bash环境结合 3、示例 五、终止语句 一、for语句 作用:为…

高可用系统架构——关于语雀宕机的思考

语雀系统崩溃了,并且经过8个多小时才恢复,估计语雀的小伙伴们已经哭晕在厕所里了。 本次稳定性故障再次给架构师敲响警钟:系统高可用一直是架构的重点,它涉及到系统的方方面面,并且是一件持续性的长期工作。 故障起因…

我们在 Linux 环境中用 C 编程时,如果对文件读写,Linux 会自动给文件加锁嘛?以及怎么加文件锁?

task1: 验证Linux不会自动给文件加锁 先说结论&#xff0c;结论是不会 我写了一个这样的程序 #include <stdio.h> #include <unistd.h>int main() {const char* pathname "your_file_pathname.txt";FILE* file NULL;int count 100;if(access(pathn…

数据可视化报表分享:区域管理驾驶舱

在零售数据分析中&#xff0c;区域管理驾驶舱报表是用来分析企业运营数据&#xff0c;以制定销售策略和提高利润。因此这张报表需要整合大量数据&#xff0c;数据整合、分析、指标计算的工作量极大&#xff0c;在讲究高效率、高度及时性的大数据时代&#xff0c;BI数据可视化分…

Linux--安装与配置虚拟机及虚拟机服务器坏境配置与连接---超详细教学

一&#xff0c;操作系统介绍 1.1.什么是操作系统 操作系统&#xff08;Operating System&#xff0c;简称OS&#xff09;是一种系统软件&#xff0c;它是计算机硬件和应用软件之间的桥梁。它管理计算机的硬件和软件资源&#xff0c;为应用程序提供接口和服务&#xff0c;并协调…

9、定义错误页

在layouts目录下新建error.vue&#xff0c;可以通过layout函数使用布局文件&#xff0c;通过props: [“error”]能拿到错误信息对象。 <template><div>{{ error.statusCode }}: {{ error.message }}</div> </template><script> export default {…

vue3 源码解析(2)— ref、toRef、toRefs、shallowRef 响应式的实现

前言 vue3 源码解析&#xff08;1&#xff09;— reactive 响应式实现 介绍完 reactive 之后还有另一个很重要的响应式API&#xff0c;其中包括 ref、toRef、toRefs 和 shallowRef。这些API在vue3中起着至关重要的作用&#xff0c;它们帮助我们更好地管理和跟踪响应式数据的变…

漏洞复现-dedecms文件上传(CVE-2019-8933)

dedecms文件上传_CVE-2019-8933 漏洞信息 Desdev DedeCMS 5.7SP2版本中存在安全漏洞CVE-2019-8933文件上传漏洞 描述 ​ Desdev DedeCMS&#xff08;织梦内容管理系统&#xff09;是中国卓卓网络&#xff08;Desdev&#xff09;公司的一套基于PHP的开源内容管理系统&#x…

【面试经典150 | 链表】合并两个有序链表

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;递归方法二&#xff1a;迭代 写在最后 Tag 【递归】【迭代】【链表】 题目来源 21. 合并两个有序链表 题目解读 合并两个有序链表。 解题思路 一种朴素的想法是将两个链表中的值存入到数组中&#xff0c;然后对数组…

轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC

啥&#xff1f;Spring Boot 不用&#xff1f;——对。就只是使用 Spring MVC Embedded Tomcat&#xff0c;而不用 Boot。为啥&#xff1f;——因为 Boot 太重了&#xff1a;&#xff09; 那是反智吗&#xff1f;Spring Boot 好好的就只是因为太重就不用&#xff1f;——稍安勿…

有一个带头结点的单链表L,设计一个算法使其元素递增有序

有一个带头结点的单链表L&#xff0c;设计一个算法使其元素递增有序 代码思路&#xff1a; 我这里懒得搞那个指针了&#xff0c;直接遍历一遍链表&#xff0c;把链表的元素复制到数组arr里面 对数组A进行一下排序&#xff0c;排完之后再把元素复制到L里面。 至于排序你用啥算…

运维 | 使用 Docker 安装 Jenkins | Jenkins

运维 | 使用 Docker 安装 Jenkins | Jenkins 前言 本期内容主要是为了学习如何通过 Docker 安装Jenkins&#xff0c;仅作为记录与参考&#xff0c;希望对大家有所帮助。 准备工作 系统&#xff1a;CentOS 7.9配置&#xff1a;4c8g 快速安装 下面以 Docker 方式安装 Jenkin…

第2篇 机器学习基础 —(2)分类和回归

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。机器学习中的分类和回归都是监督学习的问题。分类问题的目标是将输入数据分为不同的类别&#xff0c;而回归问题的目标是预测一个连续的数值。分类问题输出的是物体所属的类别&#xff0c;而回归问题输出的是数值。本节课就…

【Matlab2016】Matlab中文版的下载、安装、激活(不建议安装过高版本!!)

这里写目录标题 首先双击R2016_win64.iso加载镜像文件双击setup.exe开始安装选择使用文件密钥安装填入密钥修改安装路径并记住此路径建议全部勾选等待安装完成 激活复制补丁到matlab路径下 创建快捷方式进入bin目录&#xff0c;找到matlab.exe 安装包 首先双击R2016_win64.iso加…

网络搭建和运维的基础题目

服务部分&#xff08;linux&#xff09; 实操部分 1.在任意文件夹下面创建形如 A/B/C/D 格式的文件夹系列。 [rootlocalhost ~]# mkdir -p A/B/C/D 2.在创建好的文件夹下面&#xff0c;A/B/C/D &#xff0c;里面创建文本文件 mkdir.txt [rootlocalhost ~]# cd A/B/C/D [r…

[17]JAVAEE-HTTP协议

目录 一、什么是HTTP协议 什么时候会用到HTTP协议&#xff1f; HTTP协议的工作流程 二、HTTP的报文格式 抓包 HTTP请求报文格式 1.首行 2.header 常见键值对&#xff1a; 3.空行 4.正文&#xff08;body&#xff09;&#xff08;有的时候可以没有&#xff09; HTTP…

ubuntu下Docker的简单使用并利用主机显示

首先分享一个docker镜像的网站&#xff1a;https://hub.docker.com/search?q 这个网站里面有很多配置好的镜像&#xff0c;可以直接拉取。 下面介绍一下docker的安装和使用。 1、docker得到安装&#xff1a; sudo apt-get install docker 2、docker拉取一个镜像到本地,这里我…

Python爬虫防止被封的方法:动态代理ip

目录 前言 一、为什么需要使用动态IP代理 1.网站反爬虫机制 2.突破本地IP限制 3.获取更多数据 二、Python爬虫动态IP代理的实现方法 1.使用第三方库 2.使用爬虫框架 三、预防被封的方法 1.代理池管理 2.请求间隔设置 3.使用多个代理 总结 前言 在进行网站爬取时&…

网络基础-3

路由开销 一条路由的开销时指到达这条路由的目的地/掩码需要付出的带价值。同一种路由协议发现有多条路由可以到达同一目的地/掩码时&#xff0c;将优选开销最小的路由&#xff0c;即只把开销最小的路由加入进本协议的路由表中。 路由协议 内部网关协议&#xff08;IGP&…

【每日一题Day361】LC2558从数量最多的堆取走礼物 | 大顶堆

从数量最多的堆取走礼物【LC2558】 给你一个整数数组 gifts &#xff0c;表示各堆礼物的数量。每一秒&#xff0c;你需要执行以下操作&#xff1a; 选择礼物数量最多的那一堆。如果不止一堆都符合礼物数量最多&#xff0c;从中选择任一堆即可。选中的那一堆留下平方根数量的礼物…