Testin DataRL:从A/B测试到运营智能优化的算法路径

[摘要] A/B测试正在被越来越多的产品、运营人员采用,许多企业兴趣盎然开始尝试A/B测试,但收集数据和分析结果都需要时间,典型的A/B测试可能持续数周时间,虽然有超过14%的A/B测试产生统计学显著的改进,但收效并不理想。除了拥有强大产品技术团队的部分头部App之外,很多企业都无法持续、有效地将用户分段、找到适合A/B测试的部分,并执行有意义的A/B测试。

人工智能强化学习AIRL(Artificial Intelligence Reinforcment Learning)适合传感和响应环境,可以从众多的变体中确定最佳变化,已经成功用于测试变体并确定实时最佳效果。企业可以基此同时运行多个测试,典型类别的变体可以自动创建并付诸从小至大的受众进行测试并扩展至全量用户,基于进化计算和大规模并行多变量测试,帮助产品经理实时向每个渠道的用户提供最成熟的数字体验,更有效地持续优化得出最优运营结果。

使用行业最高水准训练的测试方法为每个访问者提供变体,以了解哪些对谁最有效。对于App产品运营优化,RL不会自动提供设计、图像和消息,但RL将发现哪些设计、图像和消息呈现的用户体验与App用户产生共鸣。它将不断尝试有机会的想法,以找到更优化的组合,但所有的想法都来自产品经理。向特定访问者呈现内容或功能,通过A/B和MVT测试对不同组合行测试,实时为每个访问者自动呈现最佳组合,RL最擅长的是找到人们从未有过的想法和组合,最大化实现产品经理的创造力。

任何一个产品经理都希望开启上帝模式,知道某个设计、色彩、按钮、图片是用户最喜欢、并点击最多的那个。TestinData A/B测试,已经为很多顶尖的产品经理提供了从优秀到卓越的必杀密器,为产品、运营和经营管理人员,有效掌握、提升了以下这些经营核心指标:

  • 点击率 Click-through Rate (CTR)
  • 转化率 Conversion Rate (CR)
  • 更新率 Renewal Rate
  • 跳出率 Bounce Rate
  • 平均保留率 Average Retention
  • 平均使用量(应用,手机网站、网页,App屏幕或游戏场景上的时间),Mean Usage (Time on app, mobile web, mobile webpage, an app screen or game scene)
  • 平均每用户事务数Average Transactions Per User
  • 净推动者指数 Net Promoter Score (NPS)
  • 客户满意率 Customer Satisfaction Rate
  • 平均每用户收入 Average Revenue Per User (ARPU)
  • 平均订单大小 Average Order Size

除了大量的人工工作、工程配合和部门协调,A/B测试还要应对环境中的动态,当完成一个静态A/B实验时,结果所要求的实施条件往往已经不再具备。在日趋惨烈的碎片化市场竞争面前,测试参量、用户注意力更短,客户的忠诚度和耐心更加变幻无常。而频繁面临的高实效性要求的运营活动,又难以提供一个相对完整、静态的时间、用户样本量进行完整的A/B测试。

我们都很熟悉巴普洛夫的条件反射实验,通过奖励狗的积极行为、惩罚负面行为持续对狗进行训练,随着时间的推移,狗会强化学习、并计算出为获得奖励而采取的行动。

随后发展起来的智能系统的一个主要特征是能够适应未知环境,其中学习能力是智能系统的关键技术之一。特别是强化学习,从环境状态到行为映射的学习,以使系统行为从环境中获得的累积奖赏值最大,是一种以环境反馈作为输入的、特殊的、适应环境的机器学习方法,通过试错(trial-and-error)的方法来发现最优行为策略,采用统计技术和动态规划方法来估计在某一环境状态下的行为的效用函数值,从而通过行为效用函数来确定最优行为。在函数估计强化学习中,同时并行两个迭代过程:一是值函数迭代过程,另一是值函数逼近过程,而值函数逼近过程的正确性和速度将对强化学习产生根本的影响。

现实的App系统总是处于动态、复杂的开放环境中,因此要对环境加以细分,并在每个场景中学习的知识对下一个场景中的学习是有用的,建立连续的插曲式(episodic)场景,如一个棋类程序对同一个对手时,在每一棋局中学习的策略对下一棋局都是有帮助的,这也是AlphaGo进化的前提。

在有限反馈的连续决策问题中处理学习,通过奖罚制度的基础上学习最佳A/B路径动作。这种奖励和惩罚反馈强化了要执行的行为以及要避免的行为。在通过持续A/B测试进行转换率优化过程中,通过这种模式尽早结束差异变化、将流量从性能差的变体重新路由到动态变化更好的变体,消除不好的变化,从而取得更好的性能变化。

上图显示了从相对静止、恒定比例测试变体的阶段性A/B实验,到动态连续最佳优化变体A/B运营实战的不同。

强化学习RL(Reinforcement Learning) 模型

通过对未知环境一边探索一边建立环境模型以及学得一个最优策略,强化学习是将机器学习算法和环境互动结合起来的方式,在一个有限域内,只要时间充足(或做算力足够),在一个设定目标中获得较优解。

for t = 1, 2, \ldots, T

1. 观测到数据 x_t \in \mathbb{R}^n
2. 选择action a_t \in \mathcal{A}
3. 得到损失 l(x_t, a_t(x_t))
目标是: \min_{a_t \in \mathcal{A}}\sum_{t=1}^T l(x_t, a_t(x_t))

对于RL强化学习,时刻t的action可以影响时刻t+1我们得到的data。具体的,在时刻t,我们观测到x_t(在RL里x_t一般被称作state),同时选择action a_t \in \mathcal{A},然后suffer lossl(x_t, a_t(x_t)),并且x_{t+1} \sim P(x' | x_t, a_t(x_t))

所以从这个角度看,RL是一种更积极的学习,因为我们可以用自己的action来决定如何探索state space。

RL里面partially observable的情况就更难一些,我们不能直接观测到state,在这种情况下x_t是某种观测量,然后通过x_t来更新对当前所在state的belief。

没有明确的指导信号,reward可以看做是指导信号,类比SL是求解函数 y =f(x,z) ,其中x是Agent的状态,z是Agent在该状态获得的奖励,f是要求解的策略,y则是输出的动作action,即根据状态和奖励序列求解最优策略,a = \pi(s,r)

利用反馈来优化RL带来的好处在于能够兼顾其对长期的收益,对于一些需要长期策略支持的问题特别有效。例如下围棋、电商活动策略有些是需要放长远的,短期的损失在长远来可能变成收益。

多臂赌博机(Multi-armed bandit)模型 

多臂老虎机(Multi-armed Bandit)模型是从赌场中的多臂老虎机的场景中提取出来的强化学习(Reinforcement Learning)数学模型。

  • arm:指的是老虎机(slot machine)的拉杆。
  • bandit:多个拉杆的集合,bandit = {arm1, arm2.. armn}。每个bandit setting对应一个回报函数(reward function)。

一个经典多臂赌博机有k个摇臂, 玩家投一个游戏币以后可以按下任意一个摇臂,每个摇臂以一定的概率吐出硬币作为奖赏。但这个概率玩家并不知道,玩家的目标是通过一定的策略获得最大化的累积奖赏。

问题是如何最大化总回报

  1. 探索 exploration:尝试新策略(实验experimentation/创新innovation)
  2. 开采 exploitation:利用已有经验中的最优策略(奖励最大化reward maximization)

探索与开采权衡exploration (learning) vs. exploitation (taking action based on current best information) tradeoff,过度探索exploration造成无谓的浪费,而过度开采榨取exploitation则导致停滞,从而失去新的机会。

  • 自动化,多臂老虎机(Multi-armed Bandit)模型是使用RL学习自动化选择优化的自然方式,尤其是在应用用户目标时,而A/B测试在这种情况下要复杂得多。
  • 现实的环境是瞬息万变的变化的,多臂老虎机(Multi-armed Bandit)模型可以留下一些选择较差执行选项的机会,产品经理有机会“重新考虑”选项的有效性。 它提供了一个工作框架,以持续的过程替换具有新鲜选项的低性能选项。
  • 本质上,产品经理正在逐步适应、未来将无法离开这种模式,实验和放量之间将平滑过渡,如同汽车手动挡和自动挡,产品经理只要提供足够多的设计燃料,踩下油门、车就会自动化加速前进。

 

多臂老虎机(Multi-armed Bandit)模型相对更有效率,因为它们逐渐将流量转向赢得变化,而不是迫使您在实验结束时等待“最终答案”。 它们的速度更快,因为样本可能会出现明显较差的变化,可以分配给潜在的获胜者。 通过高性能变化收集的额外数据可以帮助更快速地产生远远优于常规A/B测试的结果。

ma bandit tests google

试验成本也是重要的考虑因素。

多臂赌博机问题(Multi-armed bandit problem, K-armed bandit problem)算法比较https://zhuanlan.zhihu.com/p/21388070?refer=resyschina

 

最近看到「谢天」在知乎上发表了一篇学习笔记,从另一方面佐证了从A/B测试到智能优化运营的不同RL算法路径。

策略梯度法的改进

UC Berkeley博士研究生Joshua Achiam提出了策略梯度法的改进。

一般的增强学习问题试图求解的是得到一个被\theta参数化的策略,来最大化期望累积收益\max_\theta J(\pi_\theta):=\mathbf{E}_{\tau\sim\pi_\theta}\left[\sum_{t=0}^\infty\gamma^tr_t\right],而策略梯度法使用(随机)梯度上升算法来求解策略参数,因此需要算出梯度g=\nabla_\theta J(\pi_\theta)=\mathbf{E}_{\tau\sim\pi_\theta}\left[\sum_{t=0}^\infty\gamma^t\nabla_\theta\log\pi_\theta(\mathbf{a}_t|\mathbf{s}_t)A^{\pi_\theta}(\mathbf{s}_t,\mathbf{a}_t)\right]。我们是采用抽样的方法来估计这个梯度的。直接进行策略梯度法不是一个很好的方法。

第一大缺陷是样本效率低因为我们抽样是要根据\pi_\theta分布得到的,而如果在线使用策略梯度法的话,我们很难回收旧数据得到无偏估计,但样本数据只使用一次就得丢掉了也是很可惜的。

另一大缺陷是,策略参数空间(譬如神经网络空间)中下的距离并不等于策略空间下的距离,这也会带来很严重的性能问题,策略梯度方向的步长很难准确设定。其中策略空间的意思是,比如对于表格形式的策略(状态和行动都是有限离散的),策略空间为\Pi=\left\{\pi:~\pi\in\mathbb{R}^{|\mathcal{S}|\times|\mathcal{A}|},\sum_a\pi_{sa}=1,\pi_{sa}\geq0\right\},相当于一个随机矩阵 (stochastic matrix) 空间。

从样本效率的角度看,一般策略梯度法在一步梯度步后就得把刚收集的数据抛弃了,然后重新收集数据。这是因为策略梯度法每次要求的是一个在线的梯度,然后我们需要用简单随机抽样来做无偏估计,就得按照当前策略确定的分布来。

一般我们有两种方法来得到这个无偏估计:

  1. 直接在环境中运行这个策略并收集样本轨迹,然后来得到估计,这种相对更稳定;
  2. 另一种取巧的方法我们在之前也已经反复使用过,使用其他策略得到的轨迹数据,然后使用重要性抽样的方法。这种的样本效率较高但比较不稳定。

事实上,使用重要性抽样有比较大的方差问题。为了说明这一问题,我们回顾重要性抽样方法的公式: \mathbf{E}_{x\sim P}[f(x)]=\mathbf{E}_{x\sim Q}\left[\frac{P(x)}{Q(x)}f(x)\right]\approx\frac{1}{D}\sum_{x\in D}\left[\frac{P(x)}{Q(x)}f(x)\right], D\sim Q。其中\frac{P(x)}{Q(x)}就是重要性抽样权重 (importance sampling weight)。那么这个估计量的方差就是\frac{1}{N}\text{var}\left(\frac{P(x)}{Q(x)}f(x)\right)=\frac{1}{N}\left(\mathbf{E}_{x\sim Q}\left[\left(\frac{P(x)}{Q(x)}f(x)\right)^2\right]-\mathbf{E}_{x\sim Q}\left[\frac{P(x)}{Q(x)}f(x)\right]^2\right)=\frac{1}{N}\left(\color{red}{\mathbf{E}_{x\sim P}\left[\frac{P(x)}{Q(x)}f(x)^2\right]}-\mathbf{E}_{x\sim P}\left[f(x)\right]^2\right)。这块红色区域就是问题的根源,如果重要性抽样的权重非常大(两个分布差异很大),那么这个方差有可能大得很恐怖,使得根本估不准。而在策略梯度中, 重要性抽样的表达式就是\nabla_\theta J(\pi_\theta)=\mathbf{E}_{\tau\sim\theta'}\left[\sum_{t=0}^\infty\color{red}{\frac{P(\tau_t|\theta)}{P(\tau_t|\theta')}}\gamma^t\nabla_\theta\log\pi_\theta(\mathbf{a}_t|\mathbf{s}_t)A^{\pi_\theta}(\mathbf{s}_t,\mathbf{a}_t)\right],方差的膨胀体现在红色部分。这个比例可以被表现为一个比例的连乘积, \frac{P(\tau_t|\theta)}{P(\tau_t|\theta')}=\frac{\mu(s_0)\prod_{t'=0}^tP(s_{t'+1}|s_{t'},a_{t'})\pi_\theta(a_{t'}|s_{t'})}{\mu(s_0)\prod_{t'=0}^tP(s_{t'+1}|s_{t'},a_{t'})\pi_{\theta'}(a_{t'}|s_{t'})}=\prod_{t'=0}^t\frac{\pi_\theta(a_{t'}|s_{t'})}{\pi_{\theta'}(a_{t'}|s_{t'})}。这也就是说明了,即便两个策略之间只有一丁点的差异,但是它们累积的差异可以很大,致使重要性抽样的权重爆炸或者消失。此外,之前的策略所在的区域可能恰好都是访问到效果不好的那些部分,可能我们之前收集到的样本轨迹的收益比现在策略下都明显偏低,因此实际上会新信息不足。因此,如何有效利用之前策略的数据来进行策略更新,成了一个很重要的问题。

自然策略梯度 (NPG) 算法

现在我们的优化问题变成了\pi_{k+1}=\arg\max_{\pi'}\mathcal{L}_{\pi_k}(\pi')~\text{s.t.}~\bar{D}_{\text{KL}}(\pi'\Vert\pi_k)\leq\delta,但是对于譬如神经网络的结构是比较难处理的。我们之前介绍过使用类似ADMM的对偶梯度方法来交替进行更新,另一种代价更低的方法是使用局部近似(因为两个策略实际上是相当接近的,所以局部效果也应当好)。我们对将参数化的目标函数展开到一阶,\mathcal{L}_{\theta_k}(\theta)\approx\mathcal{L}_{\theta_k}(\theta_k)+g^\top(\theta-\theta_k),对于优化问题来说前一项是常数,相当于是策略梯度和策略参数的一个内积(\nabla_\theta\mathcal{L}_{\pi_{\theta_k}}(\pi_\theta)|_{\theta_k}=\nabla_\theta(J(\pi_\theta)-J(\pi_{\theta_k}))|_{\theta_k}=\nabla_\theta J(\pi_\theta)|_{\theta_k},一阶导等于策略梯度);对KL散度展开到二阶(因为零阶一阶都是0,自己对自己的KL散度是0,KL散度是非负的所以在邻域内梯度都是0,且Hessian阵在这个局部区域内是半正定的),\bar{D}_{\text{KL}}(\pi'\Vert\pi_k)\approx\frac{1}{2}(\theta-\theta_k)^\top H(\theta-\theta_k)。因此我们的近似问题的迭代格式为,\theta_{k+1}=\arg\max_\theta g^\top(\theta-\theta_k)~\text{s.t.}~\frac{1}{2}(\theta-\theta_k)^\top H(\theta-\theta_k)\leq\delta。这是一个凸的QCQP问题,强对偶成立。最后得到的结果是\theta_{k+1}=\theta_k+\sqrt{\frac{2\delta}{g^\top H^{-1}g}}H^{-1}g。这个结果非常有趣,因为g:=\nabla_\theta\mathcal{L}_{\theta_k}(\theta)|_{\theta_k}等于策略梯度,我们的方向是H^{-1}g,只是左乘一个矩阵重新调整一下,因此被称为自然策略梯度 (natural policy gradient, NPG);步长的计算涉及到策略梯度和自然策略梯度的一个内积。Hessian阵H=\mathbf{E}_{s,a\sim\theta_k}\left[\nabla_\theta\log\pi_\theta(a|s)|_{\theta_k}\nabla_\theta\log\pi_\theta(a|s)|_{\theta_k}^\top\right]是半正定的,是一个Fisher信息矩阵。之所以叫自然,因为NPG方向H^{-1}g协变 (covariant) 的,不管对策略进行怎么样的参数化,它始终指向同一个方向(可以理解为在不同的结构下做同样的事情)。

在黎曼空间下,两个点v(v+\delta v)的平方距离为\text{dist}^2(v,v+\delta v)=\delta v^\top G(v)\delta v,其中G(v)是黎曼度量张量 (matric tensor),取决于所在的空间。举例来说,二维欧氏空间可以用笛卡尔坐标系(x,y)或者极坐标系(r,\theta)来表示。对于笛卡尔坐标系,度量张量只是一个单位矩阵;对于极坐标,\text{dist}^2(v,v+\delta v)=\delta r^2+r^2\delta\theta^2,度量张量是\text{diag}(1,r^2)。考虑同一个向量和向量差在两个系统中的表达(只是参数化方式不同),在系统1中表达为(v,v+\delta v),在系统2中表达为(w,w+\delta w),但其实v=w\delta v=\delta w。从而,\delta v=A^\top\delta w,其中A_{ji}=\frac{\partial v_i}{\partial w_j}是Jacobi矩阵。因为是同一个向量在两个坐标系的表示,应该有\text{dist}^2(v,v+\delta v)=\text{dist}^2(w,w+\delta w)\text{dist}^2(v,v+\delta v)=\delta v^\top G_v\delta v\text{dist}^2(w,w+\delta w)=\delta w^\top G_w\delta w=\delta w^\top AG_vA^\top\delta w ,从而G_w= AG_vA^\top。从而根据链式法则,梯度也有恒等关系[g_w]_j=\frac{\partial f}{\partial w_j}=\sum_i\frac{\partial v_i}{\partial w_j}\frac{\partial f}{\partial v_i},矩阵形式为g_w=Ag_v。考虑\Delta_v=G_v^{-1}g_v\Delta_w=G_w^{-1}g_w=(AG_vA^\top)^{-1}Ag_v=A^{-\top}G_v^{-1}g_v,因此A^\top\Delta_w=\Delta_v。从而,本质上\Delta_w\Delta_v只是在不同坐标系下的同一向量。Peters et al. (2005) 证明了在NPG中的Fisher信息矩阵H其实就是策略空间里的度量张量 ,从而NPGH^{-1}g是关于参数化形式不变的,不管如何参数化,都是在策略空间的同一个方向进行移动。

NPG算法,从一组的初始策略参数\theta_0开始,我们循环迭代k=0,1,\ldots执行以下步骤:

  1. 使用策略\pi_k=\pi(\theta_k)收集轨迹样本\mathcal{D}_k
  2. 使用任意的优势估计算法来估计优势\hat{A}_t^{\pi_k}
  3. 使用\hat{A}_t^{\pi_k}估计目标函数梯度\hat{g}_k,根据样本估计Hessian矩阵\hat{H}_k
  4. 进行一步NPG更新,\theta_{k+1}=\theta_k+\sqrt{\frac{2\delta}{\hat g_k^\top \hat H_k^{-1}\hat g_k}}\hat H_k^{-1}\hat g_k

\delta的选择在实践中需要尝试,通常从0.01-0.05在很多任务中都适用。进一步地,对于神经网络,参数个数是非常大的,那么Hessian阵会有O(N^2)的元素,且进行一步矩阵求逆需要O(N^3),在存储上和计算上都不太可行。一种解决方法是使用共轭梯度法 (CG) 等间接算法来求解,CG法执行j步后,把Hg=x的解投影到Krylov子空间\text{span}\{g,Hg,\ldots,H^{j-1}g\}中,而且每次只需要使用矩阵向量乘法。

kl = ... # 定义KL散度为theta的函数
v = tf.placeholder(dtype = tf.float32, shape = [N])
kl_gradient = tf.gradients(kl, theta)
kl_gradient_vector_product = tf.sum(kl_gradient * v)
kl_hessian_vector_product = tf.gradients(kl_gradient_vector_product, theta)

我们可以在每一次迭代中,固定步数地执行CG,这就被称为截断自然策略梯度法 (Truncated Natural Policy Gradient, TNPG)。值得注意的是,如果使用的数据过少,可能NPG方向就会很不对,效果就不好(即便样本很大,最好采样比率也在0.5-0.1之间)。

信赖域策略优化 (TRPO) 算法

在NPG算法中,我们事实上存在一些问题。首先,NPG迭代过程中对于信赖域大小\delta其实不鲁棒,有些步中信赖域大小太大可能会降低表现性能。第二,我们对KL散度进行了二阶近似,因此KL散度的限制可能会被违反。为了解决这些问题,我们需要保证\mathcal{L}_{\theta_k}(\theta_{k+1})\geq0,也需要\bar{D}_{\text{KL}}(\theta\Vert\theta_k)\leq\delta。信赖域策略优化算法本质上就是TNPG算法加上一个线搜索,搜索的步长指数下降,找到一个最小的j使得\theta_{k+1}=\theta_k+\alpha^j\Delta_k满足这两个条件:如果超过了某个步数还不满足,说明还需要继续收集数据。因此,算法从一组的初始策略参数\theta_0开始,循环迭代k=0,1,\ldots执行以下步骤:

  1. 使用策略\pi_k=\pi(\theta_k)收集轨迹样本\mathcal{D}_k
  2. 使用任意的优势估计算法来估计优势\hat{A}_t^{\pi_k}
  3. 使用\hat{A}_t^{\pi_k}估计目标函数梯度\hat{g}_k,根据样本估计Hessian矩阵\hat{H}_k并给出函数f(v)=\hat{H}_kv
  4. 使用n_{\text{CG}}步CG算法,得到x_k\approx\hat{H}_k^{-1}\hat{g}_k,从而更新向量\Delta_k\approx\sqrt{\frac{2\delta}{x_k^\top\hat{H}_kx_k}}x_k
  5. 搜索步长,找到一个最小的j使得\theta_{k+1}=\theta_k+\alpha^j\Delta_k满足\mathcal{L}_{\theta_k}(\theta_{k+1})\geq0\bar{D}_{\text{KL}}(\theta\Vert\theta_k)\leq\delta。从而\theta_{k+1}=\theta_k+\alpha^j\Delta_k

相比TNPG,TRPO由于有了一个检验手段和线搜索,能承受更大的步长。Achiam推荐大家使用Duan et al. (2016) 发表在ICML上的工作”Benchmarking Deep Reinforcement Learning for Continuous Control“,来进行各种算法的公正比较,应该说是对各种算法实现到一个比较完善的水平了。从他们的比较看,相比其他算法,TNPG/TRPO算法确实是基本上在稳定地单调改进策略,而且效果远胜于波动很大的其他算法。

近端策略优化 (PPO) 算法

另一种不计算自然梯度而的控制KL散度的约束条件的方法叫近端策略优化 (Proximal Policy Optimization, PPO) 算法,由Schulman et al. (2017) 的文章”Proximal Policy Optimization Algorithms“中提出,没有太多理论,但在实践中效果不错。

第一种方法还是回到对KL散度加惩罚,叫做适应性KL惩罚项 (adaptive KL penalty)。策略更新按照一个无约束优化问题\theta_{k+1}=\arg\max_\theta\mathcal{L}_{\theta_k}(\theta)-\beta_k\bar{D}_{\text{KL}}(\theta\Vert\theta_k),其中罚参数\beta_k算是一个Lagrange乘子。使用一些启发式方法就能效果不错了,如循环迭代k=0,1,\ldots执行以下步骤:

  1. 使用策略\pi_k=\pi(\theta_k)收集部分轨迹样本\mathcal{D}_k
  2. 使用任意的优势估计算法来估计优势\hat{A}_t^{\pi_k}
  3. 固定乘子,执行若干步minibatch SGD更新策略\theta_{k+1}=\arg\max_\theta\mathcal{L}_{\theta_k}(\theta)-\beta_k\bar{D}_{\text{KL}}(\theta\Vert\theta_k),步长为ADAM。
  4. 启发式地调整乘子,如\bar{D}_{\text{KL}}(\theta_{k+1}\Vert\theta_k)\geq 1.5\delta\beta_{k+1}=2\beta_k,如\bar{D}_{\text{KL}}(\theta_{k+1}\Vert\theta_k)\leq \delta/1.5\beta_{k+1}=\beta_k/2

这个算法对初始的惩罚因子(乘子)不敏感,因为它随着几步迭代后变化很大。在有一些迭代步中可能会违反KL约束,但是在大多数的步骤中并不会。

第二种方法是使用一个截断的目标函数 (clipped objective)。令r_t(\theta)=\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_k}(a_t|s_t)},从而对优势的估计进行一个截断,变成\mathcal{L}^{\text{CLIP}}_{\theta_k}(\theta)=\mathbf{E}_{\tau\sim\pi_k}\left[\sum_{t=0}^T[\min(r_t(\theta)\hat{A}_t^{\pi_k},\text{clip}(r_t(\theta),1-\epsilon,1+\epsilon)\hat{A}_t^{\pi_k})]\right],其中超参数\epsilon可以选择譬如0.2,然后执行\theta_{k+1}=\arg\max_\theta\mathcal{L}_{\theta_k}^{\text{CLIP}}(\theta)。虽然没有很多理论,但是实践中效果不错。直觉上来说,使用截断函数和min函数,是为了让估计更加悲观,使得不要让当步策略走得太远。这样执行是非常容易的,只需要在白板策略梯度法上对目标函数稍加修改就可以了。循环迭代k=0,1,\ldots执行以下步骤:

  1. 使用策略\pi_k=\pi(\theta_k)收集部分轨迹样本\mathcal{D}_k
  2. 使用任意的优势估计算法来估计优势\hat{A}_t^{\pi_k}
  3. 执行若干步minibatch SGD更新策略\theta_{k+1}=\arg\max_\theta\mathcal{L}_{\theta_k}^{\text{CLIP}}(\theta),步长为ADAM。

第二种方法实际效果至少比第一种要更好,而且更容易实现,因此是PPO类方法中最值得推荐的。对于这两个方法,值得注意的共同点是,相较于之前的只算出一个策略梯度就扔数据,我们重新设定了目标函数,然后使用数据进行minibatch SGD步,效果可能更好。

Leave a Comment