对比学习损失篇,从L-softmax到AM-softmax到circle-loss到PCCL

2023-05-16

前言

对比学习是一种比较学习,其主要目的为让模型学习到不同类别之间的特征,其被广泛应用于人脸识别,文本检索,图像分类等领域。对比学习的主要思想是增大不同类别间的距离,缩小相同类别间的距离,以此来学习到比较特征。

普通的对比学习损失

L C L = − l o g e x p ( s i , p / τ ) e x p ( s i , p / τ ) + ∑ n = 1 N e x p ( s i , n / τ ) \mathcal{L_{CL}=-log\frac{exp(s_{i,p}/\tau)}{exp(s_{i,p}/\tau)+\sum_{n=1}^{N}exp(s_{i,n}/\tau)}} LCL=logexp(si,p/τ)+n=1Nexp(si,n/τ)exp(si,p/τ)
说先看一下最普通的对比损失学习,当正样本对只有一对,负样本对有n对的时候,这就是最常见的交叉熵损失,普通的对比损失可以良好的区分开不同类别,但是,对于相同类别之间与不同类别之间的距离却无法很好的分开。通常我们在进行检索的时候,我们是通过计算新输入的样本的特征,然后与数据库中所有的样本进行比较,计算相似度或者欧式距离,按照阈值来进行排序,最终给出高于阈值的相似样本。而上述普通对比学习损失通常作为分类模型进行学习,因此对于类内距离并不敏感,下图是个例子(图取自https://kexue.fm/archives/5743):
在这里插入图片描述
可以看到z1,z2,z3在分类模型中都很好的被区分了,但是以相似度或者距离来衡量的时候,不同类别间的点z1和z2的距离是最近的,导致输出的相似样本是错误的。针对这种情况,我们希望模型在能够区分类别间的样本的同时,进一步缩短类内的距离。接下来首先介绍一下L-softmax与AM-softmax,这两种损失通过引入margin的方式,窄化了决策边界,虽然使得模型学习更难,但是优化完全后,可以进一步将类内距离缩小,将类间距离放大

L-softmax

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
L-softmax添加了乘性边界m到余弦公式中,以此来增大决策边界。假设在面对2分类的任务时,我们想要区分类别1和类别2,那么原始的softmax会学习 W 1 T x > W 2 T x W_1^Tx>W_2^Tx W1Tx>W2Tx,也就是 ∣ ∣ W 1 ∣ ∣ ∣ ∣ x ∣ ∣ c o s ( θ 1 ) > ∣ ∣ W 2 ∣ ∣ ∣ ∣ x ∣ ∣ c o s ( θ 2 ) ||W_1||||x||cos(\theta_1)>||W_2||||x||cos(\theta_2) ∣∣W1∣∣∣∣x∣∣cos(θ1)>∣∣W2∣∣∣∣x∣∣cos(θ2)。在这种情况下,模型只会学习一条决策边界,来区分类别1和类别2。如果我们想要更加严格区分类别1和类别2呢?我们可以将上面的公式更改为 ∣ ∣ W 1 ∣ ∣ ∣ ∣ x ∣ ∣ c o s ( m θ 1 ) > ∣ ∣ W 2 ∣ ∣ ∣ ∣ x ∣ ∣ c o s ( θ 2 ) ||W_1||||x||cos(m\theta_1)>||W_2||||x||cos(\theta_2) ∣∣W1∣∣∣∣x∣∣cos(mθ1)>∣∣W2∣∣∣∣x∣∣cos(θ2),m为整数,通过这种方式,我们可以得到一个新的决策边界:
∣ ∣ W 1 ∣ ∣ ∣ ∣ x ∣ ∣ c o s ( θ 1 ) ≥ ∣ ∣ W 1 ∣ ∣ ∣ ∣ x ∣ ∣ c o s ( m θ 1 ) > ∣ ∣ W 2 ∣ ∣ ∣ ∣ x ∣ ∣ c o s ( θ 2 ) ||W_1||||x||cos(\theta_1)\ge||W_1||||x||cos(m\theta_1)>||W_2||||x||cos(\theta_2) ∣∣W1∣∣∣∣x∣∣cos(θ1)∣∣W1∣∣∣∣x∣∣cos(mθ1)>∣∣W2∣∣∣∣x∣∣cos(θ2)
我们知道 θ ∈ [ 0 , π ] \theta\in[0,\pi] θ[0,π] c o s θ ∈ [ − 1 , 1 ] cos\theta\in[-1,1] cosθ[1,1],在区间 0 , π 0,\pi 0,π内,余弦函数为递减函数,因此增加乘性边界m算子使得决策边界更加窄,也使得模型的训练难度增大。
假设原始softmax和L-softmax都可以被完全优化,那么我们可以产生如下决策边界
在这里插入图片描述
由于 W 1 T x W_1^Tx W1Tx的角度从原来的 θ 1 \theta1 θ1缩减为了 θ 1 m \frac{\theta1}{m} mθ1,因此所有类别1样本距离类别1向量的角度都减小了,对于类别2来说也一样,因为类别1与类别2之间的类内距离减小了,所以类间的距离就增大了,模型学习了2个决策边界,决策边界之间的角度则为decision margin。

AM-softmax

L A M − s o f t m a x = − l o g e x p ( ( s i , p − m ) / τ ) e x p ( ( s i , p − m ) / τ ) + ∑ n = 1 N e x p ( s i , n / τ ) \mathcal{L_{AM-softmax}=-log\frac{exp((s_{i,p}-m)/\tau)}{exp((s_{i,p}-m)/\tau)+\sum_{n=1}^{N}exp(s_{i,n}/\tau)}} LAMsoftmax=logexp((si,pm)/τ)+n=1Nexp(si,n/τ)exp((si,pm)/τ)
AM-softmax提出了一种更加简单实现的加性算子,与作用于角度的乘性算子不同,加性算子直接作用于cosine similarity,在相同类别的相似度中,减去一个margin参数m,并通过较大的温度系数 τ \tau τ进行放大,与L-softmax类似,我们希望
s 1 ≥ s 1 − m > s 2 s_1\ge s_1-m> s_2 s1s1m>s2
我们知道,余弦值越小,代表角度越大,因此 s 2 s_2 s2即类间角度被限制为更大的一个角度。假设AM-softmax能够完全优化,那么参考L-softmax中的图,取原始softmax中余弦为 c o s θ 1 cos\theta_1 cosθ1,AM-softmax中为 c o s θ 1 ′ = c o s θ 1 − m cos\theta_1'=cos\theta_1-m cosθ1=cosθ1m c o s θ 1 = c o s θ 1 ′ + m cos\theta_1=cos\theta_1'+m cosθ1=cosθ1+m,我们知道余弦值越大,角度越小,因此AM-softmax与L-softmax一样,将类内的距离缩小了。

Circle-loss

虽然上述2个损失能够将类内距离进一步缩小,类间距离进一步增大,但是实际情况中,模型对于难样本与简单样本的关注度是一样的,也就是梯度是一样的。因此很容易想到,我们希望让模型将注意力更多地放到难样本中,采用不同的梯度对不同的样本进行训练,于是circle-loss便被提了出来。
在这里插入图片描述
在这里插入图片描述
上述circle loss的形式与AM-softmax分式的形式不同,其可以由分式推导出来,以AM-softmax为例
在这里插入图片描述
在circle loss中,引入了2个松弛因子 α p i , α n i \alpha_p^i, \alpha_n^i αpi,αni,其中p代表类内,n代表类间, O p O_p Op代表类内相似度的上界, O n O_n On代表类间相似度的下界, △ p \bigtriangleup_p p代表类内margin, △ n \bigtriangleup_n n代表类间margin,松弛因子均大于0。 α p i \alpha_p^i αpi会随着 s p i s_p^i spi的增大而减小,意味着给类内距离大的难样本更大的权重,给类内距离小的简单样本更小的权重。 α n j \alpha_n^j αnj会随着 s n j s_n^j snj的减小而减小,意味着给类间距离大的简单样本更小的权重,给类间距离小的难样本更大的权重。上下界的意义为我们对满足要求的样本赋予最低要求权重进行更新。
circle loss 希望 s n j < △ n s_n^j<\bigtriangleup_n snj<n s p j > △ p s_p^j>\bigtriangleup_p spj>p,按这个方向更新使损失变小。在2分类问题中,决策边界为 α n ( s n − △ n ) − α p ( s p − △ p ) = 0 \alpha_n(s_n-\bigtriangleup_n)-\alpha_p(s_p-\bigtriangleup_p)=0 αn(snn)αp(spp)=0时,决策边界为
( s n − O n + △ n 2 ) 2 + ( s p − O p + △ p 2 ) 2 = C (s_n-\frac{O_n+\bigtriangleup_n}{2})^2+(s_p-\frac{O_p+\bigtriangleup_p}{2})^2=C (sn2On+n)2+(sp2Op+p)2=C
C = ( ( O n − △ n ) 2 + ( O p − △ p ) 2 ) / 4 C=((O_n-\bigtriangleup_n)^2+(O_p-\bigtriangleup_p)^2)/4 C=((Onn)2+(Opp)2)/4
设定 O p = 1 + m , O n = − m , △ p = 1 − m , △ n = m O_p=1+m,O_n=-m,\bigtriangleup_p=1-m,\bigtriangleup_n=m Op=1+m,On=m,p=1m,n=m,可以得到决策边界为
( s n − 0 ) 2 + ( s p − 1 ) 2 = 2 m 2 (s_n-0)^2+(s_p-1)^2=2m^2 (sn0)2+(sp1)2=2m2
其目的为优化 s n → 0 , s p → 1 s_n\rightarrow 0,s_p\rightarrow 1 sn0,sp1,m决定了决策边界的半径,换句话说,circle loss期望 s p i > 1 − m , s n j < m s_p^i>1-m,s_n^j<m spi>1m,snj<m,同时采用sample-specific的方式进行训练

PCCL

PCCL在circle loss的基础上,删除了margin,其公式如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在原论文中,作者单纯通过 α i , p \alpha_{i,p} αi,p α i , n \alpha_{i,n} αi,n去期望 s i , p > 1 − m , s i , n < m s_{i,p}>1-m,s_{i,n}<m si,p>1m,si,n<m,我认为是不合理的,按上述所示,应该为 s i , p → 1 , s i , n → − m s_{i,p}\rightarrow 1,s_{i,n}\rightarrow -m si,p1,si,nm,由于论文是应用于小样本finetune,因此设定了 τ p = ξ τ n \tau_p=\xi\tau_n τp=ξτn ξ \xi ξ为正整数,目的在于让类内相似度不要过大,防止过拟合

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对比学习损失篇,从L-softmax到AM-softmax到circle-loss到PCCL 的相关文章

  • activiti修改流程定义二进制数据后需清缓存

    示例如下 package com zz flow utils import org activiti engine impl interceptor Command import org activiti engine impl inter
  • Ubuntu 12.04 LTS 中文输入法的安装

    安装 Ubuntu 12 04 着实费力一番功夫 xff0c 老是在用 Ubuntu 来引导 Windows xff0c 结果 Ubuntu 倒是能用 xff0c 一进入 Windows 就蓝屏 xff0c 于是又重装 Windows 好几
  • stream buffer原理

    Stream buffer是一个用于在cache和memory或者L1cache和L2cache之间的预取器 xff0c 相应地 xff0c 其目的是用于替代L2cache或者减少L1cache的缺失率 最原始的streambuffer由J
  • 原创:纠正国人对Linux的误解和错误认识之二

    或问 xff1a Linux兼容性差 真的是这样吗 xff1f 从2 6 30内核开始 xff0c 驱动程序占整个内核的代码比率首次超过50 xff05 就在2009年圣诞节那天 xff0c Linus Torvalds 在给大家发的圣诞快
  • linux vnc登陆黑屏问题

    1 现象描述 桌面背景全黑 xff0c 没有右上角的设置按钮 2 添加新用户步骤 命令 xff1a 1 useradd xy 2 passwd xy 3 输入密码 4 vim etc sudoers xff0c 将xy添加下面 5 在roo
  • 读书笔记-深度学习推荐系统9-推荐系统知识框架

    针对某一个领域 xff0c 建立自己的技术框架是最重要的 xff0c 只有建立了知识框架 xff0c 才能在这个框架中开枝散叶 xff0c 思考细领域的问题时 xff0c 见微知著的同时 xff0c 也不会忘记整体 9 1 知识架构图 9
  • shell将命令输出结果保存到变量中的3种常用方式

    shell将命令输出结果保存到变量中的几种形式及相应的输出结果 xff0c 使用时须注意对应关系 xff0c 记录在此以便使用时查找比较 bin bash abc 61 34 echo 66666666666666666 34 只用一个 3
  • SphereFace的翻译,解读以及训练

    前段时间 xff0c 由于工作需要 xff0c 学习了一下论文 SphereFace Deep Hypersphere Embedding for Face Recognition 收获挺大的 xff0c 这几天刚好有空 xff0c 就整理
  • IDEA2019,springboot2.1 .6 热部署配置 完整版

    1 修改pom文件 xff0c 增加配置 lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artifactId gt spring boot
  • casbin模型

    目录 一 PERM元模型二 基础代码实现步骤1 创建main go步骤2 创建model conf步骤3 创建policy csv 三 role definition 角色域的用法g 61 的用法1 model文件2 policy文件 g
  • 为Visual Studio添加项目模板及项模板

    1 问题的引入 在做项目的时候 xff0c 需要代码规范 xff0c 版本信息不可或缺 xff0c 但是每次在文件头COPY版本信息很麻烦 xff0c 而且也不太容易控制 为了更好 更规范的去完成项目 xff0c 需对项目文件做统一的格式来
  • Hadoop-HDFS-读写流程详解

    HDFS写数据流程 xff1a 详细步骤图 xff1a 详细描述 xff1a 1 客户端向NN发送文件上传的请求 2 NN进行一系列的检查 xff1a 是否有权限 xff0c 文件的父目录是否存在 xff0c 文件是否已经存在同名等等 xf
  • tcsh编程学习3

    一 xff1a shell 是什么 shell是一个 UNIX程序 xff0c 当给出一条命令时 xff0c shell解释并执行它 xff0c 然后返回一个提示或是一个错误消息 作为一个命令解释器 xff0c shell是一种编程语言 x
  • xcode 基本操作

    1 IDE概览 2 偏好设置 通过 command 43 快捷键或 Xcode Preferences 菜单呼出偏好设置 xff08 1 xff09 主题及字体 xff08 Preferences gt Fonts amp Colors x
  • 无屏,新安装的一个apk 如何启动?

    调试的设备没有屏幕 xff0c 只能通过adb 投屏 然后安卓的桌面应用已经被干掉了 xff0c 改成了定制的桌面 新安装的apk xff0c 在屏幕或者投屏中都是无法看到新安装的 UI 入口的 那怎样启动这个 apk 呢 xff1f 首先
  • 推荐几个ubuntu16.04的下载地址

    推荐几个ubuntu16 04的下载地址 ubuntu16 04下载地址 xff1a 中科大源 http mirrors ustc edu cn ubuntu releases 16 04 阿里云开源镜像站 http mirrors ali
  • 读书笔记-深度学习推荐系统4-推荐与embedding

    本篇结合了书籍 深度学习推荐系统 和吴恩达老师的视频课程 Natural Language Processing and Word Embeddings embedding技术是深度学习的一种基础核心操作 xff0c 有很多的应用场景 1
  • VNC 密码修改遇到的问题

    记一下今天在修改vnc密码的时候 xff0c 使用vncpasswd xff0c 修改完死活不成功 xff0c 后来切换到对应的账号再修改就成功了
  • 我的2014

    2014 xff0c 不 xff0c 应该是先说说现在的2015吧 xff0c 2015年1月18号 xff0c 我刚刚注册了CSDN的博客账号 xff0c 相对来说 xff0c 我是个新手 xff0c 其实以前都没有写博客的习惯 xff0
  • 平衡车+速度/位置pid+野火上位机移植+Freertos+cubemx(一)

    平衡小车 43 野火pid上位机移植 程序源码已经上传 xff0c 需要的可以下载 一 首先下载STM32CUBEMX 二 配置相关单片机和相关功能 1 配置时钟和debug引脚2 开启freertos3 相关功能以及引脚的配置这里使用的相

随机推荐

  • 百度笔试题2

    一 xff0c 简答题 30分 1 xff0c 当前计算机系统一般会采用层次结构存储数据 xff0c 请介绍下典型计算机存储系统一般分为哪几个层次 xff0c 为什么采用分层存储数据能有效提高程序的执行效率 xff1f xff08 10分
  • 2014华为机试题目

    1 输入摸一个数 xff0c 然后将其倒过来相加 xff0c 如果和不是回文串 xff0c 那么将和再采取同样的操作 xff0c 在判断得到的是否为回文串 xff0c 这样往返7次 xff0c 如果其中有一次是回文就直接打出来 xff0c
  • 2014小米,百度,pptv,去哪儿笔试题目回忆

    今天一共笔试了这四家 xff0c 真累啊 xff0c 上午10点小米 xff0c 下午2点百度 xff0c 下午3点PPTV xff0c 下午5点去哪儿 xff0c 今天右手太酸了 xff0c 打的都话了50左右 xff0c 如果没面试通知
  • 质数因子

    功能 输入一个正整数 xff0c 按照从小到大的顺序输出它的所有质数的因子 xff08 如180的质数因子为2 2 3 3 5 xff09 思路 xff1a 传统的思维是从2到n遍历一遍 xff08 稍微优化一下可以到根号n xff09 x
  • OVS于DVS

    撰写时间 xff1a 2022 2 28 分布式虚拟交换机 xff08 DVS 注意 xff1a DVS是二层交换机 DVS特点 xff1a 1 集中管理 xff1a 通过统一的Portal页面进行集中管理 xff0c 简化用户配置 2 基
  • 如何同时使用maven-replacer-plugin和maven-assembly-plugin插件

    页面css和js缓存是前端常见的问题 xff0c maven有专门的插件maven assembly plugin可以处理 参考https blog csdn net weixin 34336292 article details 9197
  • Ubuntu上两台服务器利用nfs实现共享文件夹

    碰到的一个问题是 xff0c 一台服务器A放不下所有的数据 xff0c 部分数据只能放到另一台服务器B上 xff0c 那么就涉及到如何把服务器B上的数据共享给服务器A xff0c 使得A可以看到B上的内容 xff0c 需要用的是nfs文件共
  • Unbuntu16.04 虚拟机 安装win7以及文件共享

    KVM虚拟机的模版导出 xff0c 通常都是直接用qemu img命令可以将默认的raw格式或者qcow2格式的磁盘文件压缩后导出 xff0c 指令如下 xff1a 将默认raw格式的磁盘 xff0c 简单压缩转换成qcow2格式 qemu
  • 报错:RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED

    一般显存溢出报out of memory之类 xff0c 修改了代码中batch size大小 xff08 忘记自己已经配置过默认参数 xff09 未解决 所以便认为是cuda配置问题 xff0c 多方检查确认cuda cudnn配置无误
  • js delete删除key

    var a 61 a a 61 1 a b 61 2 delete a 34 a 34 console log a b 2 delete a b console log a js 的delete可以根据key删除对象中的元素
  • 2014跌跌撞撞--伴我成长

    2014跌跌撞撞 伴我成长 上眼皮是正月 xff0c 下眼皮是腊月 xff0c 一转眼一年就过去了 没有轰轰烈烈 xff0c 也不是平淡无奇 xff0c 或许应该说是跌跌撞撞地走过来 叶子不断地从生命之树飘落 xff0c 不知不觉中岁月已在
  • stm32f103rb升级到stm32f103rc时代码移植注意事项

    1 由于stm32f103RC RD RE系列单片机芯片级的bug xff0c 代码中用到重映射相关函数的地方 xff0c 在其后面添加 HAL AFIO REMAP SWJ NOJTAG 语句 xff0c 如下所示 xff1a HAL A
  • OpenFlow所面临的挑战与创新方案

    1 OpenFlow控制面的挑战 2 OpenFlow转发面的挑战 3 芯片厂商的犹豫 一 OpenFlow控制面的挑战 OpenFlow在控制面存在以下不足 xff1a 1 master和slavecontroller的选举机制不够成熟
  • apt-get软件管理工具(软件安装、重装、卸载)

    apt get软件管理工具 下面讲解 xff0c linux系统下如何进行软件的管理 xff0c 包括软件的索引安装 更新 卸载删除 本地存储介中软件的安装 系统升级等操作 更多优质文章 xff0c 请访问博主个人网站 xff1a www
  • Ubuntu 系统下如何安装pip3工具

    一 导读 Ubuntu 系统内置了 Python2 和 Python3 两个版本的开发环境 xff0c 却没有内置相应的 pip3 管理工具 xff0c 本文将介绍如何在Ubuntu下如何快速安装 pip3 工具 xff0c 并升级到最新可
  • 包编译卡住的终极解决办法

    在数据库开发过程中 xff0c 经常遇到一个很烦躁的现象 xff1a 刚修改好的包一编译就卡死了 xff0c PL SQL变成一片空白 xff0c 又不忍心关闭 xff0c 这可是耗死多少脑细胞才写出来的 xff01 xff01 xff01
  • 正则表达式3,\A,\Z,\b,\B,\d,\D,\s,\S,\w.\W,re.compile

    1701H1 穆晨 180201 第114天总结 我爱学习 xff0c 学习使我快乐 A匹配输入字符串的开始位置 Z匹配输入字符串的结束位置 xff08 脱字符 xff09 匹配输入字符串的开始位置 xff0c 如果设置了re MULTIL
  • L1正则为什么更容易获得稀疏解

    L1和L2正则常被用来解决过拟合问题 而L1正则也常被用来进行特征选择 xff0c 主要原因在于L1正则化会使得较多的参数为0 xff0c 从而产生稀疏解 xff0c 将0对应的特征遗弃 xff0c 进而用来选择特征 但为什么L1正则会产生
  • VQA在CLEVR上的简单实现

    前言 Visual Question Answering是多模态学习的一个领域 xff0c 模型通过结合图像与问题 xff0c 推理出正确的答案 xff0c 由于问题问的是图像中出现物品的方位 xff0c 大小 xff0c 形状等等 xff
  • 对比学习损失篇,从L-softmax到AM-softmax到circle-loss到PCCL

    前言 对比学习是一种比较学习 xff0c 其主要目的为让模型学习到不同类别之间的特征 xff0c 其被广泛应用于人脸识别 xff0c 文本检索 xff0c 图像分类等领域 对比学习的主要思想是增大不同类别间的距离 xff0c 缩小相同类别间