语义表征的无监督对比学习:一个新理论框架

「2019 Python开发者日」7折优惠最后3天,请扫码咨询 ↑↑↑
译者 | Linstancy
责编 | 琥珀
出品 | AI科技大本营(ID:rgznai100)
诸如图像、文本、视频等复杂数据类型的语义表征 (也称为语义嵌入) 已成为机器学习的核心问题,并在机器翻译、语言模型、GAN、域迁移等领域中出现。这些都会涉及学习表征函数,即每个数据点的表征信息都是“高级别” (保留语义信息,同时丢弃低级细节,如图像中单个像素的颜色等) 和“紧凑“ (低维)。衡量语义表征好坏的一个标准是,它能够通过少量标记数据,使用线性分类器 (或其他低复杂度分类器) 来解决它们,从而大大简化新分类任务的求解过程。
使用未标记数据进行无监督表示学习研究是当前该领域最感兴趣的一个研究话题。一种常用的方法是使用类似于 word2vec 算法进行词嵌入 (word embedding),这种方法适用于各种数据类型,如社交网络、图像、文本等数据。
那么,为什么这些方法能够适用于如此多样化环境中?这得益于一种新的理论框架 “A Theoretical Analysis of Contrastive Unsupervised Representation Learning” 的提出。作为该框架的联合提出者,Misha Khodak 提出了一种非常简单的假设,因为类似 word2vec 算法需要适用于一些完全不同的数据类型,而这些数据无法共享一个通用的贝叶斯生成模型。(有关这个空间的生成模型例子在早期关于 RAND-WALK 模型的文章中有过描述。)因此,这个框架也提出了一些新方法,用于设计训练时的目标函数变体。本篇文章将详细解释这些方法。
论文链接:https://arxiv.org/abs/1902.09229
语义表征学习
首先,是否存在良好且广泛适用的表征呢?在计算机视觉等领域,答案是肯定的,因为深度卷积神经网络 (CNN) 在大型含多类别标签数据集 (如 ImageNet) 上以高精度训练时,最终会学习得到非常强大而简洁的表征信息。网络的倒数第二层——输入到最终的 softmax 层,可以在其他新的视觉任务中用作图像的良好语义嵌入。(同样,训练后网络中的其他层也可以作为良好的嵌入)。实际上,使用这种通过在大型多类别数据集上进行预训练得到网络,将其作为其他任务的语义嵌入已经在计算机视觉领域研究中广泛使用,这允许一些新的分类任务只需要非常少的标记数据,使用低复杂度分类器 (如线性分类器) 来解决。因此,尝试通过未标记的数据来学习语义嵌入信息,这已经成为一条黄金准则。
类似 word2vec 的方法:CURL
自 word2vec 方法取得成功以来,一些相似的方法也被用于学习诸如句子、段落、图像和生物序列等数据的嵌入信息。所有这些方法都是基于一个关键性的想法:即利用相似数据点对 x、x+,并学习嵌入函数 f 。嵌入函数是 f(x) 和 f(x+) 的內积表示,通常高于 f(x) 和 f(x-) 的內积和 (这里的 x- 是一个与 x 不相似的随机数据点)。在实践中,寻找相似数据点通常需要使用一些启发式方法,常用的方法是共现 (co-occurrences)。例如,在一个大型的文本语料库中,相似数据点可以通过连续的句子、视频剪辑中的相邻帧,同一图像中的不同补丁等找到。
这种方法的一个代表性例子是来自 Logeswaran 和 Lee 提出的 Quick Thoughts (QT),这是当前许多无监督文本嵌入任务中最先进的方法。对于一个大型文本语料库中,为了学习一个表征函数 f,QT 将损失函数最小化,其数学表达式如下:
这里,(x,x+) 表示的是连续句子中语义相似的数据点,x- 代表一个随机的负样本。例如,对于图像而言, x 和 x+ 可能是视频中的相邻帧。对于文本而言,两个连续的句子是选择相似数据点的良好选择。例如,以下是维基百科中对 word2vec 进行解释的的两个连续句子案例:“High frequency words often provide little information”和“Words with frequency above a certain threshold may be subsampled to increase training speed”。显然,这两个句子的相似数据点,比起任意随机得到的句子对更多,学习者正好可以利用这一点。因此,从现在开始使用对比度无监督表示学习 (CURL) 来指代那些用于寻找相似数据对的方法,而本文的目标就是要分析这些方法。
需要一个新的框架
标准的机器学习框架都涉及最小化一些损失函数,且当在训练数据点和测试数据点上的平均损失大致相同时,则认为模型的学习是成功的 (或具有泛化能力)。然而,在对比学习(contrastive learning,CL )中,测试时使用的目标函数通常与训练的目标函数不同:泛化误差并不能作为解决这类问题的正确方法。
早期在这方面所使用的方法包括核学习 (kernel learning) 和半监督学习 (semi-supervised learning),但在训练时通常至少需要一些带标签的数据,这些样本来自未来感兴趣的分类任务。使用简单的设置也可以构建带生成模型的贝叶斯方法,但这种方法已被证明难以解决诸如图像和文本等复杂数据问题。此外,上面所说的类似 word2vec 的简单方法似乎无法像贝叶斯优化器那样,以清楚直接的方式操作,且同时适用于一些不同的数据类型。
因此,本文通过提出一个新的框架来解决这个问题,该框架规范地定义了 “语义相似” 的概念,这是其他算法所没有的。此外,它还进一步说明为什么对比学习 能够提供良好的表征,以及在这种情况下一个良好表征的意义。
框架
显然,对比学习中使用隐式 / 启发式定义的相似性概念,以某种方式与下游任务 (downstream tasks) 相关联。例如,相似性带有强烈的隐含意义,即在许多下游任务中 “相似对” 往往被分配相同的标签 (虽然这本身没有硬性保证)。而本文提出了一种极简的框架来简单形式化这种相似性概念。为了方便说明,以下将数据点称为“图像”。
语义相似性
我们假设大自然有许多类图像,所有类集合 C 有一个度量标准 ρ。因此,当需要选择一个类时,我们将以概率 ρ(c) 选择类别 c。每个类别 c 在图像上都具有一个相关分布 Dc,即在需要提供类别 c 的示例 (如选择类别“狗”),则它将以概率 Dc (x) 选择图像 x。请注意,在这里类别之间可以有任意的重叠,也可以互相独立不重叠。为了公式化语义相似性的概念,在这里假设当需要提供相似图像时,使用度量 ρ 从集合 C 中选择一个类别 c+,然后选择两个来自 Dc + 的独立同分布样本 x,x+。随后再从度量 ρ 中选择另一个类别 c-,并从 Dc- 中随机挑选不相似样本 x-。
如下式,表征学习训练的目标函数使用早期的 QT 目标,但基于当前的框架继承了以下解释:
值得注意的是,函数类 F 是一个任意的深度网络结构。该架构将图像映射到嵌入空间 (神经网络没有最后一层),并通过梯度下降 / 反向传播法来学习 f。当然,目前还没有理论可以解释复杂的深度网络在什么时候算训练成功,因此,这里提出的框架会假设当梯度下降已经导致某些表征 f 达到很低的损失时认为达到了最优状态,并研究它在下游分类任务中的表现。
测试表征
用什么来定义一个好的表征呢?这里我们假设通过它,使用一个线性分类器解决二进制分类任务,来衡量表征的质量。(此外,本文还研究了下游任务中 k 类分类任务的情况)。那么如何选择这个二进制分类任务?我们根据度量 ρ 随机选取两个类别 c1、c2,并根据相关的概率分布 Dc1、Dc2 为每个类别选择数据点。然后使用该表征,通过逻辑回归来解决该二进制任务:即找到两个向量 w1、w2 来最小化以下损失。
这里用二分类任务的平均损失来衡量表征的质量:
还值得注意的是,对于潜在类别中的未标记数据,将以相同类别在分类任务中出现。这允许我们可以公式化上面所提到的 “语义相似性” 的意义:即数据点更频繁地出现在一起的类别,构成了相关分类任务的类别。如果类别数很大的话,那么在无监督训练时使用的数据可能不会在测试阶段涉及。实际上,我们希望所学习的表征能够对那些潜在的、看不见的分类任务有用。
无监督学习的保证
该理论框架的理想结果是什么?假设我们固定一种类别的表征函数 F,并可以通过 ResNet 50 结构,选择结构层尺寸来计算它。
虽然可以使用 Rademacher complexity arguments 来控制学习近似最小化器时所需的未标记数据对的数量,但实际上,这种理想环境中的原理是不可能实现的。因为我们可以展示一个简单类别 F,它的对比目标无法产生可媲美最好类别所产生的表征。无需惊讶,这只是表明:想要实现这样一个理想结果,需要比上述结果做出更多的假设。
相反,本文所提出的框架证明,当对比学习结束时无监督损失恰好较小,则所得到的表征在下游的分类任务中能够表现良好。
这表明无监督损失函数可以被视为是使用线性分类方法解决下游任务时的一种性能替代,因此对其进行最小化是有意义的。此外,在未来的下游任务中,线性分类器学习只需要少数带标签的样本数据。因此,所提出的框架可以为对比学习提供保证,同时也能够突出它所提供的在标签样本复杂性方面的优势。
链接:https://arxiv.org/abs/1902.09229
理论分析的扩展
这个理论框架不仅能够推理 (1) 成功的变体,还能够设计理论上新的无监督目标函数。
先验(priori),可以想象是 (1) 中关于对数和指数的一些信息论解释;同时,将函数形式与用于下游分类任务的逻辑回归联系起来。类似地,如果通过 hinge loss 进行分类的话,那么在 (2) 中将使用 hinge-like loss 作为不同的无监督损失。例如,Wang 和 Gupta 论文中的目标函数被用于从视频中学习图像表征。此外,通常在实践中,k> 1 个负样本与每个正样本 (x,x+) 形成对比,而无监督的目标函数看起来像 k 类交叉熵损失形式。对于这种设置,事实上监督损失是与 (2) 中类似的 k + 1 类的分类损失。
最后,在相似数据可用时,该框架提供了用于设计新的无监督目标的方法 (如段落中的句子)。将 (1) 中的 f(x+) 和 f(x-) 分别替换为正、负样本表征的平均值,那么将得到一个新的目标函数,它在实践中具有更强的保证和更好的性能。最后,本文将通过实验来验证该变体的有效性,具体结果如下。
实验
接下来,我们将通过一些对照实验来验证所提出的理论。由于缺乏对多类别文本的规范说明,实验中使用一个新的含 3029 个类别的标签数据集,这些类别是来自维基百科网站上 3029 篇文章,每个数据点对应这些文章中 200 条句子中的一条。所学习的表征信息将在随机的二进制分类任务上进行测试,该分类任务涉及两篇文章,其中数据点对应的类别是其所属的两篇文章中的一篇 (同样,以这种方式定义 10 分类任务)。在训练表征时,将保持测试任务的数据点。句子表征 F 是基于门控递归单元 (GRU) 的简单多层结构。
基于上述的黄金标准,在这里通过有监督地训练 3029 类分类器并在最终的 softmax 层输出之前层所学习的表征得到最终的结果。
而根据所提出的理论,无监督方法用于生成相似的数据点对:这些相似的数据点只是从同一篇文章中采样得到的句子对。随后通过最小化上述的无监督损失目标来学习表征。
在上表中突出显示的部分表明,无监督表征与在 k 分类监督任务上 (k = 2,10) 所习得的表征相当。
此外,即使在所提出的理论中没有涉及,该表征也能够在完整的多分类问题上表现出色:即每个类别的无监督表征均值 (质心) 是能够在 k 分类监督任务中表现良好。而所得到的无监督表征和监督表征都是正确的。
此外,其他的实验进一步研究负样本数量和较大块相似数据点的影响,包括 CIFAR-100 图像数据集上的实验等。
结论
尽管对比学习是一种众所周知的直观算法,但是否真正有效却一直还未在实践中得到证实。本文所提出的理论框架,为使用此类算法学习表征提供了保证。在阐述这些算法的同时,该框架还能进一步提出并分析它的变体,并提供相应的解释证明,以便形成并探索更强保证的新假设。此外,基于该框架,还能进行一些扩展,包括对潜在类别强加一个度量结构,元学习 (meta-learning) 与迁移学习 (transfer learning) 之间建立联系等。
相关链接:http://www.offconvex.org/2019/03/19/CURL/
(本文为 AI科技大本营翻译文章,转载请微信联系 1092722531)
◆
精彩推荐
◆
推荐阅读:
NLP泰斗董振东老师与他的知网 | 纪念
线下沙龙 | 2019如何学Python?这里有你需要的答案
10行代码,用Python写一个USB“病毒”?
Python官方中文文档上线,Pythoner快收藏福利!
JavaScript 力压 Java 成最受欢迎编程语言,TypeScript 大涨!
工作 996,生病 ICU!这一次,程序员不忍了!
“V神给了我1000个ETH, 我用来招了两个程序员” 独立开发者做到极限就是Paul Hauner | 人物志
阿里带火的中台,究竟是个啥?
曝光!月薪5万的程序员面试题:73%人都做错,你敢试吗?
❤点击“阅读原文”,查看历史精彩文章。
相关文章:

YEX黄建:脱离比特币谈区块链,要么真傻,要么装疯卖傻丨区块链十人谈
如果说2017年是属于虚拟货币的一年,那么2018年的区块链将是生态和应用的一年,随之而来的也将是新的玩法、新的赚钱姿势。为此,雷锋网推出“区块链十人谈”(十人者,取是知众人博所长之意,非实指)…

70佳精美的PSD素材免费下载(上篇)
设计师经常会去网上搜罗各种各样的素材,这些免费素材不仅能帮助他们节省大量的时间,而且能有很好的效果。今天,本文与大家分享70佳精美的PSD素材,非常感谢那些很有才华的设计师分享它们的劳动成果,让更多的人可以使用他…

漫画讲述人工智能简史
点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天,请扫码咨询 ↑↑↑作者 | 武博士、宋知达、袁雪瑶、聂文韬来源 | 大鱼AI(id:DayuAI-Founder)本文我们会以生动有趣的漫画来介绍关于人工智能(AI)相…

【Go】Go基础(七):包
一、标准库概述 1、官方手册 内置包在 Go 语言中有 150 个以上,它们被称为标准库,完整列表可以在Go Walker中查看 https://gowalker.org/search?qgorepos 2、常用包简介 unsafe: 包含了一些打破 Go 语言“类型安全”的命令,一般的程序中不会…

Mysql是时候学习一个存储过程了
create procedure 存储过程名() DECLARE uid INT; #注意声明的变量名不能跟表的字段名一致,否则会报错。如user的主键是id,那么这里声明用来存id值的变量名就不能为id,可以改为uid等 DECLARE done INT DEFAULT 0; #repeat结束标识 DECLARE us…

ASP.NET的Cookie跨域问题
将Cookie的有效范围限制到域。 默认情况下,Cookie 与特定的域相关联。例如,如果您的站点是 www.contoso.com,那么当用户向该站点请求页面时,您编写的Cookie就被发送到服务器。(有特定路径值的Cookie除外)…

详解物联网的中间件:为何说它是不可或缺的?
互联网的大规模普及,拉近了人与人之间的交流,而不同国家人与人之间的交往也变得密切起来。由于彼此使用的语言不通,为了能够互相交流,我们需要将不同种的交流语言转换成对方可识别的信息,这就是翻译存在的理由了。同样…

Decoders对于语义分割的重要性 | CVPR 2019
点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天,请扫码咨询 ↑↑↑作者 | Lin-Zhuo Chen转载自博客链接:https://linzhuo.xyz/posts/DUpsample/今天为大家推荐一篇 CVPR2019 关于语义分割的文章 Decoders Matter for Semantic Segme…

【Go】Go基础(八):结构体和方法
一、 结构体(struct) 1、结构体定义 type identifier struct {field1 type1field2 type2... }声明:new(Type) 和 &Type{}是等价的 2、初始化结构体 type Interval struct {start intend int }初始化方式: intr : Inter…

Windows 2008 R2 SP1部署Lync2010企业版(四)
9 部署存档和监控服务器 1) 以域管理身份登录SQL01服务器。 2) 单击“开始”,依次指向“程序”、“管理工具”,然后单击“服务器管理器”显示服务器管理器。 3) 单击“添加功能”启动“添加功能向导”,选择“消息队列”,下一步。 …

【Go】Go基础(九):接口(Interfaces)与反射(reflection)
一、接口(interfaces) 1、概述 接口定义了一组方法(方法集),但是这些方法不包含(实现)代码:它们没有被实现(它们是抽象的)。接口里也不能包含变量。 通过如…

用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger
原型链是JS的必备,作为ECMAScript4,原型链也是支持的。 特别说明,ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用。 本文旨在介绍如何使用原型链。 任意对象类型都有一个prototype属性,包括导入的Unity的A…

教育部发文35所高校新增AI本科专业!想回去重新高考
点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天,请扫码咨询 ↑↑↑作者 | 琥珀出品 | AI科技大本营(ID:rgznai100)2019 年 3 月 28 日,教育部公布了 2018 年度普通高等学校本科专业备案和审批结果。消息一出&…

莱芜市公安局交警支队智能交通项目集成及容灾公开招标公告
莱芜市公安局交警支队智能交通建设项目公开招标公告 时间:2011-7-5 点击:249莱芜市公安局交警支队智能交通建设项目公开招标公告一、招标人名称:莱芜市公安局交警支队 联系方式:0634-5667998(吕老师)二、招标代理机构名称&#x…

【Go】Go基础(十):文件读写
一、读写数据 1、读取用户的输入 使用fmt 包提供的 Scan 和 Sscan 开头的函数; * Scanln 扫描来自标准输入的文本,将空格分隔的值依次存放到后续的参数内,直到碰到换行。 * Scanf 与其类似,除了 Scanf 的第一个参数用作格式字符…

怎样能拿到第一份编程工作?这里告诉你答案 | 码书
“写代码时,每次都要告诉自己:最后负责维护代码的,会是一个知道你住在哪的变态暴力狂。” ——约翰伍德(John Woods)拿下第一份编程工作需要付出更多努力,但是如果采纳下面的建议,应该不会有太大…

JSON知识点
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读…

asp常用函数(备忘)
1.数组长度: <% Dim grade,i gradesplit("1,2,5,10,20,50,100,200,500,1000",",") for i0 to ubound(grade) response.write grade(i)&"\n" next %> 2.获得插入的id set rs server.createobject(&q…

【leetcode】力扣刷题(1):两数之和(Go、Python)
一、问题描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums [2, 7,…

轻松练:如何从900万张图片中对600类照片进行分类|技术头条
点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后2天,请扫码咨询 ↑↑↑作者 | Aleksey Bilogur译者 | 风车云马责编 | Jane出品 | AI科技大本营(公众号id:rgznai100)【导语】完成一个简单的端到端的机器学习模型需要几步&…

介绍两个好玩的和Github相关的Chrome扩展
1. Octotree 默认的github网页里的代码显示没有我们在IDE里看到的直观,即代码文件所在的文件夹无法以树形层级结构显示在屏幕左边。 安装Octotree之后: 方便多了。 2. Isometric Contributions github commit的统计页面比较平淡: 安装了Isome…

Schema约束模式实例
book.xsd <?xml version"1.0" encoding"UTF-8"?> <!-- xmlns:默认命名空间 xmlns:xs:当前的文档的标记来自http://www.w3.org/2001/XMLSchema命名空间 前缀:xs elementFormDefault:当前文档使用的标记必须是使用http://www.w3.…

【leetcode】力扣刷题(2):两数相加(go语言)
一、问题描述 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可…

“GANs之父”Ian Goodfellow被爆已从Google离职
点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后2天,请扫码咨询 ↑↑↑整理 | 一一出品 | AI科技大本营(ID:rgznai100)3 月 28 日,深度学习大牛李沐在知乎爆料称,他从某机器学习大佬处获悉,…

Gulp快速入门教程
Gulp是基于流的前端自动化的构建工具,虽说如今是webpack盛行的时代,但是gulp和webpack整合效果更美味的,鱼与熊掌都可兼得哦!本文只介绍下Gulp的基本使用和一些常用的Gulp插件,废话不多说,一起来看看吧。 g…

linux 防火墙 命令
-- 永久设置防火墙(重启不恢复) 开启:chkconfig iptables on 关闭:chkconfig iptables off-- 暂时设置防火墙(重启后恢复) 开启:service iptables start 关闭:service i…

如何将TensorFlow Serving的性能提高超过70%?
点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后2天,请扫码咨询 ↑↑↑译者 | Major出品 | AI科技大本营(ID:rgznai100)TensorFlow已经发展成为事实上的ML(机器学习)平台,在业界和研究领域都很流行。对TensorFlow…

【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)
一、问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是…

单点登录与权限管理本质:session和cookie介绍
本篇开始写「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,这部分主要介绍相关的知识概念、抽象的处理过程、常见的实现框架。通过这部分的介绍,能够对单点登录与权限管理有整体上的了解,对其相关概念、处理流程、…

【.Net MF网络开发板研究-04】Socket编程之服务端
前几篇文章介绍了Http相关的应用,其实从技术角度而言,应该先介绍Socket编程,然后再介绍Http,毕竟Http是用Socket相关函数编程实现的。 .NET Micro Framework的Socket函数和桌面版.NET Framework中的函数完全兼容,换句话…