RL——强化学习相关笔记


为什么 off-policy 的方法在于不与环境交互时效果不好?

  • 注:理论上,off-policy 的方法对收集样本的行为策略没有要求,但实际上,行为策略与目标策略不同可能导致外推误差问题,具体包含下面三个部分
  • Absent Data: 数据集中可能存在某些状态是从来没有出现过的
    • 某些 state-action 对的缺失会导致在该状态和动作上的错误估计
  • Training Mismatch: 离线训练数据的分布和强化模型线上serving时的分布不一致
    • 用于更新网络的状态分布需要满足当前策略对应的分布(即使所有状态动作都见过,没有Absent Data问题,也可能因为分布不同而导致问题),否则会导致线上线下状态分布不一致。可能导致训练效率低下,甚至模型关注一些不重要的状态动作(可类比CTR模型样本分布最好是线上线下一致的)
  • Model Bias: 数据集本身可能分布与MDP分布不一致
    • 这里主要指在随机MDP中,数据集本身与MDP分布不一致(这里主要指与策略无关的部分,比如数据集中 \(P(s’|s,a)\) 无法准确表达真实环境)

强化学习中外推误差和OOD问题的区别【TODO:待补充】

  • 外推误差(Extrapolation Error)问题在强化学习场景中的定义:off-policy值学习中,当前策略真实状态动作访问分布和数据集中的状态动作分布不匹配导致的一种误差,具体来说,包括Absent Data(状态动作对缺失),Training Mismatch(训练预测分布不一致),Model Bias(随机MDP的状态转移概率有偏差)等问题
  • OOD(Out of Distribution)问题在强化学习场景中,更倾向于数据缺失(Absent Data)问题
  • 总结:外推误差可以是Absent Data,Training Mismatch,Model Bias等原因共同导致的,而OOD倾向于特指其中最常见的一种问题(Absent Data问题)

为什么Online RL中不能使用BN?

  • 参考链接:
  • BN能work的主要原因是,每个Batch的数据是从整体数据中随机采样得到的,每个Batch的均值和方差不会差别太大
  • 在Online RL中,随着Agent的探索,数据分布一直在变化,进入模型的不同Batch无法保证能代表整体样本,随着Agent的迭代数据分布逐步变化,模型来不及学到固定的均值和方差,导致无法收敛
  • Offline RL中,数据是提前固定的,则没有这个问题,所以Offline RL中,可以使用BN
  • 实际上,可以分场景尝试,在一些状态变化不剧烈的场景中,BN也是可以使用的,大部分场景中则建议使用LN

为什么DQN/Q-learning不需要重要性采样?

  • 事实 :DQN有Reply Buffer,使用了其他策略收集到的样本,但是不需要重要性采样
  • 解释1 :DQN是是Q-learning的神经网络实现,Q-learning方法是基于贝尔曼最优方程的,最优价值函数是关于状态转移分布的期望值,而不是关于策略分布的期望值(默认是按照当前最优策略进行决策),所以不需要重要性采样
  • 解释2 :因为DQN是贝尔曼最优公式推导得到的,在推导和收敛性证明过程中,不涉及任何的策略数据采样分布要求,只要求计算下个状态Q值用的Q网络是上次迭代的值即可
  • 其他说明 :对于状态-动作分布的问题,实际上DQN也最好是使用当前策略采样的数据,原因是更能保证线上线下一致性;此外,在Offline RL场景中直接使用DQN可能因为没有探索而出现OOD等问题
  • :如果使用n-step奖励进行学习,实际上不能满足中间步骤都是当前最优策略(可能有随机探索概率存在),但一般也忽略这个问题

D-Learning中,Q值高估现象及其导致的问题

  • Q-learning(以及 DQN 等基于 Q-learning 的算法)中的最大化操作(maximization operator),简单可以理解为以下:
    • 最大化操作本身的偏置(Maximization Bias)导致高估
    • 函数逼近误差(Function Approximation Error)进一步加剧高估
  • 这种高估往往服从不均匀的误差分布(Non-uniform Error Distribution),即部分动作高估,部分动作低估
    • 离线强化学习中,越没有见过的动作越容易被高估,因为其他动作会被数据集中的数据更新
    • 理解:如果是所有动作都相同程度的高估,实际上问题不大,依然能选到最优动作
    • 在线强化学习中,不均匀的高估可能降低收敛速度,导致策略往次优动作上尝试
  • 实践中常用 Double DQN 或 Twin Q 的思想来减少高估问题;离线强化学习中则常常会特别关注Q值高估问题(比如CQL)

Q网络的更新应该是软更新还是硬更新?

  • DDPG,BCQ连续版本等连续动作模型的Q值:软更新
    • DDPG论文中提到,使用这种软更新的方式,模型参数和对应的Target值都会缓慢的被更新,有利于保持学习的稳定性
  • DQN,BCQ离散版本等离散动作模型的Q值:硬更新
  • 问题:是因为BCQ本身就是基于以上两个模型实现的吗?(TODO)
  • DQN中目标网络两种常见更新方法对比有针对硬更新和软更新在DQN上分别尝试效果:

    实验结果表明,当目标网络更新间隔 \(C\) 和软间隔更新系数 \(\tau\) 满足 \(\tau C = 1\) 时,DQN算法使用这两种目标网路更新方式的性能是相当的


on-policy和off-policy方法简单对比?

  • 下面是网上经常有人引用的一句话:

    on-policy优点是直接了当,速度快,劣势是不一定找到最优策略。off-policy劣势是曲折,收敛慢,但优势是更为强大和通用

  • 个人理解,这句话前半段关于on-policy本身需要在某些特定场景下才准确,分析如下:
  • “on-policy优点是直接了当,速度快,劣势是不一定找到最优策略。”
    • 为什么说速度快?对训练数据利用不足本身就会导致收敛慢吧?:这里说的速度快是训练时能够直接训练当前策略收集到的状态动作下的值(Q值或策略),直接更新当前策略收集到的状态动作对,可能导致策略快速收敛到局部最优,特别是当探索不充分时,off-policy则不然
    • 不一定找到最优策略的理解:1)由于 on-policy 要求收集数据的行为策略(需要权衡探索和利用)和待优化策略是同一个策略,所以不能过于探索,否则最终学习到的策略不好,从而需要降低探索,减少探索以后导致容易陷入局部最优;2)仅更新当前策略收集到的状态动作对,导致模型快速收敛到某一个局部环境中,再也出不来
    • 理解:on-policy采用初期增加探索,后期减少探索的方式会更好,比如SARSA的更新过程中 \(\epsilon\) 越来越小
  • 实际上,从探索利用的视角看,无论是off-policy和on-policy方法,在训练足够的时间以后,策略都会逐步利用收集到的知识收敛到一个特定的策略,而不再重视探索:
    • 也就是说在训练过程中 ,策略会越来越倾向于利用而不是探索 ,所以容易陷入局部最优
    • 一种思路是将策略的熵添加到目标中或损失函数中,从而尽可能的保证策略始终在探索(比如SAC)

为什么DDPG/SAC是off-policy的?

  • DDPG/SAC是off-policy的,原因如下:
    • Q函数的学习 :DQN、DDPG和SAC三者本质都是基于贝尔曼最优公式迭代Q值的,其中DDPG的策略迭代是最大化Q值,SAC的策略迭代则是最大化Q值和策略对应的熵;他们是off-policy的原因一样的,是因为Q函数都是在学习某个策略 \(\pi_0\) 下对应的Q值,只要TD-Error中的Q值目标 \(r(s,a)+\gamma Q(s’,a’) - Q(s, a)\) 中的 \(a’\) 是策略 \(\pi_0\) 采样的 ,即目标值动作服从策略 \(a\sim\pi_0(\cdot|s’)\)的 即可保证学到的Q值是 \(Q^{\pi_0}(s,a)\),与 \((s,a,s’)\) 本身的采样策略无关(但是最好与当前策略的状态分布差距不要太大,否则容易出现线上线下分布不一致等问题)。随着策略逐步提升到最优策略,Q函数也会收敛到最优策略对应的Q值
      • 注:SAC的Q函数是包含了熵信息的,但这不影响Q值本身的学习策略
    • 策略的学习 :在保证Q函数预估的是当前策略(即截止到目前的最优策略)对应的Q值以后,我们只需要求解一个策略,保证当前策略对应的动作分布下的Q值最大即可,此时有:
      • DDPG :目标是找到一个确定性策略 \(\pi_\theta(s)\),最大化 \(Q(s,\pi_\theta(s))\) (本质可以理解为Q值在策略下的期望 \(\pi_\theta(s)\),确定性策略的期望就是这个策略对应的Q值),可采用梯度直接回传的方式链式求导;
      • SAC-连续动作 :通过随机采样生成动作 \(\tilde{a}\) (重参数法),然后将基于状态动作生成 \(Q(s,\tilde{a})\),从最大化Q值实现梯度传到到策略参数上(本质上是最大化Q值在策略分布上的期望)
      • SAC-离散动作 :则通过玻尔兹曼分布直接得到一个Q值下最优的随机策略(离线动作),具体实现时先生成不同动作下的Q值 \(Q(s,a)\),求Q值在策略 \(\pi(a|s)\) (本质是一个分布)上的期望 \(\sum_a \pi(a|s)Q(s,a) \) (与连续版本本质一致),然后最大化这个期望以实现梯度传导到策略参数上
      • 注意:DDPG/SAC等方法中 ,策略学习的目标是找到使得当前 \(Q(s,a)|a\sim\pi_\theta(s)\) 值最大的策略 \(\pi_\theta\),学习时状态 \(s\) 是从什么策略采样来的无关,即任意给我一个状态 \(s\),目标策略都能使得该状态下的 \(Q\) 值最大化(这里的Q值在学习中拟合目标是在当前策略下的Q值);但普通的AC方法中 ,Actor是直接对Reward的期望求梯度来更新的,这个期望是需要在当前策略下的期望,故而状态和动作都需要是当前状态下采样得到的,否则梯度有偏,而DDPG/SAC中则因为直接最大化Q值(该Q值是当前策略下的Q值)来实现了,绕过了必须保证状态 \(s\) 是当前策略采样得到的这一步了
  • PPO/TRPO是on-policy的,原因则是因为他们每一步的迭代目标是直接找到一个能提升RL代理函数 \(J\) 的更优策略 ,每次迭代都保证策略优于当前策略,在推导过程中,使用MM方法构造代理函数时,要求状态分布于新策略的状态分布差异不能太大 ,最好是当前策略采样的数据更新,生成新策略;(注意,动作分布部分有重要性采样保证,只要能保证准确记录每个动作采样的分布即可通过重要性采样方式恢复)

为什么SARSA和DQN都可以收敛到最优解?

  • 两者的Q值目标都可以表述为: \(r(s,a)+\gamma Q(s’,a’) - Q(s, a)\),两者的 \(Q(s’,a’)\) 都是上一轮的 \(Q\) 值(一般也会使用Q的目标网络 \(Q_{\bar{\theta}}(s’,a’)\),但含义就是上一轮的Q的含义),但两者的 \(a’\) 值对应的策略不同
  • SARSA:
    • 更新目标 : \(a’\) 是按照当前Q值对应的 \(\epsilon\) -Greedy策略采样的(该动作大多以大概率取 \(a’\sim \mathop{\arg\max}_{a’} Q(s’,a’)\),并以一定的小概率随机采样)
    • 样本状态动作分布 :当前策略采样到的状态分布 \(s,a,s’\)
    • 在随机采样概率越来越小的情况下,SARSA最终可以收敛到最优策略
  • DQN:
    • 更新目标 : \(a’\sim \mathop{\arg\max}_{a’} Q(s’,a’)\),相当于没有 \(\epsilon\) -Greedy策略
    • 样本状态动作分布 :历史行为策略采样到的状态分布 \(s,a,s’\)
  • 注意: \(Q(s’,a’)\) 需要是上一轮的Q,才能收敛,不动点定理证明时, \(Q(s’,a’)\) 是上一轮的Q的情况下,可得到最终 \(Q(s’,a’)\) 的Q和 \(Q(s,a)\) 的Q收敛到同一个Q

V值更新如何保证学习到指定策略?

  • V值更新的目标都可以归纳为: \(r+\gamma V(s’) - V(s)\),其中 \(V(s’)\) 是上一轮的V网络,一般使用目标网络 \(V_{\bar{\theta}}(s’)\)
  • \(r\) 来源于什么策略 \(r(s,a)\vert_{a\sim \pi(\cdot|s)}\),V值学习的就是什么策略

对奖励函数进行仿射变换会影响强化学习最优策略吗?

  • 对奖励函数进行放射变化,不影响最优策略(最优价值函数会跟着发生相应的仿射变换),即最优策略不变(Optimal Policy Invariance)
  • 证明:若奖励仿射变换为\(r_t = k \cdot r_t+b\),则最优价值函数仿射变换为
    $$ Q^* = k\cdot Q^* + \frac{b}{1-\gamma} $$
    • 显然Q值对应的最优策略不会发生改变

离散动作、连续动作的使用场景辨析

  • 一般来说,Q-Learning相关方法(DQN等为代表)仅支持离散动作,策略梯度相关大部分方法(SAC、PPO为代表)支持连续动作和离散动作,有部分(DDPG等为代表)仅支持连续动作
  • DDPG本质是不支持离散动作的,但是如果基于DDPG学到的Q网络做离散化动作搜索,也可以作为一种策略(次优策略)
  • PPO和SAC中均需要使用某个动作下对应的概率,连续动作下实际上概率值是0,连续动作的概率值使用的是概率密度值
    • 注:概率密度值(Probability Density Value)是连续概率分布中的一个核心概念,用于描述随机变量在某个特定点附近的相对可能性
  • Google 2018年提出的QT-Opt方法,在连续动作场景中学习Q值,然后使用CEM(Cross Entropy Method)从Q值中提取连续动作

随机策略、确定性策略的使用场景辨析

  • 随机性动作 :策略效果会有波动、能防止某些特定场景(状态观测不全面时)陷入死循环的问题、可解释性和安全性会偏低
  • 确定性动作 :策略效果更稳定、在状态观测不全面时可能陷入死循环、可解释性和安全性也更高些、更利于探索(确定性策略在训练时往往也需要加入随机探索)
    • 状态观测不全面导致陷入死循环的示例:
      • 环境状态情况:
        • o o o o o
        • x x ✓ x x
      • 对应的最优策略应该如下(第二和第四个点观察到的周围状态环境相同,但是最优策略不同):
        • → → ↓ ← ←
        • x x ✓ x x
      • 以上状态中,假设每个点只能观察到上下左右随机相邻点和自己的情况,那么第一行的第二和第四个点状态相同,此时按照确定性策略决策一定陷入循环(因为第一行的第二和第四个点策略必须相同,如论向左还是向右都会出现循环)
      • 这个例子可以用来帮助解释LLM中使用确定性策略(取概率最大的动作)容易陷入循环,产生大量重复的token,LLM中原始token被压缩后不算是状态观测完全的了,此时按照决策确定性容易陷入循环(此时会在相似的压缩空间下输出完全相同的token),加入随机反而使得生成的文本更正常
      • 其他理解:Diffusion中生成是需要采样是不是也是类似LLM的原理?
  • 二者的转换(所有转换方法均会不同程度的影响最优策略,不再是最优决策):
    • 随机策略转确定性策略:1)不直接采用Actor,通过搜索期望奖励最大的动作(连续动作可按照一定的间隔来搜索);2)直接使用Actor,找概率最大的动作(连续动作也有概率最大的动作,高斯分布对应取均值)
    • 确定性策略转随机策略: \(\epsilon\) -Greedy(离散动作)或者加一个方差扰动(连续动作)即可
  • 强化学习的最优解应该是随机策略还是确定性策略?
    • 清华李升波书籍Reinforcement Learning for Sequential Decision and Optimal Control中第六章确定性策略最优的证明和策略建模选型表述(见清华大学李升波教授强化学习书籍《Reinforcement Learning for Sequential Decision and Optimal Control》读书笔记——U6函数近似间接RL

      在训练阶段,应该使用随机策略,因为这样可以更好地探索环境;而在评估阶段,应该使用确定性策略,因为最优策略总是一个确定的策略

      • 最优策略是确定性策略 ,证明:对于任意给定的状态 \(s\),有 \(\int_a \pi(a|s) q^*(s,a) d a \le q^*(s,a^*) \),其中 \(a^* = \mathop{\arg\max}_a q^*(s,a)\)
    • 个人理解:以上描述基本没有问题,但是加一些限定说明会更准确:
      • 状态观测完全的情况下,才可以说最优策略是确定性策略 :假设状态不是完全观测的,可能出现观测值相同,但实际上状态不同的情况,此时同一个部分观测状态对应的最优动作不再是唯一的)
      • 最优动作不唯一时,最优策略也可以是随机策略 :可能存在两个同时最优的确定性策略(决策的不同动作拿到相同的Q值),此时最优策略也可以是随机策略(即最优策略的混合策略)
      • 对于约束优化问题,可能最优策略是随机策略 :如果需要保证动作决策符合某个约束,该约束不在Reward中体现(即Q值无法体现约束),此时可能需要使用随机策略才能保证约束被满足(比如要求决策动作的期望满足一定均值约束,则不能总是执行Q值最大的策略;这里类似于状态不完全观测的情况,假如约束以及约束满足情况可以建模在Reward或者状态中,则可以看成是状态完全观测的情况,此时最优策略也是确定性策略)
      • 理论上,随机策略的搜索空间大于等于确定性策略 :理论上,随机策略可以学出来以概率1执行某个动作,按照随机策略建模也可以学到确定性策略;实际上,随机策略很难真正学到以概率1执行某个动作
      • 对于on-policy场景,需要保证行为策略和学习策略相同,故而无法实现学习策略是确定性策略,行为策略是随机性策略,实际操作中,可以开始引入随机策略,后续逐步变成确定性策略,比如SARSA策略
      • 对于Reward中包含策略熵的方法,无法使用确定性策略(加入熵是避免过拟合,增加探索,确定性策略容易过拟合,其探索性不足)
      • 为何许多优秀的模型都是随机策略模型?因为:1)建模时难以保证观测完全;2)随机性策略能探索到更多状态;3)随机策略不容易过拟合(在对Q估值无法很准确的时候,确定性策略容易过拟合)
  • 补充:关于书籍《Reinforcement Learning for Sequential Decision and Optimal Control》的博客
  • 在SARSA和Q-learning中,为了确保智能体能够在学习过程中充分地探索环境,并且最终收敛到最优策略,策略更新方法需要满足GLIE(Greedy in the Limit with Infinite Exploration,在无限探索极限下的贪心)策略,该策略包括两个特性:
    • 无限探索 :这意味着对于任何状态-动作对(s, a),智能体都有机会以非零的概率去尝试它(不会错过最优策略)
    • 渐进贪心 :随着学习过程的推进,智能体逐渐减少对非最优动作的选择
    • GLIE的一个实现是 \(\epsilon\) 逐渐减小的 \(\epsilon\)-Greedy ,比如可以设定 \(\epsilon = \frac{1}{t}\)

off-policy AC目标和on-policy AC目标等价吗?

  • off-policy AC方法的目标都是类似形式: \(\max_\pi \quad \mathbb{E}_{s\sim \rho^{\beta}(s)}[V^{\pi}(s)]\)
    • 基本含义就是,找一个最优的策略 \(\pi\),使得 \(V^{\pi}(s)\) 在行为策略的状态访问分布下期望最大
  • 实际上,on-policy AC方法的目标是类似形式: \(\max_\pi \quad \mathbb{E}_{s\sim \rho^{\pi}(s)}[V^{\pi}(s)]\)
    • 基本含义就是,找一个最优的策略 \(\pi\),使得 \(V^{\pi}(s)\) 在 策略 \(\pi\) 的状态访问分布下期望最大
  • 答案是如果策略空间包含所有策略,则两者等价,否则不等价
    • 如果策略模型空间是无限大的,一定存在最优的策略 \(\pi^*\) ,使得任何一个状态 \(s\) 下都有 \(V^{\pi^*}(s) \ge V^{\pi}(s), \forall{\pi}\) 成立,证明是:对于任意给定的状态 \(s\),有 \(\int_a \pi(a|s) q^*(s,a) d a \le q^*(s,a^*) \),其中 \(a^* = \mathop{\arg\max}_a q^*(s,a)\),此时,我们定义一个策略为:对任意状态 \(s\),都取该状态下的 \(a^*\) 即可
    • 如果能找到一个最优的策略 \(\pi^*\),使得在任何一个状态 \(s\) 下都有 \(V^{\pi^*}(s) \ge V^{\pi}(s)\) 成立,那么,我们找到策略 \(\pi^*\) 就同时是off-policy和on-policy的最优解
      • 这种情况下,如果能找到 \(\pi^*\),则两者等价(注意:即使存在 \(\pi^*\),模型也不一定能学到,如果在off-policy和on-policy设定下学到的难度不同,甚至策略模型空间受限,拟合不了最优的策略 \(\pi^*\),也不能说两者目标等价)
    • 如果模型空间限制导致模型空间中找不到一个最优的策略 \(\pi^*\),使得在任何一个状态 \(s\) 下都有 \(V^{\pi^*}(s) \ge V^{\pi}(s)\) 成立,那么,策略的选择就会根据状态访问分布有所取舍,更倾向于状态分布概率高的那部分状态,off-policy AC方法的目标与on-policy AC目标一定不等价,在状态分布不同的情况下,找不到一个共同的最优解 \(\pi^*\)
      • 此时,两者不等价,行为策略中出现越多的状态,越收到重视
    • 现实生活中,SAC和DDPG为什么可以正常运行且拿到不错的收益呢?
      • off-policy方法本身样本利用率更高些
      • SAC和DDPG都是在off-policy中使用,如果即时丢弃过早的数据,那行为策略分布和最优策略差异不会太大,且online的训练确保了模型见过几乎所有状态
      • 大部分场景中,只要策略模型空间够大,应当都可以认为存在最优的策略 \(\pi^*\),使得在任何一个状态 \(s\) 下都有 \(V^{\pi^*}(s) \ge V^{\pi}(s)\) 成立,或近似成立
  • 如果这里模型找不到最优的策略 \(\pi^*\),则这个问题和DQN的问题还不等价,DQN主要问题是训练模型时存在off-policy导致的线上线下分布不一致的问题,off-policy AC从目标上就存在线上线下不一致的问题,同时训练模型时也有线上线下不一致的问题(都是线上线下不一致,但是off-policy AC还多了目标上的不一致,是从根本上定义导致的偏差,理论上更严重些)

TRPO可以用确定性策略建模吗?

  • 不可以,理由是无法进行重要性采样了,无法推导出TRPO的更新公式,从这个视角看,PPO和TRPO都不可以

为什么A2C算法不需要目标网络(Target网络)?

Target Critic网络的作用和成本

  • Target Q 或 Target V 网络的引入主要优点是:防止网络波动
    • DQN初始的Target Q网络 :用于固定网络参数,防止Q网络更新的时候目标也一直发生改变,训练不收敛
    • 注:Double DQN(DDQN)中还有其他作用 :具体做法是从当前策略选动作,从Target网络取Q-value,缓解DQN的Q值高估问题(注意:DDQN相对普通DQN不需要增加网络)
  • Target Q 或 Target V 网络的引入主要有两个成本模型结构复杂,存储和计算成本增加收敛速度慢
    • 模型结构复杂,存储和计算成本增加 :需要多维护一个网络,存储和计算成本都会增加
    • 收敛速度慢 :Target网络意味着延迟更新,让模型更稳定的同时,也会导致模型收敛速度变慢
  • 一般来说,需要Target Q/V 网络的地方都是为了防止网络波动 ,这种网络波动一般来自于自举(bootstrap)(比如来自贝尔曼方程更新中存在自举现象)
    • SAC(2V+2Q+1策略)的版本中,V网络更新依赖Q网络,Q网络更新依赖V网络,所以增加一个Target V网络,防止学习目标频繁波动导致Q网络波动
      • 注:Q网络是Twin Q网络,不是Target Q网络
    • SAC(4Q+1策略)的版本中,Q网络更新依赖Q网络自身,所以增加一个Target Q网络,防止学习目标频繁波动导致Q网络波动
      • 注:4个Q网络是2个Twin Q网络及他们两各自对应的Target Q网络
    • DDPG中,Q网络的更新依赖Q网络自身

为什么A2C/PPO算法存在自举也不需要Target Critic网络?

  • PPO的Critic网络更新分为几种
    • 仅使用累计收益的场景:V网络的更新不依赖V网络,V网络的学习是个普通的、基于收集到的Reward标签的监督学习,不存在自举现象,所以不需要使用Target V网络。如果使用Target V网络反而会增加存储和计算成本并降低收敛速度
    • 使用TD-Error的场景:将TD-Error \(r_t + \gamma V(s_{t+1}).detach() - V(s_t)\) 作为V网络的损失函数,此时则会出现自举现象,此时可以考虑使用Target V网络,但收敛速度会变慢
      • 注:经测试,此时使用Target V网络会导致训练速度变慢。说明在PPO中,即使存在自举现象,V网络也不会频繁波动(这不仅仅是因为on-policy,还跟PPO算法有关,因为SAC和DDPG在on-policy场景下也需要Target Q网络)
  • TODO:为什么A2C/PPO即使使用了TD-Error作为损失函数(存在自举现象),也不需要Target Critic网络?
    • 猜想1:因为V网络更新不敏感?Q网络更敏感?(注:SVC的V网络版本,本质也是为了防止Q值目标波动太快?)
    • 猜想2:因为DQN、DDPG和SAC都包含贝尔曼最优算子/公式的思想,而PPO/A2C不包含?

需要/不需要Target网络的本质原因

  • 结论:因为DQN、DDPG和SAC包含贝尔曼最优算子/公式的思想,而PPO/A2C不包含贝尔曼最优算子/公式的思想
  • 贝尔曼最优算子/方程下,自举更容易导致波动,目前需要使用Target网络的模型有,DQN,DDPG,SAC
    • DQN :相当于每一轮训练完Q网络以后,自动存在一个最大化当前Q值的最优策略,即使得当前策略下,Q值最大化;
    • DDPG :本质与DQN类似,也是学习一个Q网络以后,用策略网络学习一个确定性策略使得当前策略对应的Q值最大化,没有直接使用,但隐含了贝尔曼最优算子/方程的思想;
    • SAC :可以看做是DDPG的随机策略版本,本质也是一样的,学习到一个Q以后,使用策略网络去学习一个随机性策略使得当前随机策略下,Q值最大化;
    • 以上三者的Target目标 \(Q(s’,a’)\) 都隐含了最优策略对应的动作 \(a’ \approx \arg\max_{a’} Q(s’,a’)\)
  • 而PPO和A2C方法都没有贝尔曼最优策略的思想,他们的更新都是通过策略梯度法推导的梯度公式得到的,策略更新的目标也不是直接最大化当前Q值,而是借助Q值计算梯度,从而提升策略自己
    • 注:其实PPO和A2C策略的更新都会跟Q值或者A值(与Q值相关)有关,但PPO和A2C方法更新策略时不是直接最大化Q值的,而是借用Q值作为一个梯度权重,所以不能算是隐含了贝尔曼最优算子/公式的思想

其他说明

  • 一些文章也会提到PPO中也可以使用Target V网络来实现慢更新,或者使用Clip操作,以帮助稳定训练

一些相关的实验测试现象及结论

  • 现象1on-policy场景+PPO/A2C,使用 Target V 网络后,最终结果也可以收敛(且足够长的步骤后能收敛到最优策略),但是收敛速度变慢了(\(\tau\)值越小,收敛越慢)
    • 注意PPO不能直接改成 off-policy 训练 ,计算GAE需要每次得到的都是有序的一个episode才可以!off-policy 的样本状态之间不是同一个episode的有序结果(off-policy算法一般仅需要考虑一步 return 即可)
  • 现象2off-policy场景+SAC/DDPG,如果不使用 Target Q 网络(或 Target Q 网络更新速度(\(\tau\))值过大),都会导致DDPG效果非常差(其中SAC稍好一些)
  • 现象3on-policy场景+SAC/DDPG,如果包含 Target Q 网络 ,使用 on-policy 方法训练能收敛到好的模型(10-100倍episode内,不如off-policy的效果,但有收敛趋势),但需要的 episode 数量远远大于 off-policy 的训练方式;
  • 现象4on-policy场景+SAC/DDPG,如果去掉Target Q网络(或者调大Target Q网络更新速度) ,使用 on-policy 方法训练都无法收敛到好的模型(比随机效果好一些,然后一直在一个比较差的为止波动,学不到更多东西)
    • 注:此时还能观察到SAC和DDPG的target_value值是收敛到一个较差的值,持续在较差的位置波动,不收敛,方差较大(注:理解是因为Q网络波动,导致策略一直没学好,进而导致收集不到好的样本,Q网络也就学不好了);相比之下,正常的强化学习模型训练下,target_value值的值都应该是缓慢上升并最终收敛的过程(注:中间可能会先掉下来,但是最终肯定是缓慢收敛的,且收敛后方差较小)

Actor Critic框架中,网络参数应该共享吗?

  • 本质上可以将Actor和Critic两个任务类比为监督学习中多任务学习的模型,共享层能互相利用对方的信息,也容易被两个任务的梯度互相干扰,下面是一些通用的经验:
    • 应该共享的:稀疏高维的参数层,比如 Embedding 层可以共享,此时两者可以互相弥补在高维上的稀疏
    • 不应该共享的:稠密的参数层
  • 实际使用中还是以实验结果为准,不同场景效果不同

为什么强化学习训练总是不稳定?

  • 强化学习中的一个不稳定来源是:因为强化学习训练过程中策略一直在变化,状态分布也会随着策略不断变化
  • 特别地,强化学习中同时出现下面三个因素(也称为强化学习稳定性死亡三角(Deadly Triad Issue))时,更容易导致强化学习训练不稳定
    • 函数近似(Function Approximation) :函数近似能够处理大规模或连续状态空间的问题,但它会引入估计误差,导致值函数偏离真实值
    • 自举(Bootstrapping) :自举提高了计算和样本效率,但会导致估计值依赖于其他估计值,从而可能产生不一致性和震荡
    • 异策略训练(Off-policy Learning) :离策略学习可以利用历史数据(如经验回放),提高样本利用率,但可能导致目标策略与行为策略的分布不匹配,从而引入方差增大和收敛性问题
    • 总结:函数近似引入误差,自举放大误差,异策略训练使误差在策略不匹配的情况下进一步恶化,当三者同时出现时,误差会不断累积,导致值函数估计偏离真实值,最终使训练过程崩溃
  • 如何缓解“死亡三角”问题?
    • 目标网络(Target Networks) :在DQN中引入目标网络,稳定Q值的更新
    • 经验回放(Experience Replay) :减少样本间的相关性,使训练更稳定
    • 同策略学习(On-policy Methods) :如PPO、A2C,避免离策略带来的分布偏移问题
    • 正则化方法 :如保守Q学习(CQL),约束Q值估计范围,防止过度外推
    • 多步TD学习(n-step TD) :平衡自举和蒙特卡罗方法的优缺点,提高稳定性

为什么DDPG/TD3有Target Actor网络,而PPO/SAC没有?

副标题:什么场景下需要Target Actor网络?

  • DDPG/TD3需要用到当前策略来取下一个状态的动作来评估Q网络TD目标,此时使用的是Target Actor网络;
    • DDPG原始论文中提到,DDPG中Target Q和Target Actor网络都是必须的,有利于保证训练不发散(即训练稳定,直观理解是,如果策略被更新的同时也用来计算Q网络的TD目标,可能导致目标来回波动,网络不收敛的现象);当然,论文中提到这种设置可能导致训练收敛慢一些,但是稳定性的收益超过了这个地方
  • PPO/SAC也需要用到当前策略来取下一个状态的动作来评估Q网络TD目标,为什么不需要Target Actor网络呢?
    • SAC离散版本下,是通过采样动作来影响目标Q值的,不直接影响目标Q值;
    • SAC连续版本下,Actor网络看似是直接输出动作,且参与目标Q值计算的,但实际上是经过采样的(重参数化采样 ,可以回传梯度的采样方式)
    • PPO离散版本和连续版本下,均只需要学习V值,理论上Actor网络仅参与采样动作与环境交互,不参与生成目标V值
  • 总结:增加Target Actor网络的成本是学习会变慢;优点是学习会更稳定

什么场景下需要Twin Q网络?

  • Q值/V值更新时,如果用到Q网络,则需要使用Twin Q网络,可以降低对Q值的高估
  • Actor更新时也需要吗?什么时候需要呢?为什么SAC原作者开源代码没有使用,而其他实现使用了?
    • SAC(2V+2Q+1策略)版本:更新Q网络时用了Twin Q;更新Actor网络时仅使用其中一个网络(SAC(V)论文作者开源实现
    • SAC(4Q+1策略)版本:更新Q网络时用了Twin Q;更新Actor网络时使用两个Q的均值(SAC论文作者开源实现
    • 理解:Actor网络更新时使用均值可能更好些,相当于Bagging的思想,Actor更新的方向同时要让两个Q都更大

如何理解Bellman算子?

  • 函数、泛函、算子对比:
    • 函数:从一个集合的元素映射到另一个集合的元素
    • 泛函:从一个函数空间映射到数值空间(如实数或复数集)
    • 算子:从一个函数空间映射到另一个函数空间
  • Bellman算子:
    • 一般指从Q函数 \(Q(s,a)\) 映射到另一个Q函数 \(Q’(s,a)\)
    • 定义了一种函数映射到函数的映射关系

on-policy算法一般会使用多个epoch吗?

  • 一般的on-policy算法上,比如普通的Policy Gradient(AC或REINFORCE),理论上有问题,迭代一次以后梯度就不同了
  • 对于PPO这种有重要性采样的形式的损失函数,理论上可以更新多个epoch,主要原因有以下两点:
    • 更新一次epoch后,只要距离不是特别大,理论上不违反新旧策略距离
    • 更新一次epoch后,旧策略没有变(样本没有变化,收集样本使用的行为策略还是旧策略);此时新策略变了,但重要性采样的可以保证梯度更新没有问题
  • 对于PPO,使用多次更新可以提升样本利用率,但为避免过拟合陷入局部最优,也不建议更新太多轮次;实践时,不同场景、不同学习率下的最优epoch_num超参可能不同,原始 PPO 论文中提到使用过3,10,15这样的数字

on-policy算法可用Adam优化器?

  • 问题补充:Adam会使用到之前的梯度,但是on-policy要求梯度更新是当前策略采样,且基于当前策略计算出来的,在on-policy更新时可以使用Adam吗?
  • 回顾Adam优化器:
    • \(\theta_{t} = \theta_{t-1} - \frac{\lambda}{\sqrt{\tilde{v}_t+\epsilon}} \tilde{m}_t\)
    • \(\tilde{v}_t=\frac{v_{t}}{1-\beta_{1}^{t}}\)
    • \(\tilde{m}_t=\frac{m_{t}}{1-\beta_{2}^{t}}\)
    • \(\lambda\) 是外层学习率,实际使用中,常常可以通过指数衰减、固定步长衰减、余弦退火衰减等学习率衰减策略更新
    • 梯度的指数衰减: \(m_{t} = \beta_{2}m_{t-1}+(1-\beta_{2})g_{t}\)
    • 梯度平方的指数衰减: \(v_{t} = \beta_{1}v_{t-1}+(1-\beta_{1})g_{t}^{2}\)
  • 答案是可以的,Adam 优化器会在优化过程里利用梯度的一阶矩估计(均值)和二阶矩估计(方差)来动态地调整每个参数的学习率更新方向 ,但是不会改变梯度计算的原始公式,即每一步计算当前梯度时,原始公式不变
    • Adam 优化器利用之前的梯度信息调整学习率部分 \(\frac{\lambda}{\sqrt{\tilde{v}_t+\epsilon}}\),不会改变当前梯度方向,不用担心
    • Adam 一阶动量部分 \(\tilde{m}\) 会改变梯度的方向 ,但是跟常规的监督学习模型一样 ,这里仅仅是一种加快模型收敛的优化手段,本质上每一步的梯度还是根据原始公式计算出来的(这一点对on-policy的强化学习或监督学习都一样)

策略迭代和值迭代谁更优?

  • 策略迭代(Policy Iteration) :一次策略迭代包含策略评估(Policy Evaluation)策略提升(Policy Improvement)两个步骤,多次策略迭代至算法收敛找到最优策略
    • 策略评估(Policy Evaluation) :基于贝尔曼期望方程进行迭代至收敛
    • 策略提升(Policy Improvement) :基于策略评估结果优化当前策略
  • 值迭代(Value Iteration) :基于贝尔曼最优方程进行迭代,找到最优值函数,从而找到最优策略
  • 两者最终都会收敛到最优策略,此时都满足贝尔曼最优方程
  • 值迭代更像是一个贪心策略,收敛快,实现成本低,但是容易陷入局部最优;策略迭代收敛慢,但是一步步优化,更扎实,最终效果往往由于值迭代
    • 从经验上看,值迭代可以更快收敛,但效果一般不如策略迭代,比如DQN收敛更快,而A2C前期收敛慢,但后期效果往往高于DQN

策略梯度法中,计算奖励时为什么要丢弃过去时间片的奖励?

  • 理论上过去时间片的奖励加不加都不影响最终效果
  • 过去时间片的奖励期望为0,但方差不为0,加入以后只会影响策略的学习

折扣因子是否在鼓励较短路径?

  • 补充问题:在只有最终步有固定奖励的场景,假设奖励固定(比如二值奖励 0 or 1)且只在最后一步有 Reward,但到达最终状态的路径长度不同,此时使用小于 0 的折扣因子是否是在鼓励较短路径?
  • 结论:
    • 当 \(\gamma < 1\) 时,模型倾向于鼓励大于 0 的短路径和鼓励小于 0 的长路经
      • 当奖励为正值时,策略更倾向于短路径
      • 当奖励为负值时,策略更倾向于长路径(注意部分使用 Reward 归一化的场景也会导致一些奖励从正值或 0 值变成负值)
    • 当 \(\gamma = 1\) 时,模型没有长度倾向
  • 补充说明:
    • 一般来说,为了防止智能体浪费步骤(比如不断绕圈),在 Reward 设计中,我们常常会将中间步骤的每一步作为惩罚加入,这也是在鼓励短路径,但这里我们暂时不考虑这种情况(假设中间步骤没有任何奖励)
  • 注:当前的 LLM 训练中,一般都设置 \(\gamma=1\),即本身不鼓励也不抑制序列长度

Vanilla Policy Gradient 中的一些数值分析

  • 在考虑折扣因子 \(\gamma\) 时,当前状态到结束的累计折扣奖励为:
    $$ G_t = \sum_{t’=t} \gamma^{t’-t}r_{t’} $$
  • 由于奖励只发生在最后一步,则有:
    $$ G_t = \gamma^{T-t}r_{T} $$
    • 其中 \(T\) 是轨迹长度,这里我们假定 \(r_{T}\) 是固定的
    • 显然,如果轨迹长度 \(T\) 是不固定的,则对同样的第 \(t\) 步,轨迹越长,对应的 \(\gamma^{T-t}\) 越小
    • 当 \(\gamma = 1\) 时,累计奖励不变,所以模型本身没有倾向
  • 当奖励为正时(\(r_{T} > 0\)):
    • 此时 \(T\) 越大,累计奖励 \(G_t\) 越小,模型更倾向于 \(T\) 更小的短路径
  • 当奖励为负时(\(r_{T} < 0\)):
    • 此时 \(T\) 越大,累计奖励 \(G_t\) 越大,模型更倾向于 \(T\) 更大的长路径
  • 举例:
    • 奖励为正时的一个简单的例子:
      • 对于相同的状态 \(s_t\),假设有两个动作 \(a_1,a_2\),他们最终都会取得成功(最后一步奖励为 1),但是动作 \(a_1\) 对应的路径动作 \(a_2\) 对应的路径长 ,则动作 \(a_1\) 对应的累计奖励动作 \(a_2\) 对应的累计奖励小 ,模型会倾向于选择动作 \(a_2\)
    • 奖励为负时的一个简单的例子:
      • 同上设定,当奖励为负时,对相同的奖励,模型倾向于长路经(此时的累计奖励更大)

PPO(with GAE)

  • 当考虑使用 Advantage 时,或考虑 GAE 下的 PPO 时,问题可能会变得更复杂
    $$ A_t = r_t + V(s_{t+1}) - V(s_t) $$
    • 由于在当前设定下 \(r_t = 0\),所以:
      $$ A_t = V(s_{t+1}) - V(s_t)$$
    • 考虑到
      $$ V(s_t) = \mathbb{E}[G_t] $$
      • 则可以进一步去掉期望进行简单推导得到(不严谨)
        $$ A_t = \gamma^{T-(t+1)}r_{T} - \gamma^{T-t}r_{T} = (\gamma^{T-(t+1)}-\gamma^{T-t}) r_{T}$$
    • 显然,此时 \(t\) 不变的情况下 \(T\) 越大,两者差异 \((\gamma^{T-(t+1)}-\gamma^{T-t})\) 越小
      $$ \gamma^{T-(t+1)}-\gamma^{T-t} = \color{red}{\gamma^{T-t-1}}(1-\gamma) $$
      • \((1-\gamma)\) 为固定值,\(\color{red}{\gamma^{T-t-1}}\) 随 \(T\) 的增大逐渐变小
  • 基本结论
    • 当 \(\gamma < 1\) 时,(与 Policy Gradient 相似)模型倾向于鼓励大于 0 的短路径和鼓励小于 0 的长路经
      • 当奖励为正时(\(r_{T} > 0\)):
        • 此时 \(T\) 越大,\(A_t = (\gamma^{T-(t+1)}-\gamma^{T-t}) r_{T}\) 越小
      • 当奖励为负时(\(r_{T} < 0\)):
        • 此时 \(T\) 越大,\(A_t = (\gamma^{T-(t+1)}-\gamma^{T-t}) r_{T}\) 越大
    • 当 \(\gamma = 1\) 时,模型没有长度偏好

PPO 的连续版本和离散版本策略熵分别如何实现?

PPO 连续版本

  • 连续版本的熵一般用蒙特卡洛近似

    1
    2
    def compute_entropy(log_probs):
    entropy = -log_prob.mean() # 蒙特卡洛估计熵
  • 此时无法枚举所有动作,不使用蒙特卡罗近似难以计算熵

  • 由于数据就是当前策略采样的(PPO一次数据多轮更新下可能存在微小误差),所以对数据上的 -log_prob直接求均值就是熵的近似估计

PPO 离散版本中使用熵的原始定义估计

  • 遵循熵的定义直接定义即可:

    1
    2
    def compute_entropy(probs):
    return -torch.sum(probs * torch.log(probs + 1e-10), dim=-1) # 加1e-10防止log(0)
  • 部分实现时模型可能输出的是 log_probs,此时为:

    1
    2
    def compute_entropy(log_probs):
    return -torch.sum(log_probs.exp() * log_probs, dim=-1) # 加1e-10防止log(0)
  • 注:x.log() == torch.log(x)(以自然数为底的对数);x.exp() == torch.exp(x)

  • 为什么离散版本不继续采样蒙特卡罗估计?

    • 因为对所有动作求和更准确,且离散场景下该动作是可行的

对照 SAC 中熵的计算方式

  • 回顾SAC离散策略的的更新目标
    $$
    J_\pi(\phi) = \mathbb{E}_{s_t \sim \mathcal{D}, a_t\sim\pi_\phi} [ \alpha \log \pi_\phi(a_t \vert s_t) - Q_\theta(s_t, a_t) ]
    $$
  • 回顾SAC连续动作的策略更新目标 ,首先需要采用重参数法建模连续动作 \(a_t = f_\phi(\epsilon_t; s_t)\),然后有:
    $$
    J_\pi(\phi) = \mathbb{E}_{s_t \sim \mathcal{D}, \epsilon_t \sim \mathcal{N}}[\alpha \log \pi_\phi(f_\phi(\epsilon_t;s_t)\vert s_t) - Q_\theta(s_t, f_\phi(\epsilon_t; s_t))]
    $$
  • SAC 实现时,与 PPO 中类似,连续版本用蒙特卡罗估计,离散版本积分求出
  • 问题:SAC 方法是 off-policy 的,连续版本中,使用蒙特卡罗估计得到的熵是有偏的?
    • 回答:不是有偏的,SAC 中的数据是从其他策略采样来的,但是计算熵时使用的动作是从当前策略分布采样出来的(重参数法)
    • PS:可以从更新公式中看到,更新 Policy 网络时,仅状态 \(s\) 是从历史数据集中采样的,更新 Critic 网络时,则使用的是从历史数据采样的 \((s,a)\)

RL 中 Reward 的线性变换如何影响梯度?

对于做 Reward 归一化的场景

  • 如果做了 Reward 归一化,理论上减去均值并除以方差,可以将 Reward 的 线性变化消去,此时不会造成任何影响,但要求线性变化的系数要大于 0
  • 补充说明:因为对于 \(Y = kX + b\),有 \(X, Y\) 分别做归一化得到的结果是不一定相等的
    • 当 \(k>0\) 时:归一化后的结果完全一样 (Advantage 完全一样)
    • 如果 \(k < 0\):归一化后的结果互为相反数(符号相反,绝对值相同)
    • 当 \(k=0\) 时:\(Y\) 为常数 0
  • 证明:
    • 假设对 \(X\) 进行归一化(Z-score standardization),结果记为 \(Z_X\):
      $$Z_X = \frac{X - \mu_X}{\sigma_X}$$
    • 对于 \(Y = kX + b\):
      $$
      \mu_Y = E[kX + b] = kE[X] + b = k\mu_X + b \\
      Var(Y) = Var(kX + b) = k^2 Var(X) = k^2 \sigma_X^2 \\
      \sigma_Y = \sqrt{k^2 \sigma_X^2} = |k|\sigma_X
      $$
    • 对 \(Y\) 进行归一化,结果记为 \(Z_Y\):
      $$Z_Y = \frac{Y - \mu_Y}{\sigma_Y}$$
    • 将 \(Y, \mu_Y, \sigma_Y\) 代入公式:
      $$Z_Y = \frac{(kX + b) - (k\mu_X + b)}{|k|\sigma_X}$$
    • 化简分子(\(b\) 被抵消):
      $$Z_Y = \frac{kX - k\mu_X}{|k|\sigma_X} = \frac{k(X - \mu_X)}{|k|\sigma_X}$$
    • 整理公式,提取出 \(Z_X\) 的部分:
      $$Z_Y = \frac{k}{|k|} \cdot \left( \frac{X - \mu_X}{\sigma_X} \right)$$
    • 即:
      $$Z_Y = \text{sign}(k) \cdot Z_X$$

对于未做 Reward 归一化的场景 - Policy Gradient

REINFORCE
  • 对于普通策略梯度法,因为累计收益是梯度系数,故而会放大或缩小梯度系数(Reward 变化时需要调整学习率)
    $$
    \begin{align}
    \nabla_\theta J(\theta) &\approx \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n) \nabla_\theta \log \pi_\theta(a_t|s_t) \\
    &\approx \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} G_t^n \nabla_\theta \log \pi_\theta(a_t|s_t)
    \end{align}
    $$
PPO 等使用 Advantage 的策略梯度法
  • 对于 PPO,由于梯度更新系数与 Advantage 有关,而 Advantage 可能受到 Reward 影响,故而需要考虑这个 Reward 本身对 Advantage 的影响
  • 结论先行:Reward 线性变换会对 Advantage(优势函数)的数值产生直接影响,但对最终训练效果的影响还取决于是否使用了 Advantage Normalization(优势归一化)
  • GAE 估计下的 \(A_t\) 是 \(\delta_t\) 的加权和:
    $$ A_t = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l} $$
    • \(\delta_t\) 为 TD Error
      $$ \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) $$
    • 其中 \(V(s)\) 是状态价值函数,它拟合的是期望回报(Expected Return)
    • 为了简单起见,下面拆成缩放和平移两种情况进行分析
  • 情况 A: 对 Reward 进行缩放 (乘以常数 \(c\))
    • 假设 \(r’_t = c \cdot r_t\)
    • 1)Value Function 变化 :因为 \(V\) 拟合的是累积 Reward,所以理想情况下,新的 Value Function \(V’\) 会收敛到 \(c \cdot V\)
    • 2)TD Error 变化
      $$ \delta’_t = c \cdot r_t + \gamma (c \cdot V(s_{t+1})) - (c \cdot V(s_t)) = c \cdot \delta_t $$
    • 3)Advantage 变化
      $$ A’_t = c \cdot A_t $$
      • 结论 :Advantage 的数值会严格按照比例 \(c\) 缩放
  • 情况 B: 对 Reward 进行平移 (加减常数 \(b\))
    • 假设 \(r’_t = r_t + b\)
    • 1)Value Function 变化
      $$ V’(s) = \mathbb{E}[\sum \gamma^k (r_{t+k} + b)] = V(s) + \sum \gamma^k b = V(s) + \frac{b}{1-\gamma} $$
      • 注:这是在无限视界下的理论值,如果是有限步长,则是一个随步数变化的偏移量
    • 2)TD Error 变化
      $$
      \begin{align}
      \delta’_t &= (r_t + b) + \gamma (V(s_{t+1}) + \frac{b}{1-\gamma}) - (V(s_t) + \frac{b}{1-\gamma}) \\
      &= r_t + \gamma V(s_{t+1}) - V(s_t) + \left( b + \frac{\gamma b}{1-\gamma} - \frac{b}{1-\gamma} \right) \\
      &= r_t + \gamma V(s_{t+1}) - V(s_t) + \left( b + \frac{b(\gamma - 1)}{1-\gamma} \right) \\
      &= r_t + \gamma V(s_{t+1}) - V(s_t) + \left( b - b \right) \\
      &= r_t + \gamma V(s_{t+1}) - V(s_t) = \delta_t \\
      \end{align}
      $$
    • 3)Advantage 变化
      $$ A’_t = A_t $$
      • 结论 :理论上,对 Reward 进行加减常数操作,Advantage 的值是不变的(因为常数项在差分计算中被抵消了)
附录:对最终训练的影响
  • Advantage Normalization:标准的 PPO 实现(如 OpenAI Baselines, Stable Baselines3, CleanRL 等)在将 Advantage 输入到 Policy Loss 之前,都会进行 归一化处理
    $$ A_{norm} = \frac{A - \text{mean}(A)}{\text{std}(A) + \epsilon} $$
    • 注:在标准的 PPO 实现中(如 OpenAI Baselines, Stable Baselines3, CleanRL),Advantage 的归一化通常 不是 使用滑动平均(Running Mean/Std) ,而是基于 当前采集的整个 Batch(Rollout Buffer) 进行统计计算的
  • 如果是缩小(乘以小于 1 大于 0 的值)
    • 如果开启了归一化:\(\frac{c \cdot A}{c \cdot \text{std}} = \frac{A}{\text{std}}\)。完全没有影响
    • 如果未开启归一化:Advantage 变小,Policy Gradient 的梯度变小,相当于降低了 Policy 的学习率
  • 如果是平移(比如减去 5)
    • 理论上 Advantage 不变,所以 Policy 的更新方向不变
    • 但是(重要隐患) :Value Network 的拟合难度会剧增
      • 假设 \(\gamma = 0.99\),Reward 减去 5,意味着 Value Function 的目标值整体偏移了 \(\frac{-5}{1-0.99} = -500\)
      • 神经网络通常初始化在 0 附近。如果 Target Value 突然变成了 -500,Value Loss 会变得巨大
      • 这会导致 Value Network 的梯度非常大,如果 Policy 和 Value 共享部分网络层(Shared Backbone),巨大的 Value Loss 梯度会破坏 Policy 的特征提取能力,导致训练崩溃
    • 此时变化很大的原因是每一步都有 Reward,所以整体被放大了,如果中间 Reward 都为 0,只有最终的一个 Reward,则平移 -5 带来的累计 Reward 变化也只有 -5
附录:PPO 最佳实践建议:
  • Reward Scaling(推荐) :将 Reward 乘以一个系数,使其方差维持在较小范围(例如 1 左右),这对神经网络训练非常有利
  • Reward Clipping(推荐) :直接将 Reward 截断在 \([-10, 10]\) 之间,防止异常值破坏训练
  • 避免 Reward Shifting :尽量不要对 Reward 做大的加减平移(除非是为了处理生存奖励等特定逻辑),因为这会通过 \(\frac{1}{1-\gamma}\) 放大 Value 的数值范围
  • 始终使用 Advantage Normalization :这能让 PPO 对 Reward 的缩放不敏感,保证训练的稳定性

对于未做 Reward 归一化的场景 - Q-Learning

  • Q-Learning 学习的是 Reward 的绝对值,最终收敛后使用的策略是 argmax,所以理论上平移不会影响 RL 的最终结论
  • 除了 Reward 太大可能导致初始化值到收敛到最优 Reward 需要一点时间,外,不会有别的影响
  • 注意:Policy Gradient 中的 Value 学习一样,随意调整 Reward 对价值函数是一个挑战

不同算法下 Critic 损失的定义方式

  • Actor Critic 方法的 Critic 损失函数:
    $$
    Loss_{\text{critic}} = \sum (r_t + \gamma Q^{\bar{w}}(s_{t+1}, a_{t+1}) - Q^{w}(s_{t}, a_t)) ^ 2
    $$
  • A2C(Advantage Actor Critic)算法引入了优势函数(Advantage),这也是 A2C 名字的由来,A2C 算法中,Critic 网络的损失函数:
    $$
    Loss_{\text{critic}} = \sum (r_t + \gamma V^{\bar{w}}(s_{t+1}) - V^{w}(s_{t})) ^ 2
    $$
  • PPO(with GAE)中,Critic 也是通过最小化 MSE 来逼近回报估计值 \(V_{target}\)(注:这个目标相对 A2C 中的 \(r_t + V(s_t)\) 方差更小)
    • Critic 的拟合目标 \(V_{target}\) 通常被设定为 \(V_{target} = V_{old}(s_t) + A^{GAE}_t\)(即估计的真实回报 Returns)
      $$
      Loss_{\text{critic}} = \sum (V_{old}(s_t) + A^{GAE}_t - V^{w}(s_{t})) ^ 2
      $$
    • PPO 中 Critic 的一般更新过程为:
      • step 1: Rollout 并最终得到奖励
      • step 2: 计算每个 token 步骤的 TD-Error(\(\delta_t\))
      • step 3: 利用 \(\delta_t\) 计算 GAE 优势
      • step 4: 最小化 \(Loss_{\text{critic}}\) 更新 Critic 参数