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

news2024/11/15 18:41:33
  • 对比表征学习(二)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 τ 用于调整特征在表示空间中的集中程度。例如,当温度较低时,损失主要由小距离主导,而广泛分散的表征无法产生很大的贡献,因此变得无关紧要。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玩转STM32-通用同步/异步收发器USART(详细-慢工出细活)

CPU与外围设备之间的信息交换或计算机与计算机之间的信息交换称为通信。基 本的通信方式有两种,即并行通信和串行通信。文章目录 一、串行通信基础1.1 串行通信的方式1.2 串行通信的数据传输形式1.3 波特率 二、STM32的USART的结构特征(了解)…

采集EthernetIP IO从站设备数据 转 profinet IO协议项目案例

1 文档说明 设置网关采集EthernetIP IO设备数据把采集的数据转成profinet IO协议转发给其他系统。 2 准备工作 仰科网关。支持采集EthernetIP IO数据,profinet IO协议转发。电脑。IP设置成192.168.1.198,和网关在同一个网段。网线、12V电源。 3 网关…

MySQL8报错Public Key Retrieval is not allowedz 怎么解决?

问题描述 当我们使用数据库管理工具连接mysql8的时候,可能遇到报错: Public Key Retrieval is not allowed 解决办法 1、在连接属性中配置allowPublicKeyRetrieval设置为true 2、在连接URL中加上配置allowPublicKeyRetrieval为true

《软件方法(下)》8.3.4.6 DDD话语“聚合”中的伪创新(1)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.3 建模步骤C-2 识别类的关系 8.3.4 识别关联关系 8.3.4.6 DDD话语“聚合”中的伪创新 DDD话语中也有“聚合”。Eric Evans的“Domain-Driven Design: Tackling Complexity in the…

「光储充放」一体充电站-一文读懂光储充放充电站

“光储充放”一体充电站作为一种储能充电的新形式渐渐走进人们的生活,全国很多地区都开始陆续投放运营“光储充放”一体充电站,今天的这篇文章,就带大家全面了解“光储充放”这一新型充电站。 头图来源 | 视觉中国 01 政策背景 早在2020年…

43-2 Linux入侵排查实验

环境准备: 老规则,我没有靶场就自己搭建了类似, 这里准备一台CentOS 7虚拟机作为受害者,然后使用CS制作木马并在受害者主机上线,具体过程可以看我之前写的一篇文章: 黑客必备利器:如何在系统上安装和使用 CobaltStrike(简称:CS)_cobalt strike-CSDN博客 最终的效果…

【ARFoundation自学03】AR Point Cloud 点云(参考点标记)功能详解

和平面识别框架一样 1为XR Origin添加AR Point Cloud Manager组件 然后你的ar应用就具备了点云识别功能,就这么简单 2.可视化这些云点 创建一个美术效果的预制体,人家提供了预设模板 然后拖到仓库(ASSETS)创建预制体&#xff…

红酒与不同烹饪方法的食物搭配原则

红酒与食物的搭配是一门艺术,而不同烹饪方法的食物与红酒的搭配也有其与众不同之处。红酒与食物的搭配不仅涉及到口感、风味和营养,还与烹饪方法和食物质地等因素息息相关。云仓酒庄雷盛红酒以其卓着的品质和丰富的口感,成为了实现完善搭配的…

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

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

JAVA学习·String类的常用方法

String 类及其创建 String 类的创建 String 类是 Java 内置的一个类,其完全限定类名是java.lang.String。想要创建一个字符串有多重方式,比如创建字符串"Hello": String s1 "Hello"; // 字面量创建 String s2 new St…

IDEA升级web项目为maven项目乱码

今天将一个java web项目改造为maven项目。 首先&#xff0c;创建一个新的maven项目&#xff0c;将文件拷贝到新项目中。 其次&#xff0c;将旧项目的jar包&#xff0c;在maven的pom.xml做成依赖 接着&#xff0c;把没有maven坐标的jar包在编译的时候也包含进来 <build>…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月29日,星期三

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月29日 星期三 农历四月廿二 1、 首个未成年人游戏退费标准发布&#xff1a;监护人与网游服务提供者将按错担责。 2、 六部门联合印发通知&#xff1a;鼓励加快高清超高清电视机等普及、更新。 3、 神舟十八号航天员乘…

Rocksdb原理简介

100编程书屋_孔夫子旧书网 Rocksdb作为当下nosql中性能的代表被各个存储组件&#xff08;mysql、tikv、pmdk、bluestore&#xff09;作为存储引擎底座&#xff0c;其基于LSM tree的核心存储结构&#xff08;将随机写通过数据结构转化为顺序写&#xff09;来提供高性能的写吞吐时…

上海亚商投顾:沪指冲高回落 电力、电网产业链持续爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;深成指、创业板指均跌超1%。电力、电网股再度爆发&#xff0c;众智科技、郴电国…

Post Microsoft Build and AI Day 上海开发者日

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 这个六一怎么过&#xff1f;来微软 Reactor&#xff0c;一起过儿童节吧&#xff01; 6月1日&#xff0c;Microsoft Azure & Microsoft Reactor 面向大小朋友特别推出六一特辑&#xff0c;「Post Mic…

Django配置

后端开发&#xff1a; python 解释器、 pycharm 社区版、 navicate 、 mysql(phpstudy) 前段开发&#xff1a; vs code 、 google 浏览器 django 项目配置 配置项目启动方式 创建模型 创建一个应用 在应用中创建模型类 根据模型类生成数据表 创建应用 创建模型类 …

Ps:使用消失点滤镜进行透视贴图

可以在“消失点”滤镜中粘贴 Photoshoop 剪贴板中的图像。 拷贝的贴图可以来自于同一文档或不同文档&#xff0c;但不能是矢量图形。 比如&#xff0c;如果要将文字图层作为贴图&#xff0c;必须先将其栅格化。 一旦粘贴到“消失点”滤镜中&#xff0c;贴图将变为浮动选区&…

量子密钥分发系统基础器件(一):光纤干涉仪

干涉仪的基本原理是利用波的叠加来获得波的相位信息&#xff0c;从而获取实验中所关心的物理量。光纤干涉仪是由光学干涉仪发展而来的&#xff0c;利用光纤实现光的干涉&#xff0c;由于光纤取代透镜系统构成的光路具有柔软、形状可随意变化、传输距离远等特点&#xff0c;当前…

04--SpringBoot热部署与日志

1、热部署 1.1 引言 为了进一步提高开发效率&#xff0c;SpringBoot为我们提供了全部项目热部署&#xff0c;日后在开发过程中修改了部分代码或者相关配置文件之后&#xff0c;不需要再重启服务使其生效。在项目中开启了全局热部署之后&#xff0c;只需要在修改之后等待几秒钟…

数据库(9)——DQL基础查询

数据查询 数据查询是SQL中最复杂的&#xff0c;语法结构为 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后字段列表 ORDER BY 排序字段列表 LIMIT 分页参数 查询多个字段 SELECT 字段1&#xff0c;字段2...FROM…