LCRON

参考

$\prod_{i:\pi_i=1}$ 是数学中的连乘(Product)符号加上一个筛选条件。1. $\prod$ (大写的 Pi):代表连乘(即把后面所有的项乘起来),就像 $\sum$ 代表连加一样。下标 $i$:表示索引变量。冒号 $:$:表示“满足……条件”(such that)。$\pi_i = 1$:这是筛选条件。

两阶段建模解析

  • **总商品库 ($N$)**:只有 4 个商品 ${A, B, C, D}$。
  • **真实情况 ($\mathbf{y}$)**:用户只喜欢 A 和 C。
  • 阶段 1 任务:从中选 2 个 ($q_1=2$) 给阶段 2。
  • 阶段 2 任务:给这 2 个打分,算出最终概率。

公式一:交叉熵损失 (CE Loss)

$$CE(P_{CS}^{q_2}, \mathbf{y}) = -\sum_i (y_i \ln((P_{CS}^{q_2})i) + (1-y_i)\ln(1-(P{CS}^{q_2})_i))$$

这个公式是最终的裁判,用来衡量模型预测得准不准。

  • **$P_{CS}^{q_2}$ (Prediction)**:系统最终预测的生存概率向量。
    • 例子:假设模型算出来 A、B、C、D 最终被选中的概率是 $[0.8, 0.2, 0.6, 0.1]$。
  • **$\mathbf{y}$ (Ground Truth)**:真实标签向量(二值向量)。
    • 含义:用户实际点击了哪些。
    • 例子:用户喜欢 A 和 C,不喜欢 B 和 D。所以 $\mathbf{y} = [1, 0, 1, 0]$。
  • **$i$**:商品索引。含义:遍历每一个商品 (A, B, C, D)。
  • **$\sum_i$**:求和。含义:把所有商品的判断误差加起来,变成一个总的 Loss 值。
  • **$\ln$**:自然对数。

计算逻辑

  • 对于商品 A ($y=1$):我们要最大化 $\ln(0.8)$。
  • 对于商品 B ($y=0$):我们要最大化 $\ln(1-0.2)$。
  • 如果预测反了(比如 A 预测成 0.1),$\ln(0.1)$ 是个很大的负数,取负号后 Loss 就会变得超级大。

公式二:采样概率 ($P_\pi$)

$$P_\pi = \frac{\prod_{i:\pi_i=1} (P_{\mathcal{M}1}^{q_1})i}{\sum{S \subseteq [N], |S|=T} \prod{j \in S} (P_{\mathcal{M}_1}^{q_1})_j}$$

这个公式描述的是阶段 1 (粗排模型) 的行为:它选出某一种特定组合的概率是多少?

  • **$P_{\mathcal{M}_1}^{q_1}$**:粗排模型的打分向量。
    • 例子:模型 1 觉得四个商品的分数是 $[0.9, 0.1, 0.8, 0.2]$ (A, B, C, D)。
  • **$\pi$**:一种具体的采样结果(Mask)。
    • 含义:比如“选中 A 和 C”这种组合,表示为 $[1, 0, 1, 0]$。
  • **$\prod_{i:\pi_i=1}$**:只乘选中的项(分子部分)。
    • 例子:对于组合 ${A, C}$,分子 = $0.9 \times 0.8 = 0.72$。
  • **$S \subseteq [N], |S|=T$**:分母里的求和条件。
    • 含义:遍历所有可能的长度为 $T$ ($T=q_1$) 的子集。
    • 例子:我们要从 4 个里选 2 个,所有可能的组合有 6 种:(AB, AC, AD, BC, BD, CD)。
  • **分母整体 $\sum \prod$**:归一化系数。
    • 含义:算出所有 6 种组合的分数乘积之和,作为分母,确保所有概率加起来等于 1。
  • 计算
    • AB: $0.9 \times 0.1 = 0.09$
    • AC: $0.9 \times 0.8 = 0.72$
    • …以此类推算出总和。
  • 结果:$P_\pi(\text{选AC}) = \frac{0.72}{\text{总和}}$。这表示“选中 A 和 C 这一对”的概率。

公式三:最终生存概率 ($P_{CS}^{q_2}$)

$$P_{CS}^{q_2} = \mathbb{E}{\pi \sim P_\pi} \frac{(P{\mathcal{M}2}^{q_2} \odot \pi)}{\langle \pi, P{\mathcal{M}2}^{q_2} \rangle / \langle \mathbf{1}, P{\mathcal{M}_2}^{q_2} \rangle}$$

这个公式把两个阶段结合起来,计算在考虑了粗排筛选风险的情况下,精排模型给出的期望分数。

  • **$\mathbb{E}_{\pi \sim P_\pi}$**:数学期望。
    • 含义:因为粗排是个概率过程(可能选 AC,也可能选 AD),我们需要把所有情况按照它们发生的概率 ($P_\pi$) 加权平均。
  • **$P_{\mathcal{M}_2}^{q_2}$**:精排模型的打分向量。
    • 例子:模型 2 比较准,分数是 $[0.95, 0.05, 0.95, 0.05]$ (A, B, C, D)。
  • **$\odot \pi$**:掩码操作(Hadamard 积)。
    • 含义:如果粗排没选中($\pi$ 对应位置是 0),精排分再高也没用,直接置零。
    • 例子:如果 $\pi$ 选了 AC ($[1,0,1,0]$),那么 B 和 D 的分变成 0。向量变为 $[0.95, 0, 0.95, 0]$。
  • **$\langle \pi, P_{\mathcal{M}_2}^{q_2} \rangle$**:被选中的物品的总分(点积)。
    • 例子:$0.95 \text{(A)} + 0.95 \text{(C)} = 1.9$。
  • **$\langle \mathbf{1}, P_{\mathcal{M}_2}^{q_2} \rangle$**:所有物品的总分。
    • 例子:$0.95+0.05+0.95+0.05 = 2.0$。
  • 分母里的除法:权重归一化。
    • 含义:$1.9 / 2.0 = 0.95$。这个系数代表“当前选中的这一组,占了总分数的 95%”。

整体逻辑
拿“被掩码后的分数”除以“该组合的权重占比”。如果粗排经常把高分物品漏掉($\pi$ 经常是 $[0,1,0,1]$),那么期望值里的有效分数就会很低,最终 $P_{CS}$ 就会很小。

$P_{CS}^{q_2} = \sum_{\text{所有可能的 } \pi} \left( P_\pi \cdot f(\pi) \right)$

假设只有 3 个商品,粗排选 2 个:
组合与概率:

  • 选 ${A, B}$ 的概率 $P_{\pi_1} = 0.8$
  • 选 ${B, C}$ 的概率 $P_{\pi_2} = 0.2$(假设选 ${A, C}$ 概率为 0)
    算得分:
  • 如果选了 ${A, B}$,算出的归一化得分向量是 $[0.9, 0.1, 0]$。
  • 如果选了 ${B, C}$,算出的归一化得分向量是 $[0, 0.5, 0.5]$。
    算期望:
    $P_{CS} = 0.8 \times [0.9, 0.1, 0] + 0.2 \times [0, 0.5, 0.5]$
    $P_{CS} = [0.72, 0.08, 0] + [0, 0.1, 0.1] = [0.72, 0.18, 0.1]$

这里的逻辑是:

  1. **采样的是 $\pi$**:系统根据模型 1 的预测去“猜”哪些物品能进前 $q_1$ 名。这是一个随机过程。
  2. 优化的是 Groundtruth 的通过率:我们有一个固定的目标 $\mathbf{y}$(比如商品 A 和 C 是好的)。我们希望调整模型参数,使得在上面的采样过程中,$\pi$ 恰好总是选中 A 和 C。
  3. 结果:如果 $\pi$ 选中了 A 和 C,并且模型 2 也给了高分,那么 $CE$ Loss 就会很小。

总结一句话:我们在用 $CE$ Loss 强迫模型 1 生成的随机采样分布 $P_\pi$,尽可能地与真实的 Groundtruth 分布(永远选中好商品)重合。

离散 Top-K 算子的矩阵表达解析

1. 设定场景

背景:假设有 4 个物品(Item 1, Item 2, Item 3, Item 4),模型 $\mathcal{M}$ 给它们打的分数向量 $x$ 是:
$$x = [10, \mathbf{90}, 50, \mathbf{80}]$$
(注意:Item 2 是 90 分,Item 4 是 80 分,它是前两名)。

目标:我们现在的目标是:找出 Top-2 的物品(也就是 $k=2$)。


2. 什么是“排列矩阵” $\mathcal{P}$?

文本里说:“$(\mathcal{P}x^{\downarrow}){i,j}=1$ 表示 $x_j$ 是 $x$ 中第 $i$ 大的元素”。

这句话翻译成人话就是:矩阵的第 $i$ 行,用来指示“第 $i$ 名是谁”

我们来看看排名的实际情况:

  • **第 1 名 ($i=1$)**:是 90 分(在原数组的第 2 个位置)。
  • **第 2 名 ($i=2$)**:是 80 分(在原数组的第 4 个位置)。
  • **第 3 名 ($i=3$)**:是 50 分(在原数组的第 3 个位置)。
  • **第 4 名 ($i=4$)**:是 10 分(在原数组的第 1 个位置)。

根据这个排名,我们构建排列矩阵 $\mathcal{P}$(每一行对应第 1 名到第 4 名的位置):
$$\mathcal{P} =
\begin{pmatrix}
0 & \mathbf{1} & 0 & 0 \
0 & 0 & 0 & \mathbf{1} \
0 & 0 & 1 & 0 \
1 & 0 & 0 & 0
\end{pmatrix}
\begin{matrix}
\leftarrow \text{第1行:第1名在位置2} \
\leftarrow \text{第2行:第2名在位置4} \
\leftarrow \text{第3行:第3名在位置3} \
\leftarrow \text{第4行:第4名在位置1}
\end{matrix}$$


3. 那个求和公式 $\sum$ 是在干嘛?

文中给出的公式是:
$$\mathcal{M}i^{\downarrow}(k) = \sum{j=1}^{k} (\mathcal{P}{\mathcal{M}}^{\downarrow}){j, :}$$

这其实就是把矩阵的前 $k$ 行加起来

现在我们要选 Top-2 ($k=2$),所以我们只看矩阵的前两行:

  • 第 1 行(冠军):$[0, 1, 0, 0]$
  • 第 2 行(亚军):$[0, 0, 0, 1]$

把它们加起来:
$$[0, 1, 0, 0] + [0, 0, 0, 1] = [0, \mathbf{1}, 0, \mathbf{1}]$$


4. 结果解读

最后得到的这个向量 $[0, \mathbf{1}, 0, \mathbf{1}]$ 就是公式里的 $\mathcal{M}_i^{\downarrow}(k)$。它是一个掩码(Mask)

  • 第 1 个位置是 0 $\rightarrow$ Item 1 没选中
  • 第 2 个位置是 1 $\rightarrow$ Item 2 选中了
  • 第 3 个位置是 0 $\rightarrow$ Item 3 没选中
  • 第 4 个位置是 1 $\rightarrow$ Item 4 选中了

总结

这段看似复杂的数学描述,其实只干了一件事:

  1. 排序:看看谁的分数高。
  2. 制表:造一个矩阵记录第几名原本在哪里。
  3. 圈地:如果我要 Top-K,我就把表里的前 K 行拿出来,并在对应位置打勾。

为什么要搞这么复杂?

最后那句“松弛为随机变量…进行优化”才是重点。因为硬生生的排序(Sort)和取前 K 个(Top-K)是不可导的操作(没法求梯度,没法训练神经网络)。

作者把它写成矩阵形式,是为了后面把这个“由0和1组成的硬矩阵”变成“软绵绵的概率矩阵”(比如用 Gumbel-Softmax 或 NeuralSort),这样就可以放进神经网络里反向传播了。

1. 场景设定

背景:一家公司要招人。

  • **阶段 1 ($\mathcal{M}_1$)**:HR 简历筛选。
    • 任务:从一堆简历里选出 $q_1$ 个人进入下一轮。
    • 对应公式中的 $P_{\mathcal{M}_1}^{q_1}$(HR 给每个人通过的概率)。
  • **阶段 2 ($\mathcal{M}_2$)**:业务主管面试。
    • 任务:从 HR 选送的人里,选出 $q_2$ 个人发 Offer。
    • 对应公式中的 $P_{\mathcal{M}_2}^{q_2}$(主管给每个人打的分)。
  • **目标 ($\mathbf{y}$)**:我们希望真正的人才(Ground Truth, $y=1$)能拿到 Offer。

2. 核心概念解释

A. $P_{\pi}$:HR 的选择结果(采样概率)

你在图中间看到的那个带 $\prod$ 的大公式,是在计算“某一种特定的入围名单”出现的概率

  • 假设有 3 个候选人:小王(牛人)、小李(混子)、小张(混子)。
  • HR 的打分(概率):小王(0.9), 小李(0.6), 小张(0.1)。
  • **我们要选 2 个人 ($q_1=2$)**。
    • **组合 $\pi_1$ (小王, 小李)**:概率很高,因为两人分都高。
    • **组合 $\pi_2$ (小李, 小张)**:概率很低,因为小张分太低了。

B. $P_{CS}^{q_2}$:最终生存概率(期待值)

你在图下方看到的那个带 $\mathbb{E}$ 的公式,是在算“小王最终拿到 Offer 的平均概率”
这个概率取决于两件事:

  1. HR 得先把小王放进来(取决于 $P_{\pi}$)。如果 HR 没选小王,主管根本见不到他,得分为 0。
  2. 主管得给小王打高分(取决于 $P_{\mathcal{M}_2}^{q_2}$)。

C. $CE(P_{CS}^{q_2}, \mathbf{y})$:交叉熵 Loss

这就是标准的奖惩机制。

  • **如果小王是牛人 ($y=1$)**:我们需要 $P_{CS}^{q_2}$ 越接近 1 越好。
  • 如果小王没拿到 Offer:Loss 就会变大。

3. 举个具体的数字例子(全流程)

假设 $y_{小王} = 1$ (小王是真正的人才)。

情景一:模型配合得很好

  • **阶段 1 (HR)**:给小王打了高分。
  • 结果:在大多数可能的组合 $\pi$ 里,小王都在名单上。
  • **阶段 2 (主管)**:给小王打了高分(比如 0.95)。
  • 计算期望:期望分数 $\approx$ (小王在名单里的概率 0.9) $\times$ (主管打分 0.95) = 0.855。
  • 计算 Loss:$Loss = -1 \times \ln(0.855) = \mathbf{0.15}$ (Loss 很小,模型很开心)。

情景二:阶段 1 掉链子了(漏斗问题)

  • **阶段 1 (HR)**:眼拙,觉得小王不行,给了低分。
  • 结果:小王很难进入名单 $\pi$。他在大多数情况下被“截断”了。
  • **阶段 2 (主管)**:虽然主管模型很准,但是他没机会见到小王。
  • 在那些小王没入选的组合里,小王的得分被 Mask 成了 0。
  • 计算期望:期望分数 $\approx$ (小王在名单里的概率 0.1) $\times$ (主管打分 0.95) = 0.095。
  • 计算 Loss:$Loss = -1 \times \ln(0.095) = \mathbf{2.35}$ (Loss 巨大!)。

4. 这个 Loss 的妙处(Back Propagation)

当发生了情景二(Loss 巨大)时,梯度反向传播会告诉模型:
“喂!最后结果不对!小王是牛人,但他没拿到分!”

这时候,责任会通过数学公式分摊:

  • 主管模型 ($\mathcal{M}_2$) 说:“这不怪我啊,我如果见到他肯定给高分,但我没见到啊!”
  • HR 模型 ($\mathcal{M}_1$) 就会收到强烈的梯度信号:“是你前面没把他选进来! 下次把小王的 $P_{\mathcal{M}_1}$ 提上去!”

这就是“端到端代理 Loss”的核心意义:
它通过最终的胜负(是否 Recall 成功),跨过中间的采样过程,直接去优化前面的粗排模型,让粗排模型知道:“凡是后面精排模型喜欢的,你前面都要给我放进来,别误杀”。

问题

冲突是怎么发生的?假设我们要选出 Top-2(金牌和银牌),而球员 A 和球员 B 都是顶级天才(Ground-truth $y_A=1, y_B=1$)。模型的宏伟目标:希望 A 和 B 都能进入前两名。
梯度的指令:

  • 指令 1:把 A 往“第一名”的位置推(增加 $\hat{P}_{1,A}$)。
  • 指令 2:把 B 也往“第一名”的位置推(增加 $\hat{P}_{1,B}$)。
    因为“第一名只能给一个人”的硬约束(求和等于 1),这两个指令是完全相反的。为了让 A 的概率上升,模型必须牺牲 B。
    后果:模型在训练时会感到“左右为难”,梯度信号一会儿让 A 冲,一会儿让 B 冲,导致参数更新抵消,训练极其不稳定。