1. 从一篇论文速递里拆出四条技术主线
9 月 19 日这天的论文列表里,有三组词反复出现:生成式广告的多目标对齐、LLM 重排、可微路径规划。乍看是三个不相干的方向,但把它们放在一起看,会发现背后是同一件事——如何让一个生成模型在"既要又要"的约束下,输出一个可被下游直接消费的结果。广告要同时满足点击率、转化率、用户体验和预算约束;重排要在相关性、多样性、时效性之间找平衡;路径规划要在可微的前提下让梯度真正流回决策变量。这三件事的共性,是把"生成"从"能出结果"推进到"出对的结果"。
这篇速递适合两类人看:一类是做推荐/广告/搜索的算法同学,想快速知道最近大厂在解决什么具体问题;另一类是做 LLM 应用落地的工程师,关心重排、对齐这些词到底对应什么可复现的技术动作。我不会逐篇翻译摘要,而是把每条主线拆成"问题是什么、主流做法卡在哪、这篇论文动了哪一刀、你自己动手时要注意什么"。所有涉及具体实现的部分,我会明确标注哪些是论文里的、哪些是我基于常见工程实践补的,避免把推测当结论。
先说清楚一个前提:论文速递类内容最容易写成"标题+一句话摘要"的流水账,那种东西看完记不住任何东西。我自己的习惯是,每读一篇先问三个问题——它替换掉了原来流程里的哪一步?替换的代价是什么?如果我要在自己的系统里试,最小验证单元是什么?下面四条主线都按这个思路展开。
2. 生成式广告的多目标对齐:从"加权求和"到"约束下的生成"
2.1 广告系统里"多目标"到底难在哪
传统广告排序是一个多目标预估问题:pCTR、pCVR、pGMV 各自一个塔,最后用一个线性加权公式score = b1*pctr + b2*pcvr + ...拼起来。这套做法能跑很多年,是因为它把"多目标"简化成了"多目标加权成单目标"。但它有两个绕不过去的毛病。
第一,权重是全局静态的。同一个 b1 对所有用户、所有流量都一样,可实际上新用户和高活用户的点击-转化权衡完全不同。第二,加权求和隐含了"目标之间可以线性补偿"的假设——点击率低一点可以用转化率高一点补回来。但业务上很多约束是不可补偿的,比如"广告主预算必须花完但不能超"、"某类目曝光占比不得低于阈值",这些是硬约束,不是可以拿别的目标换的。
生成式广告把问题往前推了一步:不再是从候选集里排序,而是直接生成广告文案、创意甚至出价策略。这时候多目标对齐的难度直接翻倍——因为生成空间是连续的、巨大的,你没法像排序那样对每个候选算一个分数再比大小。
2.2 对齐手段的演进:RLHF 那套为什么不够用
LLM 领域的对齐主流是 RLHF / DPO,核心是拿人类偏好数据训练一个 reward model,再用它去调策略。搬到广告场景会立刻遇到三个不匹配。
一是偏好不可比。用户 A 喜欢夸张文案,用户 B 喜欢克制文案,你没法用一个统一的 reward model 同时服务两者,硬训只会得到一个"平均化"的平庸策略。二是约束是硬的。RLHF 里的 reward 是软信号,模型可以为了拿高分牺牲某些维度;但广告的预算、频控、合规是硬约束,违反了直接是事故。三是反馈延迟且稀疏。点击可能几秒后有,转化可能几天后有,用这种延迟信号做在线对齐,方差大到没法收敛。
所以这一批论文里,多目标对齐的常见做法转向了约束优化 + 生成式策略的组合:把不可补偿的目标写成约束(constraint),把可权衡的目标写成优化目标,用拉格朗日乘子或原始-对偶方法在训练中动态调整。这样做的直接好处是,约束违反会被显式惩罚,而不是靠调权重去"感觉"。
2.3 一个可落地的最小验证方案
如果你想在自己的系统里试这套思路,不用一上来就搞生成式。我建议的最小验证单元是:在现有排序模型上,把线性加权换成带约束的优化。
具体步骤:
- 选定一个硬约束,比如"某广告主日曝光不超过 N 次"。把它写成
E[exposure] <= N。 - 保留原来的多目标预估塔,但不再直接加权,而是构造拉格朗日函数
L = sum(bi*pi) - lambda*(E[exposure] - N)。 - 训练时用原始-对偶更新:正常梯度下降更新模型参数,同时用
lambda = max(0, lambda + lr*(E[exposure]-N))更新乘子。 - 观察 lambda 的收敛轨迹。如果 lambda 一直震荡不收敛,说明约束太紧或者学习率不匹配,先放松约束验证链路。
注意:拉格朗日方法对学习率非常敏感,乘子的学习率通常要比模型参数的学习率大 1~2 个数量级,否则约束收敛会慢到你以为方法失效。
这套东西跑通之后,再把"加权"换成"生成"才有意义。顺序反了,你会同时面对生成空间探索和约束收敛两个难题,根本分不清是哪个环节出的问题。
2.4 生成式广告里最容易被忽略的评估陷阱
做生成式广告评估时,很多人直接拿离线指标(比如生成文案的 CTR 预估)当结论。这里有个坑:生成模型的输出分布和真实曝光分布不一致。你生成的文案可能压根没机会被真实用户看到,离线预估的 CTR 是在一个"假想曝光"上算的,和线上差很远。
我的经验是,评估生成式广告至少要三层:离线用 reward model 打分做粗筛,小流量用真实反馈做校准,最后看长期指标(用户留存、广告主续投率)而不是单次点击。只看单次点击,很容易被"标题党式"的生成策略骗过去——短期点击涨,长期用户流失。
3. LLM 重排:为什么"再排一次"能救回不少效果
3.1 重排在整个检索链路里的位置
一个典型的检索系统是"召回 → 粗排 → 精排 → 重排"。召回负责从亿级里捞回千级,粗排砍到百级,精排算精细分数,重排做最后的顺序调整。重排之所以存在,是因为前面几步为了效率牺牲了信息——召回用双塔,query 和 doc 是分开编码的,交互信息丢失;精排虽然用了交叉特征,但受限于延迟,能用的特征和模型复杂度有限。
LLM 重排的思路很直接:既然 LLM 有强语义理解能力,那就让它对 top-K 候选做一次"精读",重新打分。K 通常取 20~100,因为 LLM 推理成本高,不可能对千级候选都跑一遍。
3.2 LLM 重排的三种典型实现路径
| 路径 | 做法 | 优点 | 代价 |
|---|---|---|---|
| Pointwise | 每个 query-doc 对单独打分 | 实现简单,可并行 | 忽略候选间相对关系,成本随 K 线性增长 |
| Pairwise | 两两比较,输出偏好 | 更贴近排序本质 | 组合数 O(K²),成本高 |
| Listwise | 一次输入所有候选,输出完整排序 | 全局最优,成本可控 | 对 prompt 长度敏感,位置偏置明显 |
实际落地里,Listwise 是主流,因为它一次推理就能出完整顺序,成本最低。但它有个著名问题:位置偏置。LLM 对 prompt 里靠前和靠后的内容注意力不均,导致排序结果受输入顺序影响。常见的缓解手段是多次打乱顺序取平均,或者用滑动窗口分段排序再合并。
3.3 自己搭 LLM 重排时,prompt 怎么写才不翻车
我试过几版 prompt,踩过的坑比想象中多。分享一个相对稳的模板结构:
你是一个搜索相关性排序助手。下面是用户查询和 N 个候选文档。 请根据文档与查询的相关性,从高到低输出文档编号。 用户查询:{query} 候选文档: [1] {doc_1} [2] {doc_2} ... 要求: - 只输出编号,用逗号分隔,不要输出任何解释 - 如果两个文档相关性接近,优先选择信息更具体、更新更及时的那个 - 必须输出全部 N 个编号,不得遗漏几个关键点:
- 强制输出全部编号。不加这条,LLM 经常只输出前几个,后面的直接丢,导致排序不完整。
- 禁止解释。一旦让它解释理由,输出长度不可控,解析成本飙升,而且理由和最终排序经常对不上。
- 给平局规则。相关性接近时 LLM 会随机选,给一条明确的 tie-breaker 能显著降低方差。
- 编号用方括号。实测
[1]比1.或(1)更容易被稳定解析,因为方括号在文本里出现频率低,不容易和正文混淆。
提示:如果你的候选文档里有大量相似内容,LLM 重排的收益会明显下降。这时候先做一步去重或聚类,把 K 压下来,比硬堆 prompt 有效。
3.4 重排的延迟账要提前算
LLM 重排最大的落地障碍是延迟。假设你用 7B 模型,单次 listwise 推理 50 个候选,在单张消费级卡上大概几百毫秒到一秒。如果 QPS 是 100,你需要几十张卡才能扛住。这个账必须在方案设计阶段就算清楚,而不是等上线了才发现延迟爆炸。
几个降延迟的实操手段:把 K 从 100 降到 30(收益衰减通常不明显);用蒸馏后的小模型做重排;对长尾 query 跳过重排直接用精排结果。最后这条特别实用——重排的收益主要集中在头部高频 query 上,长尾 query 候选本来就少,重排性价比很低。
4. 可微路径规划:让梯度真正流到决策变量上
4.1 路径规划为什么长期"不可微"
经典路径规划是"搜索 + 优化":A*、RRT 这类算法在离散的图或连续空间里搜一条可行路径,然后做平滑。问题在于,搜索过程本身是离散的、不可导的——你没法对"选了哪条边"求导。这就导致它很难和上游的感知模块、下游的控制模块做端到端联合优化。
可微路径规划要解决的就是这件事:把路径表示成一个可微的参数化形式,让损失函数的梯度能一路传回到路径参数,甚至传回到感知特征。这样整个"感知-规划-控制"就能一起训。
4.2 可微化的两条技术路线
一条是软化的离散搜索。把"选哪条边"从硬选择变成概率分布,用 softmax 加权,这样期望路径对参数可导。代价是训练时是"软路径",推理时还得离散化,两者之间有 gap。
另一条是连续参数化。直接把路径表示成样条曲线或神经网络输出的控制点序列,路径本身就是参数的连续函数,天然可微。这条路线更干净,但需要保证输出的路径满足动力学约束(比如曲率不能超过车辆极限)。
这一批论文里,比较多的是第二条路线的变体:用扩散模型或隐式神经表示来参数化路径,把约束写成损失项。扩散模型的好处是能建模多模态的路径分布——同一个起点终点,可能有几条都合理的路径,扩散模型能采样出多样性,而不是只给一条"平均路径"。
4.3 约束怎么加才不破坏可微性
路径规划里约束很多:避障、曲率上限、速度上限。加约束的常见做法是罚函数——违反约束就加一个惩罚项。但罚函数有个老问题:权重难调。权重太小约束形同虚设,权重太大梯度被惩罚项主导,路径质量崩掉。
更稳的做法是把硬约束投影到可行域。比如曲率约束,可以在每步更新后把参数投影回满足曲率上限的集合。投影操作本身如果可微(或者用可微的近似),就不会破坏端到端训练。这个思路在优化里叫投影梯度法,搬到可微规划里同样适用。
注意:投影操作会让梯度在边界处不连续,训练时容易出现 loss 尖刺。缓解办法是用平滑的投影近似,或者在边界附近降低学习率。
4.4 一个最小可复现的实验设计
想验证可微路径规划,不用上真车。我建议的最小实验是:二维平面上的避障路径规划。
- 定义起点、终点和若干圆形障碍。
- 用一个小 MLP 输出一组控制点,插值成路径。
- 损失 = 路径长度 + 避障惩罚 + 平滑惩罚。
- 用 Adam 优化,观察路径是否收敛到绕开障碍的最短路径。
- 关键验证:把障碍位置作为可学习参数,看梯度能不能传回障碍表示——这一步验证了"可微"是否真的成立。
这个实验半天能跑完,但能把可微规划的核心机制摸清楚。跑通之后再上更复杂的动力学约束和扩散参数化,心里有底。
5. 把三条线串起来看:生成、对齐、可微的共同底层
5.1 它们都在解决"生成结果不可控"的问题
生成式广告、LLM 重排、可微路径规划,表面是三个领域,底层是同一个矛盾:生成模型的输出空间太大,而业务要求输出必须落在某个可控范围内。广告要落在预算和合规范围内,重排要落在相关性阈值内,路径要落在动力学可行域内。
三种解法也高度相似:用约束显式表达"不可越界",用可微性保证"能优化",用对齐保证"优化方向对"。这三件事缺一不可——只有约束没有可微性,你没法训;只有可微性没有约束,模型会跑偏;只有对齐没有约束,硬性要求会被软信号淹没。
5.2 工程落地时的通用检查清单
不管你做的是哪条线,落地前建议过一遍这几个问题:
- 约束是硬的还是软的?硬约束必须显式建模,不能靠调权重。
- 梯度能不能流到你想优化的变量?如果中间有不可微的离散操作,要么软化,要么用直通估计器(STE)。
- 离线指标和线上指标的相关性验证过吗?没验证过就别信离线结论。
- 延迟预算算过吗?尤其是 LLM 相关的方案,延迟往往是第一杀手。
- 最小验证单元是什么?别一上来就端到端,先验证单个环节。
5.3 我自己的踩坑体会
做这类"生成+对齐+可微"的工作,最大的坑不是算法本身,而是验证链路太长。你改一个约束项,要跑完整个训练才能看到效果,一轮几小时,一天跑不了几次。我的做法是把验证拆细:先用小数据、小模型验证约束是否生效,再用中等规模验证梯度是否正常,最后才上全量。每一步都有独立的检查点,出问题能快速定位。
另一个体会是,别迷信论文里的超参。论文报的权重、学习率都是在特定数据分布下调出来的,换到你的场景大概率要重调。把论文当思路来源,别当配置模板。
6. 如果你只想跟进其中一条线,我的建议
三条线里,LLM 重排是当下最容易落地、收益最直接的。原因是它对现有系统侵入性小——你不需要改召回和精排,只在最后加一层重排,效果不好随时能摘掉。而且 LLM 重排的工程链路清晰,prompt 调优、延迟优化、A/B 实验都有成熟套路。
生成式广告多目标对齐的落地难度中等,主要卡在约束优化的调参和线上反馈的延迟。适合已经有成熟广告系统、想进一步提升的团队。
可微路径规划最偏研究,落地场景相对窄(主要是自动驾驶和机器人),但如果你正好在这个领域,它的端到端优化潜力是实打实的。
最后分享一个跟进论文的小技巧:别按日期追,按问题追。把"多目标对齐""LLM 重排""可微规划"当成三个长期跟踪的关键词,每次看到新论文就问它替换了流程里的哪一步。这样积累下来,你对每个方向的技术演进会有清晰的脉络感,而不是被每天的论文列表淹没。