通俗易懂的大模型强化学习(一)
强化学习
前言
详解强化学习算法。依次介绍 REINFORCE、PPO、GRPO、GSPO、DAPO、SAPO。
通俗易懂的大模型强化学习(一)
通俗易懂的大模型强化学习(二)
通俗易懂的大模型强化学习(三)
一、重要概念定义
- 策略:智能体在看到状态 s t s_{t} st 的情况下,执行的动作服从概率分布 π θ ( ⋅ ∣ s t ) \pi_{\theta}(\cdot|s_{t}) πθ(⋅∣st)。也就是此时智能体是以一定概率执行某个动作 a t a_{t} at。
a t ∼ π θ ( ⋅ ∣ s t ) (1) a_{t}\sim\pi_{\theta}(\cdot|s_{t})\tag{1} at∼πθ(⋅∣st)(1) - 奖励:奖励由当前状态 s t s_{t} st、已经执行的动作 a t a_{t} at和下一步的状态 s t + 1 s_{t+1} st+1 共同决定。
- 单步奖励:
r t = R ( s t , a t , s t + 1 ) (2) r_{t}=R(s_{t},a_{t},s_{t+1}) \tag{2} rt=R(st,at,st+1)(2)- 奖励和策略无关
- 用于评估当前动作的好坏,指导智能体的动作选择。
- T步累积奖励:T步累积奖励等于一条运动轨迹/一个回合/一个rollout后的单步奖励的累加。
R ( τ ) = ∑ t = 0 T − 1 r t (3) R(\tau)=\sum_{t=0}^{T-1}r_{t}\tag{3} R(τ)=t=0∑T−1rt(3) - T步累积折扣奖励:
R ( τ ) = ∑ t = 0 T − 1 γ t r t (4) R(\tau)=\sum_{t=0}^{T-1}\gamma^{t} r_{t}\tag{4} R(τ)=t=0∑T−1γtrt(4)
这里 γ ∈ ( 0 , 1 ) \gamma\in(0,1) γ∈(0,1)。
- 单步奖励:
- 运动轨迹:智能体和环境做一系列(一回合)交互后得到的 state、action 和 reward 的序列,运动轨迹也被称为 episodes 或 rollouts,假设智能体和环境交互了 T T T 次:
τ = ( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … , s T − 1 , a T − 1 , r T − 1 ) \tau=(s_{0},a_{0},r_{0},s_{1},a_{1},r_{1},\dots,s_{T-1},a_{T-1},r_{T-1}) τ=(s0,a0,r0,s1,a1,r1,…,sT−1,aT−1,rT−1) - 轨迹概率:由于动作执行和状态转移都具备一定的随机性(其实在大模型场景,不太了解为什么状态转移具备随机性,前置文本 s t s_{t} st 和下一个token a t a_{t} at都确定了,下一个文本序列 s t + 1 s_{t+1} st+1 应该就是确定的啊),因此上述轨迹 τ \tau τ 是具有随机性的,出现的概率如下:
P ( τ ∣ π θ ) = P ( s 0 ) π θ ( a 0 ∣ s 0 ) P ( s 1 ∣ s 0 , a 0 ) π θ ( a 1 ∣ s 1 ) P ( s 2 ∣ s 1 , a 1 ) ⋯ = P ( s 0 ) ∏ t = 0 T − 1 π θ ( a t ∣ s t ) P ( s t + ! ∣ s t , a t ) (5) \begin{aligned} P(\tau|\pi_{\theta})&=P(s_{0})\pi_{\theta}(a_{0}|s_{0})P(s_{1}|s_{0},a_{0})\pi_{\theta}(a_{1}|s_{1})P(s_{2}|s_{1},a_{1})\cdots\\ &=P(s_{0})\prod_{t=0}^{T-1}\pi_{\theta}(a_{t}|s_{t})P(s_{t+!}|s_{t},a_{t})\tag{5} \end{aligned} P(τ∣πθ)=P(s0)πθ(a0∣s0)P(s1∣s0,a0)πθ(a1∣s1)P(s2∣s1,a1)⋯=P(s0)t=0∏T−1πθ(at∣st)P(st+!∣st,at)(5)
其中:- P ( s 0 ) P(s_{0}) P(s0):初始状态出现的概率;
- π ( a t ∣ s t ) \pi(a_{t}|s_{t}) π(at∣st):是策略 π \pi π 在状态 s t s_{t} st 下选择动作 a t a_{t} at 的概率;
- P ( s t + ! ∣ s t , a t ) P(s_{t+!}|s_{t},a_{t}) P(st+!∣st,at):是状态转移概率。
二、策略梯度算法
- 策略目标:
J ( θ ) = E τ ∼ π θ [ R ( τ ) ] = E τ ∼ π θ [ ∑ t = 0 T − 1 r t ] = ∑ τ P ( τ ∣ π θ ) R ( τ ) (6) \begin{aligned} J(\theta)&=\mathbb{E}_{\tau\sim\pi_{\theta}}[R(\tau)]\\ &=\mathbb{E}_{\tau\sim\pi_{\theta}}[\sum_{t=0}^{T-1}r_{t}]\\ &=\sum_{\tau}P(\tau|\pi_{\theta})R(\tau)\tag{6} \end{aligned} J(θ)=Eτ∼πθ[R(τ)]=Eτ∼πθ[t=0∑T−1rt]=τ∑P(τ∣πθ)R(τ)(6)
- 策略梯度:
∇ θ J ( θ ) = ∑ τ R ( τ ) ∇ θ P ( τ ∣ π θ ) = ∑ τ R ( τ ) P ( τ ∣ π θ ) ∇ θ P ( τ ∣ π θ ) P ( τ ∣ π θ ) = ∑ τ R ( τ ) P ( τ ∣ π θ ) ∇ θ l o g P ( τ ∣ π θ ) = E τ ∼ π θ [ R ( τ ) ∇ θ l o g P ( τ ∣ π θ ) ] (7) \begin{aligned} \nabla_{\theta}J(\theta)&=\sum_{\tau}R(\tau)\nabla_{\theta}P(\tau|\pi_{\theta})\\ &=\sum_{\tau}R(\tau)P(\tau|\pi_{\theta})\frac{\nabla_{\theta}P(\tau|\pi_{\theta})}{P(\tau|\pi_{\theta})}\\ &=\sum_{\tau}R(\tau)P(\tau|\pi_{\theta})\nabla_{\theta}logP(\tau|\pi_{\theta})\\ &=\mathbb{E}_{\tau\sim\pi_{\theta}}[R(\tau)\nabla_{\theta}logP(\tau|\pi_{\theta})]\tag{7} \end{aligned} ∇θJ(θ)=τ∑R(τ)∇θP(τ∣πθ)=τ∑R(τ)P(τ∣πθ)P(τ∣πθ)∇θP(τ∣πθ)=τ∑R(τ)P(τ∣πθ)∇θlogP(τ∣πθ)=Eτ∼πθ[R(τ)∇θlogP(τ∣πθ)](7)
上述推导使用了对数导数的技巧:
∇ θ l o g P ( τ ∣ π θ ) = ∇ θ P ( τ ∣ π θ ) P ( τ ∣ π θ ) ⇒ ∇ θ P ( τ ∣ π θ ) = P ( τ ∣ π θ ) ∇ θ l o g P ( τ ∣ π θ ) (8) \begin{aligned} &\nabla_{\theta}logP(\tau|\pi_{\theta})=\frac{\nabla_{\theta}P(\tau|\pi_{\theta})}{P(\tau|\pi_{\theta})}\\ \Rightarrow&\nabla_{\theta}P(\tau|\pi_{\theta})=P(\tau|\pi_{\theta})\nabla_{\theta}logP(\tau|\pi_{\theta})\tag{8} \end{aligned} ⇒∇θlogP(τ∣πθ)=P(τ∣πθ)∇θP(τ∣πθ)∇θP(τ∣πθ)=P(τ∣πθ)∇θlogP(τ∣πθ)(8)
又因为根据前文轨迹概率(等式(5))的计算,有如下等式成立:
P ( τ ∣ π θ ) = P ( s 0 ) ∏ t = 0 T − 1 π θ ( a t ∣ s t ) P ( s t + ! ∣ s t , a t ) (9) \begin{aligned} P(\tau|\pi_{\theta})=P(s_{0})\prod_{t=0}^{T-1}\pi_{\theta}(a_{t}|s_{t})P(s_{t+!}|s_{t},a_{t})\tag{9} \end{aligned} P(τ∣πθ)=P(s0)t=0∏T−1πθ(at∣st)P(st+!∣st,at)(9)
所以:
∇ θ l o g P ( τ ∣ π θ ) = ∇ θ [ l o g P ( s 0 ) + ∑ t = 0 T − 1 l o g P ( s t + ! ∣ s t , a t ) + ∑ t = 0 T − 1 l o g π θ ( a t ∣ s t ) ] = ∇ θ l o g P ( s 0 ) + ∑ t = 0 T − 1 ∇ θ l o g P ( s t + ! ∣ s t , a t ) + ∑ t = 0 T − 1 ∇ θ l o g π θ ( a t ∣ s t ) ] = ∑ t = 0 T − 1 ∇ θ l o g π θ ( a t ∣ s t ) (10) \begin{aligned} \nabla_{\theta}logP(\tau|\pi_{\theta})&=\nabla_{\theta}[logP(s_{0})+\sum_{t=0}^{T-1}logP(s_{t+!}|s_{t},a_{t})+\sum_{t=0}^{T-1}log\pi_{\theta}(a_{t}|s_{t})]\\ &=\nabla_{\theta}logP(s_{0})+\sum_{t=0}^{T-1}\nabla_{\theta}logP(s_{t+!}|s_{t},a_{t})+\sum_{t=0}^{T-1}\nabla_{\theta}log\pi_{\theta}(a_{t}|s_{t})]\\ &=\sum_{t=0}^{T-1}\nabla_{\theta}log\pi_{\theta}(a_{t}|s_{t})\tag{10} \end{aligned} ∇θlogP(τ∣πθ)=∇θ[logP(s0)+t=0∑T−1logP(st+!∣st,at)+t=0∑T−1logπθ(at∣st)]=∇θlogP(s0)+t=0∑T−1∇θlogP(st+!∣st,at)+t=0∑T−1∇θlogπθ(at∣st)]=t=0∑T−1∇θlogπθ(at∣st)(10)
其中第二行到第三行的变化,是基于如下事实:- ∇ θ l o g P ( s 0 ) = 0 \nabla_{\theta}logP(s_{0})=0 ∇θlogP(s0)=0,初始状态与参数 θ \theta θ无关;
- ∇ θ l o g P ( s t + ! ∣ s t , a t ) = 0 \nabla_{\theta}logP(s_{t+!}|s_{t},a_{t})=0 ∇θlogP(st+!∣st,at)=0,环境变化与参数 θ \theta θ无关。
将等式(10)带入等式(7),可得如下策略梯度表达式:
∇ θ J ( θ ) = E τ ∼ π θ [ R ( τ ) ∇ θ l o g P ( τ ∣ π θ ) ] = E τ ∼ π θ [ ∑ t = 0 T − 1 ∇ θ l o g π θ ( a t ∣ s t ) R ( τ ) ] (11) \begin{aligned} \nabla_{\theta}J(\theta)&=\mathbb{E}_{\tau\sim\pi_{\theta}}[R(\tau)\nabla_{\theta}logP(\tau|\pi_{\theta})]\\ &=\mathbb{E}_{\tau\sim\pi_{\theta}}[\sum_{t=0}^{T-1}\nabla_{\theta}log\pi_{\theta}(a_{t}|s_{t})R(\tau)]\tag{11} \end{aligned} ∇θJ(θ)=Eτ∼πθ[R(τ)∇θlogP(τ∣πθ)]=Eτ∼πθ[t=0∑T−1∇θlogπθ(at∣st)R(τ)](11)
三、REINFORCE
是策略梯度方法中的最基础、最原始的一种算法,由Williams在1992年提出。是第一个明确提出可以通过多次采样来估计等式(11)中的期望(用蒙特卡罗方法: 多次采样,平均值逼近理论期望)。
∇ θ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T − 1 ∇ θ l o g π θ ( a t ∣ s t ) R ( τ ) ] ≈ 1 N ∑ n = 1 N ∑ t = 0 T n − 1 ∇ θ l o g π θ ( a t ∣ s t ) R ( τ n ) (12) \begin{aligned} \nabla_{\theta}J(\theta)&=\mathbb{E}_{\tau\sim\pi_{\theta}}[\sum_{t=0}^{T-1}\nabla_{\theta}log\pi_{\theta}(a_{t}|s_{t})R(\tau)]\\ &\approx\frac{1}{N}\sum_{n=1}^{N}\sum_{t=0}^{T_{n}-1}\nabla_{\theta}log\pi_{\theta}(a_{t}|s_{t})R(\tau_{n})\tag{12} \end{aligned} ∇θJ(θ)=Eτ∼πθ[t=0∑T−1∇θlogπθ(at∣st)R(τ)]≈N1n=1∑Nt=0∑Tn−1∇θlogπθ(at∣st)R(τn)(12)
等式(12)中的 R ( τ n ) = ∑ t = 0 T n − 1 r t R(\tau_{n})=\sum_{t=0}^{T_{n}-1}r_{t} R(τn)=∑t=0Tn−1rt,来源于等式(3)。若采用累积折扣奖励,则 R ( τ n ) = ∑ t = 0 T n − 1 γ t r t R(\tau_{n})=\sum_{t=0}^{T_{n}-1}\gamma^{t} r_{t} R(τn)=∑t=0Tn−1γtrt,来源于等式(4)。
- REINFORCE的问题:方差很大,无法收敛。每一次梯度更新有两个方面会引起比较大的方差:
- 去预估整体期望的时候,在每一步,都会与这个轨迹整体的回报 R ( τ n ) R(\tau_{n}) R(τn) 相乘,相当于每一步都与整体的回报相关,引入了过去的噪声;
- 梯度是利用蒙特卡罗方法采样多条轨迹近似计算,但不同轨迹的回报波动可能很剧烈,导致策略梯度估计不稳定,方差大。
- REINFORCE的优化:
- reward to go: 只关注每一步策略对于将来轨迹的影响,所以每一步的回报从当前策略开始算,而不是轨迹中的每一步都直接粗暴的与整个轨迹的回报计算。这也可以从策略角度说得通,当前的策略( s t a t e → a c t i o n state\rightarrow action state→action)应该只对未来有影响,因为过去的已经发生了,无法产生影响。所以回报可以写为:
R ( τ n , t ) = ∑ t ′ = t T n − 1 r t ′ (13) \begin{aligned} R(\tau_{n},t)=\sum_{t^{'}=t}^{T_{n}-1}r_t^{'}\tag{13} \end{aligned} R(τn,t)=t′=t∑Tn−1rt′(13)
若采用累积折扣奖励,回报可写为:
R ( τ n , t ) = ∑ t ′ = t T n − 1 γ t ′ − t r t ′ (14) \begin{aligned} R(\tau_{n},t)=\sum_{t^{'}=t}^{T_{n}-1}\gamma^{t^{'}-t} r_t^{'}\tag{14} \end{aligned} R(τn,t)=t′=t∑Tn−1γt′−trt′(14) - 引入baseline:如果每次更新只看轨迹的回报,相当于只看绝对值,按照当前策略的回报绝对值去度量当前的价值,本身就是不合理的,相当于没有基准,只要回报不是负数,可能就会认为这个方向是好的,实际却不是这样。类似于 a 回报为20,b 回报为40,看似两个回报都是正向的,实际当前策略下的平均回报预期已经是30了,所以 a 本质是不推荐的优化方向。这时要引入当前状态下的预期回报作为baseline。
那baseline如何获取?可以通过无参数的估计:使用过去训练步骤中回报的滑动平均值作为 baseline。这样可以衡量当前轨迹的回报与历史回报的差异,从而减少梯度估计的方差。Moving Average baseline可以用表示,则策略梯度可以表示为:
∇ θ J ( θ ) = 1 N ∑ n = 1 N ∑ t = 0 T n − 1 ∇ θ l o g π θ ( a t ( n ) ∣ s t ( n ) ) ( R ( τ n ) − b M A ) (15) \begin{aligned} \nabla_{\theta}J(\theta)=\frac{1}{N}\sum_{n=1}^{N}\sum_{t=0}^{T_{n}-1}\nabla_{\theta}log\pi_{\theta}(a_{t}^{(n)}|s_{t}^{(n)})(R(\tau_{n})-b_{MA})\tag{15} \end{aligned} ∇θJ(θ)=N1n=1∑Nt=0∑Tn−1∇θlogπθ(at(n)∣st(n))(R(τn)−bMA)(15)
- reward to go: 只关注每一步策略对于将来轨迹的影响,所以每一步的回报从当前策略开始算,而不是轨迹中的每一步都直接粗暴的与整个轨迹的回报计算。这也可以从策略角度说得通,当前的策略( s t a t e → a c t i o n state\rightarrow action state→action)应该只对未来有影响,因为过去的已经发生了,无法产生影响。所以回报可以写为:
- 备注:无论是采用 R ( τ n ) R(\tau_{n}) R(τn),还是采用 R ( τ n , t ) R(\tau_{n},t) R(τn,t),亦或是采用 R ( τ n ) − b M A R(\tau_{n})-b_{MA} R(τn)−bMA,都是回报的一种计算方式,PPO章节会介绍回报计算方式的多种形式,这里暂不过多介绍。
参考
更多推荐



所有评论(0)