Q和V的概念
评估动作的价值,我们称为Q值:它代表了智能体选择这个动作后,一直到最终状态奖励总和的期望;
评估状态的价值,我们称为V值:它代表了智能体在这个状态下,一直到最终状态的奖励总和的期望
Q和V可以相互转化。
一个状态下的V(s)=E(Q(s, ai)), 是对s下各动作的Q的均值, 即
V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q ( s , a ) = E ( Q ( s , a ) ) V_\pi(s) = \sum_{a\in A} \pi(a|s) Q(s, a) = E(Q(s, a)) Vπ(s)=∑a∈Aπ(a∣s)Q(s,a)=E(Q(s,a))
因此,V值是和策略有关的。就像同一个残局,水平高的人觉得大有可为;而水平低的人觉得已经没救了。
与V值不同,Q值和策略并没有直接相关,而与环境的状态转移概率相关,而环境的状态转移概率是不变的。当采用一个行动a以后,从当前状态s到下一个状态s’有一个转移函数,记录了到不同状态的概率。Q值就是下个step在转移函数上的期望。
Q ( s , a ) = R s a + γ ∑ s ′ P s s ′ a V π ( s ′ ) Q(s, a) = R_s^a + \gamma\sum_{s'} P_{ss'}^a V_\pi(s') Q(s,a)=Rsa+γ∑s′Pss′aVπ(s′) 这边的 R s a R_s^a Rsa是当下的奖励, γ \gamma γ是折扣率,把未来很多步奖励,折算到当前节点。
3种模式
关于如何在一个连续过程中做出决策,有两大类方案:value based model和policy based model, 以及他们的结合体actor-critic模式。
policy based model和value based model的区别:
学习目标
value based model:主要目标是学习一个价值函数,如状态价值函数或动作价值函数 ,用于评估在某个状态下或采取某个动作后的长期累积奖励的期望,间接找到最优策略,即选择使价值函数最大化的动作。
policy based model:直接学习一个策略函数,它表示在状态下采取动作的概率分布,目标是找到能够直接最大化累积奖励的策略。
策略选择
value based model:在给定状态下,通过比较不同动作的价值函数值来选择具有最大价值的动作,是一种确定性的策略选择方式,即选择价值最高的动作作为当前的执行动作。
policy based model:根据策略函数所给出的概率分布来随机选择动作,具有一定的随机性,在探索和利用之间有不同的平衡方式,有助于发现更多可能的最优策略,尤其是在动作空间较大或环境具有不确定性的情况下。
收敛速度与稳定性
value based model:在一些简单环境或状态、动作空间较小的情况下,收敛速度可能较快,但在面对复杂的高维状态空间和连续动作空间时,可能会遇到维度灾难,导致收敛困难或不稳定,容易受到 “维数灾难” 的影响。
policy based model:通常在处理高维状态空间和连续动作空间时表现出更好的稳定性和收敛性,能够更有效地利用样本数据进行学习,但收敛速度可能相对较慢,尤其是在训练初期。
应用场景
value based model:适用于状态和动作空间相对较小、离散,且最优策略具有明显的价值差异的问题,如经典的网格世界问题、简单的游戏等,在这些场景中,能够快速准确地找到最优策略。
policy based model:更适合于处理连续动作空间的问题,如机器人的运动控制、自动驾驶等领域,以及需要在探索和利用之间进行精细平衡的复杂环境,能够更好地适应环境的不确定性和动态变化。
actor critic模型结合了上述的特点。相当于演员在演戏actor的同时有评论家critic不断的指点打分,继而使演员演得越来越好,这里充当评论家的便是价值函数的估计了。Actor基于概率选行为(即policy based model),critic基于actor的行为评判得分reward(value based model)(同样可以用新旧state做均方误差更新自己的参数),然后actor再根据critic的评分修改选行为的概率。
VALUE BASED MODEL
value based model的核心问题是如何得知各个状态下的V值或者Q值。有了V值或者Q值,我们就可以做出决策。由于Q和V可以相互转化,因此一般情况下有其一即可。
Q还是V?
至于是估算V值还是Q值,则主要是由不同方法的目标、应用场景和问题特性所决定的。
在一些环境中,状态本身就能很好地反映当前局势的优劣,不需要考虑具体动作。例如,在简单的棋盘游戏中,某个棋子的位置状态可以大致评估出当前玩家的优势程度。通过估算 ,可以直接了解处于某个状态时的长期价值,从而辅助决策。这种情况下,估算V就可以了。
而在很多实际问题中,不仅要知道状态的价值,还需要知道在每个状态下采取不同动作的价值。估算Q(s,a)可以提供更详细的信息,帮助智能体在每个状态下做出更精确的动作选择。例如,在机器人导航问题中,机器人处于某个位置(状态)时,不同的移动方向(动作)会带来不同的结果,通过Q值可以明确每个动作的优劣。
估算方法(MC和TD)
就估算方法来讲,大体可以分为两类:MC(蒙特卡洛)和TD(时序差分)。
MC估计
MC方法介绍
MC的方法其实就是每个步骤都随机采取行为, 通过多次采样得到完整的轨迹,然后根据这些轨迹计算每个状态的实际回报,将这些回报的平均值作为状态价值的估计。具体来说,对于一个状态s,在多次采样中,记录每次到达该状态后获得的累积回报数学公式: G t G_t Gt ,然后取平均值作为V(s)的估计值。
例如通过MC来估计V值。
V ( S t ) ← V ( S t ) + α ( G t − V ( S t ) ) V(S_t) \leftarrow V(S_t) + \alpha(G_t - V(S_t)) V(St)←V(St)+α(Gt−V(St))
MC的优点是简单好理解,且不需要对环境的动态进行建模,是一种无偏估计方法。
缺点是方差较大,需要大量的采样才能得到准确的估计。
此外每一次游戏,都需要先从头走到尾,再进行回溯更新。如果最终状态很难达到,则要很久才能更新一次V值。即采样困难,一定程度上加剧了方差大的问题。
TD估计
MC每次都要走完太麻烦了,有没有快点的方式呢?有的,那就是用时序差分来做。
https://zhuanlan.zhihu.com/p/110132710
TD算法对MC进行了改进。
- 和蒙特卡罗(MC)不同:TD算法只需要走N步。就可以开始回溯更新。
- 和蒙特卡罗(MC)一样:需要先走N步,每经过一个状态,把奖励记录下来。然后开始回溯。
我们先估计B状态的V,并假设B状态的V值是对的,那么,通过回溯计算,我们就能知道A状态V的更新目标了。本质上就是通过R来迭代V的估计函数
例如用时序差分TD估算状态V值
TD又可以分为TD(0)和TD(lambda).
TD(0)只使用一步的即时奖励和下一个状态的估计价值来更新当前状态的价值。
TD(lambda)是 TD (0) 的推广,使用多步的奖励来更新当前状态的价值,并引入一个衰减因子来平衡不同步数的回报信息。因此它既考虑了短期的即时奖励,也考虑了长期的未来奖励。当lambda=1时,TD(1)等效MC
TD方法的优点是计算效率高,不需要等待完整的轨迹结束,适用于在线学习。缺点是存在一定的偏差。
TD(lambda)能够在偏差和方差之间进行权衡,根据lambda的取值不同,可以得到不同的估计效果
估值方法(表格法/函数逼近)
从另一个角度来讲,估算方法又可以分为表格法和函数逼近法。表格法是一种无模型的强化学习算法,通过维护并迭代一张V(s)或者Q(s, a)表来实现。
函数逼近法则是使用深度学习的方式来近似Q或者V函数。这个是现在主流方法,能够处理高维连续状态空间,在很多复杂的游戏和实际问题中取得了很好的效果,但训练过程可能不稳定,需要进行精细的调参。
估算Q的方法
Q-learning 和 Sarsa
用TD + 表格法来估算Q值。
理论上, Q ( S , A ) ← Q ( S , A ) + α [ R t + 1 + γ V ( S t + 1 ) − Q ( S , A ) ] Q(S,A) \leftarrow Q(S,A) + \alpha [R_{t+1} + \gamma V(S_{t+1}) - Q(S, A)] Q(S,A)←Q(S,A)+α[Rt+1+γV(St+1)−Q(S,A)]
这边使用Q(S’, A’)来近似代替V(St+1). 但是使用哪个Q(a)呢? SARSA和QLEARNING方向不一样。
- 在相同策略下产生的动作At+1。这就是SARSA。
- 选择能够产生最大Q值的动作At+1。这就是Qlearning。
所以,Q的估算方式如下
DQN
TD + 神经网络 来估算Q值。
估算V的方法
评估V也可以用表格法和深度网络来实现。
核心的公式: V ( S t ) ← V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] V(S_t) \leftarrow V(S_t) + \alpha[R_{t+1} + \gamma V(S_{t+1}) - V(S_t)] V(St)←V(St)+α[Rt+1+γV(St+1)−V(St)]
如果用深度网络,则是价值网络(Value Network)。 L o s s = M S E ( R t + 1 + γ V ( S t + 1 ) − V ( S t ) ) Loss = MSE(R_{t+1} + \gamma V(S_{t+1}) - V(S_t)) Loss=MSE(Rt+1+γV(St+1)−V(St))
POLICY BASED MODEL
和value based model不同,policy based model直接学习策略本身,并从策略输出的分布中采样来决定行为。策略通常表示为: π ( a ∣ s ) \pi(a|s) π(a∣s),即给定状态s时采取动作a的概率分布。
Policy Gradient 策略梯度法
https://zhuanlan.zhihu.com/p/110881517
可以理解成MC+神经网络来学习策略
Policy Gradient 使用一个参数化的策略 π ( a ∣ s ) \pi(a|s) π(a∣s)
这个 R ( τ ) R(\tau) R(τ)和之前的G是差不多的。是MC走完全程以后倒推回来的。
那么G值如何计算呢?
G t = R t + γ G t + 1 , G N = R N , N 为最后一个行为 G_{t} = R_{t} + \gamma G_{t+1},G_N = R_N, N为最后一个行为 Gt=Rt+γGt+1,GN=RN,N为最后一个行为
对G进行归一化处理后,训练效果会更好
那么G值如何计算呢?
Actor-Critic (AC)模型
关于Actor-Critic的分类,有3种表述,一种本质。
说法1:AC模型是value model 和policy model的结合。
说法2:AC模型是TD+神经网络来学习策略
说法3:AC模型是用Critic网络来计算Q函数值,并用Q函数来代替R
Actor-Critic,其实是用了两个网络:
两个网络有一个共同点,输入状态S: 一个输出策略,负责选择动作,我们把这个网络成为Actor; 一个负责计算每个动作的分数,我们把这个网络成为Critic。
从另一个角度来看,如果我们从PG策略出发,在PG策略中,如果我们用Q函数来代替R,同时我们创建一个Critic网络来计算Q函数值,那么我们就得到了Actor-Critic方法。Actor参数的梯度变为:
此时的Critic根据估计的Q值和实际Q值的平方误差进行更新,对Critic来说,其loss为
A2C模型(Advantege Actor Critic模型)
AC中用critic预估Q有什么问题呢?如果行为价值都是正向的,可能会掉进正数陷阱。而如果给Q减去均值,也就是V,就可以对Q进行相对的标准化,使其值有正有负。
这个函数叫优势函数(advantage function), 这种方式叫advantege norm。这个函数算出来的值就叫做TD-error,可以用来对策略actor进行更新。
因此 T D − e r r o r = Q ( S t , a ) − V ( S t ) TD-error = Q(S_t, a) - V(S_t) TD−error=Q(St,a)−V(St)
由之前可知, Q ( S , a ) Q(S, a) Q(S,a)可以用 γ ∗ V ( S t + 1 ) + R ( s , a ) \gamma * V(S_{t+1}) + R(s, a) γ∗V(St+1)+R(s,a)代替,那么 T D − e r r o r = γ ∗ V ( S t + 1 ) + R ( s , a ) − V ( S t ) TD-error = \gamma * V(S_{t+1}) + R(s, a) - V(S_t) TD−error=γ∗V(St+1)+R(s,a)−V(St)
此时,critic模型就不是对Q进行预估,而是对td error进行预估了。
因此梯度就变为了:
这样的话我们需要有两个网络分别计算状态-动作价值Q和状态价值V,因此我们做这样的转换
这样会是增加一定的方差,不过可以忽略不计,这样我们就得到了Advantage Actor-Critic方法,此时的Critic变为估计状态价值V的网络。因此Critic网络的损失变为实际的状态价值和估计的状态价值的平方损失
PPO算法
PPO算法全称 Proximal Policy Optimization,是由 OpenAI 于 2017 年提出的一种无模型强化学习算法。该算法在A2C算法上进一步进行了改进。
限制新策略与旧策略之间的差异。
重要性采样
使用adam来进行优化。
这边是完整的PPO算法相比于A2C算法的区别
所以当PPO做了以下的设置, PPO和A2C是等同的:
- 用A2C的RMSprop optimizer和相应的设置
- 用num_steps = 5 (也叫number of steps, sampling horizon, unroll length)
- 不用GAE,设置GAE的lambda=1
- 设置number of epochs k=1 和不用mini-batches
- 不用advantage normalization
- 不用value function clipping
PPO - CLIP
A2C模型没有对策略更新的幅度进行特别的约束。这可能导致在某些情况下,策略更新幅度过大,使得新策略与旧策略差异过大,从而影响学习的稳定性。针对该问题,PPO 提出了两种主要的实现方式:PPO - PCL(Penalized Clipped Objective)和 PPO - CLIP(Clipped Surrogate Objective),其中 PPO - CLIP 更为常用。
所谓的PPO-CLIP,就是在更新策略的时候,限制更新幅度范围,在 [ 1 − ε , 1 + ε ] [1-\varepsilon, 1+\varepsilon] [1−ε,1+ε]之间
在线策略和离线策略
在讲重要性采样之前,首先要搞清楚为什么A2C只能使用当前轮收集到的数据。这里有一个在线策略和离线策略的
为了方便讨论,我们先理清楚两个概念:
- 行为策略——不是当前策略,用于产出数据。
- 目标策略——会更新的策略,是需要被优化的策略
如果两个策略是同一个策略,那么我们称为On Policy,在线策略。如果不是同一个策略,那么Off Policy,离线策略。
例如现在我们的智能体用的策略 10,需要更新到 11。如果算法只能用 10版本的产生的数据来更新,那么这个就是在线策略;如果算法允许用其他版本的数据来更新,那么就是离线策略。
例如PG,就是一个在线策略。因为PG用于产生数据的策略(行为策略),和需要更新的策略(目标策略)是一致。AC也是在线策略。
而DQN则是一个离线策略。我们会让智能体在环境互动一定次数,获得数据。用这些数据优化策略后,继续跑新的数据。但老版本的数据我们仍然是可以用的。也就是说,我们产生数据的策略,和要更新的目标策略不是同一个策略。所以DQN是一个离线策略。
这其中的差异,主要是Q值和策略无关,而V值是和策略有关的。所以对于只要用到Q的地方,如DQN,就是离线策略,而要用到V和策略的地方,就必须要使用当前策略的数据来更新,就是在线策略。
那么为什么PG这些就不能是离线策略呢?因为在线策略中,策略的更新总幅度是和策略执行动作的次数,或者说策略对动作的预测值相关的。
假设,我们已知在同一个环境下,有两个动作可以选择。现在两个策略,分别是P和B:
P: [0.5,0.5] B: [0.1,0.9]
现在我们按照两个策略,进行采样;也就是分别按照这两个策略,以S状态下出发,与环境进行10次互动。获得如图数据。那么,我们可以用B策略下获得的数据,更新P吗?
答案是不行,我们可以回顾一下PG算法,PG算法会按照TD-error作为权重,更新策略。权重越大,更新幅度越大;权重越小,更新幅度越小。
但大家可以从如下示意图看到,如果用行动策略B[0.1,0.9]产出的数据,对目标策略P进行更新,动作1会被更新1次,而动作2会更新9次。虽然动作A的TD-error比较大,但由于动作2更新的次数更多,最终动作2的概率会比动作1的要大。
那么,如果有办法能够根据策略对动作的采用概率来对TD ERROR进行调整,是不是就可以用历史数据来对现在的目标策略进行更新了?
重要性采样
A2C 通常在每次更新时使用一轮收集到的数据,然后丢弃这些数据,重新收集新的数据进行下一轮更新。这种方式导致样本的利用率相对较低,尤其是在数据收集成本较高的环境中,需要花费更多的时间和资源来收集足够的数据进行训练。PPO 使用了重要性采样技术,可以多次重复使用同一批收集到的数据进行更新。
所谓重要性采样,就是上述在线策略和离线策略中提到的,使用策略对动作的采用概率来对TD ERROR进行调整。还是之前的例子,现在两个策略,分别是P和B,对两个动作的概率分别为
P: [0.5,0.5] B: [0.1,0.9]
两个动作的td error分别是 1.5和1。
我们现在想用策略B积累的历史数据来更新P。那么有重要性权重
I W = P ( a ) / B ( a ) IW = P(a)/ B(a) IW=P(a)/B(a)
即目标策略出现动作a的概率 除以 行为策略出现a的概率
从另一个角度来看,重要性采样,计算的是等概率情况下的TD ERROR, 即TD-ERROR/B(a)
GRPO算法
GRPO算法全称Group Relative Policy Optimization, 即群体相对策略优化算法
GRPO算法也是PG算法改进而来。可以看做是采用了PPO算法优点的PG算法。
最大的区别在于,PPO通过预估V来计算奖励,而GRPO通过采样来直接获取奖励;这样GRPO就可以去掉对V进行预估的critic网络。优点是去除了critic网络,缺点是采样成本高,要走完全程才能获取奖励,即又回到了PG算法的MC模式
同时,GRPO保留了PPO中的重要性采样和PPO-CLIP技术,提高了旧策略数据的复用能力并提高了策略更新的稳定性。
另外,为了限制策略的更新幅度,GRPO还引入了新旧策略间的KL散度,从参数层面限制了策略的更新幅度。