强化学习
基本信息
博客贡献人
秦明
标签
大语言模型,基于人类反馈的大语言模型,PPO
摘要
通过有监督微调,大语言模型已经初步具备了服从人类指令,并完成各类型任务的能力。然而有监督微调需要大量指令和所对应的标准回复,获取大量高质量的回复需要耗费大量的人力和时间成本。由于,有监督微调通常采用交叉熵损失做为损失函数,目标是调整参数使得模型输出与标准答案完全相同,不能从整体上对模型输出质量进行判断。因此,模型不能适用自然语言多样性,也不能解决微小变化的敏感性问题。强化学习则将模型输出文本作为一个整体进行考虑,其优化目标是使得模型生成高质量回复。此外,强化学习方法还不依赖于人工编写的高质量回复。模型根据指令生成回复,奖励模型针对所生成的回复给出质量判断。模型也可以生成多个答案,奖励模型对输出文本质量进行排序。模型通过生成回复并接收反馈进行学习。强化学习方法更适合生成式任务,也是大语言模型构建中必不可少的关键步骤。
强化学习
强化学习(Reinforcement Learning,RL)研究的问题是智能体(Agent)与环境(Environment)交互的问题,其目标是使智能体在复杂且不确定的环境中最大化奖励(Reward)。强化学习基本框架如图所示,主要由两部分组成:智能体和环境。在强化学习过程中,智能体与环境不断交互。智能体在环境中获取某个状态后,会根据该状态输出一个动作(Action),也称为决策(Decision)。动作会在环境中执行,环境会根据智能体采取的动作,给出下一个状态以及当前动作所带来的奖励。智能体的目标就是尽可能多地从环境中获取奖励。
在强化学习中,价值函数是一个核心概念,它用于评估在给定策略下,处于某个状态或执行某个动作的预期收益。价值函数帮助智能体(agent)判断哪些状态或动作是有利的,即可能带来更高的长期回报。价值函数通常为状态价值函数(State Value Function)。
状态价值函数(V)
状态价值函数 V π ( s ) V^{\pi}(s) Vπ(s)代表在策略 π \pi π下,从状态 s s s出发并遵循策略 π \pi π所能获得的期望回报。数学上,它可以定义为:
V π ( s ) = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] V^{\pi}(s) = \mathbb{E}_{\pi}\left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} \bigg| S_t = s \right] Vπ(s)=Eπ[k=0∑∞γkRt+k+1 St=s]
其中, E π [ ⋅ ] \mathbb{E}_{\pi}[\cdot] Eπ[⋅]表示在策略 π \pi π下的期望值, R t + k + 1 R_{t+k+1} Rt+k+1是在时间 t + k + 1 t+k+1 t+k+1获得的奖励, γ \gamma γ是折扣因子( 0 ≤ γ < 1 0 \leq \gamma < 1 0≤γ<1),它决定了未来奖励的当前价值。
演员评论家算法
Actor-Critic 方法是一种强化学习算法,它结合了策略梯度方法(Actor部分)和价值函数近似方法(Critic部分)。它旨在利用两种方法的优点来提高学习效率和稳定性。
Actor部分
- 策略表示:Actor代表了当前策略,它是智能体的“行动者”,负责根据当前状态选择动作。Actor的策略通常是参数化的,比如使用神经网络。
- 策略优化:Actor的策略通过接收Critic的反馈来优化。这个反馈通常是TD误差或者优势函数(Advantage Function),它指示了一个动作相对于平均情况的好坏。
Critic部分
- 价值函数表示:Critic评估当前策略下的状态价值或动作价值。Critic的目的是减少奖励的方差,并为Actor提供一个稳定的基准。
- 价值更新:Critic的价值函数也是参数化的,并且通过观察实际回报和估计回报之间的差异来更新,以提高价值估计的准确性。
学习过程
在Actor-Critic的学习过程中,Actor和Critic会同时进行更新。在每个时间步骤 t t t:
- Actor根据当前策略 π ( a ∣ s ) \pi(a|s) π(a∣s)选择一个动作 a t a_t at。
- Critic计算优势函数 A ( s t , a t ) A(s_t, a_t) A(st,at)。
- Actor使用优势函数作为指导来更新策略参数 θ \theta θ,通常是通过策略梯度。
- Critic更新价值函数的参数,以更好地估计未来的回报。
模型架构![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3bea436a6e01ee6c6edd55e66afcc58f.png)
广义优势估计(Generalized Advantage Estimation,简称GAE)
由John Schulman等人在2015年提出,旨在平衡估计优势函数时的偏差和方差。GAE是一种计算优势函数 A t A_t At的方法,它是在时刻 t t t采取动作 a t a_t at的期望回报与该状态的价值函数 V ( s t ) V(s_t) V(st)之间的差异。
TD残差
GAE的核心思想是结合了TD残差(Temporal Difference Residual)和多步估计。在标准的TD学习中,TD残差 δ t \delta_t δt定义为:
δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)−V(st)
这里, r t r_t rt是在时刻 t t t获得的奖励, V ( s t ) V(s_t) V(st)是状态 s t s_t st的价值函数估计, γ \gamma γ是折扣因子,它决定了未来奖励的当前价值。
多步估计
多步估计是一种结合了即时奖励和多步后的奖励来更新当前状态价值的方法。它不仅考虑下一个状态的价值,而是考虑了多个未来状态的价值。多步估计的目的是通过考虑更长的时间序列来更好地估计状态的价值,这样可以更快地传播价值信息。多步回报可以表示为:
G t ( n ) = r t + γ r t + 1 + γ 2 r t + 2 + . . . + γ n − 1 r t + n − 1 + γ n V ( s t + n ) G_t^{(n)} = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + ... + \gamma^{n-1} r_{t+n-1} + \gamma^n V(s_{t+n}) Gt(n)=rt+γrt+1+γ2rt+2+...+γn−1rt+n−1+γnV(st+n)
这里, G t ( n ) G_t^{(n)} Gt(n)是从时间 t t t开始的 n n n步回报,它包括了接下来 n n n个时间步的奖励,以及在 n n n步之后的状态价值的折扣估计。参数 n n n可以调整,以便在偏差和方差之间取得平衡。
结合TD残差和多步估计:GAE
广义优势估计(GAE)通过结合TD残差和多步估计的思想来计算优势函数。它为每个TD残差赋予了一个衰减的权重,这个权重由 γ \gamma γ和 λ \lambda λ共同决定。GAE的公式如下:
A t G A E ( γ , λ ) = ∑ l = 0 T − t ( γ λ ) l δ t + l A_t^{GAE(\gamma, \lambda)} = \sum_{l=0}^{T-t} (\gamma \lambda)^l \delta_{t+l} AtGAE(γ,λ)=l=0∑T−t(γλ)lδt+l
这里, A t G A E ( γ , λ ) A_t^{GAE(\gamma, \lambda)} AtGAE(γ,λ)是时刻 t t t的优势估计,它是一个加权和,其中TD残差 δ t + l \delta_{t+l} δt+l被加权为 ( γ λ ) l (\gamma \lambda)^l (γλ)l。可以看出,当 λ = 0 \lambda = 0 λ=0时,GAE退化成单步TD残差;当 λ = 1 \lambda = 1 λ=1时,GAE退化成传统的蒙特卡洛方法。
GAE提供了一种灵活的方法来调整优势函数的估计,允许我们在单步TD更新和多步蒙特卡洛更新之间平滑过渡,从而在学习效率和方差控制之间取得平衡。
PPO-Clip算法
PPO的关键特性之一是它引入了一个“剪辑”机制,该机制限制了策略更新的幅度,以避免过大的策略变化,这可能导致性能急剧下降。PPO-Clip通过修改目标函数来实现这一点,它使用剪辑函数来限制策略比率(新策略与旧策略的概率比)的变化。
策略比率 r t ( θ ) r_t(\theta) rt(θ)定义为:
r t ( θ ) = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{\text{old}}}(a_t | s_t)} rt(θ)=πθold(at∣st)πθ(at∣st)
其中, π θ ( a t ∣ s t ) \pi_\theta(a_t | s_t) πθ(at∣st)是在策略参数为 θ \theta θ时,在状态 s t s_t st采取动作 a t a_t at的概率, π θ old ( a t ∣ s t ) \pi_{\theta_{\text{old}}}(a_t | s_t) πθold(at∣st)是在旧策略参数下的概率。
PPO-Clip的目标函数为:
L CLIP ( θ ) = E t [ min ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] L^{\text{CLIP}}(\theta) = \mathbb{E}_t \left[ \min(r_t(\theta) \hat{A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t) \right] LCLIP(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]
这里, A ^ t \hat{A}_t A^t是优势函数的估计, ϵ \epsilon ϵ是一个超参数,通常设置为一个小值,如0.1或0.2。 clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) clip(rt(θ),1−ϵ,1+ϵ)函数将比率 r t ( θ ) r_t(\theta) rt(θ)限制在 [ 1 − ϵ , 1 + ϵ ] [1 - \epsilon, 1 + \epsilon] [1−ϵ,1+ϵ]的范围内。
目标函数的这种形式实际上是在执行两个操作:
-
剪辑外的更新:当策略比率 r t ( θ ) r_t(\theta) rt(θ)落在 [ 1 − ϵ , 1 + ϵ ] [1 - \epsilon, 1 + \epsilon] [1−ϵ,1+ϵ]的范围内时,目标函数简化为 r t ( θ ) A ^ t r_t(\theta) \hat{A}_t rt(θ)A^t,即标准的策略梯度更新。
-
剪辑内的更新:当策略比率超出上述范围时,目标函数使用 clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t clip(rt(θ),1−ϵ,1+ϵ)A^t来限制更新的幅度。这样做的目的是防止由于大幅度更新导致的性能下降。
PPO-Clip的意义
PPO-Clip的设计旨在平衡探索和利用,同时防止由于策略更新过大而导致的训练不稳定。这种剪辑机制简化了TRPO中复杂的信任区域更新方法,同时保持了算法性能。PPO由于其相对简单的实现和良好的性能,在实践中被广泛采用,特别是在复杂的环境和大规模问题中。