做电影网站量刑标准,哪个网站做二手叉车回收好,网站开发流程简述,seo优化的搜索排名影响因素主要有文章目录基础知识强化学习基础知识数学期望推导实际训练的数学过程基础知识第二次补充PPO#xff08;Proximal Policy Optimization#xff09;PPO-KLPPO-CLIPDPOGRPO基础知识
强化学习基础知识 enviroment#xff1a;看到的画面看不到的后台画面#xff0c;不了解细节 a…文章目录基础知识强化学习基础知识数学期望推导实际训练的数学过程基础知识第二次补充PPOProximal Policy OptimizationPPO-KLPPO-CLIPDPOGRPO基础知识强化学习基础知识enviroment看到的画面看不到的后台画面不了解细节agent根据策略得到尽可能多的奖励state当前状态observationstate的一部分有时候agent无法看全actionagent做出的动作rewardagent做出一个动作后环境给予的奖励action space可以选择的动作如上下左右policy策略函数输入state输出Action的概率分布。一般用π ππ表示.π ( l e f t ∣ s t ) 0.1 \pi(left|s_t)0.1π(left∣st)0.1表示策略π ππ给出向左走的概率是0.1Trajectory/Episode/Rollout轨迹用τ \tauτ表示一连串状态和动作的序列。有的状态转移是确定的也有的是不确定的。{ s 0 , a 0 , s 1 , a 1 . . . } {\{s_0,a_0,s_1,a_1...}\}{s0,a0,s1,a1...},确定s t 1 f ( s t , a t ) {s_{t1} f(s_t,a_t)}st1f(st,at),随机s t 1 P ( ⋅ ∣ s t , a t ) {s_{t1} P(·|s_t,a_t)}st1P(⋅∣st,at)Return回报从当前时间点到游戏结束的 Reward 的累积和。数学期望期望每个可能结果的概率与其结果值的乘积之和x xx服从分布p pp,约等于成立是因为我们从分布p pp采样来近似期望E ( x ) x ∼ p ( x ) ∑ x x ∗ p ( x ) ≈ 1 n ∑ i 1 n x ( i ) 其中 x ( i ) ∼ p ( x ) \mathrm{E}(\mathrm{x})_{x \sim p(x)}\sum_{x} x * p(x) \approx \frac{1}{n} \sum_{i1}^{n}x^{(i)} 其中{x^{(i)} \sim p(x)}E(x)x∼p(x)x∑x∗p(x)≈n1i1∑nx(i)其中x(i)∼p(x)强化学习的目的就是训练一个Policy神经网络π \piπ在所有状态S下给出相应的Action使得到Return的期望最大。推导下面的公式表示trajectory轨迹τ \tauτ服从分布P θ P_\thetaPθ,(θ \thetaθ是我们需要训练的策略网络里面的参数),下面的期望就是所有的τ \tauτ获得的Retrun乘τ \tauτ的概率的累加。我们期望在θ \thetaθ的作用下τ \tauτ所获得的Return最大。E ( R ( τ ) ) τ ∼ P θ ( τ ) ∑ τ R ( τ ) P θ ( τ ) E(R(\tau))_{\tau \sim P_{\theta}(\tau)}\sum_{\tau} R(\tau) P_{\theta}(\tau)E(R(τ))τ∼Pθ(τ)τ∑R(τ)Pθ(τ)如何让期望尽可能的大梯度的含义是一个计算出来的值我们使用这个值去更新θ \thetaθ目的是让高回报的轨迹在未来更可能发生低回报的轨迹更不可能发生。可以采用梯度上升的方法 先对θ {\theta}θ计算梯度∇ E ( R ( τ ) ) τ ∼ P θ ( τ ) ∇ ∑ τ R ( τ ) P θ ( τ ) ∑ τ R ( τ ) ∇ P θ ( τ ) ∑ τ R ( τ ) ∇ P θ ( τ ) P θ ( τ ) P θ ( τ ) ∑ τ P θ ( τ ) R ( τ ) ∇ P θ ( τ ) P θ ( τ ) ∑ τ P θ ( τ ) R ( τ ) ∇ P θ ( τ ) P θ ( τ ) ≈ 1 N ∑ n 1 N R ( τ n ) ∇ P θ ( τ n ) P θ ( τ n ) 1 N ∑ n 1 N R ( τ n ) ∇ log P θ ( τ n ) \begin{aligned} \nabla E(R(\tau))_{\tau \sim P_{\theta}(\tau)} \nabla \sum_{\tau} R(\tau) P_{\theta}(\tau) \\ \sum_{\tau} R(\tau) \nabla P_{\theta}(\tau) \\ \sum_{\tau} R(\tau) \nabla P_{\theta}(\tau) \frac{P_{\theta}(\tau)}{P_{\theta}(\tau)} \\ \sum_{\tau} P_{\theta}(\tau) R(\tau) \frac{\nabla P_{\theta}(\tau)}{P_{\theta}(\tau)} \\ \sum_{\tau} P_{\theta}(\tau) R(\tau) \frac{\nabla P_{\theta}(\tau)}{P_{\theta}(\tau)} \\ \approx \frac{1}{N} \sum_{n1}^{N} R\left(\tau^{n}\right) \frac{\nabla P_{\theta}\left(\tau^{n}\right)}{P_{\theta}\left(\tau^{n}\right)} \\ \frac{1}{N} \sum_{n1}^{N} R\left(\tau^{n}\right) \nabla \log P_{\theta}\left(\tau^{n}\right) \end{aligned}∇E(R(τ))τ∼Pθ(τ)∇τ∑R(τ)Pθ(τ)τ∑R(τ)∇Pθ(τ)τ∑R(τ)∇Pθ(τ)Pθ(τ)Pθ(τ)τ∑Pθ(τ)R(τ)Pθ(τ)∇Pθ(τ)τ∑Pθ(τ)R(τ)Pθ(τ)∇Pθ(τ)≈N1n1∑NR(τn)Pθ(τn)∇Pθ(τn)N1n1∑NR(τn)∇logPθ(τn)其中τ ∼ P θ ( τ ) \tau \sim P_\theta{(\tau)}τ∼Pθ(τ)我们认为下一个状态完全由当前状态和当前动作决定的那么一个轨迹的概率就是所有State和这个State下给出的Action概率的连乘得到最终的表达式其含义是对所有可能的轨迹期望最大的梯度用这个梯度乘学习率去更新神经网络的参数就是Policy Gradient梯度策略算法去掉梯度来看表达式第一部分R ( τ n ) R(\tau^{n})R(τn)这是一个轨迹得到的Return。第二部分log P θ ( a n t ∣ s n t ) \log P_{\theta}\left(a_{n}^{t} \mid s_{n}^{t}\right)logPθ(ant∣snt)这是每一步根据当前的State做出Action的概率然后求对数log的底数是e所以其是单调递增的。那么表达式的意义就是如果一个轨迹得到的Return是大于0的那么就增大这个轨迹里面的所有状态下采取当前Action的概率如果一个轨迹得到的Return是小于0的那么就减小这个轨迹里面的所有状态下采取当前Action的概率。实际训练的数学过程定义Loss函数,在需要最大化的目标函数前面加个负号因为Loss是损失Loss − 1 N ∑ n 1 N ∑ t 1 T n R ( τ n ) log P θ ( a n t ∣ s n t ) \operatorname{Loss}-\frac{1}{N} \sum_{n1}^{N} \sum_{t1}^{T_{n}} R\left(\tau^{n}\right) \log P_{\theta}\left(a_{n}^{t} \mid s_{n}^{t}\right)Loss−N1n1∑Nt1∑TnR(τn)logPθ(ant∣snt)为什么在这里去掉梯度了因为我们是在优化Loss而梯度是做数学变换。定义一个卷积神经网络的输入是当前游戏画面State输出层是动作的概率值然后让该神经网络连续玩N场游戏得到N个轨迹和N个Return值。然后进行训练就是不断更新网络然后采集数据这种更新策略叫On Policy采集数据的Policy和我们训练的Policy是一个这样的方式存在一个问题就是采集数据时间太久了。如何优化这个公式此公式的含义是如果一个轨迹得到的Return是大于0的就增大这个轨迹在所有状态下采取当前Action的概率如果一个轨迹得到的Return是小于0的就增大这个轨迹在所有状态下减小当前Action的概率。第一点优化我们是否要增大在状态S下做A的概率应该看做这个动作之后到游戏结束所累积的Reward而不是整个轨迹所累积的Reward因为一个动作只能影响其做了之后的Reward而不能影响做之前的。第二点优化一个动作A可以对接下来的几步产生影响且影响只会持续几步不会一直对下面一直到结束的Reward产生影响后面的Reward更多是由当前的Action影响。针对这两点我们修改公式R ( τ n ) → ∑ t ′ t T n y t ′ − t r t ′ n R t n R\left(\tau^{n}\right) \rightarrow \sum_{t^{\prime}t}^{T_{n}} y^{t^{\prime}-t} r_{t^{\prime}}^{n}R_{t}^{n}R(τn)→t′t∑Tnyt′−trt′nRtn第一个修改是求和公式的开始原来是对整个轨迹的Reward求和现在是当前步t tt到轨迹结束求和第二个修改是引入了衰减因子γ \gammaγ,γ \gammaγ小于1表示距离当前动作越远当前动作对于Reward的影响越小呈现指数级衰减。此外还有一个问题根据之前的公式我们注意到R ( τ n ) R(\tau^n)R(τn)的正负会影响整个世子的正负也就是说在好的情况下无论做什么动作所有的Reward都是正那么算法就会增加所有动作的概率Reward大的动作概率会增加的大一些。反之在坏的情况下无论做什么动作所有的Reward都是负那么算法就会减小所有动作的概率。这样的问题会让训练变得很慢我们希望让相对好的动作概率增加让相对差的动作概率减小。如何解决上述问题我们引入一个baseline就是给所有的reward都减去一个baseline减去baseline的结果变成了这样。其公式修改如下红框内就是需要减去的baseline这就是A2C算法。基础知识第二次补充Action-Value FunctionR t n R^{n}_tRtn每次都是一次随机采样方差大训练很不稳定一次随机采样可能出现同一个动作得到的Reward却天差地别所以需要无限多次的采样才能得到相对准确的Reward。所以引入了Action-Value FunctionQ θ ( s , a ) Q_\theta(s,a)Qθ(s,a)表示在state s下做出action a期望的回报反映了一个动作的价值。State-Value FunctionV θ ( s ) V_\theta(s)Vθ(s)表示在State S下不论做任何动作得到的Return的期望值表示状态价值函数。Advantage FunctionA θ ( s , a ) Q θ ( s , a ) − V θ ( s ) A_\theta(s,a) Q_\theta(s,a)- V_\theta(s)Aθ(s,a)Qθ(s,a)−Vθ(s)表示在state s下做出Action a比其他动作能带来多少优势。原来我们的函数是Reward减去的baseline实际上就是想表达优势函数的意思现在我们有了优势函数的定义上述公式就可以替换为如何计算优势函数先看下面的等式上述含义是对于s t s_tst时刻做出动作a aa期望得到的Return的值等于这一步得到的rewardr t r_trt加上衰减系数乘下一个状态s t 1 s_{t1}st1的状态价值函数。然后把这个等式带入优势函数这样的优势函数就由原来需要训练两个神经网络一个动作价值一个状态价值变成了只需要一训练个状态价值的网络了。下面我们想对状态价值函数也进行action和reward的采样那么对轨迹的下一步进行采样那么我们就可以对优势函数进行多步采样了采样的步越多方差越大偏差越小采样的步越小方差越小偏差越大。为了方便表示引入δ t \delta_tδt其表示在t步执行特定动作带来的优势那么我们需要采样几步呢答案是全部采样GAEGeneralized Advantage Estimation我全都给优势函数进行一步采样,通过分配不同的权重A θ G A E ( s t , a ) ( 1 − λ ) ( A θ 1 λ ∗ A θ 2 λ 2 A θ 3 ⋯ ) λ 0.9 : A θ G A E 0.1 A θ 1 0.09 A θ 2 0.081 A θ 3 ⋯ A_{\theta}^{G A E}\left(s_{t}, a\right)(1-\lambda)\left(A_{\theta}^{1}\lambda * A_{\theta}^{2}\lambda^{2} A_{\theta}^{3}\cdots\right) \quad \lambda0.9: \quad A_{\theta}^{G A E}0.1 A_{\theta}^{1}0.09 A_{\theta}^{2}0.081 A_{\theta}^{3}\cdotsAθGAE(st,a)(1−λ)(Aθ1λ∗Aθ2λ2Aθ3⋯)λ0.9:AθGAE0.1Aθ10.09Aθ20.081Aθ3⋯将δ t \delta_tδt带入表达式并化简最后得到的含义是在状态s t s_tst时做动作a aa的优势,并且改善了采样的问题。这样最后的策略梯度的优化目标函数变成了状态价值函数V θ ( s t ) V_\theta(s_t)Vθ(st)需要用一个神经网络来拟合。经过上面这些基础的学习终于可以进去PPO算法了。PPOProximal Policy OptimizationOn Policy每次采集数据用的策略和训练用的策略是同一个重新采集数据很慢On-policy用当前策略生成的数据更新同一个策略→“自己实践自我改进”例SARSA, A2C, TRPOOff-policy用其他策略历史/随机策略生成的数据更新目标策略→“从别人的经验中学习”例Q-learning, DQN, SACoff-policy 的最简单解释: the learning is from the data off the target policy。on-policy 方法要求使用当前策略生成的数据来更新策略。on/off-policy的概念帮助区分训练的数据来自于哪里。目标计算 E x ∼ p ( x ) [ f ( x ) ] ∑ x f ( x ) ⋅ p ( x ) 但我们无法从 p ( x ) 采样或者采样成本太高 ∑ x f ( x ) ⋅ p ( x ) ⋅ q ( x ) q ( x ) 乘以 q ( x ) q ( x ) 1 不改变值只为引入一个新分布 q ( x ) ∑ x f ( x ) ⋅ p ( x ) q ( x ) ⋅ q ( x ) 把 q ( x ) 拆出来准备把它当作“新的采样分布” E x ∼ q ( x ) [ f ( x ) ⋅ p ( x ) q ( x ) ] 现在整个求和式变成了对 x 从 q ( x ) 采样时的期望 ≈ 1 N ∑ n 1 N f ( x ( n ) ) ⋅ p ( x ( n ) ) q ( x ( n ) ) 用蒙特卡洛方法从 q ( x ) 采 N 个样本 x ( n ) 来近似期望 其中 x ( n ) ∼ q ( x ) \begin{array}{l} \textbf{目标计算 } \mathbb{E}_{x \sim p(x)}[f(x)] \sum_{x} f(x) \cdot p(x) \\ \quad \text{但我们无法从 } p(x) \text{ 采样或者采样成本太高} \\ \\ \sum_{x} f(x) \cdot p(x) \cdot \frac{q(x)}{q(x)} \\ \quad \text{乘以 } \frac{q(x)}{q(x)} 1 \text{不改变值只为引入一个新分布 } q(x) \\ \\ \sum_{x} f(x) \cdot \frac{p(x)}{q(x)} \cdot q(x) \\ \quad \text{把 } q(x) \text{ 拆出来准备把它当作“新的采样分布”} \\ \\ \mathbb{E}_{x \sim q(x)}\!\left[ f(x) \cdot \frac{p(x)}{q(x)} \right] \\ \quad \text{现在整个求和式变成了对 } x \text{ 从 } q(x) \text{ 采样时的期望} \\ \\ \approx \frac{1}{N} \sum_{n1}^{N} f(x^{(n)}) \cdot \frac{p(x^{(n)})}{q(x^{(n)})} \\ \quad \text{用蒙特卡洛方法从 } q(x) \text{ 采 } N \text{ 个样本 } x^{(n)} \text{ 来近似期望} \\ \\ \text{其中 } x^{(n)} \sim q(x) \end{array}目标计算Ex∼p(x)[f(x)]∑xf(x)⋅p(x)但我们无法从p(x)采样或者采样成本太高∑xf(x)⋅p(x)⋅q(x)q(x)乘以q(x)q(x)1不改变值只为引入一个新分布q(x)∑xf(x)⋅q(x)p(x)⋅q(x)把q(x)拆出来准备把它当作“新的采样分布”Ex∼q(x)[f(x)⋅q(x)p(x)]现在整个求和式变成了对x从q(x)采样时的期望≈N1∑n1Nf(x(n))⋅q(x(n))p(x(n))用蒙特卡洛方法从q(x)采N个样本x(n)来近似期望其中x(n)∼q(x)$经过上述的推导我们就可以把On Policy的训练转变成Off Policy的训练关于上述公式的参数解释如下1 N ∑ n 1 N \frac{1}{N} \sum_{n1}^{N}N1∑n1N对N NN条轨迹采样的样本取平均值。这里的N NN表示采样轨迹的总数通过对多个轨迹求平均来估计梯度以获得更稳定的更新。∑ t 1 T n \sum_{t1}^{T_n}∑t1Tn对每条轨迹n nn中的T n T_nTn个时间步求和表示对单条轨迹中的所有时间步的累积。A θ ′ G A E ( s n t , a n t ) A_{\theta}^{GAE}(s_n^t, a_n^t)Aθ′GAE(snt,ant)广义优势估计Generalized Advantage Estimation, GAE由参数θ ′ \thetaθ′估计用于计算在状态s n t s_n^tsnt下采取动作a n t a_n^tant的优势。∇ P θ ( a n t ∣ s n t ) P θ ′ ( a n t ∣ s n t ) \frac{\nabla P_\theta(a_n^t | s_n^t)}{P_{\theta}(a_n^t | s_n^t)}Pθ′(ant∣snt)∇Pθ(ant∣snt)表示策略的梯度其中分母P θ ′ ( a n t ∣ s n t ) P_{\theta}(a_n^t | s_n^t)Pθ′(ant∣snt)是旧策略或目标策略分子∇ P θ ( a n t ∣ s n t ) \nabla P_\theta(a_n^t | s_n^t)∇Pθ(ant∣snt)是新策略的梯度。这个比值反映了新旧策略在同一状态-动作对上的相对概率密度利用这一比值来更新策略参数θ \thetaθ。最后得到的Loss如下这就是PPO的loss函数我们理解θ ′ \thetaθ′是旧策略θ \thetaθ是新策略可以看到其是用θ ′ \thetaθ′做数据采样然后θ \thetaθ来调整优势函数。PPO-KL还有一点限制我们训练的新策略不能和旧策略差别过大所以引入了KL散度。KL散度就是描述两个概率分布相似程度的指标分布越不一致KL散度越大。这样的话Loss就成为了L o s s k l − 1 N ∑ n 1 N ∑ t 1 T n A θ ′ G A E ( s n t , a n t ) P θ ( a n t ∣ s n t ) P θ ′ ( a n t ∣ s n t ) β K L ( P θ , P θ ′ ) Loss_{kl} -\frac{1}{N} \sum_{n1}^{N} \sum_{t1}^{T_n} A_{\theta}^{GAE}(s_n^t, a_n^t) \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta}(a_n^t | s_n^t)} \beta KL(P_\theta, P_{\theta})Losskl−N1n1∑Nt1∑TnAθ′GAE(snt,ant)Pθ′(ant∣snt)Pθ(ant∣snt)βKL(Pθ,Pθ′)这就是PPO-KL。其中β K L ( P θ , P θ ′ ) \beta KL(P_\theta, P_{\theta})βKL(Pθ,Pθ′)这是KL散度项用于限制新旧策略之间的距离其中K L ( P θ , P θ ′ ) KL(P_\theta, P_{\theta})KL(Pθ,Pθ′)表示策略P θ P_\thetaPθ和旧策略P θ ′ P_{\theta}Pθ′之间的KL散度。超参数β \betaβ控制KL散度项的权重从而调节新旧策略之间的差异防止策略更新过大导致不稳定。整个PPO-KL损失函数的目的是通过限制新旧策略的差异使用KL散度项来优化策略使其更稳定地朝着优势更高的方向进行更新。PPO-CLIPPPO截断PPO-Clipped是 PPO 的另一种变体它通过对比新旧策略的比值来限制策略更新的幅度从而保证策略的稳定性。具体来说PPO-Clipped 的目标函数为L o s s c l i p − 1 N ∑ n 1 N ∑ t 1 T n min ( A θ ′ G A E ( s n t , a n t ) P θ ( a n t ∣ s n t ) P θ ′ ( a n t ∣ s n t ) , clip ( P θ ( a n t ∣ s n t ) P θ ′ ( a n t ∣ s n t ) , 1 − ϵ , 1 ϵ ) A θ ′ G A E ( s n t , a n t ) ) Loss_{clip} -\frac{1}{N} \sum_{n1}^{N} \sum_{t1}^{T_n} \min \left( A_{\theta}^{GAE}(s_n^t, a_n^t) \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta}(a_n^t | s_n^t)}, \, \text{clip} \left( \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta}(a_n^t | s_n^t)}, 1 - \epsilon, 1 \epsilon \right) A_{\theta}^{GAE}(s_n^t, a_n^t) \right)Lossclip−N1n1∑Nt1∑Tnmin(Aθ′GAE(snt,ant)Pθ′(ant∣snt)Pθ(ant∣snt),clip(Pθ′(ant∣snt)Pθ(ant∣snt),1−ϵ,1ϵ)Aθ′GAE(snt,ant))clip ( P θ ( a n t ∣ s n t ) P θ ′ ( a n t ∣ s n t ) , 1 − ϵ , 1 ϵ ) \text{clip} \left( \frac{P_\theta(a_n^t | s_n^t)}{P_{\theta}(a_n^t | s_n^t)}, 1 - \epsilon, 1 \epsilon \right)clip(Pθ′(ant∣snt)Pθ(ant∣snt),1−ϵ,1ϵ)裁剪函数将概率比裁剪到[ 1 − ϵ , 1 ϵ ] [1 - \epsilon, 1 \epsilon][1−ϵ,1ϵ]区间防止策略的更新步长过大。这里ϵ \epsilonϵ是一个超参数控制裁剪的范围。min ( ⋅ , ⋅ ) \min(\cdot, \cdot)min(⋅,⋅)在未裁剪的概率比项和裁剪后的项之间取最小值。这一操作的目的在于限制策略更新幅度以防止策略偏离旧策略过远从而导致不稳定的学习过程。整个PPO-clip损失函数的作用是通过裁剪操作约束策略的变化幅度使策略更新不会过于激进。这种方式相比于传统策略梯度方法更为稳定并且在优化过程中能够有效平衡探索和利用。DPODPO是Direct Performance Optimization (直接偏好优化)其可以直接从用户的偏好数据中学习这里有一个概念很关键叫Bradley-Terry模型其可以对比较关系进行建模所以可以用此公式来建模比较y1和y2的好坏为了防止其返回负数需要加上指数函数。其得到的loss就是优化y w y_wyw大于y l y_lyl。那么DPO的训练目标如下经过推导后得到PPO的奖励是显式奖励模型而DPO是隐式奖励。GRPO如果上面的内容都理解的话那么理解起来GRPO就会很容易了。GRPO出自《DeepSeekMath: Pushing the Limits of MathematicalReasoning in Open Language Models》原文下载链接DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models先看一下在原文中提出的PPO公式看起来好像和我们推导的有一些区别实际上我们将前面的期望进行重要性采样之后就和我们所推导的公式长得一样了下面是原论文中PPO与GRPO的区别首先我们看左侧的output也就是oPPO只有一个o但是GRPO是G个o。也就是说对于一个问题q qqGRPO会生成G个输出o然后通过组内比较来计算其相对优势。其组内均值和标准差就是然后归一化组内的相对优势对i ii个输出的第t tt个token相比于PPOGRPO的优势函数无需价值网络是基于同一个prompt的多个样本进行相对比较去掉了价值网络使GRPO减少了很大的内存占用。所以GRPO的公式就变成了此外GRPO 通过直接在损失函数中加入策略模型和参考模型之间的 KL 散度来正则化而不是在奖励中加入 KL 惩罚项从而简化了训练过程。GRPO的KL散度公式如下