背景
广告主在投放效果广告时,会对广告流量设置一定的出价,而广告平台会基于多个广告主的出价进行广告流量的竞价,对竞价胜出的广告主,在广告流量上展示其广告,并进行计费。随着效果广告业务和技术的不断发展,广告主的出价功能也不断迭代,其迭代可分为三个阶段:在第一个阶段,广告主在广告的展现或点击上进行手动出价,广告平台在广告的展现上进行竞价,广告主在点击上的出价会通过乘以预估点击率转化为eCPM,从而在展现上进行竞价,最终在展现或点击上进行计费(即CPM和CPC),这一阶段广告的投放效果、特别是后链路的转化效果(如点击后的转化成本)依赖广告主根据效果数据和投放经验手动调整出价,人力成本较高、且效果难以保障;在第二个阶段,广告主在广告的转化上进行手动出价(即设置转化的目标成本),广告平台在广告的展现上进行竞价,广告主在转化上的出价会通过乘以预估点击率和预估转化率转化为eCPM,从而在展现上进行竞价,最终在展现或点击上进行计费(即oCPM和oCPC),这一阶段广告的转化效果(如点击后的转化成本)由广告平台的投放系统根据广告主设置的目标成本和预估点击率、预估转化率自动调整在展现或点击上的出价进行保障,从而降低人力成本、提升投放效果;在第三个阶段,广告主无需在展现、点击和转化上进行手动出价,仅需设置一定的约束条件,如每日广告投放预算,而由广告平台的投放系统根据广告流量和投放效果自动调整出价,为广告主实现广告流量价值的最大化。
第三个阶段中广告平台投放系统为广告位进行自动出价的问题即预算约束下的出价问题(Budget Constrained Bidding,BCB),其目标可用以下公式表示:
其中,每天共有次广告流量,对于次广告流量,表示广告流量对于广告主的价值,表示根据计算得到的广告主对于广告流量的出价,即:
表示根据广告主的出价和其他广告主进行竞价后的结果(1表示竞胜,0表示未竞胜),表示广告主在竞胜后需要支付的费用(一般由广告平台投放系统按照GSP机制使用竞价排序中下一位广告主的出价计算所得),则自动出价问题即需要为广告主提供一个策略,该策略可根据广告流量价值计算广告出价,使得最终广告投放费用在不超过预算的前提下,最大化广告流量价值。
由于广告流量和竞价环境的动态性,因此业界有较多工作基于强化学习进行自动出价,使用强化学习与环境交互、收集轨迹数据、迭代更新价值和策略函数的特点,解决广告流量和竞价环境动态性的问题。
本文是笔者对基于强化学习进行自动出价的相关论文的阅读笔记,如有不足之处,请指正。
强化学习背景知识
马尔可夫决策过程
在马尔可夫奖励过程(MRP)的基础上加入动作,就得到了马尔可夫决策过程(MDP)。马尔可夫决策过程由元组构成,其中:
- 是状态的集合;
- 是动作的集合;
- 是折扣因子;
- 是奖励函数,此时奖励可以同时取决于状态和动作,在奖励函数只取决于状态时,则退化为;
- 是状态转移函数,表示在状态执行动作之后到达状态的概率。
不同于马尔可夫奖励过程,在马尔可夫决策过程中,通常存在一个智能体来执行动作,智能体和环境不断交互,它们之间的交互是如图1所示循环过程:智能体根据当前状态选择动作;对于状态和动作,MDP根据奖励函数和状态转移函数得到和并反馈给智能体。智能体的目标是最大化得到的累计奖励。智能体根据当前状态从动作的集合中选择一个动作的函数,被称为策略。
策略
智能体的策略(Policy)通常用字母表示。策略是一个函数,表示在输入状态情况下采取动作的概率。当一个策略是确定性策略(deterministic policy)时,它在每个状态时只输出一个确定性的动作,即只有该动作的概率为 1,其他动作的概率为 0;当一个策略是随机性策略(stochastic policy)时,它在每个状态时输出的是关于动作的概率分布,然后根据该分布进行采样就可以得到一个动作。在MDP中,由于马尔可夫性质的存在,策略只需要与当前状态有关,不需要考虑历史状态。回顾一下在MRP中的价值函数,在MDP中也同样可以定义类似的价值函数。但此时的价值函数与策略有关,这意为着对于两个不同的策略来说,它们在同一个状态下的价值也很可能是不同的。这很好理解,因为不同的策略会采取不同的动作,从而之后会遇到不同的状态,以及获得不同的奖励,所以它们的累积奖励的期望也就不同,即状态价值不同。
状态价值函数
我们用表示在MDP中基于策略的状态价值函数(state-value function),定义为从状态出发遵循策略能获得的期望回报,数学表达为:
动作价值函数
不同于MRP,在 MDP中,由于动作的存在,我们额外定义一个动作价值函数(action-value function)。我们用表示在 MDP 遵循策略时,对当前状态执行动作得到的期望回报:
状态价值函数和动作价值函数之间的关系:在使用策略中,状态的价值等于在该状态下基于策略采取所有动作的概率与相应的价值相乘再求和的结果:
使用策略时,状态下采取动作的价值等于即时奖励加上经过衰减后的所有可能的下一个状态的状态转移概率与相应的价值的乘积:
贝尔曼期望方程
我们通过简单推导就可以分别得到两个价值函数的贝尔曼期望方程(Bellman Expectation Equation):
图2是一个马尔可夫决策过程的简单例子,其中每个深色圆圈代表一个状态,一共有从这 5 个状态。黑色实线箭头代表可以采取的动作,浅色小圆圈代表动作,需要注意,并非在每个状态都能采取所有动作,例如在状态,智能体只能采取“保持”和“前往”这两个动作,无法采取其他动作。
每个浅色小圆圈旁的数字代表在某个状态下采取某个动作能获得的奖励。虚线箭头代表采取动作后可能转移到的状态,箭头边上的数字代表转移概率,如果没有数字则表示转移概率为 1。例如,在下, 如果采取动作“前往”,就能得到奖励-2,并且转移到;在下,如果采取“概率前往”,就能得到奖励 1,并且会分别以概率 0.2, 0.4, 0.4 转移到,或。
接下来定义一个完全随机策略,即在每个状态下,智能体会以同样的概率选取它可能采取的动作。例如,在下,智能体会以 0.5 和 0.5 的概率选取动作“保持”和“前往”。
对于某一个状态,我们根据策略所有动作的概率进行加权,得到的奖励和就可以认为是一个MRP在该状态下的奖励,即:
同理,我们计算采取动作的概率与使转移到的概率的乘积,再将这些乘积相加,其和就是一个MRP的状态从转移至的概率:
于是,我们构建得到了一个MRP:,可以用MRP中计算价值函数的解析解来计算这个MDP中该策略的状态价值函数:
[[-1.22555411] [-1.67666232] [ 0.51890482] [ 6.0756193 ] [ 0. ]]
知道了状态价值函数后,我们可以计算动作价值函数。例如(,概率前往)的动作价值为2.152,根据以下公式可以计算得到:
基于无模型强化学习的自动出价算法-DRLB
2018年发表的论文《Budget Constrained Bidding by Model-free Reinforcement Learning in Display Advertising》提出了基于无模型强化学习的自动出价。
这里的无模型是指不对环境进行建模、不直接计算状态转移概率,智能体只能和环境进行交互,通过采样得到的数据进行学习,这类学习方法统称为无模型的强化学习(Model-free Reinforcement Learning)。无模型的强化学习又可以分为基于价值和基于策略的算法,基于价值的算法主要是学习价值函数,然后根据价值函数导出一个策略,学习过程中并不存在一个显式的策略,而基于策略的算法则是直接显式地学习一个策略函数,另外,基于策略的算法中还有一类Actor-Critic算法,其会同时学习价值函数和策略函数。
论文具体使用DQN算法,该算法将强化学习中基于价值的算法和深度学习相结合。另外,论文在该算法的基础上,针对自动出价场景的特点进行优化。
问题建模
论文使用带约束的马尔科夫决策过程(Constrained Markov Decision Process,CMDP)对自动出价问题进行建模,如图3所示,其分为离线训练环境和在线预测环境。
离线训练环境包含仿真竞价系统,以模拟线上真实竞价系统。自动出价智能体在离线训练环境进行轮迭代,每轮迭代内,自动出价智能体模拟一天内的广告投放,与仿真竞价系统进行步交互(将每天平均分成个时间段,每个时间段为15分钟,即为96),在第步,智能体使用策略根据状态选择动作,将出价调控系数由调整至,则随后智能体对第步和第步之间的每个广告流量的出价使用公式计算得到,并将第步和第步之间竞得的广告流量价值之和作为第步的动作所获得的奖励,第步和第步之间竞得的广告流量费用之和为。智能体在轮迭代中,通过与仿真竞价系统的交互,获取反馈数据,不断学习、更新策略,调整出价调控系数,在满足预算约束(即)的前提,最大化累积奖励。
在线预测环境即线上真实竞价环境。与离线训练环境类似,在线预测环境中的自动出价智能体在一天内的广告投放中,与真实竞价系统进行步交互,在第步,智能体使用策略根据状态选择动作,将出价调控系数由调整至,但与离线训练环境不同,在线预测环境中的自动出价智能体不再学习、更新策略。
在强化学习背景知识中,笔者已介绍马尔可夫决策过程由元组构成、以及元组中各元素的含义。对于上述自动出价场景下的带约束的马尔可夫决策过程,其相应的各元素具体含义如下:
- 状态集合,自动出价智能体第步的状态包含以下属性:当前步数;第步的剩余预算;第步往后剩余可调整出价调控系数的次数;第步和第步之间的预算消耗速率;第步和第步之间的千次广告展现费用;竞胜率;上一步动作所获得的奖励(即第步和第步之间的广告流量为广告主带来的点击或转化之和)。
- 动作集合,动作以比例的方式对出价调控系数进行调整,即。
- 状态转移函数(或),论文基于无模型的强化学习算法,因此无需对环境进行建模,不求解状态转移函数。
- 奖励,第步的奖励为第步和第步之间竞得的广告流量价值之和。
- 费用约束,第步的费用为第步和第步之间竞得的广告流量费用之和。
- 折扣因子,因为各时段的奖励对于最大化当天累积奖励的目标来说有相等的权重,不会按时间衰减,所以折扣因子被固定为1。
DQN算法
笔者在这一节简单介绍论文所使用的DQN算法。DQN算法将强化学习中基于价值的算法和深度学习相结合。对于每一个状态下所有可能动作的动作价值函数,可以通过一个神经网络拟合上述函数,该神经网络被称为Q网络,网络的参数为,如图4所示。DQN即深度Q网络(Deep Q Network)。
Q-learning算法中,动作价值函数的更新规则是:
其中,使用和的差值迭代更新,也就是说,使逼近,因此,对于一组数据,Q网络的损失函数可以表示为以下均方误差:
由于DQN是离线策略算法,因此在收集数据的时候可以使用一个-贪婪策略来平衡探索与利用,将收集到的数据存储起来,在后续的训练中使用。DQN 中还有两个非常重要的模块——经验回放和目标网络,它们能够帮助 DQN取得稳定、出色的性能。
经验回放(Experience Replay)的具体做法是维护一个回放缓冲区,将每次从环境中采样得到的四元组数据(状态、动作、奖励、下一状态)存储到回放缓冲区中,训练Q网络的时候再从回放缓冲区中随机采样若干数据来进行训练。
DQN算法最终更新的目标是让逼近,由于目标本身就包含神经网络的输出,因此在更新网络参数的同时目标也在不断地改变,这非常容易造成神经网络训练的不稳定性。为了解决这一问题,DQN使用了目标网络(Target Network)的思想:既然训练过程中Q网络的不断更新会导致目标不断发生改变,不如暂时先将目标中的Q网络固定住。为了实现这一思想,需要利用两套Q网络:
- 原来的训练网络,用于计算损失函数中的项,并且使用正常梯度下降方法来进行更新。
- 目标网络,用于计算损失函数中的项,其中表示目标网络中的参数。如果两套网络的参数随时保持一致,则仍为原先不够稳定的算法。为了让更新目标更稳定,目标网络并不会每一步都更新。具体而言,目标网络使用训练网络的一套较旧的参数,训练网络在训练中的每一步都会更新,而目标网络的参数每隔步才会与训练网络同步一次,即。这样做使得目标网络相对于训练网络更加稳定。
综上所述,DQN算法的具体流程如图5所示。
根据当前网络以-贪婪策略选择动作的代码如下所示:
def take_action(self, state): # epsilon-贪婪策略采取动作
if np.random.random() < self.epsilon:
action = np.random.randint(self.action_dim)
else:
state = torch.tensor([state], dtype=torch.float).to(self.device)
action = self.q_net(state).argmax().item()
return action
其中,以一定概率随机选择动作用于探索,其他情况下,从Q网络的输出中,选择动作价值最大的动作用于利用。
算法改进
论文在原DQN算法的基础上进行了两处改进:一是设计新的奖励函数,解决原有奖励函数只考虑最近一个时间段内的广告流量价值之和,从而导致策略忽视预算约束、倾向于尽快消耗预算、算法得到次优解的问题,二是设计新的探索策略,解决原-贪婪策略在动作价值随动作的变化为多峰分布时、探索不充分的问题。
奖励函数设计
按照原DQN算法,若使用第步和第步之间竞得的广告流量价值之和作为第步的动作所获得的奖励,即算法倾向于即时的奖励,则忽视了预算的约束,导致算法得到次优解,因此,论文在原奖励函数的基础上进行优化,提出新的奖励函数:
其中,表示自动出价智能体在离线训练环境下的所有迭代中在状态时选择动作的迭代集合,对于该集合中的每个迭代,计算其原始各步奖励之和,并取奖励之和的最大值作为新奖励函数中、在状态时选择动作的奖励。
论文还推导、论证了新奖励函数下的策略优化目标和原奖励函数一致,均是最大化广告流量价值之和。笔者此处略去论文中的推导、论证过程。
新奖励函数相对于原奖励函数,其取值并不能通过直接求和第步和第步之间竞得的广告流量价值得到,而状态和动作对的取值空间较大,将所有状态和动作对的新奖励函数取值进行存储也并不可行,因此,论文提出使用另一个深度网络——RewardNet拟合新奖励函数、对新奖励函数取值进行预测,以解决新奖励函数求解的问题。RewardNet的相关细节将在整体框架部分介绍。
自适应探索策略
为平衡探索和利用,原DQN算法采用-贪婪策略,以概率随机选择动作用于探索,其他情况下,从Q网络的输出中,选择动作价值最大的动作用于利用,且概率初始值较大,并随时间逐渐减少,即初始时探索比例较大,随后逐渐减少探索比例,增大利用比例。
论文指出动作价值随动作(比例,以该比例对出价调控系数进行调整)的变化在各步调整时可能呈现不同的分布,如图6所示,其中左侧图表示单峰正态分布,右侧图表示多峰分布。对于右侧多峰分布,论文指出需要适当调大探索比例,即自适应探索策略(Adaptive - greedy Policy)。该探索策略的相关细节将在整体框架部分介绍。
整体框架
基于原DQN算法和上述算法改进,论文提出了基于无模型强化学习的自动出价算法——DRLB(Deep Reinforcement Learning to Bid),该算法中自动出价智能体与竞价系统的交互流程如图7所示,图中的竞价系统既可以是离线训练环境中的仿真竞价系统,也可以是在线预测环境中的真实竞价系统,区别之处是离线训练环境中,自动出价智能体会通过与仿真竞价系统的交互,获取反馈数据,不断学习、更新策略。
交互流程图中,在第步,自动出价智能体使用策略根据状态选择动作,将出价调控系数由调整至,随后智能体和竞价系统交互,对第步和第步之间的每个广告流量使用公式计算出价并竞价。
离线训练流程的伪代码如图8所示,流程整体与DQN算法类似,不再详述,以下只介绍其中部分细节。
在第步,算法首先更新RewardNet。RewardNet训练流程的伪代码如图9所示,其流程整体与DQN算法类似,也进行多轮迭代,每轮迭代中也进行多步交互。令表示RewardNet,其中为其网络参数。RewardNet使用字典缓存目前已知的状态、动作对的改进后的奖励值,并基于缓存淘汰策略——LRFU,保证字典容量大小在一定范围内。在第步,算法从状态、动作对缓存池中采样一批数据,并以最小化作为优化目标进行梯度下降、更新RewardNet的参数,使得RewardNet能够拟合。而对中缓存的奖励值的更新,在一轮迭代结束、得到后,对于该轮迭代中的每个,若大于,则将更新至,即保证始终保存的是包含的所有迭代中其一轮迭代奖励之和的最大值。
再回到离线训练流程。在第步,算法完成RewardNet更新后,使用自适应探索策略根据状态选择动作。自适应探索策略基于-贪婪策略。-贪婪策略以概率随机选择动作用于探索,其他情况下,从Q网络的输出中,选择动作价值最大的动作用于利用,且概率初始值较大,并随时间逐渐减少,即初始时探索比例较大,随后逐渐减少探索比例,增大利用比例。论文对于第步的,首先采用如下公式计算:,然后当动作价值随动作的变化为多峰分布时,进一步采用如下公式调整:。
使用自适应探索策略选择动作、将出价调控系数由调整至后,自动出价智能体一方面对第步和第步之间的每个广告流量使用公式计算出价并竞价,转移至状态,另一方面使用、通过RewardNet预测得到改进后的,随后将放入缓存池,再从缓存池采样一批数据,并以最小化作为优化目标进行梯度下降、更新Q网络的参数。
效果评估
论文使用了两个数据集,一个是阿里电商展示广告数据集,另一个是由品友互动提供的广告竞价数据集。对于这两个数据集,论文均使用前7天的数据作为训练集,后3天的数据作为测试集。对于第一个数据集,论文使用广告预估点击率作为广告流量价值,对于第二个数据,论文使用真实点击结果作为广告流量价值。
令表示使用自动出价最终获得的广告流量价值,表示理论上可获得的最大广告流量价值,论文使用两者的比值作为算法效果评估指标。
论文使用了以下三个基线模型:
- Fixed Linear Bidding(FLB),设置出价调控系数为固定值,出价可由下式计算:
- Budget Smoothed Linear Bidding(BSLB),计算本轮迭代剩余时间比例和本轮迭代剩余预算比例的对比,并通过该对比调整出价调控系数。若本轮迭代剩余时间比例大于本轮迭代剩余预算比例,即预算消耗过快,则调大出价调控系数,调小出价,降低预算消耗速度,具体出价可由下式计算:
- Reinforcement Learning to Bid(RLB),基于有模型强化学习的自动出价算法。
论文进行了大量的实验以对比各基线模型、衡量算法改进的效果,以下仅列出在第一个数据集上和各基线模型的对比结果。从图中可以看出,在不同的出价调控系数初始值下,DRLB基本均取得最优的广告流量价值。