由于平台字数限制,上文:https://blog.csdn.net/ooblack/article/details/144198538
4. PPO算法
近端策略优化(proximal policy optimization,PPO)算法是OpenAI的默认强化学习算法,在RLHF中也用到了这个算法,说明这个算法还是很强的,那它到底解决了一个什么问题呢?
先介绍两个概念,同策略学习(On-Policy Learning)和异策略学习(Off-Policy Learning),在强化学习里面,要学习的是一个智能体。如果要学习的智能体和与环境交互的智能体是相同的,我们称之为同策略。如果要学习的智能体和与环境交互的智能体不是相同的,我们称之为异策略。
PPO的主要解决的问题是什么呢?
无论是A2C算法还是REINFOCE算法,都有一个问题,数据在采样完成,更新模型一次之后就丢弃了,前文不止一次强调过,数据采样是很昂贵且费事的,只用一次就丢显然是不合理的,但是数据用一次之后模型已经更新了,旧的数据是旧的模型产生的不能用来更新新的模型,PPO就是用来解决这个问题的。
它的思路是这样的,我们用梯度下降去降低损失,由于学习率的问题,我们可能方向对了,但是步子迈小了,所以用旧数据再去更新一次,再迈一步,但是直觉告诉我们不能一直用旧数据,因为模型参数多迭代几次之后可能跟产生旧数据的旧模型完全不一样了,PPO最大的贡献就在于它告诉模型什么时候旧数据不能再用了,定量分析了新模型与旧模型的差距。
这里先介绍重要性采样的概念。
4.1 重要性采样
假设我们有一个函数 f ( x ) f(x) f(x),要计算从分布 p p p 采样 x x x,再把 x x x 代入 f f f,得到 f ( x ) f(x) f(x)。我们该怎么计算 f ( x ) f(x) f(x) 的期望值呢?假设我们不能对分布 p p p 做积分,但可以从分布 p p p 采样一些数据 x i x^i xi。把 x i x^i xi 代入 f ( x ) f(x) f(x),取它的平均值,就可以近似 f ( x ) f(x) f(x) 的期望值。
E x ∼ p [ f ( x ) ] ≈ 1 N ∑ i = 1 N f ( x i ) \mathbb{E}_{x \sim p}[f(x)] \approx \frac{1}{N} \sum_{i=1}^{N} f(x^i) Ex∼p[f(x)]≈N1i=1∑Nf(xi)
现在有另外一个问题,假设我们不能从分布 p p p 采样数据,只能从另外一个分布 q q q 采样数据 x i x^i xi, q q q 可以是任何分布。如果我们从 q q q 采样 x i x^i xi,就不能使用刚刚的方法。因为刚刚的方法需要从 p p p里面采样。
但是我硬要从 q q q里面采,神奇的数学会给出解决方案:
E x ∼ p [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \begin{align} \mathbb{E}_{x \sim p}[f(x)] &= \int f(x)p(x)dx \\ &= \int f(x) \frac{p(x)}{q(x)} q(x) dx \\&= \mathbb{E}_{x \sim q} \left[ f(x) \frac{p(x)}{q(x)} \right] \end{align} Ex∼p[f(x)]=∫f(x)p(x)dx=∫f(x)q(x)p(x)q(x)dx=Ex∼q[f(x)q(x)p(x)]
我们就可以写成对 q q q里面所采样出来的 x 取期望值。我们从 q q q里面采样 x x x,再计算 f ( x ) p ( x ) q ( x ) f(x){\frac{p(x)}{q(x)}} f(x)q(x)p(x),再取期望值。所以就算我们不能从 p p p里面采样数据,但只要能从 q q q里面采样数据,就可以计算从 p p p采样 x x x代入 f f f以后的期望值。
其中 f ( x ) p ( x ) q ( x ) f(x){\frac{p(x)}{q(x)}} f(x)q(x)p(x)称作重要性权重。它主要用来修正两个分布之间的差异,但是它也不是万能的,通过上面的式子我们能看出它只能保证两种采样方法的期望相同,没说方差相同,如果方差巨大的话,也达不到我们想要的效果,两个分布的方差如下( Var [ X ] = E [ X 2 ] − ( E [ X ] ) 2 \text{Var}[X] = \mathbb{E}[X^2] - \left(\mathbb{E}[X]\right)^2 Var[X]=E[X2]−(E[X])2)
Var x ∼ p [ f ( x ) ] = E x ∼ p [ f ( x ) 2 ] − ( E x ∼ p [ f ( x ) ] ) 2 Var x ∼ q [ f ( x ) p ( x ) q ( x ) ] = E x ∼ q [ ( f ( x ) p ( x ) q ( x ) ) 2 ] − ( E x ∼ q [ f ( x ) p ( x ) q ( x ) ] ) 2 = E x ∼ p [ f ( x ) 2 p ( x ) q ( x ) ] − ( E x ∼ p [ f ( x ) ] ) 2 \begin{align*} \text{Var}_{x \sim p}[f(x)] &= \mathbb{E}_{x \sim p} \left[ f(x)^2 \right] - \left(\mathbb{E}_{x \sim p}[f(x)]\right)^2 \\ \text{Var}_{x \sim q} \left[f(x) \frac{p(x)}{q(x)} \right] &= \mathbb{E}_{x \sim q} \left[ \left(f(x) \frac{p(x)}{q(x)}\right)^2 \right] - \left(\mathbb{E}_{x \sim q} \left[ f(x) \frac{p(x)}{q(x)}\right] \right)^2 \\ &= \mathbb{E}_{x \sim p} \left[ f(x)^2 \frac{p(x)}{q(x)} \right] - \left(\mathbb{E}_{x \sim p}[f(x)]\right)^2 \end{align*} Varx∼p[f(x)]Varx∼q[f(x)q(x)p(x)]=Ex∼p[f(x)2]−(Ex∼p[f(x)])2=Ex∼q[(f(x)q(x)p(x))2]−(Ex∼q[f(x)q(x)p(x)])2=Ex∼p[f(x)2q(x)p(x)]−(Ex∼p[f(x)])2
可以看到对 q q q分布采样的方差比对 p p p分布采样的方差多乘了一个 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x),所以就一件事, p p p和 q q q的分布要尽量相似用这个方法才能有一个很好的效果。下面举个例子来说明这一点:
例如,当 p ( x ) p(x) p(x) 和 q ( x ) q(x) q(x) 差距很大时,就会有问题。如图所示,假设蓝线是 p ( x ) p(x) p(x) 的分布,绿线是 q ( x ) q(x) q(x) 的分布,红线是 f ( x ) f(x) f(x)。如果我们要计算 f ( x ) f(x) f(x) 的期望值,从分布 p ( x ) p(x) p(x) 做采样,显然 E x ∼ p [ f ( x ) ] \mathbb E_{x \sim p}[f(x)] Ex∼p[f(x)] 是负的。这是因为左边区域 p ( x ) p(x) p(x) 的概率很高,所以采样会到这个区域,而 f ( x ) f(x) f(x) 在这个区域是负的,所以理论上这一项算出来会是负的。
接下来我们改成从 q ( x ) q(x) q(x) 采样,因为 q ( x ) q(x) q(x) 在右边区域的概率比较高,所以如果我们的采样点不够多,可能只会采样到右侧。如果我们只采样到右侧,可能 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \mathbb E_{x \sim q}[f(x)\frac{p(x)}{q(x)}] Ex∼q[f(x)q(x)p(x)] 是正的。我们这边采样到这些点,去计算它们的 f ( x ) p ( x ) q ( x ) f(x)\frac{p(x)}{q(x)} f(x)q(x)p(x) 都是正的。我们采样到这些点都是正的,取期望值以后也是正的,这是因为采样的次数不够多。假设我们采样次数很少,只能采样到右边。左边虽然概率很低,但也有可能被采样到。假设我们好不容易采样到左边的点,因为左边的点的 p ( x ) p(x) p(x) 和 q ( x ) q(x) q(x) 差是很多的,这边 p ( x ) p(x) p(x) 很大, q ( x ) q(x) q(x) 很小。 f ( x ) f(x) f(x) 好不容易终于采样到一个负的,这个负的就会被乘上一个非常大的权重,这样就可以平衡刚才那边一直采样到正的值的情况。最终我们算出这一项的期望值,终究还是负的。但前提是我们要采样足够多次,这件事情才会发生。但有可能采样次数不够多, E x ∼ p [ f ( x ) ] \mathbb E_{x \sim p}[f(x)] Ex∼p[f(x)] 与 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \mathbb E_{x \sim q}[f(x)\frac{p(x)}{q(x)}] Ex∼q[f(x)q(x)p(x)] 可能就有很大的差距,这就是重要性采样的问题。
有了重要性采样,就可以使用旧模型参数 θ ′ {\theta'} θ′采集到的数据来更新新的模型参数 θ \theta θ,旧模型记作 π θ \pi_{\theta} πθ,新模型记作 π θ ′ \pi_{\theta'} πθ′。
梯度公式:
∇ R ˉ θ = E τ ∼ p θ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) R ( τ ) ∇ log p θ ( τ ) ] \nabla \bar{R}_{\theta} = \mathbb{E}_{\tau \sim p^{\theta}(\tau)} \left[ \frac{p^{\theta}(\tau)}{p^{\theta'}(\tau)} R(\tau) \nabla \log p^{\theta}(\tau) \right] ∇Rˉθ=Eτ∼pθ(τ)[pθ′(τ)pθ(τ)R(τ)∇logpθ(τ)]
这个公式是由REINFORCE的梯度公式加了一个重要性权重变换过来的。
状态动作对概率分开算:
E ( s t , a t ) ∼ π θ [ A θ ( s t , a t ) ∇ log p θ ( a t ∣ s t ) n ] \mathbb{E}_{(s_t, a_t) \sim \pi_{\theta}} \left[ A^{\theta}(s_t, a_t) \nabla \log p_{\theta}(a_t|s_t)^n \right] E(st,at)∼πθ

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



