model和policy的区别
- Model:Mathematical models of dynamics and reward
- Policy: Function mapping agent’s states to actions
model-based和model-free的区别
有模型学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;免模型学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。强化学习四件套:状态集合S、动作集合A、状态转移函数P和奖励函数R,当智能体知道状态转移函数P和奖励函数R的准确表达时候,就能知道某一状态下执行某一动作能带来的奖励和环境的变化。但是实际中智能体并不是很容易知道马尔科夫决策过程中所有元素的,所以多数情况下都是免模型学习
策略迭代和价值迭代的区别
在基于策略迭代的强化学习方法中,智能体会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励; 而在基于价值迭代的强化学习方法中,智能体不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作)。
基于价值迭代的强化学习算法有Q-Learning、Sarsa等,而基于策略迭代的强化学习算法有策略梯度(Policy Gradients)算法等。此外,演员-评论家(Actor-Critic)算法同时使用策略和价值评估联合做出决策,其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。
蒙特卡洛方法和时序差分方法是无偏估计吗?另外谁的方差更大呢?为什么?
蒙特卡洛方法是无偏估计,时序差分方法是有偏估计;蒙特卡洛方法的方差较大,时序差分方法的方差较小,原因在于时序差分方法中使用了自举(生成下一状态依赖了前面的状态),实现了基于平滑的效果,导致估计的价值函数的方差更小。
能否简单说一下动态规划方法、蒙特卡洛方法和时序差分方法的异同点?
相同点:都用于进行价值函数的描述与更新,并且所有方法都基于对未来事件的展望计算一个回溯值。
不同点:蒙特卡洛方法和时序差分方法属于免模型方法,而动态规划属于有模型方法;时序差分方法和蒙特卡洛方法,因为都是免模型的方法,所以对于后续状态的获知也都是基于试验的方法;时序差分方法和动态规划方法的策略评估,都能基于当前状态的下一步预测情况来得到对于当前状态的价值函数的更新。
另外,时序差分方法不需要等到试验结束后才能进行当前状态的价值函数的计算与更新,而蒙特卡洛方法需要与环境交互,产生一整条马尔可夫链并直到最终状态才能进行更新。时序差分方法和动态规划方法的策略评估不同之处为免模型和有模型,动态规划方法可以凭借已知转移概率推断出后续的状态情况,而时序差分方法借助试验才能知道。
蒙特卡洛方法和时序差分方法的不同在于,蒙特卡洛方法进行了完整的采样来获取长期的回报值,因而在价值估计上会有更小的偏差,但是也正因为收集了完整的信息,所以价值的方差会更大,原因在于其基于试验的采样得到,和真实的分布有差距,不充足的交互导致较大方差。而时序差分方法则相反,因为它只考虑了前一步的回报值,其他都是基于之前的估计值,因而其价值估计相对来说具有偏差大方差小的特点。
三者的联系:对于TD( λ \lambda λ)方法,如果 λ = 0 \lambda=0 λ=0,那么此时等价于时序差分方法,即只考虑下一个状态;如果 λ = 1 \lambda=1 λ=1,等价于蒙特卡洛方法,即考虑 T−1 个后续状态直到整个试验结束。
马尔科夫决策过程(Markov Decision Process,MDP)
强化学习五件套:状态集合State、动作集合Action、状态转移函数P和奖励函数Reward,折扣因子 γ \gamma γ
图片转载自 https://datawhalechina.github.io/easy-rl/#/chapter2/chapter2_questions&keywords
请问如果数据流不具备马尔可夫性质怎么办?应该如何处理?
如果不具备马尔可夫性,即下一个状态与之前的状态也有关,若仅用当前的状态来求解决策过程,势必导致决策的泛化能力变差。为了解决这个问题,可以利用循环神经网络对历史信息建模,获得包含历史信息的状态表征,表征过程也可以使用注意力机制等手段,最后在表征状态空间求解马尔可夫决策过程问题。
转载自https://datawhalechina.github.io/easy-rl/#/chapter2/chapter2_questions&keywords
Bellman Equation
如何简化马尔科夫奖励过程的价值函数呢?我们可以把价值函数分解为两部分:
- 即时奖励
- 加了衰减权重 γ \gamma γ的后续状态的价值函数 γ v π ( S t + 1 ) \gamma v_\pi(S_{t+1}) γvπ(St+1)
以下转载自 https://spinningup.openai.com/en/latest/spinningup/rl_intro.html?highlight=bellman#bellman-equations:
Bellman公式的推导
Belman最优公式如何证明是收敛的
简单来说Belman最优公式对应的算子是完备度量空间(也叫完备空间,空间中的任何柯西序列都收敛在该空间之内)上的一个压缩映射,根据巴拿赫不动点定理(也叫压缩映射定理或压缩映射原理),可以保证压缩映射不动点的存在性和唯一性。详细参考 贝尔曼最优方程收敛性证明
手写一下第n步的价值函数更新,另外,当 n 越来越大时,价值函数的期望和方差是分别变大还是变小呢?
转载自 https://datawhalechina.github.io/easy-rl/#/chapter2/chapter2_questions&keywords
On-policy和Off-policy的区别
根据产生实际行为的策略与更新价值的策略是否相同,相同的是On-policy,不同的是Off-policy,注意SARSA是On-policy,Q-learning是Offline-policy
时序差分与蒙特卡洛
时序差分强化学习是指在不清楚马尔可夫状态转移概率的情况下,以采样的方式得到不完整的状态序列,估计某状态在该状态序列完整后可能得到的收益,并通过不断的采样持续更新价值。与此不同,蒙特卡洛强化学习则需要经历完整的状态序列后,再来更新状态的真实价值。例如,你想获得开车去公司的时间,每天上班开车的经历就是一次采样。假设今天在路口A遇到了堵车,那么,时序差分强化学习会在路口A就开始更新预计到达路口B、路口C……,以及到达公司的时间;而蒙特卡洛强化学习并不会立即更新时间,而是在到达公司后,再修改到达每个路口和公司的时间。时序差分强化学习能够在知道结果之前就开始学习,相比蒙特卡洛强化学习,其更快速、灵活
时序差分目标和时序差分误差
Q-learning和SARSA
Q-learning是非常经典的时序差分强化学习算法,也是基于价值迭代的强化学习算法。下图中的
γ
\gamma
γ是折扣系数,
γ
\gamma
γ越大,说明原发越重视长期回报。
α
\alpha
α是更新比例(学习速率),
α
\alpha
α越小,估值变化越慢越平滑,越能参考更长时间的平均值。不管Q-learning还是SARSA,都采用
ϵ
\epsilon
ϵ-greedy,也就是
ϵ
\epsilon
ϵ的概率进行探索,初始时可以让
ϵ
\epsilon
ϵ大些让模型充分理解环境。
更新公式如下,注意下图公式中
m
a
x
a
t
+
1
Q
(
s
t
+
1
,
a
t
+
1
)
max_{a_{t+1}}Q(s_{t+1},a_{t+1})
maxat+1Q(st+1,at+1)中
Q
(
s
t
+
1
,
a
a
+
1
)
Q(s_{t+1},a_{a+1})
Q(st+1,aa+1)其实累积了
Q
(
s
t
+
2
)
Q(s_{t+2})
Q(st+2)等等,实际上就是对未来导向的更加现实的估计。。。(这个更好的估计-
Q
(
s
t
,
a
t
)
Q(s_{t},a_{t})
Q(st,at))*
α
\alpha
α就是不断调整这个误差
关于Q-learning和SARSA的对比:
- 最重要的区别是上图的更新公式的区别,差别就是max
- SARSA是On-policy,Q-learning是Offline-policy
- Q-learning比较激进,容易陷入到短期内「中500万彩票」的决策中
SARSA和SARSA( λ \lambda λ)
Sarsa属于单步更新法,也就是说每执行一个动作,就会更新一次价值和策略。如果不进行单步更新,而是采取n步更新或者回合更新,即在执行了n步之后再来更新价值和策略,这样就得到了n步Sarsa。具体来说,对于Sarsa,在t时刻其价值的计算公式为
而对于n步Sarsa,n步收获为:
手动推导一下策略梯度公式的计算过程
深度Q网络中的两个技巧————目标网络和经验回放,其具体作用是什么呢?
DQN系列
DQN简单来说就是价值函数近似,弄个深度网络和MSE来拟合Q,同时还随机了一把经验回放,这是2013年版本的主要工作
2015年版DQN
多了个target网络,在一段时间内使拟合的标签相对稳定,从而使主网络更新慢一些
Double DQN
弄两个网络Qa和Qb,在学习估值的时候使用max来做,从而一定程度上降低了过估计的可能性
Dueling DQN
把Q拆成了状态估值函数V和动作优势估值函数A,在更新的时候给A一个约束让A的均值为0。
Prioritized Replay
不光是replay experience的sampling方法,也会改training process
Multi-Step
在replay experience的时候不止取一步,改成取多步,可以看成是MonteCarlo和Time Difference的结合
Noisy Net
每次和环境互动(每个episode)之前,都给Q加个noise,然后用这个固定的noise和游戏互动,直到游戏结束才换noise
Distributional Q-function
Q function实际上是accumulated reward的期望,是个均值,Distributional Q-function的思路是把这个均值拆成一个distribution,用这个distribution来表示动作
DQN系列如何处理连续动作?
- 对动作进行采样,当然这不是一个非常精确的方案,因为我们没有办法进行太多的采样
- 梯度上升,实际上就是 a = arg max a Q ( s , a ) a=\argmax \limits_{a} Q(s, a) a=aargmaxQ(s,a),将a参数化,但是运算律显然很大
- 设计网络结构:
- 不使用深度Q网络,使用DDPG(deep deterministic policy gradient),在连续控制领域经典的强化学习算法,是深度Q网络在处理连续动作空间的一个扩充方法。具体地,从命名就可以看出,“深度”表明使用了深度神经网络;“确定性”表示其输出的是一个确定的动作,可以用于连续动作环境;“策略梯度”代表的是它用到的是策略网络,并且每步都会更新一次,其是一个单步更新的策略网络。其与深度Q网络都有目标网络和经验回放的技巧,在经验回放部分是一致的,在目标网络的更新上有些许不同。
深度Q网络中随机性策略和确定性策略有什么区别吗?
Deterministic Policy Gradient Algorithms
关于随机性策略和确定性策略解释最好的是Deterministic Policy Gradient Algorithms这篇论文,下面写写自己从这篇文章中理解的一些观点:
在policy gradient theorem中,stochastic policy gradient既对动作积分,也对state积分。下图公式(2),
p
π
(
s
)
p^\pi(s)
pπ(s)表示动作s的分布,
π
θ
\pi_\theta
πθ表示策略的分布,如果是策略是某种神经网络的形式,
θ
\theta
θ就是神经网络的参数,
Q
π
Q^\pi
Qπ表示state-action value,再次强调,在stochastic policy gradient,需要对动作a和状态s同时积分:
等到了stochastic actor critic中,梯度变为下图公式(3)。和公式(2)相比,只是把
π
\pi
π换成了
ω
\omega
ω
其中公式(3)中
Q
ω
Q^\omega
Qω对
Q
π
Q^\pi
Qπ的近似,同时当满足1)
Q
ω
Q^\omega
Qω是线性的 2) w是MSE近似时,
Q
ω
Q^\omega
Qω对
Q
π
Q^\pi
Qπ的近似就没有bias,原文中准确的描述如以下文字:
从公式(3)的stochastic online actor critic演进到了下图公式(4) (5)中的stochastic offline actor critic,刚才online的策略叫做
π
\pi
π,这时离线从trajectories中搜集的策略叫做
β
\beta
β,由于是两个分布不同的策略,所以公式(4) (5)中用到了重要性采样
所以刚才公式(2)(3)(4)(5)都是需要对状态动作同时积分,他们都是stochastic,也就是随机性策略。下面开始确定性策略Deterministic,其实出发点就是遇到动作不是离线变量而是连续状态的情况(例如车拐多大弯等),策略提升就变成了下面的公式(6)(7)。下面Deterministic中第k个时刻的
μ
k
\mu^k
μk就相当于stochastic的
π
\pi
π,这时的好处是不需要对动作积分了,公式(6)来个梯度链式法则变成了公式(7)。公式(7)和公式(2)相比最重要的区别就是二重积分变成了一重,同时
∇
θ
log
π
θ
(
a
∣
s
)
\nabla_\theta\log \pi_\theta (a|s)
∇θlogπθ(a∣s)变成了
∇
θ
μ
θ
(
s
)
\nabla_\theta\mu_\theta(s)
∇θμθ(s)
接下来文章的重头戏是来了三个Theorem,统称为Deterministic Policy Gradient Theorem:
- 其中Theorem1是说如果上述公式(7)中的 ∇ θ μ θ \nabla_\theta\mu_\theta ∇θμθ和 ∇ a Q μ k \nabla_aQ^{\mu_k} ∇aQμk可微,那么 ∇ θ J \nabla_\theta J ∇θJ就存在
- Theorem2是说stachostic策略的极限形式刚好就是确定性策略
- Theorem3是说和stochastic actor critic中的approximator类似,确定性策略也可以得到符合compatible条件的approximator
文章剩下的部分就是给出了On-Policy Deterministic Actor-Critic、Off-Policy Deterministic Actor-Critic、compatible off-policy deterministic actorcritic (COPDAC) algorithm的形式和实验。
关于这部分的理解最好直接看原文,下面转述几个博客,一些写的不太好
- 解释比较完整的英文博客:https://medium.com/geekculture/introduction-to-deterministic-policy-gradient-dpg-e7229d5248e2
- 【【中英字幕】这不愧是最优质的【强化学习】视频教程! AlphaGo创始人David Silver带你一起学习强化学习!!!-人工智能/机器学习/强化学习】https://www.bilibili.com/video/BV1M14y1P7JL?p=7&vd_source=e260233b721e72ff23328d5f4188b304 中policy gradient的那一章
- 叶强的笔记,参考2的视频写的,部分有点乱: https://zhuanlan.zhihu.com/p/28348110
- 黄伟的笔记,部分有点乱: https://zhuanlan.zhihu.com/p/85171746
- 深入浅出强化学习:原理入门,第202页
经验回放池的作用
对于连续动作的控制空间和离散动作的控制空间,如果我们都采取策略网络,应该分别如何操作?
你是否了解过分布的分布式深度确定性策略梯度算法(distributed distributional deep deterministic policy gradient,D4PG)呢?
双延迟深度确定性策略梯度(TD3)
虽然 DDPG 有时表现很好,但它对于超参数和其他类型的调整方面经常很敏感,DDPG常见的问题是已经学习好的 Q 函数开始显著地高估 Q 值,然后导致策略被破坏,因为它利用了 Q 函数中的误差。
Soft Actor-Critic (SAC)
SAC算法的前身 SAC算法的前身包括TD3(Twin Delayed DDPG)和DDPG算法。TD3算法在DDPG算法的基础上引入了双网络和延迟更新,进一步提升了算法的性能。SAC算法在TD3算法的基础上进一步拓展,引入了熵优化和自适应温度参数等技术,以适应更复杂的任务。
- 熵优化:SAC算法通过最小化策略的熵来优化策略。熵是一个度量策略的不确定性的指标,通过最小化策略的熵,可以使策略更加均衡和多样化。这有助于提高算法对于不同环境和任务的适应性。
- 自适应温度参数:SAC算法引入了自适应温度参数α,通过优化温度参数的选择,可以在最大化预期累积奖励和最小化策略熵之间取得平衡。自适应温度参数能够更好地适应不同任务和环境,提高算法的性能。
Actor-Critic 经典架构
转载自 https://zhuanlan.zhihu.com/p/628406958
Advantage Actor Critic (A2C)
A2C和AC相比实际上多了一个advantage,转载自: https://huggingface.co/learn/deep-rl-course/unit6/advantage-actor-critic
- Actor, a policy function parameterized by theta: π θ ( s ) \pi_\theta(s) πθ(s)
- Critic, a value function parameterized by w:
q
w
^
(
s
,
a
)
\hat{q_w}(s,a)
qw^(s,a)
A3C (Asynchronous advantage actor-critic)
前文讲到,神经网络训练时,需要的数据是独立同分布的,为了打破数据之间的相关性,DQN等方法都采用了经验回放的技巧。然而经验回放需要大量的内存,打破数据的相关性,经验回放并非是唯一的方法。另外一种是异步的方法,所谓异步的方法是指数据并非同时产生,A3C的方法便是其中表现非常优异的异步强化学习算法。
为什么使用优势函数
常见的平衡探索与利用的方法
TRPO(Trust Region Policy Optimization)
原论文有个中文版https://zhuanlan.zhihu.com/p/26308073的讲解,基本解释了TRPO的4个技巧,李宏毅的视频 https://www.bilibili.com/video/BV1XP4y1d7Bk?p=5&vd_source=e260233b721e72ff23328d5f4188b304 对这块的解释很直观,蘑菇书(https://datawhalechina.github.io/easy-rl/#/chapter5/chapter5)有对李老师的笔记整理,下面把TRPO的4个技巧做个整理
技巧一:重要性采样(Importance Sampling)
E
x
∼
p
[
f
(
x
)
]
=
E
x
∼
q
[
f
(
x
)
p
(
x
)
q
(
x
)
]
=
∫
f
(
x
)
p
(
x
)
d
x
E_{x \sim{p}}[f(x)]=E_{x \sim{q}}[f(x)\frac{p(x)}{q(x)}]=\int f(x)p(x)dx
Ex∼p[f(x)]=Ex∼q[f(x)q(x)p(x)]=∫f(x)p(x)dx
重要性采样要求p和q的差距不能太大,否则方差暴增,采样运气不好会采样偏。原论文中的Lemma证明了expected discounted reward在p和q有KL约束情况下是有下届的
技巧二和技巧三:做近似
- 下图里 A θ ′ ( s t , a t ) A^{\theta^{'}}(s_t,a_t) Aθ′(st,at)和 A θ ( s t , a t ) A^{\theta}(s_t,a_t) Aθ(st,at)做了近似
-
p
θ
(
s
t
)
p_{\theta}(s_t)
pθ(st)和
p
θ
′
(
s
t
)
p_{\theta^{'}}(s_t)
pθ′(st)也做了近似,这俩实在不好采样
技巧四:平均KL散度代替最大KL散度
基于异策略的重要性采样中的数据是从 θ \theta θ中采样出来的,从 θ \theta θ换成 θ ′ \theta^{'} θ′ 有什么优势?
近端策略优化中的KL散度指的是什么?
本质来说,KL散度是一个函数,其度量的是两个动作(对应的参数分别为 θ \theta θ和 θ ′ \theta^{'} θ′)间的行为距离,而不是参数距离。这里的行为距离可以理解为在相同状态下输出动作的差距(概率分布上的差距),概率分布即KL散度。
PPO(Proximal Policy Optimization)
GAE(Generalized Advantage Estimation)
几个重要的记号:
- 单步优势估计 A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) = r t + 1 + γ V ( s t + 1 ) − V ( s t ) A(s_t,a_t)=Q(s_t,a_t)-V(s_t)=r_{t+1}+\gamma V(s_{t+1})-V(s_t) A(st,at)=Q(st,at)−V(st)=rt+1+γV(st+1)−V(st),也有人写成 A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) = r t + γ V ( s t + 1 ) − V ( s t ) A(s_t,a_t)=Q(s_t,a_t)-V(s_t)=r_{t}+\gamma V(s_{t+1})-V(s_t) A(st,at)=Q(st,at)−V(st)=rt+γV(st+1)−V(st)。写成 r t + 1 r_{t+1} rt+1是为了继承上面Bellman Equation的写法,写成 r t r_{t} rt是为了和下面的 δ t \delta_t δt保持一致,不管是 r t r_t rt还是 r t + 1 r_{t+1} rt+1都表示从t到t+1时获得的那个奖励
- δ 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)是t到t+1的TD Error,如果是t+l到t+l+1的TD Error那么就是 δ t + l = r t + l + γ V ( s t + l + 1 ) − V ( s t + l ) \delta_{t+l}=r_{t+l}+\gamma V(s_{t+l+1})-V(s_{t+l}) δt+l=rt+l+γV(st+l+1)−V(st+l)
- 多步的优势估计实际上就是把单步的优势估计给加起来,如果直接硬着头皮加就是 δ t + δ t + 1 + . . . \delta_t+\delta_{t+1}+... δt+δt+1+...。来自论文Asynchronous Methods for Deep Reinforcement Learning的贡献把 δ t \delta_t δt的权重前面又多了一个 λ \lambda λ,最终就成了 A t ^ G A E ( λ , γ ) = δ t + ∑ l = 1 T − 1 ( γ λ ) l δ t + l \hat{A_t}^{GAE(\lambda,\gamma)}=\delta_t+\sum_{l=1}^{T-1}(\gamma\lambda)^l\delta_{t+l} At^GAE(λ,γ)=δt+∑l=1T−1(γλ)lδt+l,值得注意的是,写成 A t ^ G A E ( λ , γ ) = ∑ l = 0 T − 1 ( γ λ ) l δ t + l \hat{A_t}^{GAE(\lambda,\gamma)}=\sum_{l=0}^{T-1}(\gamma\lambda)^l\delta_{t+l} At^GAE(λ,γ)=∑l=0T−1(γλ)lδt+l其实不是很严谨,因为 0 0 0^0 00有些极限定义是0,有些极限定义是1,来自Proximal Policy Optimization Algorithms干脆就展开了。所以 λ \lambda λ是TD Error不同步数之间的衰减因子, γ \gamma γ是TD Error内部的衰减因子。
关于这一部分更详细的推导可以参考Secrets of RLHF in Large Language Models Part I: PPO这篇paper:
来自Proximal Policy Optimization Algorithms的推导:
损失函数
转载自: https://huggingface.co/learn/deep-rl-course/unit8/clipped-surrogate-objective
So with PPO, we update the policy conservatively. To do so, we need to measure how much the current policy changed compared to the former one using a ratio calculation between the current and former policy. And we clip this ratio in a range
[
1
−
ϵ
,
1
+
ϵ
]
[1−\epsilon,1+\epsilon]
[1−ϵ,1+ϵ], meaning that we remove the incentive for the current policy to go too far from the old one (hence the proximal policy term).
策略熵
KL散度阈值
PPO时看哪些指标?
转载自https://huggingface.co/docs/trl/how_to_train:
When performing classical supervised fine-tuning of language models, the loss (especially the validation loss) serves as a good indicator of the training progress. However, in Reinforcement Learning (RL), the loss becomes less informative about the model’s performance, and its value may fluctuate while the actual performance improves.
To address this, we recommend focusing on two key metrics first:
- Mean Reward: The primary goal is to maximize the reward achieved by the model during RL training.
- Objective KL Divergence: KL divergence (Kullback-Leibler divergence) measures the dissimilarity between two probability distributions. In the context of RL training, we use it to quantify the difference between the current model and a reference model. Ideally, we want to keep the KL divergence between 0 and 10 to ensure the model’s generated text remains close to what the reference model produces.
有哪些方法可以使得RL训练稳定
部分转载自:
- https://zhuanlan.zhihu.com/p/628406958
- https://zhuanlan.zhihu.com/p/631419889
- https://zhuanlan.zhihu.com/p/635757674 (强化学习从零到RLHF(八)一图拆解RLHF中的PPO)
- https://datawhalechina.github.io/easy-rl/#/chapter4/chapter4_questions&keywords?id=%e9%9d%a2%e8%af%95%e9%a2%98
- https://mp.weixin.qq.com/s/R6eFiv3Iczli2nNCfOt6gg