1. 强化学习的基本概念
PPO之前,先解释一些强化学习的基本概念。如果熟悉的话直接过。
状态(State, s s s)
状态是环境的当前情况。比如,如果你在玩一个游戏,状态可能是屏幕上的画面、角色的位置、速度等。
动作(Action, a a a)
动作是你在某个状态下可以采取的行为。比如,在游戏中,动作可以是“向左移动”、“跳跃”等。
奖励(Reward, r r r)
奖励是环境对你的动作的反馈。比如,如果你在游戏中成功躲避了一个障碍物,你可能会得到一个正奖励(+1);如果你撞到障碍物,可能会得到一个负奖励(-1)。
策略(Policy, π \pi π)
策略是一个函数,它告诉你在某个状态下应该选择什么动作。策略可以用一个概率分布来表示,比如在某个状态下,选择动作A的概率是0.7,选择动作B的概率是0.3。
策略通常用参数 θ \theta θ 来表示,所以策略可以写成 π θ ( a ∣ s ) \pi_{\theta}(a | s) πθ(a∣s),意思是在状态 s s s 下,选择动作 a a a 的概率,由策略参数 θ \theta θ 决定。
2. PPO算法的思想
PPO(Proximal Policy Optimization)是一种强化学习算法,它的核心思想是:每次更新策略时,不要让策略变化太大。如果策略变化太大,可能会导致学习不稳定,甚至让策略变得更差。
比如说训练一个小球走迷宫。如果每次更新策略时,小球都突然改变太多行为,它可能会完全迷失方向。为了避免这种情况,PPO通过限制策略更新的幅度,确保每次更新都是在原来动作的基础上只有一点点改变。
- 使用概率比率 r t ( θ ) r_t(\theta) rt(θ) 来衡量新旧策略的变化。
- 使用剪辑函数 clip \text{clip} clip 来限制策略变化的幅度。
- 使用优势函数 A t A_t At 来衡量动作的好坏。
3. PPO公式
目标函数
L C L I P ( θ ) = E t [ min ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) ] L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min \left( r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t \right) \right] LCLIP(θ)=Et[min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)]
希望最大化策略更新带来的收益,同时限制策略变化的幅度。
概率比率 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)
这个比率表示:在状态 s t s_t st 下,新策略 π θ \pi_{\theta} πθ 选择动作 a t a_t at 的概率,与旧策略 π θ old \pi_{\theta_{\text{old}}} πθold 选择动作 a t a_t at 的概率的比值。
- π θ ( a t ∣ s t ) \pi_{\theta}(a_t | s_t) πθ(at∣st):新策略在状态 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):旧策略在状态 s t s_t st 下选择动作 a t a_t at 的概率。
假设旧策略在某个状态下选择“左转”的概率是0.5,新策略选择“左转”的概率是0.6。那么比率 r t ( θ ) r_t(\theta) rt(θ) 就是 0.6 / 0.5 = 1.2 0.6 / 0.5 = 1.2 0.6/0.5=1.2。所以新策略比旧策略更倾向于选择这个动作。
优势函数 A t A_t At
优势函数 A t A_t At 表示:在状态 s t s_t st 下,选择动作 a t a_t at 比随机选择一个动作能多获得多少奖励。
- 如果 A t > 0 A_t > 0 At>0,说明选择这个动作比随机选择更好。
- 如果 A t < 0 A_t < 0 At<0,说明选择这个动作比随机选择更差。
优势函数可以通过以下公式计算:
A t = Q ( s t , a t ) − V ( s t ) A_t = Q(s_t, a_t) - V(s_t) At=Q(st,at)−V(st)
其中:
- Q ( s t , a t ) Q(s_t, a_t) Q(st,at):在状态 s t s_t st 下选择动作 a t a_t at 的预期总奖励。
- V ( s t ) V(s_t) V(st):在状态 s t s_t st 下随机选择动作的预期总奖励。
如果在某个状态下,选择“左转”能获得10分奖励,而随机选择动作的平均奖励是5分,那么优势函数 A t = 10 − 5 = 5 A_t = 10 - 5 = 5 At=10−5=5。优势函数告诉我们,选择这个动作比随机选择更好。
剪辑函数 clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) clip(rt(θ),1−ϵ,1+ϵ)
剪辑函数的作用是限制概率比率 r t ( θ ) r_t(\theta) rt(θ) 的变化范围,防止策略更新过大。
- ϵ \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+ϵ] 内。
如果 ϵ = 0.1 \epsilon = 0.1 ϵ=0.1,那么 r t ( θ ) r_t(\theta) rt(θ) 的最大值是 1 + 0.1 = 1.1 1 + 0.1 = 1.1 1+0.1=1.1,最小值是 1 − 0.1 = 0.9 1 - 0.1 = 0.9 1−0.1=0.9。如果 r t ( θ ) = 1.5 r_t(\theta) = 1.5 rt(θ)=1.5,剪辑后会变成1.1;如果 r t ( θ ) = 0.5 r_t(\theta) = 0.5 rt(θ)=0.5,剪辑后会变成0.9。剪辑函数确保新策略不会偏离旧策略太多。
目标函数的含义
L C L I P ( θ ) = E t [ min ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) ] L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min \left( r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t \right) \right] LCLIP(θ)=Et[min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At)]
这个公式的意思是:我们希望最大化策略更新带来的收益,但同时限制策略变化的幅度。
- min ( r t ( θ ) A t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t ) \min(r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t) min(rt(θ)At,clip(rt(θ),1−ϵ,1+ϵ)At):取较小的值作为损失。
- 如果 r t ( θ ) A t r_t(\theta) A_t rt(θ)At 大于 clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t clip(rt(θ),1−ϵ,1+ϵ)At,说明新策略变化太大,我们选择较小的值来限制变化。
- 如果 r t ( θ ) A t r_t(\theta) A_t rt(θ)At 小于 clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A t \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t clip(rt(θ),1−ϵ,1+ϵ)At,说明新策略变化在允许范围内,我们直接使用 r t ( θ ) A t r_t(\theta) A_t rt(θ)At。
举个例子:
- 假设 r t ( θ ) = 1.2 r_t(\theta) = 1.2 rt(θ)=1.2, A t = 5 A_t = 5 At=5, ϵ = 0.1 \epsilon = 0.1 ϵ=0.1。
- clip ( 1.2 , 0.9 , 1.1 ) = 1.1 \text{clip}(1.2, 0.9, 1.1) = 1.1 clip(1.2,0.9,1.1)=1.1。
- min ( 1.2 × 5 , 1.1 × 5 ) = min ( 6 , 5.5 ) = 5.5 \min(1.2 \times 5, 1.1 \times 5) = \min(6, 5.5) = 5.5 min(1.2×5,1.1×5)=min(6,5.5)=5.5。
- 这意味着,虽然新策略带来了更大的收益(6),但我们限制它为5.5,以防止策略变化过大。
4. PPO优化过程
PPO的优化过程分为以下几个步骤:
-
采样数据:从环境中采样一批数据,包括状态 s t s_t st、动作 a t a_t at、奖励 r t r_t rt 等。
-
计算优势函数 A t A_t At:使用广义优势估计(GAE)或其他方法计算每个状态-动作对的优势函数。
-
更新策略:计算概率比率 r t ( θ ) r_t(\theta) rt(θ)。使用剪辑函数 clip \text{clip} clip 限制比率的变化范围。通过最大化目标函数 L C L I P ( θ ) L^{CLIP}(\theta) LCLIP(θ) 来更新策略参数 θ \theta θ。