概述
长期以来,强化学习算法都是使用单一的标量回报(Return or Reward)与价值(Value)估计,即只使用加权求和后的reward作为评价函数(Critic function)或值估计函数(Value function)的目标真值。
当回归到现实问题时,我们往往设计很多的rewards作为系统的回报,比如:自动驾驶中可以有速度的reward,到达目标的reward,碰撞障碍物的reward,乘员舒适度的reward... 这样有一个问题,就是如果使用标量化的reward那么需要将所有的rewards都加起来,在value函数预测时,我们始终都在预测一个耦合的标量价值。
这样会存在几个问题:1. 价值预测的长尾效应,比如有些rewards值占整个求和的比重非常小时,这些价值将被价值预测函数忽略;2. 价值函数需要在充分大的数据统计中去解耦这些价值;3. 无法清晰的获得价值函数对每一个价值的预测误差;4. 反向传播的收敛速度问题,单值回归的效果一般要差一些,等一系列问题。
下文我们将以PPO(Proximal Policy Optimization)为例详细说明多维价值矢量化预测的算法过程,实际上所有的actor-critic算法及value-based算法都可以应用该过程。
PPO算法
PPO算法目前因为其性能优越性,很多时候我们都是使用PPO算法作为强化学习的主要算法,该算法于2017年由John Schulman提出,是一种基于策略优化的强化学习算法,也是在策略梯度(Policy Gradient)算法衍生出来的Actor-Critit算法。在无人机、人形机器人、大模型等领域应用广泛。本节主要简单介绍PPO算法流程。
数据收集
具体得过程如下:
- 初始化:策略模型参数 θ \theta θ , 评价模型参数 ϕ \phi ϕ
- 生成轨迹:每个环境实例中, 从初始状态开始, 每一个时间步 t t t , 策略模型 π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(a∣s)根据当前策略选择一个动作 a t a_t at, 执行该选择的动作, 状态转移到 s t + 1 s_{t+1} st+1 , 得到奖励 r t r_t rt。重复该过程, 直到每个环境实例达到终止状态或最大步数, 得到一批轨迹数据 τ \tau τ
- 存放经验数据:将交互的数据存于 Γ = { τ 0 , τ 1 , . . . } \Gamma =\{\tau_0,\tau_1,...\} Γ={τ0,τ1,...}
优势估计
一般在PPO中使用广义优势估计GAE, 具体计算步骤:
- 计算回报: 对于每条轨迹 τ i \tau_i τi, 从后往前计算每个时间步的折扣累积回报, G t = ∑ i = 0 ι γ i r t + i = r t + G t − 1 G_t=\sum_{i=0}^\iota \gamma^i r_{t+i} =r_t +G_{t-1} Gt=i=0∑ιγirt+i=rt+Gt−1
- 计算优势估计: 使用价值模型对数据 Γ \Gamma Γ 中的每一个状态 s t s_t st前向传播得到价值估计 V ϕ ( s t ) V_{\phi }(s_t) Vϕ(st) , 然后使用下式计算优势估计值 A t A_t At: δ t = r t + γ V ϕ ( S t + 1 ) − V ϕ ( S t ) \delta_t = r_t+\gamma V_{\phi }(S_{t+1})-V_{\phi }(S_{t}) δt=rt+γVϕ(St+1)−Vϕ(St) A t = ∑ i = 0 ι γ i λ i δ t + i A_t = \sum_{i=0}^\iota \gamma^i \lambda^i \delta_{t+i } At=i=0∑ιγiλiδt+i 这里 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ∈[0,1]为超参数。
策略模型优化目标
策略模型更新最大化如下目标函数 :
L θ c l i p = E ( m i n { π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) A t , c l i p ( π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) , 1 − ϵ , 1 + ϵ ) A t } ) \mathcal{L^{clip}\theta} = E(min\{\frac{\pi\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}A_t \ , clip(\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}\ ,1-\epsilon\ ,1+\epsilon)A_t \}) Lθclip=E(min{πθold(at∣st)πθ(at∣st)At ,clip(πθold(at∣st)πθ(at∣st) ,1−ϵ ,1+ϵ)At})
这里 π θ ( a t ∣ s t ) π θ o l d ( a t ∣ s t ) \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} πθold(at∣st)πθ(at∣st)指新旧策略在状态 s t s_t st选择 a t a_t at的概率变化。 c l i p clip clip函数将该变化限制在 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon\ ,1+\epsilon] [1−ϵ ,1+ϵ]之间。
价值模型优化目标
策略模型更新最小化如下目标函数:
L ϕ = 1 2 ( V ϕ ( s t ) − G t ) 2 \mathcal{L_{\phi }} = \frac{1}{2} (V_{\phi }(s_t)-G_t)^2 Lϕ=21(Vϕ(st)−Gt)2
策略的熵
策略的熵定义为: L e n t r o p y = − ∑ t = 1 T π θ ( a t ∣ s t ) l o g ( π θ ( a t ∣ s t ) ) \mathcal{L_{entropy}} = -\sum_{t=1}^{T} \pi_\theta(a_t|s_t) log(\pi_\theta(a_t|s_t)) Lentropy=−t=1∑Tπθ(at∣st)log(πθ(at∣st))
总的代价函数为
L = − L θ c l i p + α L ϕ − β L e n t r o p y \mathcal{L}=-\mathcal{L^{clip}\theta}+\alpha \mathcal{L{\phi }}-\beta\mathcal{L_{entropy}} L=−Lθclip+αLϕ−βLentropy其中 α , β \alpha, \beta α,β为权重参数,这里使用梯度下降法更新两个网络的参数。
多维价值矢量化预测
这个改进中修改了以下部分。
- 多维价值顾名思义,就是多个维度价值的预测,不再局限于加和的标量价值,那么我们的Rewards也是多维的,即 r ∈ R n , G t ∈ R n r\in R^n, G_t \in R^n r∈Rn,Gt∈Rn,其中 n > 0 , n ∈ Z n>0,n\in Z n>0,n∈Z。
- Critic函数或价值网络输出也是多维矢量预测的,即: V ϕ ( s ) ∈ R n V_{\phi }(s)\in R^n Vϕ(s)∈Rn
- 加权Critic对应的目标函数为: L ϕ = 1 2 ( V ϕ ( s t ) − G t ) 2 \mathcal{L_{\phi }} = \frac{1}{2} (V_{\phi }(s_t)-G_t)^2 Lϕ=21(Vϕ(st)−Gt)2 L ϕ ∗ = ∑ k = 1 n w k ∗ L ϕ k \mathcal{L^*{\phi }} = \sum{k=1}^n w^k* \mathcal{L^k_{\phi }} Lϕ∗=k=1∑nwk∗Lϕk 其中 k k k 表示第 k k k 维估计误差的分量, w k w^k wk为该维的权重。
- 优势函数(advantage function),同理 A t = ∑ i = 0 ι γ i λ i ( r t + i + γ V ϕ ( S t + i + 1 ) − V ϕ ( S t + i ) ) A_t = \sum_{i=0}^\iota \gamma^i \lambda^i ( r_{t+i}+\gamma V_{\phi }(S_{t+i+1})-V_{\phi }(S_{t+i})) At=i=0∑ιγiλi(rt+i+γVϕ(St+i+1)−Vϕ(St+i)) 也是多维矢量,所以我们进行加权求和: A t ∗ = ∑ k = 1 n w k A t k A_t^* = \sum_{k=1}^n w^kA^k_t At∗=k=1∑nwkAtk
后记
这个改动应该说不大,但是主流的强化学习框架如stable-baselines3都不太支持,需要改rollout buffer等,当然还有比较影响精度的reward vec norm等,整个训练下来算是有提升,但是并没有做过消融实验,因为改进比较小就不写论文了,平时工程的事情也多,也没时间。
这个也是一个新的视角,看待reward。多维回报,也许未来在其他工程问题上有其他帮助也说不定,这里就简单把算法写下来。