Ad Bidding
👋计算广告中常见的出价模式包括CPM、CPA(Cost Per Acquisition,每次获取成本)、CPC等,相关介绍可以看👉【王喆】「深度学习计算广告」讲透互联网广告中的出价模式。互联网中最常用的两种出价分别是MCB和oCPM,其中oCPM是主要的出价方式。本文将详细介绍关于MCB和oCPM的算法建模,以及目前工业界广告出价算法中传统算法(PID、期望最优)和生成式算法(DT、扩散模型)的落地应用。
问题建模
MCB
最大转化出价(Multiple Constrained Bidding, MCB)是一种预算约束下的多目标优化问题。广告主提供总预算 $B$ 和可选目标CPA,如每次转化目标成本为50元,不需要设置出价,所以也叫nobid,系统目标是在预算 $B$ 内最大化转化量 $Conv$,若设置需同时满足 $ CPA \leq CPA_{target} $。
MCB出价的建模如下:假设一个有 $N$ 个曝光机会顺序到达的场景,第 $i$ 个机会中广告主出价 $b$ 超过其他广告主则赢得曝光并产生成本 $c$。目标是总预算 $B$ 和广告主设置的第 $j$ 个约束上限 $C$ 下最大化赢得曝光总价值:
$$\sum_i o_i v_i$$
其中 $v$ 表示曝光价值,$o$ 是指广告主是否赢得曝光 $i$ 的二进制变量。约束条件如下,$p$ 可以是任何性能指标,如转化次数。
$$ \sum_i o_i c_i \leq B $$
$$ \frac{\sum_i c_{ij} o_i}{\sum_i p_{ij} o_i} \leq C_j $$
A unified solution to constrained bidding in online display advertising 中计算出MCB的出价最优解可以用最优出价参数 $\lambda_j$ 表示:
$$
b_i = \lambda_0 v_i + \sum_{j=1}^J \lambda_j p_{ij} C_j
$$
oCPM
优化千次展示成本(Optimized Cost per Mille, oCMP)是一种以转化为目标的智能出价策略,广告主设定目标转化成本CPA,系统通过调整每次展示的出价,使得平均转化成本趋近于 $ CPA_{target} $,同时最大化转化量。
oCPM出价建模如下:理论出价可以通过出价系数 $\alpha_i$ 来校正预测偏差和竞争环境变化。
$$
b_i = CPA_{target} \cdot \hat{p}_{cvr}(i) \cdot \alpha_i
$$
oCPM涉及到深度学习模型对转化率 $ \hat{p}_{cvr}(i) $ 的预测和出价机制中 $ \alpha_i $ 的调整。不论是MCB还是oCPM,都需要注意预算平滑,将总预算分配到各个时间段避免提前花完或剩余过多。对于两种出价方式的选择:如果广告主优先考虑转化量,且对成本容忍度较高,或处于冷启动阶段选MCB。如果广告主有明确的成本要求,且已积累一定数据处于稳定期,系统能准确预测转化率选oCPM。在实际投放中,两种策略可结合使用,前期用MCB快速获取数据,后期转为oCPM精细控制成本。
传统算法
PID
PID是比例(Proportional)、积分(Integral)、微分(Derivative)控制的缩写,是一种经典的反馈控制算法。在oCPM出价中PID控制器通过调整出价公式中的 $\alpha$ 系数,使得实际转化成本CPA尽可能接近目标转化成本。
在oCPM出价场景中,我们设定目标 $ CPA_g $,然后实时监控实际 $CPA_a$。PID控制器根据误差 $e(t) = CPA_a(t) - CPA_g$ 来调整 $\alpha$ 系数,从而调整出价。在实际应用中通常会对误差进行归一化处理,使用相对误差:$e(t) = (CPA_a(t) - CPA_g) / CPA_g$。接下来,我们详细解释PID的三个分量如何影响 $\alpha$ 的调整:
- P 控制:与当前误差成比例,即调整量与当前误差成正比。如果成本偏高 e>0 则降低 $\alpha$;如果成本偏低 e<0 则提高 $\alpha$。比例控制能够快速响应误差,但单独使用可能无法消除稳态误差,即实际CPA与目标CPA之间的持久差距,且可能引起震荡。
- I 控制:与误差的累积和成比例。积分控制可以消除稳态误差,因为它会不断累积误差并产生调整量,直到误差为零。但是积分控制可能使系统反应迟缓,并且可能引起超调,即实际CPA在目标值附近波动过大。
- D 控制:与误差的变化率成比例。微分控制可以预测误差的未来趋势,从而提前进行抑制,有助于减少超调和震荡,提高系统的稳定性。
在离散时间系统中,PID控制器的输出可以表示为:
$$\alpha(t) = Kp * e(t) + Ki * Σ e(τ) + Kd * [e(t) - e(t-1)]$$
但在oCPM出价中通常使用乘法调整,或者也可以采用加法调整,但乘法调整更符合出价公式的乘法结构。
$$\alpha(t) = \alpha(t-1) * (1 + Kp * e(t) + Ki * Σ e(τ) + Kd * [e(t) - e(t-1)])$$
实际应用中,往往只使用PI控制,去掉微分项,因为微分项对噪声敏感,而在广告系统中,转化成本本身波动较大,微分项可能引入不稳定性。
我们来看一个具体的调整过程:假设我们每隔一段时间比如1小时调整一次 $\alpha$。我们记录当前时间段内的实际 $CPA_a$ 和累计误差。
- S1: 计算当前误差 $e(t) = (CPA_a - CPA_g) / CPA_g$
- S2: 计算误差的累积和:$sum_e(t) = sum_e(t-1) + e(t)$
- S3: 计算误差的变化:$\delta_e(t) = e(t) - e(t-1)$
- S4: 计算调整量:$adjust = Kp * e(t) + Ki * sum_e(t) + Kd * \delta_e(t)$
- S5: 更新$\alpha$:$\alpha(t) = \alpha(t-1) * (1 + adjust)$,需要对 $\alpha$ 进行限幅,如限制在[0.5, 2.0]之间,避免出价过高或过低。
PID出价的一些问题:
- 延迟反馈:转化可能发生在点击之后很久,因此实际CPA的计算会有延迟。需要使用部分数据或预测数据来估计当前CPA。
- 非稳态:市场环境包括竞争、用户行为等不断变化,目标CPA可能也需要调整。
- 预算约束:在控制成本的同时还要考虑预算花光的速度,因此需要将预算考虑进调整中。
期望最优调价
在广告投放系统中,成本控制是核心目标之一,尤其是在按CPA模式下。PID在转化量充足时表现良好,但在低转化场景下面临显著挑战:
- 随机偏差放大:转化量少时,成本波动性高,PID依赖的历史误差信号本身噪声大;
- 局部优化局限:仅基于已发生数据调整,缺乏对全天投放过程的整体规划;
- 多目标难以平衡:成本、跑量、稳定性等多目标协同优化复杂;
- 参数敏感与泛化难:不同行业、账户、时段需差异化参数,调优成本高。
期望最优调价策略的核心思想是:在任意决策时刻,基于已知信息与未来预估,求解使全天成本期望最优的出价系数。基于历史消耗与转化(含回流预估)cost_hist, conv_hist 以及未来消耗与转化的预估cost_future, conv_future,全天成本可表示为:
$$
CPA_{final} = \frac{\text{cost}{\text{hist}} + \text{cost}{future}}{\text{conv}{\text{hist}} + \text{conv}{\text{future}}}
$$
MPC未来消耗预估依赖两个关键函数:
- 消耗时间分布函数
F(t):表示在出价系数为1时,从0点到时刻t的累计消耗占全天总消耗的比例。可通过历史数据拟合,常用二次函数或分段线性函数。 - 出价系数与消耗关系模型:假设消耗与出价系数的
k ≈ 2.5次方成正比:
$$
\frac{\text{cost}(\lambda_1)}{\text{cost}(\lambda_2)} = \left( \frac{\lambda_1}{\lambda_2} \right)^k
$$
(1) 未来消耗预估:
$$
\text{cost}{\text{future}}(\lambda) = \frac{\text{cost}{\text{hist}}}{\lambda_{\text{hist}}^k} \cdot \frac{1 - F(t)}{F(t)} \cdot \lambda^k
$$
(2) 未来成本预估:假设转化成本与出价成正比即
$$
CPA_{\text{future}}(\lambda) = \frac{\lambda}{\lambda_{\text{hist}}} \cdot CPA_{\text{hist}} = \frac{\lambda}{\lambda_{\text{hist}}} \cdot \frac{cost_{hist}}{conv_{hist}}
$$
(3) 未来转化量预估:
$$
\text{conv}{\text{future}}(\lambda) = \frac{\text{cost}{\text{future}}}{CPA_{\text{future}}}
$$
期望最优调价系数求解:
- 解析法:联立上式最小化成本偏差,对方程求导最终得到一个关于
λ的k次方程,需要数值求解 - 遍历求解(最常用):在
λ的可行域如[0.2, 2.0]内遍历搜索求解 - 考虑概率分布的优化目标:考虑未来转化的随机性,即未来真实转化量
conv_real服从泊松分布,参数为conv_future。则需要最大化达成概率
$
P\left(0.8 \cdot CPA_{\text{target}} \leq CPA_{\text{real}} \leq 1.2 \cdot CPA_{\text{target}}\right)
$,同样适用遍历求解。
强化学习算法——IQL
传统广告出价算法的问题是其决策的局部性与静态性。它们通常将连续的竞价过程割裂为孤立的决策点,只优化单次竞价的即时收益,实际上单步决策最优不等于全局决策最优,传统出价算法忽略了出价作为一个序列决策问题的本质——当前的出价策略会影响未来的流量竞争态势、预算消耗节奏和用户转化路径。同时,这些方法高度依赖预设规则和手工调参,难以自动适应市场竞争、用户行为等环境的动态变化,在面对多目标复杂权衡和转化奖励延迟时显得僵化且短视。
强化学习RL优势在于其序列优化与自适应学习的能力。它将出价建模为一个马尔可夫决策过程(MDP),智能体通过与环境即竞价市场的交互,学习一个直接最大化长期累积奖励的策略。这使得RL能自然地进行跨时间步的全局优化,例如智能地规划预算消耗、为潜在高价值用户提前布局。更重要的是,RL策略能根据实时反馈数据自主演化,自动平衡成本与转化量的矛盾,并适应竞争格局的波动,从而实现一种动态、精细且前瞻性的出价智能,这是传统静态规则系统无法企及的。
问题定义
首先,我们将广告出价问题建模为一个MDP:
- 状态空间 $S$:状态 $s_t$ 包含广告请求的上下文信息,即广告投放状态,包括预算类、消耗类、时间进度、历史成本和出价等。也可以考虑行业、产品、转化目标对应投放状态。
- 动作空间 $A$:动作定义为下一时刻的出价调整系数 $\alpha_t$,假设以eCPM形式出价,实际出价:
$$bid_t = CPA_{target} \times pCVR_t \times pCTR_t \times 1000 \times \alpha_t$$ - 奖励函数 $r(s_t, a_t)$:通常设计为多目标组合,比如是否转化、是否在目标CPA范围内、预算消耗进度的加权。简单点也可以直接将 $\sum{pctr*pcvr}$ 作为奖励,ROI类再乘pltv。
- 状态转移:由广告竞价环境决定,包括竞拍结果、用户反馈等。
$$s_{t+1} \sim P(s_{t+1}|s_t, a_t)$$
我们的目标是学习一个策略 $π(a∣s)$,使得在给定预算约束下最大化累计奖励。
IQL简介
在广告出价中,我们无法在线与环境大量交互,因为探索可能浪费广告预算,因此使用离线强化学习。IQL是一种离线RL算法,它可以在不与环境交互的情况下,仅使用离线数据集中已有的状态-动作对,不直接学习Q函数,通过期望回归(Expectile Regression)隐式地学习Q函数的上界来避免对未见过的动作的过高估计。结合优势加权行为克隆(Advantage-Weighted Regression, AWR)学习策略避免了分布偏移问题。
IQL的优化目标包括三个部分:
- 状态价值函数 $V(s)$ 的学习:通过期望回归来隐式地学习Q函数的上分位数。
- Q函数 $Q(s,a)$ 学习:使用标准的时序差分目标,但用 $V(s′)$ 代替 $max_{a′}Q(s
′,a′)$。 - 策略 $π(a∣s)$ 的学习:通过优势加权行为克隆从数据集中提取策略,即优化策略以最大化期望Q值,同时保持与行为策略的相似性。
状态价值函数 $V(s)$ 的学习:不直接学习Q函数的最大值,而是学习一个介于期望和最大值之间的量。定义状态价值函数 $V(s)$ 的损失函数为:
$$L_V(ψ) = \mathbb{E}{(s,a)∼D} [L_2^τ (Q{\hat{θ}}(s,a) − V_ψ(s))]$$
其中,$L_2^τ$ 是期望回归损失函数,定义为:
$$L_2^τ (u)=∣τ−1_{u<0} ∣u^2$$
这里,$τ∈(0.5,1]$ 是一个超参数。当 $τ=0.5$ 时,就是最小二乘,$V(s)$ 会学习到 $Q(s,a)$ 的条件期望;当 $τ$ 接近1时,$V(s)$ 会学习到 $Q(s,a)$ 的条件上分位数,即更大的Q值。
直观理解:我们希望通过 $V(s)$ 来估计在状态 $s$ 下,数据集中存在的动作所能达到的Q值的上界。由于只使用数据集中存在的动作,我们避免了外推误差。
Q函数 $Q(s,a)$ 的学习采用标准的贝尔曼方程,但使用 $V(s′)$ 作为目标值,而不是 $max_{a′}Q(s′,a′)$。损失函数为:
$$L_Q(θ) = \mathbb{E}_{(s,a,r,s′)∼D}[(r+γV_ψ(s′)−Q_θ(s,a))^2]$$
这里的目标值 $r+γV_ψ(s′)$ 只依赖于状态 $s′$ ,而不依赖于动作 $a′$ 。这意味着我们不需要在 $s′$ 处最大化Q函数,从而避免了在离线数据中因采取不同于数据收集策略的动作而导致的误差。
策略 $π(a∣s)$ 的学习通过优势加权行为克隆进行。首先定义优势函数:
$$A_{\hat{θ}}(s,a)=Q_{\hat{θ}}(s,a)−V_ψ(s)$$
这里的优势函数使用了之前学到的Q函数和V函数。策略的学习目标是最大化加权对数似然:
$$L_π(ϕ)=\mathbb{E}{(s,a)∼D}[exp(βA{\hat{θ}}(s,a)) \space log \space π_ϕ(a∣s)]$$
其中,$β>0$ 是温度参数。这个损失函数的意义是:对于数据集中每个状态-动作对,我们根据其优势值来加权。优势值越大,即该动作相对于状态价值的优势越大,在更新策略时给予的权重就越大。这样,策略会倾向于选择数据集中那些优势高的动作。
IQL在广告出价中的建模过程
数据收集:收集离线数据。数据来自历史广告日志,每条记录包括:状态$s$(特征如上所述),动作 $a$(历史策略使用的出价调整系数),奖励 $r$(根据广告效果计算的即时奖励),以及下一个状态。
训练过程:
- 初始化:随机初始化Q网络参数 $θ$,V网络参数 $ψ$,策略网络参数 $ϕ$。
- 迭代更新:
- 从数据集中采样一批数据 $(s,a,r,s′)$
- 计算Q值:$Q_θ(s,a)$
- 更新V网络:最小化 $L_V(ψ)$
- 更新Q网络:最小化 $L_Q(θ)$
- 更新策略网络:最小化 $L_π(ϕ)$
- 重复直到收敛。
策略部署:训练完成后,我们得到策略网络 $π_ϕ(a∣s)$。在线上出价时,对于每个广告请求,我们提取状态 $s$,然后使用策略网络给出动作 $a$,即出价调整系数,最后计算出价。
为什么IQL适合建模出价问题?
- 离线学习:广告出价系统通常有大量的历史数据,但在线交互学习成本高。在线RL需要在线交互,可能在探索过程中付出高昂代价。IQL可以从历史数据中学习,无需在线探索,降低了风险。
- 适合连续动作空间:广告出价问题中,出价系数是连续值。IQL通过优势加权行为克隆可以处理连续动作空间,而其他一些离线RL算法如BCQ、CQL也支持连续动作空间,但IQL在实验中被证明在连续控制任务上表现良好。
- 利用历史策略:许多离线RL算法如CQL、BRAC需要估计行为策略 $π$。IQL可以基于历史策略如PID的数据,利用高奖励轨迹学习到比历史策略更优的策略,从而提升出价效果。
- 稳定性:IQL通过期望回归的tau参数学习Q函数,隐式地将策略约束在数据分布附近,可以缓解分布偏移问题,tau参数可以控制保守程度,tau小 → 更保守,适应慢。tau大 → 更激进,适应快,通过使用V函数作为目标,避免了在离线数据中需要最大化Q函数时可能产生的对未见动作的高估,避免了外推误差,提高了学习的稳定性。
生成式出价
Decision Transformer based
DT
DT 摒弃了传统的马尔可夫决策过程框架,不通过价值函数或策略梯度来学习,而是将强化学习问题视为一个序列建模问题。输入是一个由历史“状态-动作-回报”三元组拼接而成的序列。像语言模型预测下一个词一样,自回归地预测序列中的下一个动作。通过剩余回报(Return To Go, RTG)这个条件变量来控制策略的“激进”或“保守”程度。RTG表示从当前时刻到轨迹结束,预期还能获得多少累计奖励。下面我们详细描述DT出价的建模过程:
我们的目标是训练一个 DT 模型 $DT_θ$ 使其能够根据历史轨迹和指定的“RTG”条件,生成合适的出价调整动作。
首先从线上日志中获取轨迹。每条轨迹由多个时间步的数据组成。序列长度通常被截断到一个固定的 $K$ 步如最近20步,以处理长序列并保持计算效率。对于每个时间步 $t$,我们需要构建输入序列,这个序列是一个按时间顺序拼接的“三元组”流:$$R_t, s_t, a_t, R_{t-1}, s_{t-1}, a_{t-1}, …, R_1, s_1, a_1$$。
模型结构使用带因果注意力掩码的标准的 Transformer Decoder 结构,确保当前时刻的预测只能看到过去的信息。输入编码序列中的每个 $R$, $s$, $a$ 都会被投影到统一的embedding空间,并加上位置编码以保留时间顺序信息。在输入序列后,模型的目标是预测出该时刻的正确动作,通常使用均方误差损失。模型学习到的是:在历史上下文且要求未来总回报达到 $R_t$ 的条件下,当前状态下应该采取什么动作。通过输入不同的 RTG 条件可以引导模型产生不同激进程度的出价行为,条件设得高模型会更“努力”去争取高价值曝光。
GAS: Generative Auto-bidding with Post-training Search
GAS中提到DT出价的问题:
- 条件不匹配:DT依赖的“剩余回报”条件在数据中可能噪声很大,不能准确反映动作的真实价值。例如,一个好的动作后跟一个糟糕的未来动作可能导致的剩余回报很低。
- 偏好固化:一个DT模型通常只擅长一种奖励函数定义的偏好,通常被训练甚至偏向于模仿主流偏好,难以灵活适应广告主多样的 KPI 要求。
GAS在一个预训练的基础策略模型DT上,训练多个Q网络,在搜索过程中,这些评判器负责给每个经过扰动base action得来的候选动作打分,采用Q-voting选择最终的动作,从而绕过了 DT 中可能不准确的“剩余回报”条件,直接根据目标偏好进行决策。
训练阶段:
- DT训练:使用离线数据训练基础策略模型 $$a_t \sim DT_θ(s_t, history, R_t)$$
- QT训练:对于每种偏好,我们训练一组M个针对特定偏好的评判器 $${QT_{φ_k}}_{k=1:M}$$
每个评判器是一个Transformer-based的Q网络,输入为长度为 $L$ 的历史状态-动作序列和当前状态-动作对,注意这里包含当前时刻t的状态和动作。输出为当前状态-动作对的Q值。QT采用IQL来训练,以避免对分布外动作的高估。每个评判器都是独立训练的,使用不同的随机初始化,从而得到略有差异的Q值估计。IQL引入一个额外的价值网络$V_ψ$,并通过期望回归损失来学习:
$$L_V(ψ) = E_{(s,a)D} [L_2^τ(Q_φ(s,a) - V_ψ(s))]$$D} [(r(s,a) + γ V_ψ(s’) - Q_φ(s,a))^2]$$
$$L_2^τ(u) = |τ - I(u<0)| u^2$$
其中 $τ$ 是超参数。Q网络的损失为:
$$L_Q(φ) = E_{(s,a,s’)
推理阶段在每一个时间步t,执行以下步骤:
- 使用基础策略模型生成基础动作 $$a_t = DT_θ(history, s_t, R_t)$$
- 在基础动作周围通过随机扰动生成N个候选动作。$a_t^i = a_t * ε_i$, 其中$ε_i ~ Uniform(0.9, 1.1), i=1,…,N-1$。候选动作集合:${a_t^1, a_t^2, …, a_t^{N-1}, a_t}$
- 对于每个候选动作$a_t^i$,使用对应偏好的多个评判器(QT)计算Q值,然后通过Q-voting机制汇总得到每个动作的得分。
- 对于每个评判器$QT_{φ_k}$,计算候选动作的Q值:$$Q_k^i = QT_{φ_k}(s_t, a_t^i; history)$$
- 对每个评判器,将N个候选动作的Q值进行min-max归一化,得到该评判器对每个动作的投票分数:$$v_k(a_t^i) = (Q_k^i - min_{n} Q_k^n) / (max_{n} Q_k^n - min_{n} Q_k^n)$$
- 对所有评判器,计算每个动作的总投票分数:$$v(a_t^i) = Σ_{k=1}^{M} v_k(a_t^i)$$
- 选择总投票分数最高的动作作为最终执行的动作:$$a_t^* = argmax_{a_t^i} v(a_t^i)$$
GAVE: Generative Auto-Bidding with Value-Guided Explorations
GAVE解决的是离线自动出价中的三个难点:复杂目标、行为崩溃和OOD风险。因此GAVE基于DT引入3个模块:
- 基于分数的RTG模块:解决目标对齐问题。传统方法用简单奖励,但实际广告有CPA约束,所以GAVE把约束变成可微分的评分函数,让模型直接优化业务指标,这样训练和评估就不会脱节。
- 动作探索模块:离线数据有限,模型容易学得保守。GAVE不是随机探索,而是用缩放系数生成新动作,再用RTG比较新旧动作的好坏,通过权重平衡更新,既探索又保持稳定。它不像强化学习那样依赖环境交互,而是在离线状态下安全地试探。
- 可学习的价值函数:针对OOD风险。探索的动作可能不靠谱,GAVE用期望回归学习RTG的上界,引导探索靠近潜在最优区域,避免跑偏。
基于分数的RTG计算
为处理CPA等约束,GAVE使用约束评分函数而非简单的价值累加,其中 $ S_t $ 是时间步t的累积约束评分,$ \gamma $ 是惩罚系数(论文中γ=2),$ r_t $ 是从时间步t到结束的剩余RTG。RTG反映了未来可能获得的评分,指导模型优化。
$$
\begin{aligned}
S_t &= \mathbb{P}(CPA_t; C) \cdot \sum_{i}^{I_t} x_i v_i \
\text{其中} \quad \mathbb{P}(CPA_t; C) &= \min\left{\left(\frac{C}{CPA_t}\right)^{\gamma}, 1\right} \
CPA_t &= \frac{\sum_{i}^{I_t} x_i c_i}{\sum_{i}^{I_t} x_i v_i} \
r_t &= S_T - S_{t-1}
\end{aligned}
$$
动作探索机制
在训练过程中,GAVE不仅预测动作$a_t$,还生成一个探索动作$\tilde{a}_t$。首先,模型预测一个系数 $β_t$ 用于缩放原始动作 $a_t$,得到探索动作$\tilde{a}_t = β_t a_t$。系数$β_t$通过一个全连接层和缩放函数 $σ$ 得到,限制在(0.5, 1.5)之间,确保探索动作不会偏离太远。
$$
\begin{aligned}
\hat{\beta}t &= \sigma\left(FC{\beta}\left(DT(\text{Input}_t)\right)\right) \
\tilde{a}_t &= \hat{\beta}_t a_t \
\quad \sigma(x) &= \text{Sigmoid}(x) + 0.5
\end{aligned}
$$
然后,模型使用基于RTG的评估方法来比较探索动作 $\tilde{a}t$ 和原始动 $a_t$。具体地,模型预测执行 $\tilde{a}t$ 后的RTG值 $\tilde{r}{t+1}$,并与执行 $a_t$ 后的预测RTG值 $\hat{r}{t+1}$ 比较。权重 $w_t$ 用于平衡更新方向。
- 模型预测三个关键值:
$$
(\hat{\beta}_t, \hat{a}t, \hat{V}{t+1}) = \text{GAVE}(\text{Input}_t)
$$ - 同时预测两个RTG值:
$$
\begin{aligned}
\hat{r}_{t+1} &= \text{GAVE}(\text{Input}t, a_t) \quad &(原始动作的RTG) \
\tilde{r}{t+1} &= \text{GAVE}(\text{Input}_t, \tilde{a}_t) \quad &\text{(探索动作的RTG)}
\end{aligned}
$$ - 更新权重计算:
$$
w_t = Sigmoid\left(a_t \cdot (\tilde{r}{t+1} - \hat{r}{t+1})\right)
$$
动作损失 $L_a$ 由两部分组成:一部分是预测动作 $\hat{a}_t$ 与原始动作 $a_t$ 的均方误差,另一部分是 $\hat{a}_t$ 与探索动作$\tilde{a}_t$ 的均方误差,由权重 $w_t$ 平衡。这样,如果探索动作更好($w_t$ > 0.5),更新会更倾向于探索动作,否则倾向于原始动作。
可学习的价值函数
为了指导探索动作向更优的方向发展,GAVE引入了一个可学习的价值函数表示在最优动作下的RTG上界。由于直接计算这个价值函数困难,模型通过期望回归来学习这个价值函数的估计$\hat{V}{t+1}$。损失函数 $L_e$ 中 $τ$ 设置为0.99以学习上界。然后,通过损失函数 $L_o$ 来引导探索动作的RTG接近价值函数的估计值,从而间接使探索动作接近最优动作。其中 $\hat{V}{t+1}’$ 表示梯度冻结的价值函数估计
- 价值函数定义:
$$
V_{t+1} = \arg\max_{a_t \in \mathbb{A}} r_{t+1}
$$ - 通过期望回归学习:
$$
\begin{aligned}
L_e &= \frac{1}{M+1} \sum_{t-M}^{t} L_2^{\tau}(r_{t+1} - \hat{V}_{t+1}) \
L_2^{\tau}(y) &= |\tau - \mathbb{1}(y < 0)| \cdot y^2
\end{aligned}
$$ - 探索动作的价值引导损失:
$$
L_o = \frac{1}{M+1} \sum_{t-M}^{t} (\tilde{r}{t+1} - \hat{V}{t+1}’)^2
$$
损失函数与优化
GAVE的总损失函数是多个损失项的加权和,其中 $w_t’$ 是冻结梯度的权重,平衡向原始动作和探索动作的更新。
$$
L_{total} = \alpha_1 L_r + \alpha_2 L_a + \alpha_3 L_e + \alpha_4 L_o
$$
- RTG预测损失:
$$
L_r = \frac{1}{M+1} \sum_{t-M}^{t} (\hat{r}{t+1} - r{t+1})^2
$$ - 动作预测损失:
$$
L_a = \frac{1}{M+1} \sum_{t-M}^{t} \left[(1-w_t’) \cdot (\hat{a}_t - a_t)^2 + w_t’ \cdot (\hat{a}_t - \tilde{a}_t’)^2\right]
$$
算法流程总结:
1 | 1. 构建输入序列:历史RTG-状态-动作三元组 |
Diffusion based
AIGB: Generative Auto-bidding via Conditional Diffusion Modeling
AIGB是一种基于扩散模型的自动出价生成方法。DT基于马尔可夫决策过程,即假设下一个状态仅依赖于当前状态和动作,但在实际广告环境中,历史状态序列对当前决策影响显著。扩散模型的非自回归生成,直接建模整个轨迹的联合分布,最大化似然估计等价于一个非马尔可夫决策过程的最大化回报问题。这意味着DiffBid不依赖MDP假设,能更好地处理广告环境中的随机性和稀疏回报,避免了DT自回归生成带来的误差累积。
AIGB将自动出价问题视为条件轨迹生成问题,给定广告主的目标(如最大化GMV、控制CPC、平滑消耗等),直接生成满足条件的最优状态轨迹,再通过逆动力学模型生成对应的出价参数。问题定义:给定轨迹 $\tau = (s_1, a_1, r_1, …, s_T)$ 目标是最优化条件似然:
$$
\max_{\theta} \mathbb{E}_{\tau \sim D} \left[ \log p_\theta(x_0(\tau) \mid y(\tau)) \right]
$$
其中 $x_0(\tau) = (s_1, …, s_T)$ 为状态轨迹,$y(\tau)$ 为条件(如总回报 $R(\tau)$、约束满足指标等)。
- 前向扩散过程:逐步向轨迹添加高斯噪声,其中 $\beta_k$ 为噪声调度参数(常用cosine schedule)。当 $K \to \infty$ 时,$x_K(\tau)$ 趋近于高斯噪声。
$$
q(x_k(\tau) \mid x_{k-1}(\tau)) = \mathcal{N}(x_k(\tau); \sqrt{1 - \beta_k} x_{k-1}(\tau), \beta_k I)
$$ - 反向生成过程:通过神经网络逐步去噪,生成符合条件 $y(\tau)$ 的轨迹,其中 $\hat{\epsilon}k$ 是通过分类器无关引导组合的条件与无条件噪声估计。
$$
p_\theta(x{k-1}(\tau) \mid x_k(\tau), y(\tau)) = \mathcal{N}(x_{k-1}(\tau) \mid \mu_\theta(x_k(\tau), y(\tau), k), \Sigma_\theta(x_k(\tau), k))
$$
$$
\mu_\theta(x_k, y, k) = \frac{1}{\sqrt{\alpha_k}} \left( x_k - \frac{\beta_k}{\sqrt{1 - \bar{\alpha}_k}} \hat{\epsilon}_k \right)
$$
$$
\hat{\epsilon}_k = \epsilon_\theta(x_k, k) + \omega \left( \epsilon_\theta(x_k, y, k) - \epsilon_\theta(x_k, k) \right)
$$ - 逆动力学动作生成:给定当前状态 $s_{t-L:t}$ 和预测状态 $s’{t+1}$,通过逆动力学模型生成出价参数:
$$
\hat{a}t = f_\phi(s{t-L:t}, s’{t+1})
$$ - 训练目标是联合训练扩散模型和逆动力学模型:
$$
\mathcal{L}(\theta, \phi) = \mathbb{E}{k, \tau} \left[ | \epsilon - \epsilon_\theta(x_k, y, k) |^2 \right] + \mathbb{E}{(s_{t-L:t}, a_t, s_{t+1})} \left[ | a_t - f_\phi(s_{t-L:t}, s_{t+1}) |^2 \right]
$$
CBD: Generative Auto-Bidding in Large-Scale Competitive Auctions via Diffusion Completer-Aligner
CBD在AIGB的基础上进行了改进,主要解决生成不确定性问题。改进点包括:
- 训练阶段:将扩散模型的训练重构为 “补全任务”,模拟大语言模型的“问答”模式:给定历史状态(Query),生成未来状态(Answer),以增强状态间的动态连贯性。引入一个额外的随机变量t,将扩散模型的训练重构为学习一个“完成器”(completer),即给定前t个状态,完成剩余的状态序列,类似 masked-trajectory 建模,这样增强了生成的轨迹的动态合法性?
- 推理阶段:由于扩散模型的生成过程是随机的,生成的轨迹可能不完全符合广告主的目标(条件)。CBD使用一个轨迹级别的回报模型作为“对齐器”(aligner),对生成的轨迹进行梯度微调,使其更符合广告主的目标。
Completer:引入随机变量 $t \sim [0, T-1]$ 表示观测历史长度。训练目标变为给定前 $t$ 个状态生成剩余状态。其中 $\tilde{x}k(\tau, t) = [s_0, …, s_t, s{t+1}^k, …, s_T^k]$ 为部分观测、部分噪声的轨迹。$| \cdot |{t+1:T}^2$ 表示仅对 $t+1$ 到 $T$ 位置计算损失。这样迫使模型在噪声中“补全”未来状态,增强动态合法性。
$$
\max{\theta} \mathbb{E}{\tau \sim D} [\log p_\theta(s{t+1:T} \mid s_{0:t}, y(\tau))]
$$
$$
\mathcal{L}c(\theta) = \mathbb{E}{k, x_0, t, \epsilon} \left| \epsilon - \epsilon_\theta(\tilde{x}k(\tau, t), k, y(\tau)) \right|{t+1:T}^2
$$
Aligner:首先通过扩散模型生成未来状态组合为初始轨迹 $\tilde{x}0(\tau, t) = [s_0, …, s_t, \tilde{s}{t+1}, …, \tilde{s}_T]$。然后训练轨迹级回报模型 $R_\varphi$ 用于预测轨迹的累积奖励。
$$
\mathcal{L}r(\varphi) = \mathbb{E}{(x_0, y) \sim D} | R_\varphi(x_0(\tau)) - y(\tau) |^2
$$
梯度微调生成状态:若生成轨迹的预测回报 $R_\varphi$ 高于目标 $y(\tau)$,则向下调整状态,减少激进出价。若低于目标,则向上调整状态,增加出价积极性。
$$
\tilde{s}’{t+1:T} \leftarrow \tilde{s}{t+1:T} - \lambda \nabla_{\tilde{s}_{t+1:T}} | R_\varphi(\tilde{x}_0(\tau, t)) - y(\tau) |^2
$$
计算广告的出价算法演进,正从“确定性规则”迈向“不确定性智能”。传统方法无论PID式反馈还是期望最优的全局规划,都是在预设的因果框架内寻找最优解。而强化学习与生成式模型的兴起则承认了真实竞价场域的本质:它是一个由海量智能体交互构成、充满随机反馈和长期依赖的复杂序列决策环境。因此技术的焦点从“如何更准地预测单次价值”转向“如何在一个动态博弈中规划全局”。大模型时代将为此注入更深刻的“理解”与“生成”力量。生成式出价规划智能体将不再仅是调整参数的优化器,而可能进化为一个能够深度理解广告主模糊的自然语言意图、洞悉市场竞争态势,并同步生成协同策略的“决策大脑”。
参考文献
- 【王喆】「深度学习计算广告」讲透互联网广告中的出价模式
- A unified solution to constrained bidding in online display advertising
- Decision Transformer: Reinforcement Learning via Sequence Modeling
- GAS: Generative Auto-bidding with Post-training Search
- Generative Auto-Bidding with Value-Guided Explorations
- Scalable Diffusion Models with Transformers
- AIGB: Generative Auto-bidding via Conditional Diffusion Modeling
- Generative Auto-Bidding in Large-Scale Competitive Auctions via Diffusion Completer-Aligner






