【论文阅读12】Circle Loss:一统 Softmax 与 Triplet,从“线性”到“圆形”的优化视角

论文题目:《Circle Loss: A Unified Perspective of Pair Similarity Optimization》

目录

前言:两大门派的恩怨

派系一:基于分类的学习 (Classification-based)

派系二:基于度量的学习 (Metric Learning / Pairwise Learning)

为什么要提这个?(Circle Loss 的动机)

1. 万物归一 —— 统一视角 ()

1.1 统一 Loss 公式

1.2 计算量的“降维打击”

2. 证明 Softmax 和 Triplet 都是“特例”

2.1 退化为 Softmax ()

2.2 退化为 Triplet ()

3. 发现缺陷 —— 拒绝“死板”的优化

3.1 什么是“不够灵活”?

3.2 引入动态权重 ()

3.3 Circle Loss 最终形态

4. 几何解释 —— 为什么叫“Circle”?

4.1 决策边界的演变

4.2 圆形的意义

5. 梯度验证 —— 数学上的实锤


前言:两大门派的恩怨

派系一:基于分类的学习 (Classification-based)

  • 代表:Softmax, SphereFace, CosFace, ArcFace。
  • 原文描述:“优化样本和权重向量之间的相似性” (optimize the similarity between samples and weight vectors)。
  • 通俗解释(找老师)

公式特征

$x \cdot W$

训练目标:学生(样本

$x$

)必须尽可能靠近自己的班主任( 

$W_{y_i}$

 ),远离别人的班主任。

逻辑:模型预先设立了 10,000 个“教室”(类别),每个教室有一个“班主任”( 

$W$

 )。

权重

$W$

:被看作是类中心(Class Center)或者代理(Proxy)

派系二:基于度量的学习 (Metric Learning / Pairwise Learning)

  • 代表:Triplet Loss, Contrastive Loss。
  • 原文描述:“优化样本之间的相似性” (optimize the similarity between samples)。
  • 通俗解释(找朋友)
    • 逻辑:模型从数据堆里随便抓两个人。
    • 训练目标:如果这两个人是同一个人(Positive Pair),就拉近他们;如果是不同人(Negative Pair),就推开他们。

公式特征

$x_1 \cdot x_2$

没有

$W$

:这里没有固定的“教室”和“班主任”。

为什么要提这个?(Circle Loss 的动机)

在 Circle Loss 之前,大家觉得这是两套完全不同的逻辑:

  • 用 Softmax (ArcFace) 的人觉得 Triplet Loss 收敛太慢,采样太麻烦(组合爆炸)。
  • 用 Triplet Loss 的人觉得 Softmax 只能处理闭集(Closed-set),不灵活。

Circle Loss 的伟大之处在于它说了一句:

“别吵了,其实你们俩在数学本质上是一回事!”

Circle Loss 认为:

Triplet:其实就是把另一个样本

$x_j$

  当作临时的“中心”。

Softmax/ArcFace:其实就是把

$W$

当作一种特殊的“样本”(只有一个样本的类)。

它们的目标都是:最大化类内相似度 ( 

$s_p$

 ),最小化类间相似度 ( 

$s_n$

 )。


1. 万物归一 —— 统一视角 (

$L_{uni}$

)

        Circle Loss 的第一步贡献,是建立了一个统一的 Loss 框架。作者敏锐地发现,无论是分类还是配对,本质目标都是:最大化正样本分数

$s_p$

,最小化负样本分数

$s_n$

1.1 统一 Loss 公式

作者首先推导出了一个通用公式

$L_{uni}$

(Unified Loss):

$L_{uni} = \log \left[ 1 + \sum_{i=1}^K \sum_{j=1}^L \exp(\gamma(s_n^j - s_p^i + m)) \right]$
$m$

:间隔(Margin)。

$\gamma$

:缩放因子(Scale Factor)。

$s_n^j$

:第

$j$

个负样本对的相似度。

$s_p^i$

:第

$i$

个正样本对的相似度。

这个公式的直观含义很简单:要在

$Loss$

最小化过程中,迫使

$(s_n - s_p)$

越小越好。

1.2 计算量的“降维打击”

上面的公式有一个双重求和

$\sum \sum$

,这意味着要计算所有正负样本的配对,计算量是

$O(K \times L)$

利用指数运算法则

$e^{a-b} = e^a \cdot e^{-b}$

,作者做了一个精彩的数学变换:

$L_{uni} = \log \left[ 1 + \underbrace{\sum_{j=1}^L \exp(\gamma(s_n^j + m))}_{\text{}} \cdot \underbrace{\sum_{i=1}^K \exp(\gamma(-s_p^i))}_{\text{}} \right]$

                                   负样本集合                 正样本集合

这一步变换至关重要。它将复杂的 “成对比较” 解耦成了独立的  “正样本组”  和  “负样本组” 计算。这解释了为什么 Circle Loss 能够像 Softmax 一样高效训练,而不需要像 Triplet Loss 那样进行繁重的样本挖掘。


2. 证明 Softmax 和 Triplet 都是“特例”

为了证明

$L_{uni}$

是真正的大一统,我们看看它是如何退化成我们熟悉的 Loss 的。

2.1 退化为 Softmax (

$L_{am}$

)

如果我们设定只有一个正样本(

$K=1$

,即当前样本

$x$

和它的类中心

$W$

),忽略常数 1,公式就变成了:

$L_{am} = - \log \frac{\exp(\gamma(s_p - m))}{\exp(\gamma(s_p - m)) + \sum_{j=1}^{N-1} \exp(\gamma s_n^j)}$

解读: 这正是我们熟悉的 CosFace / AM-Softmax

这意味着:分类 Loss 只是 Circle Loss 在

$K=1$

时的特例。

2.2 退化为 Triplet (

$L_{tri}$

)

如果我们把

$\gamma$

设为无穷大(

$\gamma \to +\infty$

),根据 LogSumExp 的极限性质,公式变成了:

$L_{tri} = \lim_{\gamma \to +\infty} \frac{1}{\gamma} L_{uni} = \max [ s_n^j - s_p^i ]_+$

解读: 这正是 Triplet Loss 的核心逻辑(Hard Mining)!

这意味着:Triplet Loss 只是 Circle Loss 在

$\gamma$

趋于无穷大时的极限情况。


3. 发现缺陷 —— 拒绝“死板”的优化

既然统一了江湖,为什么还需要 Circle Loss?

因为作者发现,之前的 CosFace/ArcFace 存在一个致命的“不够灵活”的问题。

3.1 什么是“不够灵活”?

$L_{uni}$

中,我们是在优化

$(s_n - s_p)$

。当我们对它求导时,梯度是常数(或者说是 1)。

这意味着什么?

  • 困难样本(分错了):模型用 1 的力度去推它。
  • 简单样本(分对了):模型依然用 1 的力度去推它。

这就好比老师辅导学生,对考 30 分的学生和考 99 分的学生布置一样的作业。这显然浪费了算力,且效率低下。

3.2 引入动态权重 (

$L_{circle}$

)

为了让模型懂得“因材施教”,作者引入了动态权重

$\alpha$

$L_{circle} = \log \left[ 1 + \sum_{j=1}^L \exp(\gamma \alpha_n^j s_n^j) \cdot \sum_{i=1}^K \exp(-\gamma \alpha_p^i s_p^i) \right]$

其中,权重

$\alpha$

的定义是“自我配速”(Self-paced):

$\alpha_p^i = [O_p - s_p^i]_+, \quad \alpha_n^j = [s_n^j - O_n]_+$
  • 机制详解

如果样本简单(

$s_p$

接近目标

$O_p$

),

$\alpha_p$

 变小

$\rightarrow$

几乎不练。

如果样本很难(

$s_p$

远小于目标

$O_p$

),

$\alpha_p$

变大

$\rightarrow$

加权猛练!

3.3 Circle Loss 最终形态

将动态权重

$\alpha$

和 Margin 结合,我们就得到了最终公式:

$L_{circle} = \log \left[ 1 + \sum_{j=1}^L \exp(\gamma \alpha_n (s_n - \Delta_n)) \cdot \sum_{i=1}^K \exp(-\gamma \alpha_p (s_p - \Delta_p)) \right]$

4. 几何解释 —— 为什么叫“Circle”?

这是论文最精彩的几何视角。

4.1 决策边界的演变

Circle Loss: 由于引入了与

$s$

相关的权重 

$\alpha$

,优化项变成了关于

$s$

的二次项 (

$s^2$

)。其决策边界方程演变为:

Softmax/CosFace: 优化目标是

$s_p - s_n = m$

。在坐标系中,这是一条直线

$(s_n - \frac{O_n + \Delta_n}{2})^2 + (s_p - \frac{O_p + \Delta_p}{2})^2 = C$

在特定参数下,它简化为:

$(s_n - 0)^2 + (s_p - 1)^2 = 2m^2$

4.2 圆形的意义

直线变成圆弧,不仅仅是好看。

这意味着模型在优化

$s_p$

$s_n$

时,不再是僵硬的 1:1 兑换,而是根据它们各自离“完美状态”

$(0, 1)$

的距离来动态调整梯度方向。这就赋予了 Loss 更大的灵活性。


5. 梯度验证 —— 数学上的实锤

最后,为了证明“动态权重”真的有效,作者直接给出了梯度公式:

$\frac{\partial L}{\partial s_n} \propto \alpha_n = (s_n - O_n)$
$\frac{\partial L}{\partial s_p} \propto \alpha_p = (O_p - s_p)$

一句话总结:梯度的强弱,正比于样本的难度。

这彻底解决了传统 Loss 在简单样本上浪费梯度的问题,让模型能够全神贯注地攻克那些“死活分不开”的 Hard Cases。

Read more

从零开始:Xilinx FPGA实现RISC-V五级流水线CPU手把手教程

从一块FPGA开始,亲手造一颗CPU:RISC-V五级流水线实战全记录 你还记得第一次点亮LED时的兴奋吗?那种“我真正控制了硬件”的感觉,让人上瘾。但如果你能 自己设计一颗处理器 ,让它跑起第一条指令——那才是数字世界的终极浪漫。 今天,我们就来做这件“疯狂”的事:在一块Xilinx FPGA上,用Verilog从零实现一个 完整的RISC-V五级流水线CPU 。不是调用IP核,不是简化版demo,而是包含取指、译码、执行、访存、写回五大阶段,并解决真实数据冒险与控制冒险的可运行核心。 这不仅是一次教学实验,更是一场对计算机本质的深度探索。 为什么是 RISC-V + FPGA? 别误会,我们不是为了赶潮流才选RISC-V。恰恰相反,它是目前最适合学习CPU设计的指令集。 * 开放免费 :没有授权费,文档齐全,连寄存器编码都写得明明白白。 * 简洁清晰 :RV32I只有40多条指令,没有x86那样层层嵌套的历史包袱。 * 模块化扩展 :基础整数指令够用,后续想加浮点、压缩指令、向量扩展,都可以一步步来。

实现Python将csv数据导入到Neo4j

实现Python将csv数据导入到Neo4j

目录 一、获取数据集 1.1 获取数据集 1.2 以“记事本”方式打开文件 1.3  另存为“UTF-8”格式文件 1.4 选择“是” 二、 打开Neo4j并运行 2.1 创建新的Neo4j数据库 2.2 分别设置数据库名和密码 编辑 2.3 启动Neo4j数据库 2.4 打开Neo4j数据库  2.5 运行查看该数据库是否为空 三、打开Python创建项目  3.1 创建一个包,存项目 3.2 创建一个项目 3.3 检查自己的依赖是否完全

具身智能演示深解---从盲行到跑酷:深度视觉如何赋予足式机器人极限运动能力

具身智能演示深解---从盲行到跑酷:深度视觉如何赋予足式机器人极限运动能力

1. 引言:为什么需要深度视觉 在过去数年间,基于强化学习的足式机器人运动控制取得了长足进展。早期的工作——以ETH的legged_gym框架和IsaacGym并行训练环境为代表——已经证明,仅依靠本体感知(关节编码器、IMU等)就能训练出在连续复杂地形上鲁棒行走的策略。这类方法通常被称为"Blind Locomotion",即机器人不借助任何外部视觉传感器,完全依赖对自身状态的感知来适应地形变化。DreamWaQ(KAIST, ICRA 2023)等工作进一步证明,通过非对称Actor-Critic框架配合隐式地形估计,四足机器人甚至可以在户外多样地形上实现长距离鲁棒行走。 然而,Blind Locomotion存在一个根本性的局限:机器人无法预知前方地形的具体形态。当面对跳箱、深沟、高台阶等需要提前规划动量和轨迹的极限地形时,纯本体感知的策略往往力不从心。跑酷(Parkour)场景要求机器人在接近障碍物之前就判断出障碍物的高度、宽度和距离,并据此调整步态、积累动量、选择起跳时机。这些决策必须依赖对前方环境的主动感知——深度视觉由此成为从"能走"到"能跑酷&

Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战

Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战 前言 在进行 Flutter for OpenHarmony 的去中心化应用(DApp)或加密货币钱包开发时,支持标准的 WalletConnect 协议是链接用户钱包的关键。wallet_connect 是该协议的 Dart 实现,它能让你的鸿蒙 App 安全地与 MetaMask、Trust Wallet 等钱包建立双向加密连接。本文将探讨如何在鸿蒙系统下构建安全、稳定的 Web3 授权流程。 一、原理解析 / 概念介绍 1.1 基础原理