生成式推荐中自回归预测与全序列最大似然的数学等价性解析

📅 2026/6/22 10:29:31
生成式推荐中自回归预测与全序列最大似然的数学等价性解析
1. 项目概述从推荐到生成一个被忽视的数学桥梁最近在折腾推荐系统特别是生成式推荐这个方向发现一个挺有意思的现象。很多同行在讨论生成式推荐模型时会把“自回归下一词预测”和“全物品最大似然估计”当成两种不同的训练范式来谈。比如用GPT那种方式逐个预测用户下一个交互物品是一种做法而试图用一个模型一次性给所有物品打分最大化用户历史序列的似然是另一种做法。乍一看前者是序列生成后者是概率建模路子好像不太一样。但我自己在推导和实验的过程中越来越觉得这俩背后可能共享着同一套数学骨架。这个想法一直萦绕在我脑子里直到我动手把公式铺开一步步推下来才豁然开朗在生成式推荐的语境下自回归的下一词预测目标本质上等价于对全物品序列的最大似然估计。这不是一个直觉而是一个在特定条件下可以严格证明的数学结论。理解这个等价性有什么用首先它帮我们统一了视角。以前你可能需要纠结是选Transformer Decoder做自回归训练还是用某种变分自编码器VAE结构做全序列似然最大化。现在明白了如果模型具备足够强的表达能力比如都是基于Transformer的并且你的训练数据是完整的序列那么这两种训练目标最终是在驱使模型学习同一个数据分布。其次在工程优化上这个等价性给了我们灵活性。有时候自回归训练更稳定容易上手而理解其全序列似然本质则能帮助我们设计更好的负采样策略、理解模型校准Calibration的重要性甚至去设计新的解码推理策略。它就像一座桥连接了“序列生成”的直观操作和“概率建模”的理论根基。这篇文章我就想把这个证明过程掰开揉碎了讲清楚。我会从最基本的推荐问题设定和符号定义开始然后分别形式化自回归目标和全序列最大似然目标接着一步步推导它们之间的等价关系。过程中我会穿插一些实际操作中的注意点和容易混淆的概念。最后我会谈谈这个理论认识在实际构建生成式推荐模型时带来的启发比如在采样、评估和模型选择上的一些新思路。无论你是刚接触生成式推荐的研究者还是正在寻找模型优化方向的工程师希望这篇深度梳理能给你带来一些实实在在的参考。2. 问题形式化与核心概念定义在开始证明之前我们必须把战场打扫干净把所有的“棋子”——也就是数学符号和概念——都明确定义好。推荐系统里的 notation 有时候比较乱各家有各家的写法我这里采用一套尽可能通用且清晰的表述。2.1 推荐序列与用户交互数据我们考虑一个典型的序列推荐场景。有一个用户集合U和一个物品集合V。对于某一个用户u我们观察到他按时间顺序产生的一个交互序列记为s^u (v_1^u, v_2^u, ..., v_{T_u}^u)。这里v_t^u ∈ V表示用户在时间步t交互的物品比如点击、购买、观看T_u是这个序列的长度。在生成式推荐的设定下我们的核心目标是建模这个序列的生成过程。也就是说我们要学习一个概率模型p_θ(s^u)参数是θ它能够给真实的用户序列s^u分配一个高概率同时也能合理地生成预测新的、符合用户兴趣的序列。这里有一个关键的、也是后续等价性成立的重要前提我们假设序列数据是“完整”的。这并不是说我们要知道用户一生的所有交互而是在我们建模的上下文窗口内序列是连续、无缺失的。例如我们取用户最近100次交互作为一个序列样本那么这100次交互就是我们要建模的完整对象。模型的任务是学习这100个物品作为一个整体的联合分布或者其自回归条件分布。2.2 两种训练目标的形式化定义接下来我们严格定义将要证明等价的两个目标函数。目标一自回归下一词预测 (Autoregressive Next-Item Prediction)这是目前大多数基于Transformer的生成式推荐模型如BERT4Rec、SASRec的生成式训练以及后来的GPT式推荐模型直接采用的目标。其思想是将序列推荐类比于语言建模给定前面已经出现的物品预测下一个物品是什么。 对于一个序列s (v_1, v_2, ..., v_T)其自回归似然可以分解为一系列条件概率的乘积p_θ^{AR}(s) ∏_{t1}^{T} p_θ(v_t | v_{t})其中v_{t} (v_1, ..., v_{t-1})表示t时刻之前的历史序列。当t1时历史为空p_θ(v_1 | v_{1})就是初始物品的概率p_θ(v_1)。 在训练时我们最大化所有用户序列的似然对数也就是最小化负对数似然损失L_{AR}(θ) - Σ_{u∈U} Σ_{t1}^{T_u} log p_θ(v_t^u | v_{t}^u)模型p_θ(v_t | v_{t})通常是一个在全体物品V上的分类分布通过Softmax输出输入是历史序列的某种编码如Transformer的输出。目标二全物品序列最大似然估计 (Full-Sequence Maximum Likelihood Estimation)这个目标看起来更“全局”一些。它不显式地进行一步步的分解而是试图直接对整个序列的联合概率p_θ(s)进行建模和最大化。 其损失函数定义为L_{MLE}(θ) - Σ_{u∈U} log p_θ(s^u)这里的p_θ(s^u)是模型赋予整个序列s^u的联合概率。如何计算这个联合概率一种经典的方法是使用基于能量的模型Energy-Based Models, EBMs或者归一化流Normalizing Flows它们可以直接给出一个序列的归一化概率值。然而在生成式推荐中更常见且实用的是基于自回归模型本身来定义这个联合概率。这正是连接两个目标的关键点当我们说“全序列最大似然”时我们通常指的是用自回归分解定义的那个联合似然p_θ^{AR}(s)的最大化。而不是指用一个单独的、非自回归的模型直接输出p_θ(s)。注意这里有一个非常重要的概念区分。如果我们有一个非自回归模型它直接建模p_θ(s)例如某些基于VAE的序列模型其Decoder是一次性生成所有位置的那么它的训练目标-log p_θ(s)与自回归目标-Σ log p_θ(v_t|v_{t})在形式上就不相等。我们本文讨论的等价性是建立在“用自回归分解来定义全序列似然”这一通用实践基础上的。也就是说在生成式推荐的主流范式里所谓的“全序列MLE”往往就是“自回归MLE”的另一种说法只是视角不同。3. 等价性证明从链式法则到训练目标现在我们进入最核心的证明部分。这个证明本身并不复杂其基石是概率论中的链式法则Chain Rule但我们需要仔细审视其成立的条件以及在推荐系统中的具体含义。3.1 链式法则与自回归分解对于任意一个离散序列s (v_1, v_2, ..., v_T)其联合概率分布p(s)都可以根据链式法则精确地分解为一系列条件概率的乘积p(s) p(v_1) * p(v_2|v_1) * p(v_3|v_1, v_2) * ... * p(v_T|v_1, v_2, ..., v_{T-1})简写为p(s) ∏_{t1}^{T} p(v_t | v_{t})。 这是一个恒等式没有任何近似也不依赖于任何模型假设。它说的是一个序列出现的概率等于第一个物品出现的概率乘以在第一个物品出现条件下第二个物品出现的概率以此类推。在生成式推荐模型中我们用参数化模型p_θ(v_t | v_{t})去近似真实数据中未知的条件分布p_{data}(v_t | v_{t})。那么很自然地我们用这个模型条件概率的乘积来定义模型所建模的整个序列的联合概率p_θ(s) ≡ ∏_{t1}^{T} p_θ(v_t | v_{t})这个定义是顺理成章的。它意味着当我们谈论一个自回归模型给出的序列概率时我们指的就是这个乘积。3.2 训练目标的数学等价现在我们来看两个损失函数。全序列最大似然估计MLE的目标是最大化Σ_u log p_θ(s^u)也就是最小化L_{MLE}(θ) - Σ_{u∈U} log p_θ(s^u)将上面关于p_θ(s^u)的定义代入L_{MLE}(θ) - Σ_{u∈U} log [ ∏_{t1}^{T_u} p_θ(v_t^u | v_{t}^u) ]根据对数运算的性质log(∏) 可以转化为 Σ logL_{MLE}(θ) - Σ_{u∈U} Σ_{t1}^{T_u} log p_θ(v_t^u | v_{t}^u)仔细观察这个式子的右边它恰好就是自回归下一词预测的损失函数L_{AR}(θ)。因此我们得到了核心结论L_{MLE}(θ) ≡ L_{AR}(θ)在我们将“全序列似然”定义为“自回归条件概率乘积”的前提下最大化全序列似然与最小化自回归下一词预测的负对数似然在数学上是完全等价的优化问题。3.3 深入理解“等价”的含义与条件这个等价性非常强大但也需要正确理解其边界。优化目标的等价这意味着当你用随机梯度下降SGD或其变体如Adam去优化L_{AR}时你同时在优化L_{MLE}。模型参数θ的更新方向在两种视角下是一致的。最终学到的模型既是一个好的“下一词预测器”也是一个好的“全序列概率分配器”。模型表达的依赖等价性成立的前提是模型p_θ必须能够表达通过链式法则定义的那个联合分布。Transformer架构因其强大的序列建模能力和注意力机制非常适合用来参数化p_θ(v_t | v_{t})从而通过乘积表达复杂的联合分布。如果一个模型结构不具备这种表达能力例如一个简单的矩阵分解模型那么这种等价性讨论的基础就不存在。训练技巧的同一性由于目标等价许多针对自回归训练的技巧其本质也是在改善全序列似然。例如教师强制Teacher Forcing训练时总是使用真实的历史序列v_{t}^u来预测v_t^u这直接对应于计算log p_θ(v_t^u | v_{t}^u)是链式法则分解的自然要求。序列掩码Causal Mask在Transformer中使用的因果注意力掩码确保了在计算位置t的表示时只能看到v_{t}的信息这强制模型学习了正确的条件概率p_θ(v_t | v_{t})而非p_θ(v_t | v_{整个序列})。这是实现自回归分解的关键技术保障。与“非自回归”生成模型的区别这一点至关重要。如果我们训练一个非自回归模型如一次产出整个序列的MLM模型BERT或其变种它的训练目标如掩码物品重建通常不等价于全序列的严格似然最大化。因为BERT训练时被掩码的位置是独立重建的在给定上下文条件下这近似但不等于建模联合分布p(v_{mask} | v_{visible})其中v_{mask}可能包含多个物品。只有自回归分解才能提供精确的联合似然计算路径。4. 实操启示等价性理论如何指导模型构建与优化理解了理论上的等价性我们在实际构建和优化生成式推荐模型时思路可以更清晰决策也更有依据。下面我结合自己的经验分享几个关键方面的启示。4.1 模型架构选择拥抱自回归范式既然自回归训练在数学上给出了一个清晰、可计算的全序列似然目标那么在模型架构选择上具有因果自回归能力的Decoder-Only结构如GPT系列或Encoder-Decoder结构在解码时用自回归就成为了自然且强大的选择。为什么是Transformer因为我们需要一个强大的模型来参数化极其复杂的条件概率p_θ(v_t | v_{t})。用户的历史序列可能很长物品之间的关系非线性且动态变化。Transformer的注意力机制能灵活地捕捉历史序列中不同物品对当前预测的重要性这是传统RNN或CNN难以媲美的。实操心得在项目初期我建议直接从相对成熟的架构开始比如将SASRec或BERT4Rec的模型改为标准的Transformer Decoder带因果掩码进行自回归训练。这能快速验证想法。相比于在非自回归结构上绞尽脑汁去近似联合似然自回归是一条更直接、理论更坚实的路径。4.2 损失函数计算处理超大词表的挑战在推荐系统中物品词表|V|通常非常庞大百万甚至千万级。计算标准的Softmax交叉熵损失-log p_θ(v_t | v_{t})需要对所有物品进行归一化这在计算上是不可行的。因此我们必须采用近似方法。理解等价性在这里有帮助我们所采用的任何近似都是在近似计算那个“真实”的全序列对数似然。采样SoftmaxSampled Softmax这是最常用的技术。它并不计算所有物品的概率而是从噪声分布中采样一批负样本连同正样本一起在一个小的子集上计算Softmax损失。关键点在于需要根据采样分布对损失进行偏差校正如使用重要性采样才能得到真实负对数似然的无偏或近似无偏估计。你的采样策略均匀采样、流行度偏置采样等本质上是在定义你希望模型在哪个“概率质量”区域进行精确建模。分层次SoftmaxHierarchical Softmax将物品组织成树状结构将一次百万分类问题转化为一系列二分类或小规模分类问题。这能显著加速但需要精心构建物品层次如通过类别、聚类。实操避坑指南采样数量要足够采样Softmax中负样本数量不能太少。我刚开始试过只采样100个负样本结果模型学到的区分度很粗糙。逐渐增加到1000甚至更多效果才有稳定提升。当然这会增加计算量需要权衡。校正偏差很重要如果使用TensorFlow的tf.nn.sampled_softmax_loss或PyTorch对应的实现务必确保你理解了其内部的偏差校正逻辑。自己实现时一定要包含重要性权重logits减去log(采样概率)否则损失函数是有偏的优化方向会出问题。流行度偏差的利用与修正按流行度采样负样本是一个强基线因为流行物品更可能成为“困难负例”。但这会导致模型过度惩罚预测流行品。一种技巧是在训练时按流行度采样但在评估计算最终序列概率或进行排名时使用全量Softmax或更精确的近似如将流行品作为固定负例池。这相当于在训练时进行了“课程学习”先学会区分明显的错误再逐步细化。4.3 解码推理策略从概率到推荐列表训练完成后在推理阶段我们需要利用模型p_θ(s)来生成推荐。自回归视角和全序列似然视角在这里交汇并指导不同的解码策略。贪心搜索Greedy Search与集束搜索Beam Search这是最直接的自回归生成方式。给定一个用户历史序列我们一步步地预测下一个概率最高的物品将其加入历史再预测下一个。贪心搜索每步只选一个集束搜索保留多个高概率路径。这些方法直接优化的是生成序列的每一步条件概率但最终得到的序列其联合概率即所有步条件概率的乘积未必是全局最高的。集束搜索正是在尝试寻找一个近似全局最优的序列。基于似然的重新排序Re-ranking这是全序列似然视角的典型应用。我们可以先用一个快速模型如双塔模型召回Top-K个候选序列或下一物品候选集然后用我们训练好的生成模型p_θ(s)精确计算每个候选序列的联合概率或续写后的概率并按照这个概率重新排序。因为生成模型计算的是真正的似然分数这个重新排序通常能显著提升推荐质量尤其是考虑序列整体一致性和长期兴趣时。采样策略Top-k, Top-p为了增加推荐的多样性我们不会总是选择概率最高的物品而是从概率分布中进行采样。Top-k从概率最高的k个里采样和Top-p核采样从累积概率达到p的最小集合中采样是常用方法。从全序列似然角度看采样是在按照模型学到的真实分布进行“随机生成”。这能探索到那些概率虽非最高但依然合理的物品有助于发现用户的新兴趣。4.4 模型评估超越单一指标的似然检验在传统推荐中我们常用Hit RateK, NDCGK等排名指标。对于生成式模型除了这些我们还可以利用等价性引入更本质的评估。序列对数似然Sequence Log-Likelihood在一个留出的测试集上直接计算模型赋予真实用户序列的平均对数似然1/N Σ log p_θ(s_test)。这个指标直接衡量模型对真实数据分布的拟合程度。一个更高的对数似然意味着模型认为真实数据更“可能发生”。这可以作为模型容量和训练效果的一个核心诊断指标。困惑度Perplexity源自语言模型定义为exp(-average log-likelihood per item)。它可以直观地理解为“预测下一个物品时平均的不确定程度”。困惑度越低越好。计算测试集上的困惑度可以和基线模型进行对比。实操注意点计算测试集上的真实似然面临和训练时一样的挑战——超大词表。因此在评估时也需要采用近似方法但要求比训练时更精确以减少评估偏差。例如可以使用大量的负样本如5000或10000来计算归一化常数或者对于排序任务可以使用如“完整物品集的Softmax”通过一些库进行加速计算。虽然绝对数值可能因近似而有偏差但用于比较不同模型的相对性能是有效的。5. 常见问题与误区辨析在实际研究和开发中围绕这个等价性存在不少疑问和误解。我梳理了几个最常见的问题。5.1 问题一自回归模型只能做“下一项预测”如何做“序列填充”或“中间项预测”这是一个对自回归模型能力的常见误解。自回归模型p_θ(v_t | v_{t})学习的是给定任意前缀预测下一个物品的条件分布。因此它可以灵活应对多种任务下一项推荐这是最直接的应用给定历史(v_1, ..., v_{t-1})预测v_t。序列填充假设我们有一个不完整的序列[A, _, C, _]想填充_位置。我们可以通过多次自回归调用来实现。例如要填充第一个_我们将A作为历史模型给出下一个物品的分布我们可以采样或取最大概率项填入。然后将A, [填充项]作为历史去预测C依此类推。模型在每一步都基于当前已生成或已知的全部前缀进行预测。中间项预测本质上和填充一样。只要将目标项之前的所有已知项作为条件即可。关键在于自回归模型的“自回归”指的是其生成过程是顺序的但其条件概率的定义是通用的。只要提供了正确的条件前缀它就能给出下一个位置的分布。5.2 问题二既然等价为什么还有非自回归的生成式推荐模型这是一个很好的问题。非自回归模型如BERT式的MLM模型的存在主要是为了效率和并行化。自回归的缺点训练和推理都是顺序的无法并行处理一个序列中的所有位置。生成长序列时速度较慢。非自回归的优点像BERT那样可以同时预测序列中所有被掩码的位置在训练时推理时也可以并行解码。这对于某些对延迟要求极高的场景可能有吸引力。代价正如前文所述非自回归模型通常不直接优化精确的序列联合似然p(s)。MLM目标假设掩码位置在给定上下文下是独立被预测的这对应于近似优化∏_{i∈mask} p(v_i | v_{visible})这与链式法则分解的∏_t p(v_t | v_{t})不同。因此非自回归模型在序列概率建模的精确性上可能做出牺牲以换取速度。选择哪种模型取决于任务对概率校准精度和推理速度的权衡。5.3 问题三在实操中如何验证我的模型确实是在优化序列似然除了看损失下降还可以做一些定性分析检查校准度Calibration对于一个训练好的模型可以统计其预测置信度概率与真实准确率之间的关系。例如将所有预测概率在0.9-1.0区间的样本拿出来看其中预测正确的比例是否也接近90%。一个校准好的模型其预测概率是有实际意义的这间接说明它学习到的分布是可靠的。计算测试集似然如前所述用尽可能精确的方法如大量负样本估算测试集上的平均序列对数似然。如果这个值随着模型改进架构更大、训练更充分而稳步提升说明模型对数据分布的拟合在变好。生成样本质量从模型中随机采样生成一些序列例如给定一个种子物品让模型自回归生成后续序列。观察这些生成的序列是否看起来“合理”是否具有真实用户序列的统计特性如物品共现模式、序列长度分布等。好的生成质量是模型捕获了真实分布的有力证据。5.4 问题四如何处理非常长的序列链式法则分解是否仍然有效理论上链式法则永远有效。但实际问题出在建模上。计算与内存限制Transformer的自注意力复杂度是序列长度的平方级。处理成千上万的交互历史是不现实的。解决方案截断Truncation只保留最近N个交互作为模型输入。这是最常用的方法基于“近期兴趣最重要”的假设。分段Segmentation将长序列分成重叠或不重叠的段分别建模然后聚合信息。记忆网络Memory Network或检索增强Retrieval-Augmented用一个外部记忆模块或检索系统来存储和压缩长历史信息在需要时注入到模型中。高效注意力机制使用Linformer、Performer、Longformer等线性或稀疏注意力变体来降低复杂度。对等价性的影响这些方法都是在近似完整的链式法则分解。当我们截断序列时我们实际上是在用p_θ(v_t | v_{t-N}, ..., v_{t-1})来近似p_θ(v_t | v_{t})即假设更早的历史对当前预测的影响可以忽略或已被概括。只要这个近似是合理的那么优化这个近似条件概率的乘积就依然是在近似优化一个“被截断的”全序列似然。等价性的思想依然指导着我们只是操作对象变成了序列的一个局部窗口。