Value-based 方法:Q-learning 与 DQN
值迭代要先知道环境模型 \(P(s'\mid s,a)\),而机器人几乎从不知道它:轮子怎么打滑、物体怎么被推开,只能试了才知道。Value-based 方法直接从一条条经验 \((s,a,r,s')\) 里学动作价值 \(Q(s,a)\),每一步都用"一步奖励 + 下一状态的估计"去修正当前估计(时序差分)。本课在浏览器里现场训练:随机游走上的 TD 与蒙特卡洛、格子世界里的 Q-learning 与探索陷阱、悬崖边的 SARSA 与 Q-learning、最大化偏差与 Double Q、"致命三元组"导致的发散,以及一个带经验回放和目标网络的 DQN。
1为什么机器人需要它
6.12 节的值迭代和 20.1 节的策略迭代都在解 Bellman 方程,但它们要先拿到环境模型:每个状态、每个动作之后会以多大概率到达哪里、得到多少奖励。对一个在仓库里跑的移动机器人、一只在杂物堆里抓东西的机械臂来说,这张表根本写不出来:地面摩擦、物体质量、接触时的滑动,都只能试了才知道。
无模型 (model-free) 方法放弃写出 \(P\),只用机器人亲身经历的一条条转移 \((s,a,r,s')\):在状态 \(s\) 做了动作 \(a\),拿到奖励 \(r\),到了 \(s'\)。Value-based 方法用这些样本去学动作价值函数 \(Q(s,a)\)("在 \(s\) 做 \(a\),之后一直做得最好,能拿到的期望折扣回报"),策略就直接读出来:\(\pi(s)=\arg\max_a Q(s,a)\),不需要模型,也不需要单独的策略网络。
这一族方法还有一个对真实机器人非常宝贵的性质:off-policy。Q-learning 学的是最优策略的价值,但数据可以来自任何行为:昨天的随机探索、旧版本的策略、人类遥操作。所有采到的数据都能存起来反复用(经验回放),这正是 DQN 能从像素玩 Atari 游戏、QT-Opt 能用真实抓取数据训练抓取策略的原因。本课从最小的表格开始,一路走到神经网络版本 DQN,并看清楚它在哪里会坏掉:探索不足、高估、以及函数逼近带来的发散。
2直觉:从样本里学价值,等回合结束还是只看一步?
先只学"一个状态有多好"(固定策略下的 \(V(s)\)),不选动作。一个机器人在 5 格走廊 A–E 上随机漂移(各一半概率向左、向右),从中间 C 出发;走出右端到达充电桩得奖励 \(+1\),走出左端得 0,回合结束。不打折 (\(\gamma=1\)),所以 \(V(s)\) 就是"从 \(s\) 出发最终到右端的概率",真值是 \(1/6,\dots,5/6\)。机器人不知道这些,只看到一条条回合。
有两种自然的学法。蒙特卡洛 (MC):等回合结束,拿到真实回报 \(G\)(这里是 0 或 1),把这一回合访问过的每个格子的估计往 \(G\) 拉一点:\(V(s)\leftarrow V(s)+\alpha\,[\hl{mcret}{G}-V(s)]\)。时序差分 TD(0):不等结局,每走一步就用"一步奖励 + 下一个格子现在的估计"当目标:\(V(s)\leftarrow V(s)+\alpha\,[\hl{tdtarget}{r+\gamma V(s')}-V(s)]\)。后者叫自举 (bootstrapping):用估计去更新估计。
- 按"重置"再按"1 个回合",只走一个回合:数一数每种方法改了几个格子。MC 改了所有访问过的格子;TD 只改了最后一格,因为其余每一步的目标 \(0+V(s')=0.5\) 恰好等于当前估计。
- 把 \(\alpha_{\rm TD}\) 拖到 0.3 以上:蓝色粗线一开始降得更快,但停在更高的误差上(第 100 回合约 0.11,而 \(\alpha=0.1\) 时约 0.05)。大步长学得快,但噪声也更大。
默认步长下(\(\alpha_{\rm TD}=0.1\),\(\alpha_{\rm MC}=0.02\)),100 个回合后 TD 的平均误差约 0.053,MC 约 0.079。把 \(\alpha_{\rm MC}\) 在整个范围里调一遍,你会发现 MC 在第 100 回合最好也只到 0.08 左右。原因在于方差:MC 的目标 \(G\) 是一整个回合的随机结局,它对 C 的估计要等很多回合"抛硬币"的结果平均下来;TD 的目标只依赖一步的随机性,其余部分由邻居的估计提供,而邻居的估计已经平均过许多回合了。代价是偏差:在估计还不准时,TD 的目标也不准。
TD(0) 就是 6.12 节里的 Bellman 备份,只是把对 \(s'\) 的期望 \(\sum_{s'}P(s'|s,a)[\cdots]\) 换成了一个样本,再用小步长 \(\alpha\) 在许多样本上做平均。环境自己"掷骰子"代替了我们不知道的 \(P\)。这是本课所有方法的共同骨架。
3动手:机器人用 Q-learning 找充电桩
要选动作,光有 \(V\) 不够(没有模型就不知道哪个动作通向哪个 \(s'\)),所以我们学 \(Q(s,a)\)。Q-learning(Watkins, 1989)对每个转移 \((s,a,r,s')\) 做一次 TD 更新,目标里取下一个状态最好的动作:
下面是一个仓库:机器人从 S 出发,每步可以上下左右走一格(撞墙原地不动),\(\gamma=0.9\)。左下角有一个小充电点(奖励 \(+0.3\),3 步可达),右边墙后有正式充电桩(奖励 \(+1\),最短 8 步)。到达任何一个都结束回合。哪个更好?从 S 出发,小充电点值 \(0.3\cdot0.9^2=0.243\),充电桩值 \(0.9^7\approx0.478\):远的更好。机器人按 ε-greedy 行动:以概率 \(\varepsilon\) 随机走一步,否则走当前 \(Q\) 最大的动作。
每个格子被分成 4 个三角形,分别是向右、上、左、下 4 个动作的 \(Q\) 值,蓝色越浓 \(Q\) 越大。先按"单步"看几次更新的具体数字,再按"训练"。
- 按"单步",看右上角的更新公式:只要机器人还没碰到任何充电点,每次更新都是 \(0\to0\)(奖励是 0,下一格的 \(Q\) 也都是 0)。一直按到出现第一个非零更新为止。
- 保持默认(初值 \(Q=0\),\(\varepsilon=0.1\)),按"训练"跑满 200 个回合:机器人学会了去小充电点,贪心回报停在 0.243,而最优是 0.478。再把 \(\varepsilon\) 提到 0.5 多跑几百回合,它通常还是找不到充电桩。
- 在图头把初值换成"乐观初值 \(Q=1\)"(会自动重置),再训练:不到 30 个回合贪心路线就变成了去充电桩的 8 步最优路线(右图回报到达 0.478)。
注意价值是怎么传播的:第一次碰到充电点时只有最后那一个 \(Q(s,a)\) 变成非零;下一次走到它前一格,目标里的 \(\max_{a'}Q(s',a')\) 已经非零了,价值又往回传一格。这和 6.12 节 FIG 1 里"从目标向外涨水"是同一件事,只不过这里水只沿着机器人实际走过的路涨。
第二件事是探索陷阱。初值 \(Q=0\) 时,机器人一旦碰到小充电点,那里的 \(Q\) 就成了全图唯一的正数,贪心动作全都指向它;要发现充电桩,得连续很多步都随机地走对方向,ε-greedy 这种"每步独立抖一下"的探索几乎做不到(在本图里,20 个随机种子、500 个回合、\(\varepsilon\) 最大到 0.5,一次都没有让贪心策略改去充电桩)。乐观初值把所有没试过的动作都假设成"很好"(\(Q=1\) 不小于任何真实值),贪心策略自己就会去试每一个还没被证明不好的动作,于是 \(\varepsilon=0\) 也能系统地探索整个仓库。
Q-learning 保证收敛到 \(Q^\star\),前提是每个状态–动作对都被无限次地访问(再加上合适递减的步长)。这个前提不是自动成立的:学到什么,取决于机器人去过哪里。在大状态空间里,探索往往比更新公式本身更难。
4两个视角:on-policy 与 off-policy,以及"取最大"的偏差
SARSA 与 Q-learning:在悬崖边学习
只改目标里的一项,就得到另一个算法。SARSA(名字来自它用到的五元组 \(s,a,r,s',a'\))不取最大,而用机器人下一步真的要做的动作 \(a'\)(同样按 ε-greedy 选出):
左边是 SARSA,右边是 Q-learning,只有目标里的一项不同:
SARSA 估计的是"我这个(会探索、偶尔犯错的)策略"的价值,叫 on-policy;Q-learning 估计的是"如果以后都做最优动作"的价值,与产生数据的行为无关,叫 off-policy。区别在 6.12 节那种悬崖旁边最明显:Sutton & Barto 的悬崖行走,\(12\times4\) 的格子,每步奖励 \(-1\),掉下悬崖 \(-100\) 并被送回起点。两种算法都用 \(\varepsilon=0.1\)、\(\alpha=0.5\)、\(\gamma=1\)。
- 在 \(\varepsilon=0.1\) 时按"运行",训练满 500 个回合:Q-learning 学到了贴着悬崖的最短路线(贪心回报 \(-13\)),SARSA 学到了绕到最上面一排的安全路线(\(-17\));可是训练中的回报反过来,最后 100 回合 SARSA 约 \(-27\),Q-learning 约 \(-51\)。
- 把 \(\varepsilon\) 降到 0.01 再训练满 500 回合:探索几乎不再害人掉崖,两条曲线靠拢(约 \(-17\) 和 \(-16\)),SARSA 的路线也挪近了悬崖。
Q-learning 学到的是"不探索时"的最优值,所以贴边走;但训练时它仍有 10% 的概率随机迈一步,贴边时迈向悬崖就是 \(-100\)(最后 100 回合平均每回合掉下去约 0.35 次,SARSA 约 0.05 次)。SARSA 把自己的探索也算进了价值:贴边的格子"对一个会抖的机器人"确实危险,所以它绕远。哪个对?取决于部署时会不会继续探索。一个在真实世界边用边学的机器人,训练中摔一次的代价是真实的,SARSA 式的保守更接近你想要的;如果只在仿真里训练、上线后贪心执行,Q-learning 的路线更好。
最大化偏差与 Double Q-learning
Q-learning 的目标里有一个 \(\max\)。如果几个动作的真实价值都一样,但估计带噪声,那么"估计里最大的那个"系统性地偏高:最大值挑中的正是碰巧被高估的那个。数学上就是 \(\mathbb E[\max_a\hat Q(s,a)]\ \ge\ \max_a\mathbb E[\hat Q(s,a)]\)。这个偏高再被自举一步步往回传。
Sutton & Barto 的例子 6.7:从 A 出发,向右立即结束(奖励 0);向左到 B(奖励 0),B 有 \(n\) 个动作,每个都以奖励 \(\mathcal N(\mu,1)\) 结束,\(\mu=-0.1\)。向左的真实价值是 \(-0.1\),所以最优是一直向右;在 \(\varepsilon=0.1\) 下,最好的行为是只有 \(\varepsilon/2=5\%\) 的回合向左。想象成机器人在路口:右边是安全的回充点,左边是一个有 \(n\) 种抓取方式的工作台,每种平均略亏、但单次结果噪声很大。Double Q-learning(van Hasselt, 2010)维护两张表,用一张选最大动作、用另一张估它的值,两张表的噪声互相独立,就不会"自己挑自己的高估"。
- 把 B 的动作数 \(n\) 从 1 拖到 10 或更多:蓝色曲线在最初几十个回合冲到 90% 以上(Q-learning 被"某个动作偶然很好"骗去了左边),紫色曲线基本不受影响。\(n=1\) 时没有可"挑"的,两条曲线几乎一样。
5从表格到网络:致命三元组与 DQN
表格在 6.12 节讲的维数灾难面前不堪一击:一张相机图像的状态数是天文数字。办法是用带参数 \(\theta\) 的函数 \(Q_\theta(s,a)\)(线性特征或神经网络)代替表格,相似的状态共享参数,学一处也改变了别处。可这正是麻烦的来源:一次更新会牵动其他状态的估计,而 TD 的目标本身又依赖这些估计。
Sutton & Barto 把危险归结为三样东西同时出现,称为致命三元组 (deadly triad):函数逼近、自举、off-policy 数据。下面是最小的例子:两个状态,特征分别是 1 和 2,线性估计 \(\hat v(s_1)=w\),\(\hat v(s_2)=2w\);\(s_1\to s_2\) 和 \(s_2\to\)终点,奖励都是 0,所以真值全是 0,\(w=0\) 就是完美答案。如果数据里只有 \(s_1\to s_2\) 这一种转移(比如 off-policy 的行为从不经过 \(s_2\) 之后的那段),TD 更新是
当 \(\gamma>0.5\) 时每次更新都把 \(w\) 乘以一个大于 1 的数:为了让 \(s_1\) 的值追上目标 \(2\gamma w\),增大 \(w\),可目标也跟着一起变大,永远追不上。
- 三样都开着时,把 \(\gamma\) 从 0.9 往下拖,找到 \(w\) 不再增长的位置:\(\gamma\le0.5\),此时每步的放大因子 \(1+\alpha(2\gamma-1)\le1\)。
- 在 \(\gamma\ge0.8\) 下,每次只关掉一样,三样都试一遍:无论关掉哪一样,发散都消失了。
on-policy 为什么能救?因为数据里也有 \(s_2\to\)终点,那次更新把 \(\hat v(s_2)=2w\) 往 0 拉,拉的力度(\(\alpha\cdot2w\cdot2\))比前一次的放大大得多。off-policy 的数据分布恰好"看不到"会纠错的那部分。Q-learning 天生就是 off-policy 的(目标里的 \(\max\) 对应的贪心策略不是产生数据的 ε-greedy 策略),深度网络是函数逼近,TD 目标是自举:DQN 正好坐在三元组的正中间。它能工作,靠的是两个工程手段把危险压住。
DQN:经验回放 + 目标网络
DQN(Mnih 等, Nature 2015)把 Q-learning 写成一个回归问题:网络输入状态,输出每个离散动作的 \(Q\) 值,最小化 TD 误差的 Huber 损失(它对误差的梯度就是截断到 \([-1,1]\) 的 TD 误差,即 DQN 论文里的"误差截断",见 16.2 节):
其中 \(\ell\) 是 Huber 损失,\(d=1\) 表示 \(s'\) 是终止状态,目标网络参数 \(\theta^-\) 每 \(C\) 次更新才从 \(\theta\) 复制一次。两个关键部件:
- 经验回放 \(\mathcal D\)(Lin, 1992):把所有转移存进一个大缓冲区,每次更新从中随机抽一小批。连续采到的转移高度相关(机器人一直在同一片区域),直接用它们训练就像只看同一个角落的 SGD(6.4 节的 SGD 假设样本近似独立);随机抽样打散了相关性,每条数据还能被反复利用。
- 目标网络 \(\theta^-\):目标里的 \(Q\) 用一份冻结的参数副本计算,每 \(C\) 次更新才同步一次。这样回归目标在一段时间内是固定的,不会出现 FIG 5 里"追着自己跑"的放大循环。
下面的 DQN 控制一个在房间里的点机器人:状态是连续的位置 \((x,y)\),4 个动作各移动 0.08,中间有一堵墙,到达右上方的绿色圆得 \(+1\),\(\gamma=0.95\),一回合最多 40 步(到时截断,截断不是终止,目标照常自举)。网络是 2–32–32–4 的 ReLU MLP,Adam 学习率 0.002,每个环境步做一次 32 个样本的更新,\(C=200\),ε 在前 3000 步从 1 线性降到 0.1。每 1000 步,用贪心策略从墙左边 30 个固定起点各跑一次做评估。
- 保持经验回放和目标网络都打开,按"训练":在 8000 到 11000 个环境步之间(我们试过的 4 个种子;种子 1 在 8000 步时),评估成功率超过 90%,价值图从目标沿着绕墙的路线"长"出来,预测的 \(Q\) 与实际回报在 0.6 左右会合。
- 关掉目标网络(目标直接用正在训练的网络),重新训练:头两千步内预测的 \(Q\) 就冲到 10 以上(种子 1 达到上万),价值图一片红色。这是 FIG 5 那种发散在神经网络上的样子。
还可以试试关掉经验回放(每次只用最近的 32 个转移):在我们试过的 4 个种子里,第 12000 步时成功率都在 30% 以下(中间可能短暂冲高再跌回去),而完整 DQN 都到了 100%。即使是完整的 DQN,训练初期评估起点上预测的 \(Q\) 也有 0.8 到 1.4(随种子不同),远高于当时实际拿到的回报 0,也高于训练好后能达到的约 0.6;超过 1 的值在这个任务里根本不可能出现。这就是 FIG 4 的最大化偏差加上自举。打开 Double DQN(用在线网络选动作、用目标网络估值),4 个种子里早期预测 \(Q\) 的峰值都更低,其中 3 个种子的成功率更早超过 90%(第 4 个同时),最后两者都到 100%。
带目标网络的 DQN 可以看成一连串监督回归:冻结 \(\theta^-\),目标 \(y=r+\gamma\max_{a'}Q_{\theta^-}(s',a')\) 就是固定标签,用 SGD 拟合几百步;然后更新标签再拟合。这就是"拟合值迭代"(fitted Q iteration,Riedmiller 2005 的 Neural Fitted Q)。每一轮是 Bellman 算子的一次近似应用:算子本身是压缩的(6.12 节),但"应用算子 + 投影到网络能表示的函数"的组合不一定是,这正是函数逼近会出问题的地方。
6再看数学
提示:把鼠标悬停在公式中带底色的符号上,FIG 1–6 中对应的元素会被高亮(例如 \(G_t\) 加粗 FIG 1 的紫色 MC 柱与曲线,\(\max\) 加粗 FIG 3 的蓝色路线和 FIG 4 的蓝色曲线)。
记号与出发点
沿用 20.1 节:在时刻 \(t\) 处于 \(s_t\),做 \(a_t\),得到奖励 \(r_{t+1}\),到达 \(s_{t+1}\)。回报 \(G_t=\sum_{k\ge0}\gamma^k r_{t+k+1}\)。6.12 节最小化代价 \(c\),这里最大化奖励,二者只差一个符号 \(r=-c\),\(\min\) 变成 \(\max\)。最优动作价值满足 Bellman 最优方程:
值迭代用模型精确计算右边的期望。没有模型时,我们只能拿到期望里的样本。
用样本求期望:随机逼近
要估计随机变量 \(X\) 的均值,样本均值可以写成增量形式 \(\bar x_n=\bar x_{n-1}+\tfrac1n(x_n-\bar x_{n-1})\)。把 \(1/n\) 换成一般步长 \(\alpha_t\),就是本课所有更新共同的形状"估计 ← 估计 + α(目标 − 估计)"。Robbins–Monro 条件保证它收敛到均值:
第一条保证步长总和足够大,从任何初值都能走到真值;第二条保证步长衰减得足够快,噪声最终被平均掉。\(\alpha_t=1/t\) 两条都满足。
常数步长不满足第二条:估计不会精确收敛,而是在真值附近持续抖动,抖动幅度随 \(\alpha\) 增大(FIG 1 里 \(\alpha_{\rm TD}=0.3\) 的误差平台)。好处是它对较新的样本权重更大,适合环境或策略在变化的情形。
蒙特卡洛与 TD(0)
左边是蒙特卡洛,右边是 TD(0),\(\delta_t\) 叫 TD 误差:
\(G_t\) 是 \(V^\pi(s_t)\) 的无偏样本,但它累积了整条轨迹上所有动作和转移的随机性,方差大;TD 目标只含一步的随机性,方差小,但在 \(V\) 不准时是有偏的。两者的关系是一个望远镜求和:若 \(V\) 在回合内保持不变,
MC 误差就是之后所有 TD 误差的折扣和。介于两者之间的 \(n\) 步回报和 TD(\(\lambda\)) 在这条谱上连续地取舍偏差与方差;20.4 节的 GAE 用的正是这个思路。
SARSA、Q-learning 与收敛
SARSA 的目标 \(r_{t+1}+\gamma Q(s_{t+1},a_{t+1})\) 是 \(Q^\pi\) 的 Bellman 期望方程的样本(\(\pi\) 是正在执行的策略);Q-learning 的目标 \(r_{t+1}+\gamma\max_{a'}Q(s_{t+1},a')\) 是 Bellman 最优方程的样本,与 \(a_{t+1}\) 怎么选无关,所以是 off-policy。表格 Q-learning 在每个 \((s,a)\) 被无限次访问且步长满足 Robbins–Monro 条件时以概率 1 收敛到 \(Q^\star\)(Watkins & Dayan, 1992)。ε-greedy 行为策略:
让 \(\varepsilon\) 随时间慢慢趋于 0,同时保证每个动作仍被无限次尝试(GLIE),SARSA 也收敛到 \(Q^\star\)。FIG 3 里 \(\varepsilon\) 固定为 0.1,所以 SARSA 收敛到的是 ε-greedy 策略中最好的那个,而不是 \(Q^\star\)。
最大化偏差与双估计器
\(\max\) 是凸函数,由 Jensen 不等式 \(\mathbb E[\max_a\hat Q_a]\ge\max_a\mathbb E[\hat Q_a]\)。例如 10 个真实值都为 0、估计误差独立服从 \(\mathcal N(0,1)\) 的动作,估计的最大值期望约为 1.54。Double Q-learning 用两张表 \(Q^A,Q^B\),每次随机更新其中一张:
选择用 \(Q^A\),估值用独立的 \(Q^B\):给定所选动作,\(Q^B\) 对它的估计是无偏的(整体上可能略微低估)。Double DQN(van Hasselt 等, 2016)直接复用 DQN 现成的两套参数:目标改为 \(r+\gamma\,Q_{\theta^-}\big(s',\arg\max_{a'}Q_\theta(s',a')\big)\)。
函数逼近:半梯度 TD
有参数时,Q-learning 的更新是
它看起来像在对 \(\tfrac12\delta_t^2\) 做梯度下降,其实不是:真正的梯度还应包含目标对 \(\theta\) 的导数,这里把目标当常数("半梯度")。所以它不是任何固定目标函数的下降法,SGD 的收敛保证(6.4 节)不适用。on-policy 的线性 TD 是收敛的(Tsitsiklis & Van Roy, 1997),因为在 on-policy 分布下更新的期望方向是"稳定"的;off-policy 时这个性质丢失,FIG 5 就是反例(Baird 1995 给出了更著名的七状态反例)。目标网络把 \(\max_{a'}Q_{\theta^-}\) 在 \(C\) 步内冻结,使每一段都是一个真正的回归问题。
所有 value-based 方法都是"用样本代替期望的 Bellman 备份";它们的区别在于用什么当目标(\(G_t\)、\(Q(s',a')\)、\(\max\)、双估计器),以及用表格还是函数来存储估计。
7机器人中的它
DQN 的突破。Mnih 等(Nature 2015)用同一个卷积网络、同一套超参数,直接从屏幕像素学会了 49 个 Atari 2600 游戏,其中许多达到人类水平。它展示了 Q-learning 加上回放和目标网络能从高维感知输入学控制。之后的改进(Double DQN、优先经验回放、Dueling 结构、多步回报、分布式价值等)被 Rainbow(Hessel 等, 2018)合在一起。
离散动作的机器人任务。当动作能自然地离散化时,Q 函数很好用。Zeng 等(IROS 2018)让机器人在杂乱桌面上学"推"和"抓"的配合:两个全卷积网络(推、抓各一个)为俯视图的每个像素和每个末端朝向输出一个 \(Q\) 值,机器人执行 \(Q\) 最大的那个像素上的动作。"在哪个像素抓"是一个巨大但有图像结构的离散动作空间,网络一次前向就能对它取 \(\max\)。
连续动作的难处。DQN 的 \(\max_{a'}\) 要对所有动作枚举。机械臂的动作是连续的关节速度或末端位移:一个 7 关节手臂每个关节只取 5 档,就有 \(5^7=78125\) 个动作,再细一点就无法枚举。几种出路:
- 在动作上做优化:QT-Opt(Kalashnikov 等, CoRL 2018)用相机图像和候选动作作为 Q 网络输入,用交叉熵方法(6.11 节的 CEM)在连续动作上近似求 \(\max_a Q(s,a)\)。它主要用在多台真实机器人上收集的大量抓取尝试做 off-policy 训练,报告在没见过的物体上达到 96% 的抓取成功率。
- 让 \(\max\) 有闭式解:NAF(Gu 等, 2016)把优势函数限制为动作的二次型,最大值点直接由网络输出。
- 学一个策略网络去做 \(\max\):DDPG、TD3 和 SAC 训练一个 actor \(\mu_\phi(s)\approx\arg\max_aQ(s,a)\),critic 用的正是本课的 TD 目标,这是 20.4 节的内容;或者完全绕开 \(Q\),直接对策略求梯度,这是 20.3 节。
为什么 off-policy 对机器人重要。真实机器人每次尝试都花时间、磨损硬件。Value-based 的 off-policy 学习让所有历史数据都能复用,也是从固定数据集学习(20.5 节 离线 RL)的起点;不过在完全离线时,\(\max\) 会去查询数据里从没出现过的动作,最大化偏差会变成严重的"外推误差",那是 20.5 节要解决的问题。TD 学习本身也贯穿后面的课:actor-critic 的 critic、24.3 节 TD-MPC 里的价值函数,都用本课的 TD 目标训练。
用 DQN 类方法时最常检查的几件事:奖励尺度(DQN 在 Atari 上把奖励截断到 \([-1,1]\));终止与超时截断分开处理;目标网络同步周期或软更新系数 \(\tau\)(\(\theta^-\leftarrow\tau\theta+(1-\tau)\theta^-\));回放缓冲区够不够大,旧数据会不会太旧;以及定期用贪心策略做独立评估,同时比较预测的 \(Q\) 和实际的回报,二者长期对不上说明在高估或发散。
8常见误区
回合因为到了步数上限而结束时,\(s'\) 并不是终止状态,机器人本可以继续走下去,目标仍应是 \(r+\gamma\max_{a'}Q(s',a')\)。若把它当成终止(\(d=1\)),就等于告诉网络"在这个位置未来价值为 0",而这只取决于计时器,不取决于状态,学出来的价值会出现无法解释的凹陷。FIG 6 里只在真正到达目标时置 \(d=1\)。
ε-greedy 每一步独立地随机,难以完成需要"连续很多步都偏离当前最好"的探索(FIG 2 的小充电点陷阱)。稀疏奖励的机器人任务里尤其明显。乐观初值、基于访问计数或不确定性的探索奖励、示范数据引导,往往比调大 \(\varepsilon\) 有效得多。
FIG 3 里 Q-learning 的训练回报比 SARSA 差得多,可它学到的贪心策略更好(\(-13\) 对 \(-17\))。训练回报混入了探索的代价,衡量的是行为策略,不是目标策略。评价学到的策略,要关掉探索单独跑评估回合。
\(\max\) 带来的系统性高估(FIG 4)和函数逼近误差叠加在一起,DQN 的 \(Q\) 值常常明显高于真实回报(FIG 6 训练初期预测值在 0.8 以上,而实际回报是 0)。若用 \(Q\) 做决策之外的事,例如判断"抓取成功概率"或在多个策略间比较,要先用蒙特卡洛回报校准,或用 Double/Clipped 估计器。
去掉目标网络,FIG 6 的预测值在两千步内就冲到几百甚至上万;去掉回放,成功率在 12000 步时仍不到 30%。它们不是调参技巧,而是让"off-policy + 自举 + 函数逼近"能工作的结构性部件。学习率太大、目标同步太频繁,效果和去掉目标网络类似。
9小练习
10延伸阅读
- R. S. Sutton & A. G. Barto, Reinforcement Learning: An Introduction, 2nd ed., MIT Press, 2018, Ch. 6 and 11 — TD、SARSA、Q-learning(随机游走、悬崖行走、最大化偏差的例子都出自第 6 章),以及函数逼近与致命三元组(第 11 章)
- R. S. Sutton, Learning to predict by the methods of temporal differences, Machine Learning, 1988 — TD 学习的奠基论文
- C. J. C. H. Watkins & P. Dayan, Q-learning, Machine Learning, 1992 — Q-learning 的收敛性证明(算法本身来自 Watkins 1989 年的博士论文)
- G. A. Rummery & M. Niranjan, On-line Q-learning using connectionist systems, Cambridge University technical report, 1994 — 后来被称为 SARSA 的算法
- H. van Hasselt, Double Q-learning, NeurIPS (NIPS) 2010; H. van Hasselt, A. Guez & D. Silver, Deep reinforcement learning with double Q-learning, AAAI 2016 — 最大化偏差与双估计器
- V. Mnih et al., Human-level control through deep reinforcement learning, Nature, 2015 — DQN:经验回放、目标网络,从像素玩 Atari
- J. N. Tsitsiklis & B. Van Roy, An analysis of temporal-difference learning with function approximation, IEEE Transactions on Automatic Control, 1997 — 线性 TD 在 on-policy 下收敛,以及 off-policy 时为何会失败
- D. Kalashnikov et al., QT-Opt: Scalable deep reinforcement learning for vision-based robotic manipulation, CoRL 2018 — 用 CEM 处理连续动作的 Q-learning,在真实机器人上学抓取
- M. Hessel et al., Rainbow: Combining improvements in deep reinforcement learning, AAAI 2018 — DQN 各种改进的组合与消融