推荐系统中 Q 值的设计:从训练目标到推理信号

张开发
2026/4/5 17:49:44 15 分钟阅读

分享文章

推荐系统中 Q 值的设计:从训练目标到推理信号
一、为什么要聊这个话题做推荐系统的人每天都在和 Q 值打交道。粗排要输出 Q 值精排要融合多个 Q 值线上打分公式里全是 Q 值。但如果你问这个 Q 值到底代表什么为什么可以用它来排序很多人的回答是模型输出的分数呗——这个回答没有错但也没有说到点子上。我自己在刚接触这块的时候也有一堆搅在一起的困惑。loss 是用来训练模型的Q 值是用来推理排序的那它们的关系是什么二分类任务用交叉熵回归任务用 MSEloss 的形式不同Q 值是不是也应该不同内积为什么能直接当 Q 值sigmoid 之后的概率不是更直观吗这篇文章就是为了把这些问题一次性想清楚。我会以双塔模型为主线从最简单的情况讲到更复杂的情况最后拓展到其他模型结构。核心思路只有一条先想清楚 Q 值应该代表什么再去理解 loss 和 Q 值之间的关系。二、Q 值的本质——先把目标定清楚在讨论任何模型结构和公式之前我想先把一件事说清楚Q 值的语义是业务目标决定的它在模型设计之前就应该想清楚。推荐系统的根本任务是什么是把用户极有可能产生正向互动的资源推送给他。这里的正向互动包括点击、完播、评论、分享、收藏、长时间消费等等。因此一个资源的 Q 值天然应该反映这个用户对这个资源产生正向互动的可能性或程度。Q 值越高代表这个资源越值得推荐给这个用户。这个定义听起来很简单但它有一个重要的推论Q 值是推理时的排序信号loss 是训练预测器的工具两者服务于同一个业务目标但不是同一个东西。具体来说loss 衡量的是模型在整个训练集上的预测精度——它告诉我们模型学得好不好。而 Q 值是模型对某个特定用户资源对输出的预测值——它告诉我们这个资源有多适合推荐给这个用户。把 loss 和 Q 值混为一谈是一个很常见的认知错位后面我还会专门回来说这个问题。想清楚了这个区分后面所有的分析都会变得清晰很多。三、双塔模型的结构选择——为什么用内积双塔模型的结构很简单用户塔接收用户特征输出一个用户向量 物品塔接收物品特征输出一个物品向量 两个向量做内积 ⊤得到最终得分。这里有一个问题值得细想内积只是一个数学运算为什么它可以代表用户和物品的匹配程度答案是在模型训练之前内积什么都代表不了它只是两个随机向量的点乘是一个随机数。是 loss 的优化过程把匹配程度这个语义写进了用户向量和物品向量的方向关系里。训练结束后用户越可能对某内容产生正向互动对应向量的内积就越大这个几何关系被编码进了模型参数里。内积的语义不是天然的是训练赋予的。这一点非常关键。它说明 Q 值的合理性不来自内积这个操作本身而来自 loss 优化之后模型所学到的向量空间结构。理解了这一点我们才能在不同任务下正确判断什么应该作为 Q 值。四、二分类任务的 Q 值——以点击为例点击任务是最经典的情况我们以它为起点把逻辑链条建立起来。标签 ∈{0,1}1 表示用户点击了0 表示没有点击。模型的预测值是 ^(⊤)即对内积做一个 sigmoid 变换把它压缩到 (0,1) 区间表示预测的点击概率。loss 是二元交叉熵BCE−[log⁡^(1−)log⁡(1−^)]训练的过程是对于正样本用户确实点击了1交叉熵的梯度会把 ^ 往 1 的方向推即把内积 ⊤ 往正方向推对于负样本用户没有点击0梯度把内积往负方向推。经过大量样本的迭代之后模型学到的向量空间里用户会点击的内容对应的内积就系统性地偏大不会点击的内容内积系统性地偏小。所以推理时我们用内积 ⊤ 直接作为点击任务的 Q 值而不是用 ^(⊤)。原因是 sigmoid 函数在两端会压缩差异——比如内积从 5 变到 10对应的 sigmoid 输出从 0.9933 变到 0.99995差异几乎看不出来但内积本身保留了从 5 到 10 的完整差异对于排序来说分辨能力更强。Q 值的核心作用是排序所以我们需要保留尽可能大的分辨空间用内积而非概率是更合理的选择。现在我想回头说一个容易产生的错误想法。有人会觉得loss 越小说明这个资源越好越应该推给用户。这个想法是错的而且错得很有代表性。loss 是衡量模型在整个训练数据集上预测精度的全局指标它描述的是模型的质量不是某个具体资源的推荐价值。举个例子假设某个模型训练完之后 loss0.3另一个模型 loss0.5那前者比后者预测得更准。但对于一个具体的用户 A资源 X对正确的问题不是这个 loss 是多少而是模型对这个对输出的 Q 值是多少。模型训练好之后它对每个用户资源对都会输出一个内积值这个内积值才是我们在推理时关心的排序信号。五、回归任务的 Q 值——以时长为例时长任务是让很多人困惑的地方值得专门拆解。困惑的来源是这样的MSE 的 loss 最小化条件是预测值尽量接近标签而不是内积越大越好。那内积还能直接作为 Q 值吗它代表什么语义要回答这个问题需要分两步走。第一步理解标签的预处理。原始时长是秒数可能从 0 到几千秒不等直接用来训练回归模型会有量纲和数值稳定性的问题。工业上通常把时长归一化到 [0,1]比如除以一个饱和值如 1440 秒即 24 分钟并 clipclip(duration1440,0,1)这个归一化的效果是标签越接近 1等价于用户消费时长越长。标签本身就编码了越长越好这个业务语义。第二步理解训练结束后的状态。模型的预测值是 ^(⊤)loss 是MSE((⊤)−)2对于时长长的用户资源对 接近 1MSE 的梯度会把 ^ 往 1 的方向推即把内积 ⊤ 往正方向推对于时长短的对 接近 0内积被往负方向推。训练结束后内积的大小依然是时长长短的单调信号。所以时长任务推理时仍然可以用内积作为 Q 值语义是这个用户在这个内容上的预期消费时长越长内积越大Q 值越高。这和点击任务的逻辑本质上是一样的——只是正向互动的定义从点击换成了消费时长长内积都因为 loss 的优化而具备了排序所需的单调性。当然工程上完全可以不做归一化直接用原始秒数作为标签同时去掉 sigmoid让内积直接回归原始时长这在数学上是成立的。选择归一化到 [0,1][0,1][0,1] 再配合 sigmoid主要是出于训练稳定性的考虑sigmoid 把内积的输出范围压缩在一个有界区间内梯度不会因为预测值和标签之间的巨大数值差距而在早期训练阶段出现爆炸或消失的问题。此外归一化后的标签让不同资源类型短视频几秒、长视频几百秒的时长可以在同一个尺度下比较模型不需要去拟合跨越多个数量级的目标值收敛更快也更稳定。至于 sigmoid 是否必须保留、归一化的饱和值选多少这些都是可以根据实际数据分布调整的工程决策没有唯一答案。六、当 loss 更复杂时——以 EGMN 为例前面两节的逻辑都有一个共同点模型最终输出的是一个标量内积Q 值就是这个标量。但当我们对时长分布的建模要求更高时这个简单的框架就不够用了。真实的用户消费时长分布不是一个简单的单峰分布。它有一个典型的多峰形态大量用户快速划走几秒少量用户深度消费几分钟甚至更长中间还有各种不同程度的消费模式。如果用一个点估计来拟合这种分布会丢失大量信息。EGMN指数-高斯混合网络的解决思路是不再让模型输出一个数而是输出一个完整的概率分布用来描述这个用户在这个内容上消费时长为 秒的概率有多大。这个分布是一个混合分布()0⋅−∑1⋅(;,2)其中指数分量负责建模快速划走这个峰 个截断高斯分量负责建模各种中等到深度消费的峰 是每个分量的混合权重。训练这个模型使用三项 loss 的组合NLLentropyregNLL 是负对数似然推动分布的形状在真实时长处概率密度高reg|[]−| 是 L1 回归损失推动分布的期望值在数值上接近真实时长entropy 是熵正则项防止所有权重塌缩到单一分量。在这个框架下内积的概念已经不再适用——模型输出的是分布参数 (,,,)没有一个单独的内积可以作为 Q 值。因此 Q 值应该用混合分布的期望来表达dur[]0∑1这个期望值为什么可以作为 Q 值因为三项 loss 的共同作用保证了单调性对于真正深度消费的用户资源对三项 loss 合力推动 0 减小、 减小1/ 增大、高斯分量权重 增大、均值 右移最终使 [] 增大。对于快速划走的对方向完全相反[] 减小。因此用户消费越久[] 越大Q 值越高这条单调链是成立的。EGMN 这个例子给了我们一个重要的启示Q 值的表达方式必须跟 loss 的设计保持一致不能脱离训练目标去定义推理信号。当模型从输出一个数变成输出一个分布时Q 值也必须从内积变成分布的期望背后的逻辑是一样的只是具体形式跟着训练目标走。七、不只是双塔——其他模型结构的 Q 值设计思路双塔模型只是推荐系统中的一种典型结构它的特殊性在于用户和物品特征在最后才通过内积交汇。其他模型结构的 Q 值设计思路不完全相同但背后的逻辑是统一的。交叉特征模型如 DCN、DIN的特点是用户和物品特征在网络内部就发生了深度交叉经过多层 MLP 后直接输出一个标量 logit再经过 sigmoid 得到预测概率。这类模型没有独立的用户向量和物品向量因此也没有内积的概念。Q 值直接取输出的 logitsigmoid 之前的值或预测概率语义上与双塔模型的内积完全对应——都是该用户资源对发生正向互动的可能性的单调信号只是计算路径不同。序列推荐模型如 SASRec、BERT4Rec通过 attention 机制对用户的历史行为序列建模输出一个融合了时序信息的用户序列表示向量 ℎ然后与目标物品向量 做内积打分。这个结构和双塔模型在推理阶段非常相似Q 值同样是内积 ℎ⊤区别在于用户侧的向量来自序列建模而非简单的用户特征编码因此携带了更丰富的行为序列信息。生成式推荐如基于 LLM 的推荐的推理方式完全不同模型通过自回归生成候选资源的 ID 或描述Q 值的概念退化为生成序列的概率或 beam search 的累积得分。虽然计算方式和双塔模型几乎没有共同点但语义上仍然是一样的生成概率越高说明模型认为这个资源对这个用户越合适排序分数越高。三类模型放在一起看可以得出一个统一的结论不同模型结构下 Q 值的具体计算方式不同但它们都是同一个业务语义的不同实现——这个资源对这个用户的匹配程度。换了模型结构Q 值的表达形式随之变化但它所代表的业务含义始终如一。八、多目标融合——Q 值的组合使用工业推荐系统中通常不止一个优化目标。点击、时长、互动点赞、评论、分享、完播等目标各有各的 Q 值最终需要通过一个融合公式组合成一个综合排序分数。最直接的融合方式是线性加权score1⋅click2⋅dur3⋅interact这种方式直观但有几个问题不同 Q 值的量纲和分布范围差异很大直接加权会导致某个目标因为数值偏大而主导排序权重调参成本高而且各目标之间没有业务逻辑上的优先级关系。更常见的是乘法融合比如scoreclick⋅(11⋅dur2⋅interact)这个公式的业务语义很清晰先保证点击再在点击的基础上奖励时长和互动。点击 Q 值作为乘法因子让一个用户根本不会点击的内容无论时长 Q 值多高都得不了高分符合推荐的业务逻辑——没有点击时长和互动根本不会发生。一些平台还会使用带非线性变换的加权融合score∑⋅()其中 可以是对数变换 log⁡(1)、分段线性函数或其他单调变换。对数变换的作用是压制极端大值防止某条时长特别长的内容因为一个异常值而霸占排名。在使用任何融合公式之前有一件事必须处理各个 Q 值的量纲和分布要先对齐。点击 Q 值是一个 logit通常在 (−∞,∞)时长 Q 值如果用内积也是 logit如果用 EGMN 的期望值则是秒数量级可能差了一两个数量级。不对齐就直接融合权重设置会完全失去物理意义调参也无从下手。常用的对齐方法是分别做 min-max 归一化或对数变换把各 Q 值映射到相近的量级再融合。九、总结把全文的核心逻辑串一遍推荐系统的目标是把用户极有可能产生正向互动的资源推送给他这个目标在模型设计之前就应该想清楚它决定了 Q 值应该代表什么。loss 是训练预

更多文章