今天看到了Hinton团队的一项无监督表示学习的新研究:SimCLR,其中总结了对比损失为无监督学习带来的飞速进展。于是决定把近三年来这方面的论文都读一下,2018、2019和2020每年各一篇,开始吧!
第一篇论文,是2018年DeepMind团队研究出的新的无监督表示学习方法:Contrastive Predictive Coding,即对比预测编码(CPC)。
论文下载
题目:《Representation Learning with Contrastive Predictive Coding》
地址:https://arxiv.org/pdf/1807.03748.pdf
相关内容补充
- 表示学习(Representation Learning):学习数据的表征,以便在构建分类器或其他预测器时更容易提取有用的信息,无监督学习也属于表示学习。
- 互信息(Mutual Information):表示两个变量和之间的关系,定义为:,可以解释为由X引入而使Y的不确定度减小的量,越大说明两者关系越密切。
- 对比损失(Contrastive Loss):计算成对样本的匹配程度,主要用于降维中。计算公式为:,其中为两个样本的欧式距离,代表两个样本的匹配程度,代表设定的阈值。损失函数的目的是让原本分布相似的样本在降维后也相似,原本不相似的在降维后也保持不相似。
- 噪声对抗估计(Noise Contrastive Estimation, NCE):在NLP任务中一种降低计算复杂度的方法,将语言模型估计问题简化为一个二分类问题。
- 负采样(Negative Sampling, NEG):表示负采样,是NCE的一个简化版本,目的是提高训练速度,改善所得词向量的质量。采用了相对简单的随机负采样,本文中选择数据集中一个是正样本,其他均为负样本。
问题提出
目前,表示学习的主要问题在于,网络学习到的特征往往都只适用于特定的任务,其泛化性能有待提升。最近的无监督学习都沿用了最普遍的方法:预测未来的、缺失的或上下文的特征,因此无监督学习可以定义为预测问题,将预测到的特征再用于表示学习。
论文主要工作:
1、将高维数据编码到一个更容易对任务进行建模的低维隐空间中;
2、在隐空间中运用了一个强大的自回归模型,来预测未来特征或步骤;
3、为了实现端到端的网络训练,使用了对抗噪声估计作为损失函数。
网络模型
如图所示,代表输入的音频序列,首先经过一个非线性编码器,它将输入序列编码成隐空间的序列,这时时间的分辨率会随之降低;然后,再用一个自回归模型将时刻之前的隐空间序列整合,得到当前状态的内容隐空间表示。
这篇论文认为,在预测未来数据的特征时,由于输入数据维度很高,再加上用单峰损失函数可能得不到细节信息,直接用一个基于的生成式模型去获得数据特征的方法不是最有效的。因此在CPC中,对和的密度比建模,构造了一个概率密度函数: 使用双线性模型,对每个k时刻进行线性映射,这个过程对非线性网络和循环神经网络也同样适用。同时函数和、的互信息成正比,通过最大化两者的互信息来解析输入数据在隐空间的共有特征。
网络使用了重要性采样(importance sampling)和对抗噪声估计等技巧避免了直接对高维数据建模,直接从和中采样得到正负样本,再进行计算。
和都可以作为下游任务的输入,需要获取过去输入信号的信息时更适用,不需要时更适用(比如图像分类)。
损失函数
编码器和自回归模型基于NCE(Noise Contrastive Estimator)联合优化损失函数,也称为InfoNCE。给定数据集,个随机样本中包含一个正样本(从中采样),和个负样本(从中采样),定义优化函数为:
这是对正样本正确分类的交叉熵损失,其中是网络的预测输出,再将的概率形式代入,得到损失函数的概率形式(原文式5)。
最后可估计和的互信息:样本数量越大,损失函数越小,两个分布的互信息就越大。因此,最大化互信息可看做最小化损失函数,最小化损失函数就需要最大化函数,经过论证与负采样的数量无关。
实验结果
论文对音频、图像、文本和强化学习任务中分别进行了实验,先用CPC模型对数据进行隐空间编码,再预测训练数据未来的或缺失的特征,最后训练分类器对CPC得到的特征进行分类。相当于是对高维数据的一种降维方法,降维的同时基于已有的数据分布情况,预测出更多的特征信息。
对于有时间维度的数据,例如音频、文本,CPC模型对于当前时刻以前的数据进行训练,得到每个时间点的隐空间向量,再用自回归模型结合之前的隐变量和当前隐变量,预测时间以后的特征分布;对于没有时间维度的数据,如图像,模型的自回归部分根据隐变量得到特征图的前2~5行,再根据已有信息预测剩余行的特征(输出的是7x7的网格)。
总结
1、论文的主要思想
本文提出了对比预测编码(CPC),这是一种用于提取紧凑潜在表示以对未来观测进行编码的框架。CPC将自回归建模和噪声对比估计与预测编码的直觉相结合,以一种无监督的方式学习抽象表示。
利用编码器和自回归模型对高维数据进行降维,得到可表示信息,再用对比噪声估计预测未来的表示信息。
2、编码器和自回归模型各自的作用
编码器将输入高维数据映射成低维空间的隐变量,使用自回归模型是为了将之前时刻和当前时刻的隐变量汇总。
挖坑
1、负采样的方式具体怎么简化成二分类的问题?
实质是基于对比学习的模型训练方式,在MOCO的论文中,作者对当前主流的对比学习方法做了比较清楚的总结:对比学习和GAN网络以及NCE存在很大联系,可以将其看做是一个查字典的过程,在输入高维连续的数据上建立字典,构造一个对比损失函数,让每个查询样本和它唯一对应的键值关联最大,和其他键值关联最小。其中查询样本是输入数据经由编码器在隐空间的低维表示向量,键值则是更具高层语义信息的内容表示向量。
在本文中可以理解为,输入的数据经过一个编码器得到低维空间特征,再将经过自回归模型得到内容表示,网络的目的是让当前输入的只和之间互信息最大,其余视为负样本的和互信息最小。损失函数的设计是基于N分类的softmax形式,中分子是正样本的预测置信度(以互信息的形式),分母是其他负样本的预测置信度,损失函数越小,说明样本和正确键值之间距离越小,和错误键值之间距离越大。
2、无标注信息的数据经过CPC得到特征,再对特征进行分类的时候以什么作为对比标签?
根据DIM论文里的描述,DIM的目标在于训练一个编码器,该编码器能够对输入数据进行比较好的特征解析,当把编码器融合进下游任务时,比如分类任务,就需要在编码器后面添加少量的卷积层或全连接层,这些网络的目的是把编码器得到的特征转化为对应的回归值,从而得到分类的预测标签。因此后续添加上去的网络层需要经过训练,训练的标签就来源于数据。
这个问题实际上是想问,既然做分类任务,为什么要先无监督训练一个编码器得到特征,再有监督地对特征训练一个分类器,这样还是一个有监督的分类方式?后来发现分类任务只是评估编码器表示能力的工具,用于测试编码器得到的特征是否包含所需要的类别信息,所以理所应当再用输入数据的标签去训练一个后接网络。