Reinforcement Learning for Controller Parameters in the Auto-Bidding System at Pinterest

Yichu Zhou, Qinyi Chen, Fei Feng, Jacob Loh, Mehdi Ben Ayed, Lin Yang, Andrei Curelea, Jiajing Xu · Pinterest · arXiv 2610.33248 · 发表 2026-10-23
11 分钟阅读时长 4140字 4.10综合分 第 10 名10-28 Personalization 日报
目录 · 9 节1它到底在解决什么问题?2整体流程3两个目标分开预测,上线时再合并4为什么奖励要用“相对于线上的提升”5离线评估:按剩余天数怎么分配成本权重6线上结果7我认为它的局限8一个广告或推荐团队可以怎么试9一句话结论
相关 4新颖 4实用 4证据 5时效 4

广告自动出价系统里,PID(比例-积分-微分)控制器每隔几秒根据花费进度调整出价,但同一套控制参数要同时服务几十万个预算、周期、流量各不相同的广告计划。Pinterest 没有让强化学习直接出价,而是每天给每个计划从 9 组参数倍数里挑一组,在默认值上下各调一小档,PID 照常跑。七天的线上 A/B 中,有效点击成本 eCPC 显著下降 0.25%,收入基本不变;上线后两个月,对比留出流量,距离结束还有一周以上的计划 eCPC 低了近 1%。

做出价和预算控制的团队值得读这篇,价值主要在部署方式:强化学习只决定“今天用哪组参数”,结果写成一张查找表,线上不加载任何模型,最坏情况也只是参数偏离默认值一小档,安全边界很清楚。但要看清它的限制:折扣因子设成 0,学到的其实是“每天选一个动作、只看当天结果”的上下文 bandit,跨天的取舍完全交给人工设计的权重曲线;线上收益只有千分之几,上线后的长期数据也没有做显著性检验。

它到底在解决什么问题?

PID 控制器是工业界最常见的预算平滑工具。它盯着“实际花费进度”和“目标花费曲线”之间的差距:比例项看眼前差多少,积分项看一路累积差了多少,误差越大,出价调整越猛。系数 、 决定反应的力度。

问题在于,同一组系数不可能对所有计划都合适。用一个计划的生命周期说明(示意):

时间点(示意)计划状态更合适的控制方式
投放第 3 天,还剩 7 天没花完的预算可以滚到后面反应温和一点,少为追进度去抢贵的流量,压低单次点击成本
投放第 9 天,还剩 1 天剩下的预算过了今天就作废反应积极一点,优先把预算花出去
预算很大的计划流量需求高,波动大可能需要和小预算计划不同的力度

固定参数只能在这些情况之间折中。论文的做法是保留 PID,但每天早上按每个计划的状态替它挑一组系数。

整体流程

环节做什么频率
状态计划 ID 的 embedding、剩余天数、日预算、目标花费曲线、前一天的 CTR、CPC 和收入每天一次
动作 和 各乘以 、1 或 三档之一,共 9 种组合;微分项固定不动,因为它的误差信号噪声太大每天一次
决策一个两头的 Q 网络,分别预测每个动作对“预算花出率”和“CPC”的相对变化,再按剩余天数加权合并每天零点跑一次
服务结果写成一张“计划到参数”的查找表,出价系统每隔几秒查表,用这组参数跑 PID秒级
探索每个计划划出一小部分预算和独立的用户桶,随机选动作,用于积累训练数据持续

论文里 的例子是 0.2,也就是在默认值上下浮动 20%。动作空间刻意做得很小,目的就是把线上探索限制在已验证配置附近。

两个目标分开预测,上线时再合并

预算花出率和 CPC 天然冲突:出价高,预算花得快,但每次点击更贵;出价低,CPC 好看,但预算可能花不完。常规做法是把两个奖励加权成一个数再训练,但这样权重一改就要重训。

论文让网络的共享主干后接两个输出头,一个预测预算花出率的变化,一个预测 CPC 的变化,训练时两个头各算各的损失。到了推理时才合并:

是计划剩余的天数, 是成本权重,剩余天数越少权重越小,策略也就越来越偏向“把钱花出去”。

手算一个例子(示意)。两个候选动作:动作 A 让预算花出率提高 1%、CPC 提高 2%;动作 B 让花出率不变、CPC 降低 1%。离结束还早时,取 :A 得分 1−2=−1,B 得分 0+1=1,选 B,省钱优先。快结束时,取 :A 得分 1−0.2=0.8,B 得分 0+0.1=0.1,改选 A,花钱优先。同一个模型,只换权重就换了策略,不用重训。

选动作时也不直接取分数最高的那个,而是保留得分前 K 的动作,用带温度的 softmax 抽样。这样每天的决策带一点随机性,不会所有计划同时挤到同一个动作上。

为什么奖励要用“相对于线上的提升”

直接用 CPC 的绝对值做奖励,会遇到两个问题。第一,不同动作之间的差别相对于 CPC 本身太小,比如 1.01 美元和 1.00 美元,网络很难学会给这些动作排序。第二,不同计划的 CPC 从几分钱到几十美元都有,误差大的计划会主导整个损失;而预算花出率又被限制在 0 到 1 之间,两个目标的量级完全不同,合并时权重很难调。

论文的办法是把奖励定义成“这个动作的结果相对于线上默认配置的变化比例”。这样一来,所有计划、两个目标都落在可比的尺度上,合并权重也不用再去补偿量级差异。

论文图 2:最好动作和第二好动作之间奖励差距的分布。左边用 CPC 绝对值做奖励,差距几乎全部挤在 0 附近;右边用相对于线上的 CPC 变化做奖励,差距分布在 0 到 1 之间,网络更容易分出动作好坏。
论文图 2:最好动作和第二好动作之间奖励差距的分布。左边用 CPC 绝对值做奖励,差距几乎全部挤在 0 附近;右边用相对于线上的 CPC 变化做奖励,差距分布在 0 到 1 之间,网络更容易分出动作好坏。

离线消融显示,这个改动影响很大:用绝对值奖励时,计划最后一天的收入提升只有 0.08%;换成相对提升后是 2.77%,其他日子的 CPC 降幅也从 2.17% 扩大到 3.02%。这些数字来自离线的重要性加权估计,绝对值不能直接当成线上收益,但方向很明确。

离线评估:按剩余天数怎么分配成本权重

离线评估用的是随机探索流量的日志:21 天训练、7 天评估,用重要性加权(IPS)估计新策略相对线上配置的提升。IPS 的思路是给日志里的每条记录重新加权:探索时每个动作被随机选中的概率是 1/9,如果新策略在同样的状态下会以 0.5 的概率选这个动作,这条记录的结果就乘以 0.5÷(1/9)=4.5;新策略根本不会选的动作,权重就是 0。所有记录加权平均,就得到“如果当时用新策略,结果会怎样”的估计。因为探索日志里每个动作的概率是已知且相同的,这个估计没有系统偏差,代价是方差较大,这也是下面逐日曲线色带很宽的原因。

成本权重随剩余天数变化的形状,作者比较了三种:最后一天突然切换的阶梯函数、线性递减、以及介于两者之间的 S 形曲线。

论文图 5:左边是三种成本权重随剩余天数的形状;右边是对应学到的策略中,选择“降 CPC 动作”的计划比例。线性曲线让这个比例从约 78% 平滑降到 40% 左右,阶梯函数则一直保持在约 80%,到最后一天才骤降。
论文图 5:左边是三种成本权重随剩余天数的形状;右边是对应学到的策略中,选择“降 CPC 动作”的计划比例。线性曲线让这个比例从约 78% 平滑降到 40% 左右,阶梯函数则一直保持在约 80%,到最后一天才骤降。
权重形状收入变化CPC 变化
阶梯-1.11%-1.23%
线性(上线选择)+0.05%-0.34%
S 形+1.41%+0.49%

只有线性曲线同时做到收入不降、CPC 下降,所以上线用了它。不过线性方案的收入变化只有 +0.05%,几乎就是零;它的胜出更像是“唯一没有在任何一项上变差的方案”,而不是在两项上都明显领先。

论文图 6:三种权重形状下,按剩余天数拆开的离线 CPC 变化(上)和收入变化(下)。色带是多次训练的波动范围,大多数天都跨过了 0,逐日的差别很难和噪声分开。
论文图 6:三种权重形状下,按剩余天数拆开的离线 CPC 变化(上)和收入变化(下)。色带是多次训练的波动范围,大多数天都跨过了 0,逐日的差别很难和噪声分开。

逐日拆开看,三条曲线的色带在大多数天都跨过 0,单看某一天的数字没有意义,只有汇总后的方向比较可靠。

线上结果

七天的线上 A/B 对比的是同一套服务设施上的默认参数:

指标全部计划实验期间结束的计划
收入持平+0.43%
点击+0.19%+0.25%
eCPC-0.25%(显著)+0.18%

全部计划上,eCPC 下降 0.25% 且显著,收入不变,相当于同样的钱买到了更多点击。实验期间结束的计划,收入和点击上升、eCPC 略升,符合“快结束时优先花钱”的设计意图。

按预算和历史 CPC 分组,所有分组的 eCPC 点估计都是下降的,降得最多的是大预算计划(-0.90%,点击 +0.81%)和高 CPC 计划(-0.64%)。这和直觉一致:这两类计划的调参空间最大。

上线后两个月,作者对比了一小块继续用默认参数的留出流量。距离结束还有一周以上的计划,eCPC 低了近 1%,预算花出率略低;不到一周的计划,花出率反过来略高,eCPC 仍然更低。这说明线性权重确实让策略在计划后期从省钱转向花钱。但留出流量太小,作者没有做显著性检验,只能当作方向参考。

我认为它的局限

第一,“强化学习”在这里其实是上下文 bandit。折扣因子设成 0,模型只预测今天这个动作对今天结果的影响;今天多花钱会让明天剩余预算变少,这种跨天影响完全没有被学到,只靠人工设定的线性权重去近似。作者在讨论里也承认,多步设定下两个头的合并不再有最优性保证。

第二,收益很小,有些数字只是方向性的。全部计划上 eCPC 降 0.25%;实验期间结束的那批计划 eCPC 反而升了 0.18%;上线两个月的数据没有显著性检验;离线消融里上线方案的收入提升只有 0.05%。对这个规模的平台来说千分之几也有实际价值,但不能把它理解成明显的效果提升。

第三,探索成本要自己摸索。随机探索需要从每个计划里划出一部分预算和独立的用户桶,划多少、 取多大、top-K 保留几个动作,都要在自己的系统里试出来;作为奖励基准的“线上默认配置下的结果”如何与探索记录一一匹配,也需要专门设计。这些设置决定了探索会牺牲多少收入,也决定了离线 IPS 估计的方差有多大。对于计划数量少、单个计划预算小的业务,探索流量可能不足以让 9 个动作都被充分采样。

一个广告或推荐团队可以怎么试

  1. 先确认问题存在:把计划按剩余天数、预算大小分组,看固定 PID 参数下各组的花出率和 CPC 是否有系统性偏差。如果各组表现差不多,调参的空间就很小。
  2. 划出一小块独立预算和用户桶做随机探索:、 各取三档,每天随机分配,记录“状态、动作、当天花出率、当天 CPC”。
  3. 训练一个两头的回归模型,预测每个动作相对默认配置的变化比例;先用 IPS 在留出的探索日志上评估,再决定是否上线。
  4. 合并权重先用简单的线性递减,按剩余天数从成本优先过渡到花出优先;上线形式保持“每天一张查找表”,出价系统不加载模型。
  5. 设好兜底:一旦某计划花出率或 CPC 偏离阈值,当天退回默认参数。

一句话结论

让强化学习替 PID 挑参数、而不是替它出价,是一个在线上风险和收益之间很稳妥的折中,值得借鉴的是这种部署形态,而不是千分之几的收益数字。

维度评价
问题重要性高。固定的预算控制参数难以适配各类计划,是出价系统里普遍存在的问题
方法创新性中。参数级强化学习在控制领域早有先例;双头预测加推理时合并、相对提升奖励是实用的工程设计
实验证据中。有七天线上 A/B 和两个月上线数据,但收益很小,长期数据未做检验,部分细节未公开
工程成本低到中。线上只多一张查找表;主要成本是持续的随机探索预算和每天的训练、推理任务
是否值得尝试值得,尤其适合已有 PID 平滑、计划类型差异大的系统;先从小范围探索和离线 IPS 评估做起

读完这篇,你觉得

点一下即可,无需登录;再点一次撤回。只统计匿名次数,不记录你是谁。

讨论

欢迎补充实验细节、复现经验或不同看法。需 GitHub 登录。

正在加载讨论…