sgr-interview-300

第 4 题:排序学习中 RankNet 的梯度推导,为什么 Pairwise 比 Pointwise 更适合排序?

题目

排序学习中 RankNet 的梯度推导,为什么 Pairwise 比 Pointwise 更适合排序?


完整讲解

一、RankNet 的 Pairwise 设定

RankNet 做相对排序:不预测绝对分数,而是对文档对 $(i,j)$ 建模「$i$ 是否应排在 $j$ 前面」。设文档 $i,j$ 的模型输出为 $s_i, s_j$,定义 $i \succ j$(i 相关于 j)的概率为 \(P_{ij} = P(i \succ j) = \sigma(s_i - s_j) = \frac{1}{1 + e^{-(s_i - s_j)}}.\) 标签 $S_{ij} \in {0,1}$:若 $i$ 应排在 $j$ 前则 $S_{ij}=1$,否则为 0(或 0.5 表示平手)。损失用交叉熵: \(\mathcal{L}_{ij} = -S_{ij} \ln P_{ij} - (1-S_{ij})\ln(1-P_{ij}).\)

二、梯度推导

记 $o_{ij} = s_i - s_j$,则 $P_{ij} = \sigma(o_{ij})$。对 $o_{ij}$ 的梯度(与二分类 CE 一致): \(\frac{\partial \mathcal{L}_{ij}}{\partial o_{ij}} = P_{ij} - S_{ij}.\) 再链式到 $s_i, s_j$: \(\frac{\partial o_{ij}}{\partial s_i} = 1,\quad \frac{\partial o_{ij}}{\partial s_j} = -1 \Rightarrow \frac{\partial \mathcal{L}_{ij}}{\partial s_i} = P_{ij} - S_{ij},\quad \frac{\partial \mathcal{L}_{ij}}{\partial s_j} = -(P_{ij} - S_{ij}) = S_{ij} - P_{ij}.\) 即:文档 $i$ 的梯度 = $P_{ij} - S_{ij}$,文档 $j$ 的梯度 = $S_{ij} - P_{ij}$;两者大小相等、方向相反。若 $S_{ij}=1$(i 应排前)但 $P_{ij}<1$,则 $s_i$ 得到正梯度(升高)、$s_j$ 得到负梯度(降低),符合直觉。

一个文档会出现在多个 pair 中,其总梯度 = 所有相关 pair 的梯度之和,可 batch 或 mini-batch 求和后更新。

三、为什么 Pairwise 比 Pointwise 更适合排序?


面试要点


记忆要点

返回模块 返回总览