子监督学习的知识点总结

监督学习

        机器学习中最常见的方法是监督学习。在监督学习中,我们得到一组标记数据(X,Y),即(特征,标签),我们的任务是学习它们之间的关系。但是这种方法并不总是易于处理,因为训练通常需要大量数据,而标记数百万行数据既耗时又昂贵,这就对许多不同任务的训练模型造成了瓶颈。

         以这种方式训练的模型通常非常擅长手头的任务,但不能很好地推广到相关但是非相同领域内的任务。因为网络只专注于学习 X 的良好表示以生成之间的直接映射X 和 Y ,而不是学习 X 的良好通用表示,所以无法转移到类似的其他任务。这种学习通常会导致对概念的非常肤浅的理解,即它学习了 X 和 Y 之间的关系(它优化了网络以学习这种映射),但它不理解 X 的实际含义或它背后的含义。

自监督学习

自监督学习也适用于(特征、标签)数据集,即以监督的方式,但它不需要人工注释的数据集。它的基本思想是屏蔽/隐藏输入的某些部分,并使用可观察的部分来预测隐藏的部分。正如我们将在下面看到的,这是一个非常强大的想法。但是我们不称其为无监督学习是因为它仍然需要标签,但不需要人工对其进行标注。

SSL的优势是如果我们手头有大量未标记的数据,SSL的方式可以让我们利用这些数据。这样模型可以学习更强大的数据底层结构的表示,并且这些表示比监督学习中学到的更普遍,然后我们可以针对下游任务进行微调。

需求和动机

在过去的 10 年里,深度学习取得了长足的进步。几年前被认为计算机似乎不可能完成的任务(例如机器翻译、图像识别、分割、语音识别等)中,已经达到/超过了人类水平的表现。在经历了十年的成功故事之后,深度学习现在正处于一个关键点,人们已经慢慢但肯定地开始认识到当前深度学习方法的基本局限性。

人类和当前人工智能的主要区别之一是人类可以比机器更快地学习事物,例如仅通过查看 1-2 张照片来识别动物,只需 15-20 小时即可学会驾驶汽车。人类如何做到这一点?常识!虽然我们还不知道常识是如何产生的,但却可以通过思考人类如何实际了解世界来做出一些有根据的猜测:

人类主要通过观察学习,很少通过监督学习。从婴儿出生的那一刻起(或者之前),它就不断地听到/看到/感觉到周围的世界。因此,发生的大部分学习只是通过观察。

人类可以利用随着时间的推移获得的知识(感知、运动技能、基础物理来帮助导航世界等),而当前的 SOTA 机器却不能。

自监督学习通过学习从未屏蔽部分预测数据的屏蔽部分来模仿的人类这部分的能力。

NLP与CV中的SSL

NLP 中的一般做法是屏蔽一些文本并使用附近的文本对其进行预测。这种做法已经有一段时间了,现在 SOTA 模型都是以这种方式进行训练,例如 BERT、ROBERTA XLM-R、GPT-2,3 等。在 NLP 中应用这种技术相对容易,因为屏蔽词的预测只能取离散值,即词汇表中的一个词。所以我们所要做的就是在词汇表中生成一个超过 10-20k 个单词的概率分布。

但是在计算机视觉方面,可能性是无限的。我们在这里处理高维连续对象,例如,一个 10X10 的屏蔽图像块可能在单个通道上获取 255¹⁰⁰ 值,对于动起来的视频复杂性甚至更高(同样的逻辑也适用于语音识别)。与 NLP 不同,我们无法对每一种可能性做出预测,然后选择更高概率的预测。这似乎是计算机视觉中一个棘手的问题。

孪生网络/联合嵌入架构

这里把图像识别作为我们运行的任务。SSL 会屏蔽一些随机图像块,然后尝试预测这些被屏蔽的块。由于我们无法对图像块中的每一种可能性进行预测,所以我们只能使用相似度匹配。

 

联合嵌入架构。这两个神经网络可以完全相同,也可以部分共享,也可以完全不同。

这个想法是训练一种孪生网络来计算两张图像之间的相似度,同时保证以下结果 -

相似/兼容的图像应该返回更高的相似度分数。

不同/不兼容的图像应返回较低的相似度分数。

第 1 点很容易实现:可以用不同方式增强图像,例如裁剪、颜色增强、旋转、移动等。然后让 孪生网络学习原始图像和增强图像的相似表示。在将模型输出与固定目标进行比较的意义上,我们不再进行预测建模,因为现在比较的是模型的两个编码器的输出,这使得学习表示非常灵活。

但是第 2 点很麻烦。因为当图像不同时,我们如何确保网络学习不同的嵌入?如果没有进一步的激励,无论输入如何,网络都可以为所有图像学习相同的表示。这称为模式崩溃。那么如何解决这个问题?

对比学习

基本思想是提供一组负样本和正样本。损失函数的目标是找到表示以最小化正样本之间的距离,同时最大化负样本之间的距离。图像被编码后的距离可以通过点积计算,这正是我们想要的!那么这是否意味着计算机视觉中的 SSL 现在已经解决了?其实还没有完全解决。

为什么这么说呢?因为图像是非常高维的对象,在高维度下遍历所有的负样本对象是几乎不可能的,即使可以也会非常低效,所以就衍生出了下面的方法。

在描述这方法之前,让我们首先来讨论对比损失这将会帮助我们理解下面提到的算法。我们可以将对比学习看作字典查找任务。想象一个图像/块被编码(查询),然后与一组随机(负 - 原始图像以外的任何其他图像)样本+几个正(原始图像的增强视图)样本进行匹配。这个样本组可以被视为一个字典(每个样本称为一个键)。假设只有一个正例,这意味着查询将很好地匹配其中一个键。这样对比学习就可以被认为是减少查询与其兼容键之间的距离,同时增加与其他键的距离。

目前对比学习中两个关键算法如下:

Momentum Contrast - 这个想法是要学习良好的表示,需要一个包含大量负样本的大型字典,同时保持字典键的编码器尽可能保持一致。这种方法的核心是将字典视为队列而不是静态内存库或小批量的处理。这样可以为动态字典提供丰富的负样本集,同时还将字典大小与小批量大小解耦,从而根据需要使负样本变得更大。

SimCLR - 核心思想是使用更大的批大小(8192,以获得丰富的负样本集),更强的数据增强(裁剪,颜色失真和高斯模糊),并在相似性匹配之前嵌入的非线性变换,使用更大模型和更长的训练时间。这些都是需要反复试验的显而易见的事情,该论文凭经验表明这有助于明显的提高性能。

但是对比学习也有局限性:

  • 需要大量的负样本来学习更好的表示。

  • 训练需要大批量或大字典。

  • 更高的维度上不能进行缩放。

  • 需要某种不对称性来避免常数解。

  • 数据增强的有趣观察

在上面提到的所有方法/算法中,数据增强都起着关键作用。为了训练类似 SSL 模型,通过一组规则(裁剪、移动、旋转、颜色失真、模糊等)增强原始图像来生成正对。然后模型学会忽略这种噪声(例如平移、颜色失真和旋转不变性),以学习与正对(原始图像和增强图像)接近的表示。但是这些模型在图像识别任务上做得很好,但当模型已经学会忽略这些变化时,以相同的表示进行目标检测任务时会获得非常差的效果。

这是因为它很难在对象周围放置边界框,因为学习的表示被训练为忽略目标对象的位置和定位。

非对比学习

与对比学习不同,模型仅从正样本中学习,即从图像及其增强视图中学习。

理论上上感觉这应该行不通,因为如果网络只有正例,那么它就学会忽略常量向量的输入和输出(上面提到的模式崩溃),这样损失就会变成0。

而实际上这并没有发生模型学习到了良好的表示。为什么呢?下面通过描述该领域的一些关键算法来进行说明 :

1、BARLOW TWINS:这是一种受神经科学启发的算法,基于 1961 年发表的论文的发现。它仍然使用如上所述的带有增强图像的联合嵌入式架构。但是它核心思想是使图像嵌入输出之间的互相关矩阵尽可能接近单位矩阵。这个简单的想法避免了复杂的解决方案,并获得了 ImageNet 上的 SOTA 性能。并且它在高维度上效果更好,不需要不对称,不需要大批量的数据或内存存储或任何其他启发式方法来使其工作。

下图解释了算法的整体架构。单个图像在增强策略的分布上被处理两次。然后两个图像都通过相同的编码器网络。损失函数的定义方式是将互相矩阵简化为单位矩阵。

损失函数非常直观

 

这里 C 是两个图像的嵌入之间的互相关矩阵。在这里没有使用任何负样本!

第一项,当所有 C_ii 为 1 即相关矩阵的对角元素为 1 时,损失函数中的不变项最小。这使得随着相关性的加强,嵌入对增强处理保持不变。第二项,即冗余缩减项强制非对角线值为 0,即它使嵌入的其他维度去相关。这使得模型在增强处理的同时学习有关样本的非冗余信息。

2、BYOL:这种方法不像 Barlow Twins 那样简单,因为它需要某些启发式方法才可以正常工作。它依赖于两个神经网络(target和 target),并试图从online 中预测target。两个网络中的权重不同。为了在架构中引入不对称性以避免琐碎的常量嵌入,target网络中引入了预测器模块。

本文中没有对BYOL进行像 BARLOW TWINS 清晰和直观的解释,所以如果想了解其详细内容请参考原论文:arxiv 2006.07733

另外还有一种最新的方法 VICReg(arxiv:2105.04906)如果有几乎的话会在后面介绍

总结整篇文章,下图展示了 SSL 在 NLP 和计算机视觉中的细分。

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

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

相关文章

Vue中如何进行拖拽与排序功能实现

在Vue中实现拖拽与排序功能 在Web应用程序中,实现拖拽和排序功能是非常常见的需求,特别是在管理界面、任务列表和图形用户界面等方面。Vue.js作为一个流行的JavaScript框架,提供了许多工具和库来简化拖拽和排序功能的实现。本文将介绍如何使…

算法:最近公共祖先(LCA)

有根树中,每一个点都有好几个祖先(在往根节点走的过程中遇到的都是它的祖先),一般化,把本身也称为它的祖先 对于两个点,离它们最近的一个公共祖先被称为最近公共祖先 法一:向上标记法&#xf…

Android Studio实现简易计算器(带横竖屏,深色浅色模式,更该按钮颜色,selector,style的使用)

目录 前言 运行结果: 运行截屏(p50e) apk文件 源码文件 项目结构 总览 MainActivity.java drawable 更改图标的方法: blackbutton.xml bluebuttons.xml greybutton.xml orangebuttons.xml whitebutton.xml layout 布…

Lagrange插值法实验:求拉格朗日插值多项式和对应x的近似值matlab实现(内附代码)

一、实验要求 已知函数表: 求出Lagrange 插值多项式,并计算x1.2处的y的近似值。 二、MATLAB代码 求解多项式: X input(请输入横坐标向量X:\nX); % 获取用户输入的横坐标向量 Y input(请输入纵坐标向量Y:\nY); % 获取用户输入的纵坐标…

简单走近ChatGPT

目录 一、ChatGPT整体背景认知 (一)ChatGPT引起关注的原因 (二)与其他公司的竞争情况 二、NLP学习范式的发展 (一)规则和机器学习时期 (二)基于神经网络的监督学习时期 &…

竞赛 机器学习股票大数据量化分析与预测系统 - python 竞赛

文章目录 0 前言1 课题背景2 实现效果UI界面设计web预测界面RSRS选股界面 3 软件架构4 工具介绍Flask框架MySQL数据库LSTM 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 机器学习股票大数据量化分析与预测系统 该项目较为新颖&am…

2023计算机保研——双非上岸酒吧舞

我大概是从22年10月份开始写博客的,当时因为本校专业的培养方案的原因,课程很多,有些知识纸质记录很不方便,于是选择了打破了自己的成见使用博客来记录学习生活。对于我个人而言,保研生活在前一大半过程中都比较艰难&a…

System Generator学习——时间和资源分析

文章目录 前言一、目标二、步骤三、步骤 1 :系统生成器的时序分析1、时序分析2、解决时间违规问题 四、步骤 2 :系统生成器中的资源分析总结 前言 在本节实验中,你将学习如何通过在 Simulink 中进行仿真来验证设计的功能,以确保在…

MapStruct初窥门径

一、介绍 MapStruct相比于BeanUtils性能更高&#xff0c;能够实现DO&#xff0c;DTO&#xff0c;VO之间的转换&#xff0c;达到解耦合的目的 二、使用前提 添加依赖 <dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifa…

学习记忆——宫殿篇——记忆宫殿——数字编码——扑克牌记忆

扑克牌我们可以通过以下3点进行识记&#xff1a; 1、先把扑克牌进行编码转换 2、确定要进行记忆的记忆宫殿 3、把扑克牌与记忆宫殿一一对应 首先54张扑克牌除去大小王后剩下52张&#xff0c;因为世界赛不需要记忆大小王。52张扑克牌都有对应的编码&#xff0c;每2张扑克牌对应…

JVM篇---第三篇

系列文章目录 文章目录 系列文章目录一、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?二、Java内存结构三、说说对象分配规则一、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文…

如何将图片存到数据库(以mysql为例), 使用ORM Bee更加简单

如何将图片存到数据库 1. 创建数据库: 2. 生成Javabean public class ImageExam implements Serializable {private static final long serialVersionUID 1596686274309L;private Integer id;private String name; // private Blob image;private InputStream image; //将In…

【Java】抽象类案例

需求&#xff1a;加入我们在开发一个系统时 需要对员工&#xff08;Employee&#xff09;类进行设计&#xff0c;员工包含3个属性&#xff1a;姓名、工号&#xff08;number&#xff09;以及工资&#xff08;salary&#xff09;。 经理&#xff08;Manager&#xff09;也是员工…

【物联网】STM32的中断机制不清楚?看这篇文章就足够了

在嵌入式系统中&#xff0c;中断是一种重要的机制&#xff0c;用于处理来自外部设备的异步事件。STM32系列微控制器提供了强大的中断控制器&#xff0c;可以方便地处理各种外部中断和内部中断。本文将详细介绍STM32中断的结构和使用方法。 文章目录 1. 什么叫中断2. 中断优先级…

怒刷LeetCode的第23天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;贪心算法 方法二&#xff1a;动态规划 方法三&#xff1a;回溯算法 方法四&#xff1a;并查集 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;排序和遍历 方法二&#xff1a;扫描线算法 方法…

给列起别名(关键字:as)

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: select 列名1 as 别名1, 列名2 as 别名2, 列名n as 别名n from 表名; 说明&#xff1a;可以省略as&#xff0c;列名和别名之间使用空格…

多目标跟踪框架boxmot介绍

引言 boxmot由mikel brostrom开发&#xff0c;用于目标检测&#xff0c;分割和姿态估计模型的SOTA&#xff08;state of art&#xff09;跟踪模块&#xff0c;现已加入python第三方库 PYPI&#xff0c;可用pip包管理器进行安装。 boxmot所支持的跟踪器采用外观特征识别方法&am…

【动手学深度学习-Pytorch版】Transformer代码总结

本文是纯纯的撸代码讲解&#xff0c;没有任何Transformer的基础内容~ 是从0榨干Transformer代码系列&#xff0c;借用的是李沐老师上课时讲解的代码。 本文是根据每个模块的实现过程来进行讲解的。如果您想获取关于Transformer具体的实现细节&#xff08;不含代码&#xff09;可…

国庆中秋特辑(七)Java软件工程师常见20道编程面试题

以下是中高级Java软件工程师常见编程面试题&#xff0c;共有20道。 如何判断一个数组是否为有序数组&#xff1f; 答案&#xff1a;可以通过一次遍历&#xff0c;比较相邻元素的大小。如果发现相邻元素的大小顺序不对&#xff0c;则数组不是有序数组。 public boolean isSort…

【Unity】两种方式实现弹跳平台/反弹玩家(玩家触发与物体自身触发事件实现蹦床的物理效果)

一、声明 只实现物理反弹的效果&#xff0c;不实现蹦床会有的视觉拉伸效果&#xff0c;请自行找相关代码 二、实现 经过我的实践&#xff0c;我发现要想实现一个平台反弹的效果&#xff0c;要么就选择给player添加一个物理材质&#xff08;平台加了没用&#xff09;&#xff0…