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

  • 对比表征学习(二)Sentence Embedding

主要参考翁莉莲的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 τ 用于调整特征在表示空间中的集中程度。例如,当温度较低时,损失主要由小距离主导,而广泛分散的表征无法产生很大的贡献,因此变得无关紧要。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

src挖掘技巧--别人能挖到,你不来看看吗?

漏洞类型:拒绝服务漏洞 原理:通过控制修改验证码的长和宽,请求大量资源,导致拒绝服务漏洞,可以通过数据包的返回量值和返回时间来判断是否存在该漏洞。 实战报告 在获取验证码的时候进行抓包 右键打开验证码图片&am…

关于Linux软链你必须知道的实用知识点(非常详细)零基础入门到精通,收藏这一篇就够了

背景 Linux中的软链,是非常强大的工具,如果只是一知半解,在解决问题时一定会让你栽跟头或者浪费大量的时间。非常有必要提前掌握Linux软链的几个实用的知识点。 分析 软链是什么? 在Linux中,软链接(sym…

【CALayer-CALayer的基本属性 Objective-C语言】

一、接下来,我们来说这个Layer啊, 1.首先,Layer能接触到的,就是我们之前说截图啊,就是我们self.view里面,有一个layer属性, [self.view.layer renderInContext:(CGContextRef t)]; 那个里面,有一个layer属性,然后呢,是CALayer类型的, 接下来,我们就来学习一…

帆软报表点击表格给数据集传递参数案例

一、效果 有四个模块,分别是采购总金额,采购总数量,采购合同数量,采购合同申请数量通过点击单元格上的月份,展示不同的月份数据,进行单元格和表格之间的联动 二、准备好数据库表和展示数据内容 2.1 建表 …

【Java EE】网络原理——HTTP响应

目录 1.认识“状态码”(status code) 1.1 200 OK 1.2 404 Not Found 1.3 403 Forbodden 1.4 Method Not Allowed 1.5 Internal Sever Error 1.6 504 Gsteway Timeout 1.7 Move temporarily 1.8 Moved Permanently 1.9状态码小结 2.认识响应“报…

c语言 分而治之(施特拉森矩阵乘法)

给定两个大小分别为 nxn 的方阵 A 和 B&#xff0c;求它们的乘法矩阵。 朴素方法&#xff1a;以下是两个矩阵相乘的简单方法。 void multiply(int A[][N], int B[][N], int C[][N]) { for (int i 0; i < N; i) { for (int j 0; j < N; j) { …

【Python特征工程系列】利用SHAP进行特征重要性分析-决策树模型为例(案例+源码)

这是我的第290篇原创文章。 一、引言 SHAP 属于模型事后解释的方法&#xff0c;它的核心思想是计算特征对模型输出的边际贡献&#xff0c;再从全局和局部两个层面对“黑盒模型”进行解释。SHAP构建一个加性的解释模型&#xff0c;所有的特征都视为“贡献者”。 对于每个预测样…

北京证券公司港股通交易佣金手续费最低是多少?万0.8?港股通纳入规则是怎么样的?

港股通交易佣金概述 港股通的交易佣金可能会因证券公司和投资者的不同而有所差异。 北京证券公司的港股通交易佣金最低可能万分之零点八&#xff08;0.008%&#xff09;&#xff0c;但这需要投资者与证券公司客户经理了解&#xff0c;进行沟通和申请。 一般来说&#xff0c;…

树莓派部署harbor_arm64

文章目录 树莓派4b部署Harbor-arm64版本docker-compose维护命令访问harbor 192.168.1.111认用户名密码admin/Harbor12345 树莓派4b部署Harbor-arm64版本 harbor-arm版本 部署&#xff1a;参考 wget https://github.com/hzliangbin/harbor-arm64/releases/download/v1.9.3/ha…

常用压力、流量单位换算表

一、压力为单位面积所承受的力 压力&#xff1a;绝对压力 、表压力 、大气压力。相互关系&#xff1a;绝对压力表压力大气压力 绝对压力:当压力表示与完全真空的差。测量处的实际压力。 表压力:当表示其气体数值与该地域大气压力的差值。 大气压力&#xff1a;由大气重量所…

网吧|基于SprinBoot+vue的网吧管理系统(源码+数据库+文档)

网吧管理系统 目录 基于SprinBootvue的网吧管理系统 一、前言 二、系统设计 三、系统功能设计 1 管理员功能模块 2 网管功能模块 3 会员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#…

Docker搭建FRP内网穿透服务器

使用Docker搭建一个frp内网穿透 在现代网络环境中&#xff0c;由于防火墙和NAT等原因&#xff0c;内网设备无法直接被外网访问。FRP (Fast Reverse Proxy) 是一款非常流行的内网穿透工具&#xff0c;它能够帮助我们将内网服务暴露给外网。本文将介绍如何在Linux服务器上使用Do…

LitCTF2023

[LitCTF 2023]enbase64 base 64 里面有一个换表的函数 写代码 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() {char *result; char Destination[65]; int v3[65];int j;int i; char Source[]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcde…

多线程新手村3--多线程代码案例

1.1 单例模式 单例模式是设计模式中非常经典的一种。那么有同学肯定就会好奇了&#xff0c;什么是设计模式呢&#xff1f; 设计模式简单的说就是程序员的“棋谱”&#xff0c;我们下象棋时肯定或多或少都背过棋谱&#xff0c;例如当头炮、马后炮等&#xff0c;设计模式也是这…

防火墙技术基础篇:基于Ensp配置防火墙NAT server(服务器映射)

配置防火墙NAT server(服务器映射) 什么是NAT Server (服务器映射) NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是一种允许多个设备共享一个公共IP地址的技术。NAT Server&#xff0c;也称为服务器映射&#xff0c;是NAT技术中的一种应…

Windows找出权限维持的后门

Windows权限维持主要包含活动隐藏、自启动等技术。 隐藏文件 利用文件属性 最简单的一种隐藏文件的方式&#xff0c;文件右键属性&#xff0c;勾选隐藏&#xff0c;点击确定后&#xff0c;在这个文件里看不到刚刚的文件了。 如果要让文件显示出来&#xff0c;就点击查看&…

经典文献阅读之--SMERF(通过标清导航地图增强车道感知和拓扑理解)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&#xff0c;并附带200G…

目标检测——家庭日常用品数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

给pdf加水印,python实现

from PyPDF2 import PdfReader, PdfWriterdef add_watermark(pdf_file_in, pdf_file_mark, pdf_file_out):"""把水印添加到pdf中"""pdf_output PdfWriter()input_stream open(pdf_file_in, rb)pdf_input PdfReader(input_stream, strictFalse…

Linux java jni调用C++封装动态库

由于项目中java需要调用第三方提供的C动态库&#xff1b;由于第三方动态库传入的参数较多&#xff0c;还伴随着指针传入操作&#xff0c;导致java调用极为不便&#xff01;因此催生出对于第三方的C动态库进行二次封装。java调用只需按结构传入一个结构化的string即可。话不多说…