对比表征学习(一)Contrastive Representation Learning

2024-05-27 15:52

本文主要是介绍对比表征学习(一)Contrastive Representation Learning,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对比表征学习(一)

主要参考翁莉莲的Blog,本文主要聚焦于对比损失函数

对比表示学习(Contrastive Representation Learning)可以用来优化嵌入空间,使相似的数据靠近,不相似的数据拉远。同时在面对无监督数据集时,对比学习是一种极其有效的自监督学习方式

对比学习目标

在最早期的对比学习中只有一个正样本和一个负样本进行比较,在当前的训练目标中,一个批次的数据集中可以有多个正样本和负样本对。

对比损失函数

Contrastive loss

该论文是以对比方式进行深度度量学习(deep metric learning)的最早训练目标之一

给定一组输入样本 { x i } \{x_i\} {xi},每个样本都有一个对应的标签 y i ∈ { 1 , … , L } y_i \in \{1, \dots, L\} yi{1,,L},共有 L L L 个类别。我们希望学习一个函数 f θ ( ⋅ ) : X → R d f_{\theta}(\cdot) : \mathcal{X} \rightarrow \mathbb{R}^d fθ():XRd,该函数能将 x i x_i xi 编码成一个嵌入向量,使得同一类别的样本具有相似的嵌入,而不同类别的样本具有非常不同的嵌入。因此,对比损失(Contrastive Loss)会取一对输入 ( x i , x j ) (x_i, x_j) (xi,xj),并最小化同一类别样本间的嵌入距离,同时最大化不同类别样本间的嵌入距离。
L cont ( x i , x j , θ ) = 1 [ y i = y j ] ∥ f θ ( x i ) − f θ ( x j ) ∥ 2 + 1 [ y i ≠ y j ] max ⁡ ( 0 , ϵ − ∥ f θ ( x i ) − f θ ( x j ) ∥ 2 ) \mathcal{L}_{\text{cont}}(x_i, x_j, \theta) = \mathbf{1}[y_i = y_j] \left\| f_\theta(x_i) - f_\theta(x_j) \right\|^2 + \mathbf{1}[y_i \neq y_j] \max(0, \epsilon - \left\| f_\theta(x_i) - f_\theta(x_j) \right\|^2) Lcont(xi,xj,θ)=1[yi=yj]fθ(xi)fθ(xj)2+1[yi=yj]max(0,ϵfθ(xi)fθ(xj)2)
其中 ϵ \epsilon ϵ​ 是一个超参数,用来定义不同类别样本的最低下界。

Triplet loss

参考论文,提出的目的是用来学习在不同姿势和角度下对同一个人进行人脸识别。

在这里插入图片描述

给定一个锚定输入 x x x,我们选择一个正样本 x + x^+ x+ 和一个负样本 x − x^- x,意味着 x + x^+ x+ x x x 属于同一类,而 x − x^- x 则来自另一个不同的类。三元组损失(Triplet Loss)通过以下公式学习,同时最小化锚定 x x x 和正样本 x + x^+ x+ 之间的距离,并最大化锚定 x x x 和负样本 x − x^- x​ 之间的距离:
L triplet ( x , x + , x − ) = ∑ x ∈ X max ⁡ ( 0 , ∥ f ( x ) − f ( x + ) ∥ 2 − ∥ f ( x ) − f ( x − ) ∥ 2 + ϵ ) \mathcal{L}_{\text{triplet}}(x, x^+, x^-) = \sum_{x \in \mathcal{X}} \max \left(0, \|f(x) - f(x^+)\|^2 - \|f(x) - f(x^-)\|^2 + \epsilon \right) Ltriplet(x,x+,x)=xXmax(0,f(x)f(x+)2f(x)f(x)2+ϵ)
其中,边界参数 ϵ \epsilon ϵ 被配置为相似对与不相似对之间距离的最小偏移量。

Lifted Structured Loss

参考论文,利用一个训练批次中的所有成对边缘,以提高计算效率。

在这里插入图片描述

D i j = ∣ f ( x i ) − f ( x j ) ∣ 2 D_{ij} = |f(x_i) - f(x_j)|_2 Dij=f(xi)f(xj)2,一个结构化的损失函数定义如下:
L struct = 1 2 ∣ P ∣ ∑ ( i , j ) ∈ P max ⁡ ( 0 , L struct ( i j ) ) 2 \mathcal{L}_{\text{struct}} = \frac{1}{2|\mathcal{P}|} \sum_{(i,j) \in P} \max(0, \mathcal{L}_{\text{struct}}^{(ij)})^2 Lstruct=2∣P1(i,j)Pmax(0,Lstruct(ij))2
其中,
L struct ( i j ) = D i j + max ⁡ ( max ⁡ ( i , k ) ∈ N ( ϵ − D i k ) , max ⁡ ( j , l ) ∈ N ( ϵ − D j l ) ) \mathcal{L}_{\text{struct}}^{(ij)} = D_{ij} + \max \left(\max_{(i,k) \in \mathcal{N}} (\epsilon - D_{ik}), \max_{(j,l) \in \mathcal{N}} (\epsilon - D_{jl})\right) Lstruct(ij)=Dij+max((i,k)Nmax(ϵDik),(j,l)Nmax(ϵDjl))
这里 P \mathcal{P} P 包含了正样本对的集合,而 N \mathcal{N} N 是负样本对的集合。注意,密集的成对平方距离矩阵可以在每个训练批次中轻松计算。 max ⁡ ( max ⁡ ( i , k ) ∈ N ( ϵ − D i k ) , max ⁡ ( j , l ) ∈ N ( ϵ − D j l ) ) \max \left(\max_{(i,k) \in \mathcal{N}} (\epsilon - D_{ik}), \max_{(j,l) \in \mathcal{N}} (\epsilon - D_{jl})\right) max(max(i,k)N(ϵDik),max(j,l)N(ϵDjl)) 部分用来挖掘难负样本,然而,这部分不是平滑的,可能会导致在实践中收敛到不好的局部最优。因此,它被放宽为以下形式:
L struct ( i j ) = D i j + log ⁡ ( ∑ ( i , k ) ∈ N exp ⁡ ( ϵ − D i k ) + ∑ ( j , l ) ∈ N exp ⁡ ( ϵ − D j l ) ) \mathcal{L}_{\text{struct}}^{(ij)} = D_{ij} + \log \left( \sum_{(i,k) \in \mathcal{N}} \exp(\epsilon-D_{ik}) + \sum_{(j,l) \in \mathcal{N}} \exp(\epsilon-D_{jl}) \right) Lstruct(ij)=Dij+log (i,k)Nexp(ϵDik)+(j,l)Nexp(ϵDjl)
在论文中,他们还提出通过在每个批次中积极加入一些难分的负样本(hard negative),通过给出几对随机的正样本,来提高负样本的质量

N-pair loss

多类 N 对损失(paper)对三重损失进行了泛化,以包括与多个负样本的比较。

给定一个包含一个正样本和 N − 1 N-1 N1 个负样本的 N + 1 N+1 N+1 元组(还要包括样本本身,所以N+1),训练样本为 { x , x + , x 1 − , … , x N − 1 − } {\{x, x^+, {x_1}^-, \dots, {x_{N-1}}}^-\} {x,x+,x1,,xN1},损失被定义为:

L N -pair ( x , x + , { x i } i = 1 N − 1 ) = log ⁡ ( 1 + ∑ i = 1 N − 1 exp ⁡ ( f ( x ) T f ( x i − ) − f ( x ) T f ( x + ) ) ) = − log ⁡ exp ⁡ ( f ( x ) T f ( x + ) ) exp ⁡ ( f ( x ) T f ( x + ) ) + ∑ i = 1 N − 1 exp ⁡ ( f ( x ) T f ( x i − ) \mathcal{L}_{N\text{-pair}}(x, x^+, \{x_i\}_{i=1}^{N-1}) = \log \left( 1 + \sum_{i=1}^{N-1} \exp(f(x)^T f({x_i}^-) - f(x)^T f(x^+)) \right) \\ = -\log \frac{\exp(f(x)^T f(x^+))}{\exp(f(x)^T f(x^+)) + \sum_{i=1}^{N-1} \exp(f(x)^T f({x_i}^-)} LN-pair(x,x+,{xi}i=1N1)=log(1+i=1N1exp(f(x)Tf(xi)f(x)Tf(x+)))=logexp(f(x)Tf(x+))+i=1N1exp(f(x)Tf(xi)exp(f(x)Tf(x+))

如果我们每个类别只采样一个负样本,这等同于用于多分类的softmax损失。

NCE

Noise Contrastive Estimation,论文链接

创新点是运行逻辑回归来区分目标数据和噪声。

x x x 是目标样本,符合分布 P ( x ∣ C = 1 ; θ ) = p θ ( x ) P(x|C = 1; \theta) = p_\theta(x) P(xC=1;θ)=pθ(x),并且 x ~ \tilde{x} x~ 是噪声样本,符合分布 P ( x ~ ∣ C = 0 ) = q ( x ~ ) P(\tilde{x}|C = 0) = q(\tilde{x}) P(x~C=0)=q(x~)。需要注意逻辑回归模型是模拟对数几率(即 logit),在这种情况下,我们希望对一个来自目标数据分布而非噪声分布的样本 u u u 的 logit 进行建模:

ℓ ( u ) = log ⁡ p θ ( u ) q ( u ) = log ⁡ p θ ( u ) − log ⁡ q ( u ) \ell(u) = \log \frac{p_\theta(u)}{q(u)} = \log p_\theta(u) - \log q(u) (u)=logq(u)pθ(u)=logpθ(u)logq(u)

将 logits 转换成概率后,通过 sigmoid 函数 σ ( ⋅ ) \sigma(\cdot) σ(),我们可以应用交叉熵损失:

L N C E = − 1 N ∑ i = 1 N [ log ⁡ σ ( ℓ ( x i ) ) + log ⁡ ( 1 − σ ( ℓ ( x ~ i ) ) ) ] L_{NCE} = -\frac{1}{N} \sum_{i=1}^N \left[ \log \sigma(\ell(x_i)) + \log (1 - \sigma(\ell(\tilde{x}_i))) \right] LNCE=N1i=1N[logσ((xi))+log(1σ((x~i)))]

其中:

σ ( ℓ ) = 1 1 + exp ⁡ ( − ℓ ) = p θ p θ + q \sigma(\ell) = \frac{1}{1 + \exp(-\ell)} = \frac{p_\theta}{p_\theta + q} σ()=1+exp()1=pθ+qpθ

这里列出了NCE损失的原始形式,它仅使用了一个正样本和一个噪声样本。在许多后续工作中,融合多个负样本的对比损失也广泛被称为NCE。

InfoNCE

论文链接,受到NCE的启发,InfoNCE使用分类交叉熵损失函数在一组不相关的噪声样本中寻找正例

给定一个上下文向量 c c c,正样本应该从条件分布 p ( x ∣ c ) p(x|c) p(xc) 中抽取,而 N − 1 N-1 N1 个负样本则从与上下文 c c c 独立的提议分布 p ( x ) p(x) p(x) 中抽取。为了简洁,让我们将所有样本标记为 X = { x i } i = 1 N X = \{x_i\}_{i=1}^N X={xi}i=1N,其中只有一个 x pos x_{\text{pos}} xpos 是正样本。我们正确检测到正样本的概率为:

p ( C = pos ∣ X , c ) = p ( x pos ∣ c ) ∏ i = 1 , … , N ; i ≠ pos p ( x i ) ∑ j = 1 N [ p ( x j ∣ c ) ∏ i = 1 , … , N ; i ≠ j p ( x i ) ] = p ( x pos ∣ c ) p ( x pos ) ∑ j = 1 N p ( x j ∣ c ) p ( x j ) = f ( x pos , c ) ∑ j = 1 N f ( x j , c ) p(C = \text{pos} | X, c) = \frac{p(x_{\text{pos}}|c) \prod_{i=1, \dots, N; i \neq \text{pos}} p(x_i)}{\sum_{j=1}^N \left[ p(x_j|c) \prod_{i=1, \dots, N; i \neq j} p(x_i) \right]} =\frac{\frac{p(x_{\text{pos}} | c)}{p(x_{\text{pos}})}}{\sum_{j=1}^N \frac{p(x_j | c)}{p(x_j)}}= \frac{f(x_{\text{pos}}, c)}{\sum_{j=1}^N f(x_j, c)} p(C=posX,c)=j=1N[p(xjc)i=1,,N;i=jp(xi)]p(xposc)i=1,,N;i=posp(xi)=j=1Np(xj)p(xjc)p(xpos)p(xposc)=j=1Nf(xj,c)f(xpos,c)

其中,得分函数 f ( x , c ) ∝ p ( x ∣ c ) p ( x ) f(x, c) \propto \frac{p(x|c)}{p(x)} f(x,c)p(x)p(xc)

InfoNCE 损失函数优化了正确分类正样本的负对数概率:

L InfoNCE = − E [ log ⁡ f ( x , c ) ∑ x ′ ∈ X f ( x ′ , c ) ] \mathcal{L}_{\text{InfoNCE}} = -\mathbb{E}\left[\log \frac{f(x, c)}{\sum_{x'\in X} f(x', c)}\right] LInfoNCE=E[logxXf(x,c)f(x,c)]

事实上, f ( x , c ) f(x, c) f(x,c) 估计的密度比 p ( x ∣ c ) p ( x ) \frac{p(x|c)}{p(x)} p(x)p(xc) 与互通信息优化有关。为了最大化输入 x x x 和上下文向量 c c c 之间的互通信息,我们有:

I ( x ; c ) = ∑ x , c p ( x , c ) log ⁡ p ( x ∣ c ) p ( x ) p ( c ) = ∑ x , c p ( x , c ) log ⁡ p ( x ∣ c ) p ( x ) I(x; c) = \sum_{x,c} p(x, c) \log \frac{p(x|c)}{p(x)p(c)} = \sum_{x,c} p(x, c) \log \frac{p(x|c)}{p(x)} I(x;c)=x,cp(x,c)logp(x)p(c)p(xc)=x,cp(x,c)logp(x)p(xc)

其中, log ⁡ p ( x ∣ c ) p ( x ) \log \frac{p(x|c)}{p(x)} logp(x)p(xc) 的对数项由 f f f 估计。

对于序列预测任务,CPC(Contrastive Predictive Coding)模型并不直接建模未来的观测 p k ( X t + k ∣ C t ) p_k(X_{t+k} | C_t) pk(Xt+kCt)(这可能相当昂贵),而是模型一个密度函数以保留 X t + k X_{t+k} Xt+k C t C_t Ct 之间的互信息:

f k ( X t + k , c t ) = exp ⁡ ( z t + k T W k c t ) ∝ p ( X t + k ∣ c t ) p ( X t + k ) f_k(X_{t+k}, c_t) = \exp(z_{t+k}^T W_k c_t) \propto \frac{p(X_{t+k}|c_t)}{p(X_{t+k})} fk(Xt+k,ct)=exp(zt+kTWkct)p(Xt+k)p(Xt+kct)

其中 z t + k z_{t+k} zt+k 是编码后的输入, W k W_k Wk 是一个可训练的权重矩阵。

Soft-Nearest Neighbors Loss

Soft-Nearest Neighbors Loss被Salakhutdinov & Hinton 和Frosst et.进一步扩展,使其可以包含多个正样本。

给定一批样本 { x i , y i } i = 1 B \{x_i, y_i\}_{i=1}^B {xi,yi}i=1B,其中 y i y_i yi x i x_i xi 的类别标签,以及一个用于测量两个输入相似性的函数 f ( ⋅ , ⋅ ) f(\cdot, \cdot) f(,),在温度 τ \tau τ 下定义的软最近邻损失为:

L s n n = − 1 B ∑ i = 1 B log ⁡ ∑ j ≠ i , y j = y i exp ⁡ ( − f ( x i , x j ) τ ) ∑ k ≠ i exp ⁡ ( − f ( x i , x k ) τ ) \mathcal{L}_{snn} = -\frac{1}{B} \sum_{i=1}^B \log \frac{\sum_{j \neq i, y_j = y_i} \exp(-\frac{f(x_i, x_j)}{\tau})}{\sum_{k \neq i} \exp(-\frac{f(x_i, x_k)}{\tau})} Lsnn=B1i=1Blogk=iexp(τf(xi,xk))j=i,yj=yiexp(τf(xi,xj))

温度参数 τ \tau τ 用于调整特征在表示空间中的集中程度。例如,当温度较低时,损失主要由小距离主导,而广泛分散的表征无法产生很大的贡献,因此变得无关紧要。

这篇关于对比表征学习(一)Contrastive Representation Learning的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007919

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在