模仿学习:BC 与 DAgger
教机器人做一件事,最直接的办法是做给它看:录下专家的观测和动作,训练一个网络从观测预测动作。这就是行为克隆(BC),本质上是监督学习。可机器人一旦自己动起来,它的小错误会把它带到专家从没去过的地方,在那里它没有数据,错误越积越大:误差随任务长度 T 按 T² 增长。DAgger 让学习者自己开、让专家给它到过的状态打标签,把增长压到 T 量级。本节在浏览器里现场训练策略,看 BC 撞墙、看噪声注入和 DAgger 把它救回来,自己当一回“人类门控”的专家,再看为什么对多模态示教做均方误差回归会直直撞上障碍物。
1为什么机器人需要它
叠衣服、插充电线、把杯子放进洗碗机:这些任务很难写成代价函数,更难写成控制律,但一个人用遥操作手柄做一遍却很容易(遥操作设备与数据采集见 22.3 节)。模仿学习就是从这样的示教里学出一个策略 \(\pi_\theta(o)\):输入机器人此刻的观测 \(o\)(相机图像、关节角),输出动作 \(a\)。
最简单的做法叫行为克隆(behaviour cloning, BC):把示教拆成一对对 \((o_t,a_t)\),当作普通的监督学习数据集,用 16.1 节的回归(连续动作)或分类(离散动作)去拟合。今天大多数操作策略,从 ALOHA 上的 ACT、Diffusion Policy(22.2 节)到用大量示教训练的 RT-1 和各种 VLA,训练目标的核心都是行为克隆,只是网络和动作表示更讲究。
可监督学习有一个默认前提:测试数据和训练数据来自同一个分布(16.2 节)。策略一上机就把它打破了:机器人自己的动作决定了它下一步看到什么。它犯一个小错,就到了专家没去过的状态;在那里它没有数据,更容易犯错;再错就离得更远。这一节要回答三个问题:
- 这种误差累积有多严重?(答案:最坏情况下额外代价随任务长度按 \(T^2\) 增长,FIG 1、FIG 2。)
- 怎么修?(让专家在学习者自己到过的状态上打标签:DAgger 及其人类门控版本,FIG 3、FIG 4;或者示教时故意加噪声,FIG 1。)
- 示教里同一个状态有两种做法时怎么办?(均方误差会取平均,FIG 5;生成式策略见 22.2 节。)
2直觉:小错误把你带到老师没去过的地方
想象一个学开车的人,只看过教练开车的录像。教练开得很稳,车一直在车道正中,所以录像里从来没有“车已经偏向路边,该怎么回来”这种画面。学员自己上路,方向稍微打多一点,车偏了 20 cm。这个画面他没见过,只能猜;猜错了就偏得更多,更陌生,直到压线。
关键的区别在于数据是谁产生的。普通监督学习里,测试样本由世界给出,和模型无关。模仿学习里,测试时的状态由学习者自己的策略产生:设专家策略为 \(\pi^*\),它跑出来的状态分布是 \(\hl{dstar}{d_{\pi^*}}\),训练数据就来自这里;学到的策略 \(\hat\pi\) 跑出来的状态分布是 \(\hl{dpi}{d_{\hat\pi}}\),它在部署时面对的是这个分布。\(\hat\pi\) 和 \(\pi^*\) 差一点点,\(d_{\hat\pi}\) 就可能和 \(d_{\pi^*}\) 差很多,因为差异会沿着时间累积。这就是 16.2 节的协变量偏移,只不过偏移是策略自己造成的;19.4 节的自回归模型在生成时喂入自己的输出,遇到的“暴露偏差”是同一件事。
下面所有图都在同一个场景里:一台仓库里的移动机器人(琥珀色)以 1 m/s 沿一条 0.9 m 宽、22.7 m 长的弯曲通道从左下走到右上,两边是货架,碰到就算失败。专家 \(\pi^*\) 是一个简单的控制器:沿通道方向走,同时以增益 3 /m 把自己拉回中线。学习者看到的不是坐标本身,而是 26 个数:\(x,y\) 和它们 12 种随机组合的正弦与余弦(随机傅里叶特征),代替相机那样的“丰富”传感器。像图像一样,机器人挪动一点,这些数就变很多,所以离示教路线 20 cm 的状态,在网络看来是完全陌生的输入。网络是 26 → 32 → 32 → 2 的 tanh MLP,输出前进方向,用均方误差训练。
3动手:训练一个 BC 策略,看它自己开
按“训练”:网络在一条示教(约 450 个 \((o,a)\) 对)上做 3000 步 Adam(批大小 32,学习率 0.003),然后自动做 6 次评测。评测时机器人的轮子会打滑:执行的方向带一点有色噪声(标准差 0.2 rad),每次评测的噪声不同。专家在这 6 次评测里次次都到达终点。训练完后红色的“误差图”出现:每个格子的红色越深,学到的方向和专家方向的夹角越大。拖动琥珀色的探针圆圈看任意一点的两个方向。
- 用 1 条无噪声示教训练并评测。训练损失有多小?6 次评测里有几次到达终点?撞墙前大约走了路线的多少?
- 训练后,把探针拖到通道里离示教路线至少 0.2 m 的地方,找一个学到的方向和专家方向相差超过 45° 的点。再拖回示教路线上看看夹角有多小。
- 把示教条数调到 4(仍然不加噪声)再训练评测。数据多了 4 倍,结果变好了吗?为什么?(看下方直方图里绿色柱子的宽度。)
- 把示教噪声调到至少 0.2 rad,训练并让 6 次评测里至少 4 次到达终点。误差图和直方图有什么变化?
默认设置下(1 条示教、无噪声),训练损失约 \(2\times10^{-4}\),在示教路线 5 cm 以内,学到的方向和专家只差约 4°;可 6 次评测全部撞墙,最远的走了路线的 29%,最近的只走了 8%。误差图解释了原因:离示教路线 20 cm 以上的格子,平均夹角约 45°。示教状态离中线平均只有 3 mm,评测状态平均 13 cm:机器人一旦被打滑推离那条细线,就进入了网络从没见过的输入区,在那里它的方向基本是乱的。
多给示教并没有用:4 条无噪声示教几乎重合(起点只差几厘米,专家马上把自己拉回中线),数据量翻了 4 倍,覆盖的状态却一样窄,6 次评测仍然 0 次成功(2 条示教时是 1 次)。真正有用的是示教里出现过“偏了又回来”的状态:示教噪声 0.2 rad 时 3 次成功,0.25 到 0.35 rad 时 4 次,0.4 rad 以上 5 次。
BC 的训练损失衡量的是 \(\hat\pi\) 在专家的状态分布 \(d_{\pi^*}\) 上有多准,而机器人的表现取决于它在自己的状态分布 \(d_{\hat\pi}\) 上有多准。两者之间没有监督学习的保证:训练损失小、验证损失也小的策略,闭环执行时照样可以一次都不成功。要让它可靠,训练数据必须覆盖学习者自己会去的地方。
4误差为什么会累积:εT² 对 εT
把 FIG 1 抽象成一个最简单的模型。任务有 \(T\) 步,每步在专家的状态上,学习者以概率 \(\varepsilon\) 犯错并离开专家的轨迹;离开之后的每一步记代价 1(“不在该在的地方”)。
- BC 学习者:只在专家的状态上训练过,离开之后不知道怎么回来,就一直在外面。到第 \(t\) 步时已经离开的概率是 \(1-(1-\varepsilon)^t\approx\varepsilon t\),把它对 \(t\) 求和,总代价约为 \(\hl{bcT2}{\varepsilon T^2/2}\):按 \(T^2\) 增长。直到 \(\varepsilon T\) 接近 1(几乎每次都会掉下去)才变平,那时代价已接近 \(T\)。
- DAgger 学习者:在自己离开后的状态上也有专家标签,所以每步有概率 \(1/u\) 回到轨迹上(平均 \(u\) 步回来)。它在外面的时间比例约为 \(\varepsilon/(\varepsilon+1/u)\),总代价约 \(\hl{dagT}{u\varepsilon T}\):按 \(T\) 增长。
下图上半部分是 BC 学习者的 24 次模拟(每行一次,横轴是时间,紫色格子表示那一步在轨迹外),下半部分是 DAgger 学习者(蓝色格子)。右边的对数坐标图是期望代价随 \(T\) 的变化(精确值,实线)和两个上界(虚线,第 8 节推导):对数坐标里斜率 2 和斜率 1 的直线。
- 找一组设置,使得把 \(T\) 加倍时 BC 的期望代价变成原来的 3.5 倍以上,而 DAgger 的不到 2.2 倍(读数里的“加倍比”)。提示:\(\varepsilon T\) 要小,\(T\) 要比 \(u\) 大很多。
- 让 BC 的期望代价达到 DAgger 的 10 倍以上。哪个滑块最有效?
默认 \(\varepsilon=0.02\)、\(u=5\)、\(T=100\) 时,BC 平均有 57.5 步在外面,DAgger 只有 8.8 步。这个玩具模型把 BC 想得很悲观(一旦离开永不回来),但它抓住了要点:BC 的问题不是单步误差 \(\varepsilon\) 大,而是一次误差的后果会延续到任务结束。所以任务越长(机器人每秒做 10 到 50 次决策,一个 30 秒的任务就是几百到上千步),BC 越吃亏。
5DAgger:学习者来开,专家来标
既然问题是“训练分布 \(d_{\pi^*}\) 不是测试分布 \(d_{\hat\pi}\)”,最直接的修法就是到 \(d_{\hat\pi}\) 上去采数据。Ross、Gordon 和 Bagnell(2011)提出的 DAgger(Dataset Aggregation,数据聚合)就是这么做的:
- 用专家示教得到数据集 \(\mathcal D\),训练出第一个策略 \(\hat\pi_1\)(这一步就是 BC)。
- 第 \(i\) 轮:用混合策略 \(\pi_i=\beta_i\pi^*+(1-\beta_i)\hat\pi_i\) 跑一遍(每一步以概率 \(\beta_i\) 执行专家的动作),记下到过的状态 \(s\)。
- 请专家给每个到过的状态标上它会怎么做:\(a=\pi^*(s)\)。注意执行的是学习者的动作,专家只负责“打标签”。
- 把新数据并入所有旧数据:\(\hl{agg}{\mathcal D\leftarrow\mathcal D\cup\{(o(s),\pi^*(s))\}}\),在整个 \(\mathcal D\) 上重新训练得到 \(\hat\pi_{i+1}\),回到第 2 步。
常用的选择是 \(\beta_1=1\)、之后 \(\beta_i=0\):第一轮就是专家示教,之后完全由学习者开。下图从 FIG 1 默认的 BC 策略(0/6)出发。每按一次“一轮 DAgger”:学习者带着打滑噪声跑一遍(琥珀色线),撞墙或到终点就停;它到过的每个状态由专家打标签(蓝色点),并入数据集,在全部数据上再训练 800 步,然后用和 FIG 1 完全相同的 6 次评测打分。
- 在“聚合全部数据”下一轮一轮跑,直到 6 次评测全部到达终点。用了几轮?新增了多少个标签?
- 切换到“只用最新一轮”,跑至少 3 轮。每轮的策略都只在上一次采集的状态上训练,成功次数怎样?(任务在第 3 轮后成功次数不超过 2 时完成。)
默认设置(聚合、\(\beta=0\))下,6 次评测的成功次数依次是 0、2、3、5、6:4 轮后全部成功,训练集从 451 个样本涨到 1519 个。前几轮采集都撞墙了(每轮只到达路线的一段),但每一轮都恰好在“上一个策略出错的地方”补上了标签。“只用最新一轮”每一轮都是 0/6:新策略学会了上次出错的那一小段,却忘了其余的路。这就是“聚合”二字的分量:DAgger 的理论保证(第 8 节)依赖于在所有历史数据上训练。采集时取 \(\beta=0.5\),专家每隔几步帮一把,采集一遍就能走完整条路线,第一轮之后就是 6/6,代价是每轮请专家标注更多的状态(每轮约 460 个)。
另一条路:示教时加噪声(DART)
DAgger 要求专家在学习者开车时随叫随到。FIG 1 的“示教噪声”滑块是一种更省事的办法:示教时就故意把专家推离轨迹,执行加了噪声的动作,但记录的标签是专家想要的动作。这样 \(d_{\pi^*}\) 本身就变宽,覆盖了学习者可能偏到的地方。Laskey 等(2017)的 DART 把这个思路系统化,并按学习者的误差大小来选噪声。噪声太小覆盖不够,太大则示教本身变差甚至失败。它的局限是:噪声只能模拟“附近”的偏差,学习者真正会犯的错误由它自己决定,DAgger 直接到那里采样。19.4 节的 FIG 4 已经在自回归轨迹模型上看过同样的效果(扰动示教状态、标上专家的回正动作);这里换成闭环策略和轮子打滑。早在 1990 年前后,ALVINN 就用合成“车偏了”的图像来教网络回正,NVIDIA 2016 年的端到端驾驶网络用左右两侧相机的图像配上修正后的方向盘角,是同一个思想。
6当专家是人:人类门控的 DAgger
FIG 3 的专家是一段代码,随时能回答“在这个状态你会怎么走”。人类专家没那么容易:看着一个正在乱开的机器人,凭空说出每一帧该打多少方向,没有手上的反馈,标签质量很差;而且让一个半成品策略一直开下去,真机可能撞坏东西。HG-DAgger(Kelly 等,2019)的折中是:学习者开,人在旁边看着,觉得要出事时接管;只有接管期间人亲手开出来的 \((o,a)\) 被记录下来,接管结束交还控制权。每跑完一次,在所有数据上重新训练。
下图里你就是那个人:按住“接管”按钮时由专家驾驶(代表你的手),琥珀色线段就是被记录的标签;松开就交还给学习者(紫色线段)。也可以把门控交给“自动”:离中线超过 0.25 m 就接管,回到 0.08 m 以内交还。
- 在必要时接管,直到学习者完全不需要接管就跑到终点(至少经过一次带接管数据的重新训练之后)。
- 用少于 400 个接管标签,让“评测”的 6 次全部到达终点。和 FIG 3 的 DAgger 比,标签用了多少?
用“自动”门控时,第 1 次接管了 107 步,第 2 次 10 步,第 3 次学习者已经自己跑完全程;这时一共 117 个标签,评测 6/6(之后偶尔还会有一次短暂的接管,比如第 7 次接管了 12 步)。FIG 3 的 DAgger 为了 6/6 新增了 1068 个标签,因为它给学习者到过的每一个状态都打标签,包括那些学习者本来就做对了的。HG-DAgger 只在人认为危险的地方要标签,代价是要有人一直盯着,而且“什么时候接管”本身是人的判断。后续工作让这个判断自动化:SafeDAgger(Zhang 与 Cho,2017)训练一个网络预测学习者会不会出错,EnsembleDAgger(Menda 等,2019)和 ThriftyDAgger(Hoque 等,2021)用策略集成的分歧等不确定性信号(21.3 节)来决定何时请人帮忙。
7同一个状态,两种做法:为什么 MSE 会取平均
DAgger 解决的是“去哪里采数据”。还有一个问题出在“怎么拟合数据”上。人示教时,面对同一个场景经常有好几种都对的做法:从障碍物左边绕或右边绕,先抓左边的杯子或右边的杯子。用均方误差(MSE)训练时,网络在每个观测上输出的是数据里动作的条件均值 \(\hl{mean}{\mathbb E[a\mid o]}\)(推导见第 8 节)。一半示教向左、一半向右,平均就是直走。
19.1、19.2 和 17.5 节看过“一个动作”的版本。这里看闭环的版本:机器人以 1 m/s 向前(上)走,正前方 3 m 处有一根半径 0.4 m 的柱子,它每一步选择横向速度 \(a\)。它的传感器只有一个朝前的测距仪,所以观测只有“走了多远” \(y\),看不到自己的横向位置。20 条示教中,一部分从左边绕(横向偏移最大 0.9 m),其余从右边绕。比较三种策略头,都是 32–32 的 tanh MLP:
- MSE 回归 \(a=\pi_\theta(y)\):就是前面用的 BC。
- 分类 + 每步采样:把横向速度分成 5 档(−1.2、−0.6、0、0.6、1.2 m/s),用交叉熵训练,执行时每一步从预测的分布里独立采样一档。它能表示“两个都可能”(17.5 节的动作 token 就是这个思路)。
- 给定“走哪边” \(a=\pi_\theta(y,z)\):额外告诉网络每条示教走的是哪一边 \(z=\pm1\),执行时每次评测开始时抽一次 \(z\),之后一直不变。这里我们直接把 \(z\) 交给它,是为了看清“承诺一个模式”有多大作用;19.1 节的条件 VAE 不需要这个标签,它自己学出这样一个隐变量。
- 用 MSE 头,在示教里两边都有(左绕比例严格介于 0 和 1 之间)的前提下,找一个左绕比例让 20 次试验都不撞柱子。最小要多偏向一边?和条件均值的公式对得上吗?
- 把左绕比例放在 0.4 到 0.6 之间,先看分类头每步采样的结果,再换成“给定走哪边”的头,让 20 次试验全部通过。
左绕比例为 \(p\) 时,条件均值让机器人在柱子处的横向偏移是 \((1-2p)\times0.9\) m,要大于柱子半径 0.4 m 才能通过,即 \(p>0.72\) 或 \(p<0.28\)。FIG 5 里 MSE 头在 \(p=0.7\) 时撞上、\(p=0.75\) 时通过,和公式一致。分类头每步采样在 \(p=0.5\) 时 20 次全撞:它知道“左右都行”,可每一步都重新掷硬币,左一步右一步,横向位置像随机游走一样在中间徘徊,哪边都没去成。给定 \(z\) 的头一次也不撞。教训是:能表示多个模式还不够,执行时还要在一段时间里坚持同一个模式。这正是动作分块(一次预测并执行一串动作)、隐变量和扩散策略在 22.2 节要解决的问题。
8再看数学
提示:把鼠标悬停在公式中带底色的符号上,对应的图元素会被高亮:\(d_{\pi^*}\) 和 \(d_{\hat\pi}\) 加粗 FIG 1 的示教线、评测线和直方图,两个上界加粗 FIG 2 的对应曲线,\(\mathcal D\) 放大 FIG 3 的数据点,\(\mathbb E[a\mid o]\) 加粗 FIG 5 右图的紫色曲线。
设定
和 6.12 节一样用“代价”的语言:有限时域 \(T\),状态 \(s_t\),动作 \(a_t\),每步代价 \(c(s_t,a_t)\in[0,1]\),策略 \(\pi\) 的总代价 \(J(\pi)=\mathbb E\big[\sum_{t=1}^T c(s_t,a_t)\big]\)。\(d^t_\pi\) 是执行 \(\pi\) 时第 \(t\) 步的状态分布,\(d_\pi=\tfrac1T\sum_t d^t_\pi\) 是整条轨迹上的平均状态分布。专家 \(\pi^*\) 是确定性的。学习者 \(\hat\pi\) 在状态 \(s\) 上的误差用 0–1 损失 \(\ell(s,\hat\pi)=\mathbb 1[\hat\pi(s)\ne\pi^*(s)]\) 衡量(连续动作时换成任何能上界它的代理损失)。
行为克隆是在专家分布上做经验风险最小化:
对随机策略 \(\pi_\theta(a\mid o)\),这就是最大似然 \(\max_\theta\sum\log\pi_\theta(a_t\mid o_t)\):固定方差的高斯策略给出 MSE,离散动作给出交叉熵(16.2 节的“损失 = 负对数似然”)。\(\varepsilon\) 是监督学习能控制的量:数据越多、模型越好,它越小,并且有泛化界保证它在专家分布上的值。
BC 的 \(T^2\) 界(Ross 与 Bagnell,2010)
证明梗概(耦合论证)。让 \(\hat\pi\) 和 \(\pi^*\) 共用同一串随机数(同样的初始状态和转移噪声)。只要 \(\hat\pi\) 在前 \(k\) 步都和专家选了同一个动作,两条轨迹就完全一样,记 \(\tau\) 为 \(\hat\pi\) 第一次选了和专家不同动作的那一步,那么“\(\tau\le t\)”意味着“在专家轨迹的某个第 \(k\le t\) 步上 \(\hat\pi(s_k)\ne\pi^*(s_k)\)”。由并集界,
分岔之前两条轨迹的代价相同,分岔之后每步最多多付 1,所以额外代价 \(\le\sum_{t=1}^T P(\tau\le t)\le T\cdot T\varepsilon\)。这个界是紧的:Ross 与 Bagnell 构造了让 BC 真的付出 \(\Theta(T^2\varepsilon)\) 的例子,FIG 2 的“掉下去就回不来”模型就是这一类(在 \(\varepsilon T\ll1\) 时代价 \(\approx\varepsilon T^2/2\))。直觉上,\(T^2\) 里一个 \(T\) 来自“有 \(T\) 次机会犯第一个错”,另一个 \(T\) 来自“犯错之后还要付最多 \(T\) 步的代价”。
在自己的分布上训练:\(uT\varepsilon\)
记 \(Q^*_t(s,a)\) 为“第 \(t\) 步在 \(s\) 做 \(a\),之后按专家走”的期望剩余代价(6.12 节的 cost-to-go,加上一步动作),\(V^*_t(s)=Q^*_t(s,\pi^*(s))\)。性能差分引理(Kakade 与 Langford,2002 的有限时域形式)把两个策略的代价差写成学习者自己的状态分布上的逐步“劣势”之和:
这里 \(u\) 是“走错一步之后,按专家继续走最多多付多少”:\(Q^*_t(s,a)-V^*_t(s)\le u\)。专家能很快纠正错误的任务(比如 FIG 1 的通道,专家 1 秒内就能拉回中线),\(u\) 是个小常数;FIG 2 的 \(u\) 就是平均回来需要的步数。关键在于 \(\hat\varepsilon\) 是在 \(d_{\hat\pi}\) 上量的:如果我们在学习者自己的分布上把监督误差压小,代价就只按 \(T\) 线性增长。
难点是 \(d_{\hat\pi}\) 取决于 \(\hat\pi\),而 \(\hat\pi\) 又取决于训练数据,像追自己的尾巴。DAgger 把它看成在线学习:第 \(i\) 轮的损失函数是 \(\ell_i(\pi)=\mathbb E_{s\sim d_{\pi_i}}[\ell(s,\pi)]\),在聚合数据 \(\hl{agg}{\mathcal D}\) 上训练就是在所有历史损失之和上取最优,即在线学习里的“跟随领先者”(Follow-The-Leader)。只要这个学习过程“无悔”(平均损失追得上事后最好的那个固定策略),Ross 等(2011)就证明:当轮数足够多(随 \(uT\) 增长,差一个对数因子),并且 \(\beta_i\) 衰减得足够快时,序列里至少有一个策略满足
其中 \(\varepsilon_N\) 是事后看来最好的策略在所有轮的混合分布上的误差,也就是“如果我们事先知道学习者会去哪里,监督学习能做到多好”。实践中通常直接取最后一个策略,或者用验证集选。FIG 3 里“只用最新一轮”丢掉了聚合,相当于每轮只追最新的损失 \(\ell_i\),这不是无悔的,结果来回摇摆。
噪声注入换一个角度看:执行 \(\pi^*\) 时加噪声,等于把训练分布从 \(d_{\pi^*}\) 换成 \(d_{\tilde\pi^*}\)(\(\tilde\pi^*\) 表示加了噪声的专家)。如果噪声造成的偏差和学习者误差造成的偏差差不多大,后者大部分落在前者覆盖的范围里,\(\hat\varepsilon\) 和 \(\varepsilon\) 就差不多;DART 正是按这个目标去选噪声的。
MSE 的最优解是条件均值
对固定的观测 \(o\),最小化 \(\mathbb E[(f-a)^2\mid o]=f^2-2f\,\mathbb E[a\mid o]+\mathbb E[a^2\mid o]\),对 \(f\) 求导置零:
\(a_L=-a_R\) 时 \(f^*=(1-2p)a_R\),FIG 5 的 \((1-2p)\times0.9\) m 就是把它沿路径积分的结果。L1 损失给出条件中位数,\(p=0.5\) 时区间 \([a_L,a_R]\) 里任何一点都是最优解,同样可能落在中间。根子在于:MSE 是固定方差高斯的负对数似然,而单峰高斯只能用“放在中间、方差变大”来解释两个峰。解决办法是换一个能表示多峰的 \(p_\theta(a\mid o)\):混合高斯(混合密度网络)、离散化后的分类(17.5 节)、隐变量模型(19.1 节)、能量模型(19.5 节的隐式 BC)或扩散与 flow matching(22.2 节)。FIG 5 还说明了第二点:即便 \(p_\theta\) 是对的,逐步独立采样也会在模式间来回跳,所以这些方法还要在时间上保持一致(动作分块、固定隐变量)。
9设计选择:观测、动作、历史与动作块
真正搭一个 BC 系统时,除了网络结构,下面这几个选择对成败的影响往往更大。
| 选择 | 常见做法 | 要注意什么 |
|---|---|---|
| 观测 | 一到几个相机(腕部 + 外部视角)加本体感觉(关节角、夹爪开合),各自归一化 | 观测要足以决定动作(近似马尔可夫)。缺了关键信息(看不见被挡住的物体)时,专家的动作在策略看来就像噪声或多模态 |
| 动作 | 关节目标位置,或末端位姿目标(绝对或相对当前的增量),由底层位置控制器(13.1 节)以更高频率跟踪;10 到 50 Hz 输出 | 频率越高,同一任务的 \(T\) 越大,误差累积越厉害;增量动作对小的偏差更宽容,绝对动作不会随时间漂移。动作也要归一化 |
| 历史 | 叠加最近几帧观测,或用 RNN / Transformer 读一段历史(17.2 节) | 能补上速度等看不到的量,但也可能学到“抄上一个动作”这种捷径(误区 4) |
| 动作块 | 一次预测接下来 \(k\) 步的动作 \(a_{t:t+k}\),执行其中一部分再重新预测(ACT、Diffusion Policy) | 决策次数少了约 \(k\) 倍(ACT 的作者把它说成把有效时域缩短 \(k\) 倍),一块之内动作前后一致,不会在模式间抖动(FIG 5);代价是块内对扰动的反应变慢。细节见 22.2 节 |
10机器人中的它
最早的 BC:ALVINN。Pomerleau(1989)用一个小神经网络驾驶卡内基梅隆大学的 Navlab 无人车,从低分辨率的道路图像直接输出方向盘方向,并且已经遇到了本节的问题:人开车时车总在车道中间,网络学不到怎么回正,于是他用几何变换合成“车偏了”的图像并配上回正的方向(1991 年的论文)。端到端驾驶:NVIDIA 的 Bojarski 等(2016)用 CNN 从图像预测方向盘角,左右两侧相机的图像配上加了修正量的方向盘角,用来教网络从偏离中恢复。DAgger 的实验:Ross 等(2011)在赛车游戏 Super Tux Kart 和 Super Mario Bros 上验证了 DAgger 远好于 BC;Ross 等(ICRA 2013)用 DAgger 训练一架四旋翼无人机仅凭单目相机在树林中避障飞行,由人类在回放的视频上给无人机到过的状态打标签。
人在回路:HG-DAgger(Kelly 等,ICRA 2019)在驾驶任务上验证了“安全员接管”式的数据采集;SafeDAgger、EnsembleDAgger、ThriftyDAgger 让策略自己判断何时请人帮忙。今天很多机器人团队部署策略时都会记录人类接管,把这些片段加入下一轮训练,就是 HG-DAgger 的思路。现代 BC:RT-1(Brohan 等,2022)用约 13 万条移动操作机器人的示教做 BC,把动作离散成 token 训练 Transformer;ALOHA 上的 ACT(Zhao 等,RSS 2023)和 Diffusion Policy(Chi 等,RSS 2023)用动作分块和生成式动作头解决了本节的两个问题中的一部分(22.2 节)。经验教训:robomimic(Mandlekar 等,CoRL 2021)系统比较了多种离线模仿学习方法,发现带历史的 BC(BC-RNN)在人类示教上很强,而按验证损失挑选检查点并不可靠,必须实际执行评测;Codevilla 等(ICCV 2019)在驾驶上报告了 BC 的数据偏差、因果混淆,以及结果随训练随机种子大幅波动。
和其他方法的关系:BC 只用示教、不需要奖励。有奖励时,BC 常用来初始化强化学习(20.4 节),离线强化学习的很多方法(TD3+BC、IQL)可以看成“BC 加上一点价值函数的指导”(20.5 节)。逆强化学习和 GAIL 从示教里学奖励或判别器,再用强化学习在自己的分布上优化,这是绕开误差累积的另一条路(20.6 节)。
11常见误区
FIG 1 的策略在示教路线附近只差约 4°,验证集同样取自示教,自然也很好看,可 6 次闭环评测全部失败。开环的逐样本损失量的是 \(d_{\pi^*}\) 上的误差,成败取决于 \(d_{\hat\pi}\) 上的误差。策略一定要闭环评测(真机或仿真),多次试验、多个随机种子,报告成功率而不只是损失。
更多同样的示教只会把同一条细线描得更粗一点点:FIG 1 里 4 条无噪声示教仍然 0/6。数据要的是覆盖:包含偏离与恢复的示教(噪声注入、有意识地示范“回正”)、学习者自己到过的状态(DAgger、接管数据)、多样的起点和场景。数据量相同时,多样性往往比条数更重要。
MSE 学条件均值,两种做法的平均可能哪种都不是(FIG 5 直直撞上柱子)。换成能表示多峰的输出是必要的,但还不够:FIG 5 的分类头每步独立采样,在 \(p=0.5\) 时一样 20 次全撞。多峰的策略还需要在时间上坚持一个模式。反过来,示教者如果每次做法都一样(比如统一规定从左边绕),简单的 MSE BC 就够用,这也是为什么采集示教时常常约定统一的策略。
示教里相邻两步的动作几乎一样,所以“上一个动作”是预测“这一个动作”的极好特征。网络若能看到历史,就可能学会抄上一步而不看场景,部署时一旦自己的上一步错了,就一直错下去(“copycat” 问题,Wen 等,2020)。更一般地,看到的信息越多,越可能抓住和专家动作相关、但不是原因的特征(因果混淆,de Haan 等,2019)。历史要加,但要在闭环评测里检验,必要时对历史做 dropout 或只提供观测历史、不提供动作历史。
只在新数据上训练会遗忘(FIG 3 的“只用最新一轮”每轮 0/6),聚合是理论保证的一部分,不是可选项。让半成品策略在真机上自己开可能撞坏东西:用 \(\beta\) 混合专家动作、设置安全边界、或采用人类门控(FIG 4)。最后,人类很难在不掌握控制权时给出好标签(不知道这一下打多少方向合适),这正是 HG-DAgger 这类“让人接管”的方法流行的原因。
12小练习
13延伸阅读
- D. A. Pomerleau, ALVINN: An Autonomous Land Vehicle in a Neural Network, NIPS 1988 (published 1989); Efficient Training of Artificial Neural Networks for Autonomous Navigation, Neural Computation 3(1), 1991 — 最早的行为克隆,以及用合成图像教网络回正
- S. Ross & J. A. Bagnell, Efficient Reductions for Imitation Learning, AISTATS 2010 — BC 的 \(T^2\varepsilon\) 界及其紧性
- S. Ross, G. J. Gordon & J. A. Bagnell, A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning, AISTATS 2011 — DAgger 及其在线学习分析
- S. Ross et al., Learning Monocular Reactive UAV Control in Cluttered Natural Environments, ICRA 2013 — DAgger 用在真实无人机上
- M. Bojarski et al., End to End Learning for Self-Driving Cars, arXiv 2016 — 用侧向相机做恢复数据增广的端到端驾驶
- M. Laskey, J. Lee, R. Fox, A. Dragan & K. Goldberg, DART: Noise Injection for Robust Imitation Learning, CoRL 2017 — 示教时注入噪声
- M. Kelly, C. Sidrane, K. Driggs-Campbell & M. J. Kochenderfer, HG-DAgger: Interactive Imitation Learning with Human Experts, ICRA 2019 — 人类门控的 DAgger
- P. de Haan, D. Jayaraman & S. Levine, Causal Confusion in Imitation Learning, NeurIPS 2019; C. Wen, J. Lin, T. Darrell, D. Jayaraman & Y. Gao, Fighting Copycat Agents in Behavioral Cloning from Observation Histories, NeurIPS 2020 — 更多信息为什么可能让 BC 更差
- A. Mandlekar et al., What Matters in Learning from Offline Human Demonstrations for Robot Manipulation, CoRL 2021 — robomimic:模仿学习的系统实验
- T. Osa, J. Pajarinen, G. Neumann, J. A. Bagnell, P. Abbeel & J. Peters, An Algorithmic Perspective on Imitation Learning, Foundations and Trends in Robotics, 2018 — 模仿学习的综述