RL 算法的种类
一份粗略的RL算法分类指南。相关引用文献见文末。
无模型(Model-Free) vs. 基于模型(Model-Based)的 RL
RL 算法的一个最重要的分水岭,就在于智能体是否能接触(或学习)到一个环境模型。我们所说的“环境模型”,是指一个能预测状态转移和奖励的函数。
拥有模型最大的好处在于,它允许智能体通过“向前看”来进行规划,即预见不同选择可能导致的结果,并明确地在这些选项之间做出决策。然后,智能体可以将这种规划的结果提炼成一个学到的策略。AlphaZero 就是这种方法的一个著名范例。当这种方法奏效时,它在样本效率上可以比没有模型的方法高出几个数量级。
而其主要的缺点是,一个真实、准确的环境模型通常是无法直接获得的。在这种情况下,如果智能体想使用模型,它就必须完全依靠经验来学习这个模型,而这本身就带来了几个挑战。最大的挑战在于,学习到的模型中存在的偏差可能会被智能体利用,导致智能体在学习到的模型里表现优异,但在真实环境中的行为却非常糟糕(甚至可以说是灾难性的)。模型学习本身就是一项艰巨的任务,所以即使你投入大量的时间和计算资源,也未必能得到理想的回报。
使用模型的算法被称为**基于模型的(model-based)方法,而不使用模型的则被称为无模型的(model-free)**方法。虽然无模型方法放弃了模型可能带来的样本效率提升,但它们通常更容易实现和调试。
要学习什么?
RL 算法的另一个关键分支是,我们到底要学习什么。通常的选择包括:
- 策略(可以是随机的,也可以是确定性的)
- 动作价值函数(Q-函数)
- 价值函数
- 以及/或者环境模型
- 策略 (Policy) → 直接学会怎么做。
- Q-函数 (Q-function) → 学会给每个动作打分,然后选择最好的。
- 价值函数 (Value function) → 学会给每个处境打分,用于评估和辅助。
- 模型 (Model) → 学会预测未来,从而进行规划。
1. 策略 (Policy): 智能体的“行动指南”
- 这是什么? 策略就是一本直接的“行动指南”或“行为准则”。它告诉智能体在某个特定状态下应该做什么。简单来说,它是一个从状态到动作的映射。
- 生活中的类比: 就像一本菜谱。你看到案板上有一堆食材(状态),菜谱会直接告诉你下一步该做什么:“把西红柿切块”(动作)。
- 两种风格:
- 确定性策略 (Deterministic Policy): 这本指南非常死板。每次看到完全相同的状态,它总是给出完全相同的动作。例如:“只要看到红灯,就必须停车。”
- 随机性策略 (Stochastic Policy): 这本指南更灵活。它给出的不是一个确定的动作,而是一个概率列表。例如:“看到敌人时,有 70% 的概率开火,有 30% 的概率寻找掩护。” 这种不确定性在很多场景中非常有用,比如可以防止你的行为被对手完全预测,或者在探索新方法时也很有帮助。
- 学习它的算法: 直接学习策略的算法被称为策略优化 (Policy Optimization) 或策略梯度 (Policy Gradient) 方法,比如我们之前提到的 PPO 和 A2C/A3C。它们的目标就是不断调整这本“行动指南”,让它变得越来越好。
2. 动作价值函数 (Action-Value Function / Q-function): “神机妙算”的打分器
- 这是什么? Q-函数(Q代表Quality,质量)不是直接告诉智能体该做什么,而是为在某个状态下可能采取的每一个动作打分。这个分数代表了“执行这个动作后,一直到任务结束,总共能拿到多少奖励”的期望值。
- 生活中的类比: 想象你在下棋。当你处于某个棋局(状态)时,Q-函数就像一个超级棋手,帮你评估每一个可能的走法(动作)有多好。它会告诉你:“走这步,你最终获胜的可能性是80%(高分);走那步,你输棋的可能性是90%(低分)。”
- 如何使用? 一旦智能体学会了这个精准的“打分器”,它的策略就变得非常简单:在当前状态下,看看所有可选动作的得分,然后永远选择得分最高的那个动作。所以,它的策略是隐含在 Q-函数里的。
- 学习它的算法: 学习 Q-函数的算法就是我们熟知的 Q学习 (Q-Learning) 家族,比如 DQN。它们的目标是让这个“打分器”的评分越来越接近真实情况。
3. 价值函数 (Value Function): “风水”评估师
- 这是什么? 价值函数 (通常指状态价值函数V(s) )比 Q-函数更宏观一些。它不评价具体某个动作的好坏,而是直接评估一个状态本身有多好。它的分数代表了“从这个状态出发,一直到任务结束,总共能拿到多少奖励”的期望值。
- 生活中的类比: 这就像一个房地产评估师。他不会告诉你应该在这个房子里做什么(动作),而是会告诉你这个房子的地段、朝向、学区有多好(状态),给你一个整体估价。一个高价值的状态,就像是“身处风水宝地”,意味着你未来很有可能获得大量奖励。
- 它和Q函数的关系: 一个状态的价值,其实就等于从这个状态出发,能选择的最好动作的Q值。即 $$V(s)=maxaQ(s,a)$$
- 主要用途: 价值函数很少单独用来决策(因为它不直接告诉你该做什么),但它在很多算法中是极其重要的辅助工具。例如,在演员-评论家 (Actor-Critic) 算法中,“演员”(Actor)负责学习策略(行动指南),而“评论家”(Critic)就负责学习价值函数(风水评估),用来评判演员的动作是好于平均水平还是差于平均水平,从而指导演员改进。
4. 环境模型 (Environment Model): 智能体的“水晶球”
- 这是什么? 模型是对环境运行规则的一种模拟。它学习的是物理定律或游戏规则。具体来说,模型能回答这个问题:“如果我在状态 s 执行了动作 a,那么接下来会发生什么(下一个状态是什么)?以及我会得到多少奖励?”
- 生活中的类比: 模型就像一个“水晶球”或者一个沙盘推演系统。你不需要真的去执行一个动作,就可以通过模型来预测结果。比如,在下棋时,你可以在脑中“预演”好几步棋,看看局势会如何发展。这个“脑中预演”的过程,就是在使用你脑海里的棋局模型。
- 主要用途: 有了模型,智能体就可以进行规划 (Planning)。它可以在“脑内”进行大量的模拟和试错,而不需要在真实环境中一次次尝试(这在现实世界中可能成本很高或很危险)。这种“思考未来”的能力,让基于模型的强化学习 (Model-Based RL) 在某些问题上(如 AlphaGo)表现出极高的样本效率。
在无模型 RL 中要学习什么
在无模型 RL 中,主要有两种方法来表示和训练智能体:
策略优化 (Policy Optimization)
这类方法直接将策略表示为 $π_θ(a|s)$。它们通过对性能目标函数 $J(π_θ)$ 进行梯度上升,或者间接地最大化 $J(π_θ)$ 的某个局部近似,来优化参数 $θ$。这种优化几乎总是**同策略(on-policy)**的,也就是说,每次更新都只使用在当前最新策略下收集到的数据。策略优化通常还涉及学习一个价值函数近似器 $V_ϕ(s)$,它用于评估在当前策略下的状态价值函数 $V^π(s)$,并帮助计算策略的更新方向。
策略优化方法的几个例子包括:
- A2C / A3C:通过直接对性能目标进行梯度上升来最大化性能。
- PPO:通过最大化一个“替代目标函数”来间接提升性能,这个函数会保守地估计出一次更新能带来多大的性能改变。
想象一下你在教一个孩子(智能体)玩游戏。
传统的策略梯度 (A2C/A3C) 就像一个简单的老师。孩子玩了一局后,老师会说:“你在第5秒的那个操作很好,得分了,以后多这么做!”或者“你在第10秒的操作很糟糕,丢分了,以后别这么做!”。问题在于,老师没有说**“多做多少”**。如果孩子因为一次侥幸的成功就变得极度自信,把某个动作的概率从50%猛地提升到99%,那下次可能就会因为环境的细微变化而满盘皆输。这就是策略更新步子太大,导致“学崩了”的情况。
PPO 则像一个更聪明、更谨慎的老师。他会说:“你在第5秒的那个操作很好,得分了。我们稍微增加一点你这么做的可能性,但增幅不能超过20%。我们先看看效果,稳扎稳打,小步快跑。”
这个“增幅不能超过20%”就是PPO的核心思想——限制每次策略更新的幅度,确保新的策略不会和旧的策略差别太大,从而保证了学习过程的稳定性。
PPO的详细过程
PPO通过一个巧妙的目标函数来实现这种“谨慎的更新”。下面是它的完整流程:
准备工作: 我们需要两个神经网络:
- 策略网络 (Actor):输入是状态 (state, $s$),输出是采取各个动作 (action, $a$) 的概率,即 $π_θ(a|s)$。
- 价值网络 (Critic):输入是状态 (state, $s$),输出是对当前状态的价值评估 $V_ϕ(s)$,即从这个状态出发,预期能获得的总回报是多少。
PPO的循环步骤:
第1步:数据收集 (On-policy) 让当前的策略网络 (Actor) 与环境互动,玩上N个时间步(比如2048步),并收集所有的数据:(状态$s_t$, 动作$a_t$, 奖励$r_t$, 下一个状态$s_{t+1}$)。这个过程就像让孩子先玩几局游戏,把他的表现录下来。
第2步:计算优势函数 (Advantage Estimation) 对于收集到的每一步数据,我们需要评估在状态$s_t$下采取动作$a_t$到底有多好。我们不用原始的奖励,而是用一个更精妙的指标——优势函数 $\hat{A}_t$。
- 优势函数定义:$A(s_t, a_t) = Q(s_t, a_t) - V(s_t)$
- $Q(s_t, a_t)$ 是在状态$s_t$采取动作$a_t$的真实价值。
- $V(s_t)$ 是在状态$s_t$的平均价值(由价值网络Critic估计)。
- 直观理解:优势函数告诉你,在状态$s_t$下,采取动作$a_t$比平均水平好多少。如果 $\hat{A}_t > 0$,说明这个动作比预期的要好;如果 $\hat{A}_t < 0$,说明这个动作比预期的要差。
- 如何计算:在实践中,我们通常使用一种叫做GAE (Generalized Advantage Estimation) 的技术来从收集到的奖励和价值网络估算的V值中,更准确地计算出每一步的优势值 $\hat{A}_t$。
第3步:策略优化(PPO的核心) 这是最关键的一步。我们利用收集到的数据和计算好的优势函数,来更新策略网络。PPO的目标不是简单地最大化奖励,而是最大化一个特殊的“替代目标函数”(Surrogate Objective Function)。
这个目标函数长这样: $L^{CLIP}(\theta) = \hat{\mathbb{E}}_t \left[ \min \left( r_t(\theta) \hat{A}_t, \quad \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t \right) \right]$
我们来拆解一下这个复杂的公式:
概率比率 $r_t(\theta)$ $r_t(\theta) = \frac{\pi_{\theta}(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$
- $\pi_{\theta}(a_t|s_t)$ 是新策略(我们正在优化的策略)选择动作$a_t$的概率。
- $\pi_{\theta_{old}}(a_t|s_t)$ 是旧策略(收集数据时的策略)选择动作$a_t$的概率。
- 这个比率衡量了新旧策略的差异。如果 $r_t > 1$,说明新策略更倾向于采取这个动作。
两个部分的比较:$\min(\dots, \dots)$
- 第一部分:$r_t(\theta) \hat{A}_t$ 这是传统的策略梯度目标。如果优势$\hat{A}_t$是正的(好动作),我们就想增大$r_t$(即增大新策略的概率);如果优势是负的(坏动作),我们就想减小$r_t$。
- 第二部分:$\text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t$ 这是PPO的“刹车”机制。$\epsilon$ 是一个超参数,通常取0.1或0.2。
clip(...)函数会把概率比率 $r_t$ 强制限制在 $[1-\epsilon, 1+\epsilon]$ 这个区间内。例如,如果$\epsilon=0.2$,那么比率就会被限制在[0.8, 1.2]之间。- 这意味着,新策略相对于旧策略的变化幅度被“夹住”了。
$\min$ 的作用 PPO取这两部分中的最小值。这是一种保守的、悲观的策略。
- 当 $\hat{A}_t > 0$ (好动作时):目标函数变为 $\min(r_t \hat{A}_t, (1+\epsilon)\hat{A}_t)$。即使$r_t$可以变得很大(策略更新步子很大),目标函数的增长也被 $(1+\epsilon)\hat{A}_t$ 限制住了,防止了过度优化。
- 当 $\hat{A}_t < 0$ (坏动作时):目标函数变为 $\max(r_t \hat{A}_t, (1-\epsilon)\hat{A}_t)$(因为负数取min等于正数取max)。即使$r_t$可以变得很小(策略更新步子很大),目标函数的惩罚也被 $(1-\epsilon)\hat{A}_t$ 限制住了,防止策略过度“害怕”这个动作。
第4步:价值网络优化 同时,我们还需要更新价值网络(Critic),让它对状态的评估更准确。这通常是通过最小化均方误差来完成的:
$$L^{VF}(\phi) = (V_\phi(s_t) - V_t^{target})^2$$其中 $V_t^{target}$ 是从环境中实际观察到的回报。
第5步:循环 在同一批数据上,重复执行第3步和第4步的优化若干次(称为epochs),以充分利用这些来之不易的数据。然后丢弃旧数据,回到第1步,用更新后的策略收集新数据,开始新一轮的循环。
举例:用PPO玩“平衡杆” (CartPole)
游戏目标:控制一个小车左右移动,让车上的杆子保持竖直不倒。
- 状态 (State, $s$): 一个包含4个数字的向量:[小车位置, 小车速度, 杆子角度, 杆子角速度]。
- 动作 (Action, $a$): 2个离散动作:[向左推, 向右推]。
- 策略网络 (Actor): 输入是4维的状态向量,输出是2个概率值,分别代表“向左推”和“向右推”的概率。
- 价值网络 (Critic): 输入是4维的状态向量,输出是1个数值,代表对当前状态能坚持多久的预测。
PPO的执行过程:
第1轮 (初始策略很笨)
- 收集数据: 初始的策略网络可能是随机的,小车胡乱移动,杆子很快就倒了。我们让它玩上几百个回合,收集2048步的
(s, a, r, s')数据。- 计算优势: 对于每一步,比如在某个状态下,杆子向左倾斜,策略随机选择了“向左推”,结果杆子倒得更快了。那么这一步的优势函数$\hat{A}_t$就是一个较大的负数。而在另一个状态,杆子向左倾斜,策略偶然选择了“向右推”,杆子被扶正了一些,那么这一步的优势$\hat{A}_t$就是正数。
- 优化:
- 对于那个“向左推导致失败”的动作,PPO会更新策略。因为$\hat{A}_t$是负数,目标函数会促使 $\pi_{\theta}(\text{向左推}|s_t)$ 的概率下降。但由于
clip机制,这个下降幅度是有限的,比如最多从50%降到40% (如果$\epsilon=0.2$),而不会一步降到1%。- 对于那个“向右推获得成功”的动作,PPO会增加 $\pi_{\theta}(\text{向右推}|s_t)$ 的概率,同样,增幅也会被限制。
- 我们用这2048步的数据,反复训练网络好几次。
第2轮 (策略稍有改进)
- 收集数据: 现在策略网络已经学到了一些基本知识,比如“杆子往哪边倒,就往哪边推”。它玩游戏的时间会比上一轮长一些。我们再次收集2048步的数据。
- 计算优势与优化: 重复上述过程。现在智能体可能会学到更精细的技巧,比如通过来回晃动来保持平衡。PPO依然会保证它不会因为一次成功的“神操作”就过度自信,从而破坏已经学到的稳定策略。
持续多轮… 经过成百上千轮的“收集数据 -> 计算优势 -> 稳健优化”的循环,PPO智能体最终能学会非常精湛的平衡技巧,让杆子长时间不倒。
总结来说,PPO的成功之处在于它通过一个巧妙的“裁剪”目标函数,在利用好每一份数据的同时,又给策略的更新戴上了“镣铐”,让它在学习的道路上“小步快跑,稳步向前”,从而在各种复杂的任务中都表现得非常出色和稳定。
Q学习 (Q-Learning)
这类方法学习一个最优动作价值函数 $Q^*(s, a)$ 的近似器 $Q_θ(s, a)$。它们通常使用一个基于贝尔曼方程的目标函数进行优化。这种优化几乎总是**异策略(off-policy)**的,也就是说,每次更新都可以使用训练过程中任意时刻收集到的数据,而不管当时智能体是如何探索环境的。相应的策略则是通过 $Q^*$ 和 $π^*$ 之间的关系得出的;Q学习智能体的行动遵循以下规则:
$$ a(s) = \arg\max_a Q_θ(s, a) $$Q学习方法的例子包括:
- DQN:一个经典算法,它极大地推动了深度 RL 领域的发展。
- C51:DQN 的一个变种,它学习的是一个回报的分布,这个分布的期望就是 $Q^*$。
想象一下,你不是在教智能体怎么玩游戏,而是在帮它编写一本终极的“游戏攻略”。
- 这本攻略不是告诉你“在什么情况下该做什么”,而是告诉你**“在某个游戏画面(状态 s)下,采取某个操作(动作 a)最终能得多少分”**。这个预期的分数就是 Q值 (Q-value),即 $Q(s, a)$。
- 有了这本完美的攻略,玩游戏就变得非常简单:在任何一个游戏画面,你翻到对应的一页,查看所有可能操作(比如上、下、左、右)的预期得分,然后选择那个能让你最终得分最高的操作就行了。
- Q学习 (Q-Learning) 的目标就是学习并完善这本攻略(即Q值)。
- DQN 则是用一个深度神经网络(Deep Neural Network)来充当这本攻略,因为游戏画面(状态)太多了,用一张大表格(Q-Table)来记录根本不现实。神经网络可以根据画面(像素)自动学习和泛化,预测出每个动作的Q值。
与PPO(直接学策略)不同,DQN是异策略 (off-policy) 的。这意味着我们的智能体可以像一个历史学家,通过回顾自己过去(甚至是错误)的经历来学习,而不需要每次都用最新的策略去玩。这让数据利用效率大大提高。
DQN的详细过程
DQN的成功依赖于两个关键的创新:经验回放(Experience Replay) 和 固定Q目标(Fixed Q-Targets)。
准备工作: 我们需要两个结构完全相同的神经网络:
- Q网络 (Q-Network):$Q_θ(s, a)$,这是我们主要训练的网络,负责实时评估Q值。
- 目标网络 (Target Network):$Q_{\hat{θ}}(s, a)$,这是Q网络的一个“旧版本”的副本,用于在训练中提供一个稳定的目标。
DQN的循环步骤:
第1步:探索与数据存储 智能体与环境互动,并根据 ε-贪婪 (epsilon-greedy) 策略来选择动作。
- 贪婪:以 $1-ε$ 的概率,智能体选择当前Q网络认为Q值最高的动作(即利用已学知识):$a = \arg\max_a Q_θ(s, a)$。
- 探索:以 $ε$ 的小概率,智能体随机选择一个动作。这能确保智能体不会只走“老路”,而是会去探索未知的可能性。
- 存储:智能体执行动作 $a_t$ 后,会得到一个经历元组:(当前状态$s_t$, 动作$a_t$, 奖励$r_t$, 下一个状态$s_{t+1}$)。我们将这个元组存入一个叫做经验回放池 (Replay Buffer) 的巨大内存中。这个池子可以存储几十万甚至上百万条过去的经历。
第2步:从经验池中采样 当经验回放池里的数据足够多时,我们开始训练。我们不是用刚刚产生的经历,而是从池中**随机抽取一小批(a mini-batch)**的经历,比如64条
(s, a, r, s')。
- 为什么这么做?(经验回放的作用)
- 打破数据相关性:连续的游戏帧之间高度相似,如果按顺序学习,网络会不问题。随机采样打乱了顺序,让训练更稳定。
- 提高数据利用率:一条宝贵的经历(比如一次罕见的通关操作)可以被反复学习多次,而不是用完就扔。
第3步:计算目标Q值 (Target) 对于采样出来的每一条经历
(s, a, r, s'),我们需要计算一个“目标Q值”,也就是我们希望Q网络对(s, a)这对组合输出的“正确答案”。 这个目标值根据贝尔曼方程计算:$y = r + \gamma \max_{a'} Q_{\hat{θ}}(s', a')$
我们来拆解一下:
- $r$:是采取动作 $a$ 后立即获得的奖励。
- $\gamma$:是折扣因子 (discount factor),一个0到1之间的数,代表了未来奖励的重要性。
- $\max_{a'} Q_{\hat{θ}}(s', a')$:这是最关键的部分。我们用目标网络 (Target Network) 来预测在下一个状态 $s'$ 中,所有可能动作里能得到的最大Q值。这代表了从下一个状态开始,我们能获得的最佳未来收益。
- 为什么用目标网络?(固定Q目标的作用) 如果计算目标和预测都用同一个Q网络,那么我们更新网络时,目标也在变,就像追逐一个移动的目标,训练会非常不稳定。通过使用一个“旧的、被冻结的”目标网络,我们为Q网络的学习提供了一个稳定的、不会轻易变化的目标,让学习过程更容易收敛。
第4步:更新Q网络 现在我们有了两样东西:
- 网络的预测值:Q网络对状态 $s$ 和动作 $a$ 的输出,$Q_θ(s, a)$。
- 网络的目标值:我们刚刚计算出的 $y$。
我们的目标就是让预测值尽可能接近目标值。我们通过一个损失函数(通常是均方误差MSE)来衡量它们的差距,并使用梯度下降来更新Q网络的参数 $θ$。
Loss = $(y - Q_θ(s, a))^2$
第5步:更新目标网络 我们不会直接训练目标网络。而是每隔C步(比如每10000步),直接将Q网络的参数 $θ$ 完整地复制给目标网络的参数 $\hat{θ}$。这样,目标网络就跟上了主网络的步伐,但又是以一种延迟、稳定的方式。
第6步:循环 不断重复以上步骤:探索、存储、采样、计算目标、更新网络。
举例:用DQN玩“打砖块” (Atari Breakout)
游戏目标:控制底部的挡板左右移动,反弹小球来消除上方的砖块。
- 状态 (State, $s$): 游戏的一帧画面(或为了捕捉动态,使用最近的4帧画面),即一个像素矩阵。
- 动作 (Action, $a$): 3个离散动作:[向左移动, 向右移动, 不动]。
- Q网络: 一个卷积神经网络(CNN),输入是游戏画面,输出是3个Q值,分别对应上述3个动作。
- 奖励 (Reward, $r$): 每打掉一个砖块,奖励+1。游戏结束,奖励-1。其他时候奖励为0。
DQN的执行过程:
初期 (瞎玩阶段)
- 探索: Q网络是随机初始化的,输出的Q值毫无意义。智能体主要靠ε-贪婪策略进行随机探索,挡板胡乱移动,经常接不到球。
- 存储: 每次移动,无论是接到了球、打掉了砖块,还是丢了球,
(画面, 动作, 奖励, 新画面)这个四元组都被存入经验回放池。比如一条经历可能是:(s_球快掉下来了, a_向右移动, r_0, s_丢球了游戏结束)。另一条可能是:(s_球快撞到砖块了, a_不动, r_+1, s_砖块消失了)。中期 (学习阶段)
- 采样: 训练开始,从池中随机抽取一批数据。假设抽到了上面那条打掉砖块的成功经历
(s_1, a_1, r_1, s'_1)。- 计算目标:
- 奖励 $r_1$ 是 +1。
- 将下一个状态 $s'_1$(砖块消失后的画面)输入目标网络,得到3个动作的Q值,比如
Q_target(s'_1, :) = [10.5, 12.0, 11.0]。- 取其中的最大值12.0。
- 计算目标 $y = 1 + \gamma \times 12.0$。
- 更新网络:
- 将状态 $s_1$ 输入Q网络,得到3个动作的Q值,比如
Q(s_1, :) = [8.2, 7.5, 7.9]。- 我们实际执行的动作是 $a_1$(不动),对应的预测值是7.9。
- 计算损失:
Loss = ( (1 + γ * 12.0) - 7.9 )^2。- 通过反向传播,更新Q网络的权重,使得它下次再看到类似 $s_1$ 的画面时,对“不动”这个动作的Q值预测会更接近
1 + γ * 12.0。- 通过不断学习成千上万条这样的经历(包括成功和失败的),Q网络逐渐理解了:什么样的画面下,做什么样的动作,能带来更高的长期回报。
后期 (高手阶段)
- Q网络已经非常准确。当它看到球从左边飞来时,它会给“向左移动”一个非常高的Q值。当它看到球可以被反弹到砖块密集区时,它会给相应的移动一个更高的Q值。
- 此时,探索率 $ε$ 通常会降到很低,智能体绝大部分时间都在利用它学到的完美“攻略”,打出精妙的操作,比如著名的“挖隧道”技巧。
总结来说,DQN通过经验回放和固定Q目标这两个法宝,成功地将深度学习的强大感知能力与Q学习的决策理论结合起来,让智能体能够仅通过观察像素画面和得分,就从零开始学会玩复杂的电子游戏,达到了超越人类的水平。
策略优化与 Q学习的权衡
策略优化方法的主要优势在于它们在原理上更加直接、可靠,因为你直接优化你想要的东西。这使得它们通常更稳定。相比之下,Q学习方法只是间接地优化智能体性能,它通过训练 $Q_θ$ 来满足一个自洽性方程。这种学习方式存在很多潜在的失败模式,因此通常不太稳定。[1] 但是,当 Q学习方法能够成功运行时,它们通常比策略优化方法有高得多的样本效率,因为它们能更有效地重用历史数据。
在策略优化和 Q学习之间进行插值
一个很巧妙的发现是,策略优化和 Q学习并非水火不容(在某些情况下,它们甚至被证明是等价的),存在一系列算法介于这两者之间。这些算法能够在两者之间进行精细的权衡,综合双方的优点和缺点。例子包括:
- DDPG:一个同时学习确定性策略和 Q-函数的算法,并利用两者相互促进。
- SAC:DDPG 的一个变种,它使用随机策略、熵正则化以及其他一些技巧来稳定学习过程,并在标准基准测试中取得了比 DDPG 更高的分数。
[1] 更多关于 Q学习方法为何以及如何失败的信息,请参阅:1) Tsitsiklis 和 van Roy 的经典论文,2) Szepesvari 的(近期得多的)综述(4.3.2节),以及 3) Sutton 和 Barto 教材的第11章,特别是11.3节(关于函数近似、自举(bootstrapping)和异策略数据这“致命三元组”共同导致价值学习不稳定的部分)。
在基于模型的 RL 中要学习什么
与无模型 RL 不同,基于模型的 RL 方法没有少数几个清晰的分类。使用模型的方式有很多种,彼此之间互不冲突。
背景知识:纯规划 (Pure Planning) 最基本的方法从不显式地表示策略,而是使用纯规划技术(如模型预测控制, MPC)来选择动作。在 MPC 中,每当智能体观察环境时,它都会计算一个在模型看来最优的计划,该计划描述了从当前时刻开始的一个固定时间窗口内的所有动作。(规划算法可以通过一个学习到的价值函数来考虑这个时间窗口之外的未来奖励。)然后,智能体执行该计划的第一个动作,并立即丢弃计划的其余部分。每当它准备与环境再次交互时,都会重新计算一个新计划,以避免使用一个规划 horizon 越来越短的旧计划。
- MBMF 工作在一些标准的深度 RL 基准任务上,探索了使用学习到的环境模型进行 MPC。
专家迭代 (Expert Iteration) 一个对纯规划的直接扩展是,使用并学习一个显式的策略表示 $π_θ(a|s)$。智能体在模型中使用一个规划算法(如蒙特卡洛树搜索),通过从当前策略中采样来生成候选动作。规划算法会产生一个比策略自身更好的动作,因此,相对于策略而言,它是一个“专家”。然后,策略会被更新,以使其输出更接近规划算法的输出。
- ExIt 算法使用这种方法来训练深度神经网络下六子棋。
- AlphaZero 是这种方法的另一个例子。
为无模型方法进行数据增强 (Data Augmentation for Model-Free Methods) 使用一个无模型 RL 算法来训练一个策略或 Q-函数,但是通过以下两种方式之一来利用模型:1) 用模型生成的虚拟经验来增强真实经验,一同用于更新智能体;或者 2) 完全只使用虚拟经验来更新智能体。
- 关于用真实经验和虚拟经验混合增强的例子,请参阅 MBVE。
- 关于完全使用虚拟经验来训练智能体的例子,请参阅 World Models,他们称之为“在梦中训练”。
将规划循环嵌入到策略中 (Embedding Planning Loops into Policies) 另一种方法是将规划过程直接作为一个子程序嵌入到策略中——这样,完整的计划就成了策略的辅助信息——同时用任何标准的无模型算法来训练策略的最终输出。这种框架的关键思想是,策略可以学会如何以及何时使用这些计划。这使得模型偏差问题变得不那么严重,因为如果模型在某些状态下对于规划来说效果很差,策略可以学会直接忽略它。
- 关于智能体被赋予这种想象能力的例子,请参阅 I2A。
分类指南中的算法链接
[2] A2C / A3C (异步优势演员-评论家, Asynchronous Advantage Actor-Critic): Mnih et al, 2016
[3] PPO (近端策略优化, Proximal Policy Optimization): Schulman et al, 2017
[4] TRPO (信赖域策略优化, Trust Region Policy Optimization): Schulman et al, 2015
[5] DDPG (深度确定性策略梯度, Deep Deterministic Policy Gradient): Lillicrap et al, 2015
[6] TD3 (双延迟深度确定性策略梯度, Twin Delayed DDPG): Fujimoto et al, 2018
[7] SAC (软演员-评论家, Soft Actor-Critic): Haarnoja et al, 2018
[8] DQN (深度Q网络, Deep Q-Networks): Mnih et al, 2013
[9] C51 (Categorical 51-Atom DQN): Bellemare et al, 2017
[10] QR-DQN (分位数回归DQN, Quantile Regression DQN): Dabney et al, 2017
[11] HER (事后经验回放, Hindsight Experience Replay): Andrychowicz et al, 2017
[12] World Models: Ha and Schmidhuber, 2018
[13] I2A (想象力增强智能体, Imagination-Augmented Agents): Weber et al, 2017
[14] MBMF (带无模型微调的基于模型的RL, Model-Based RL with Model-Free Fine-Tuning): Nagabandi et al, 2017
[15] MBVE (基于模型的价值扩展, Model-Based Value Expansion): Feinberg et al, 2018
[16] AlphaZero: Silver et al, 2017