KMP 算法
定义示范数据集
定义了示范数据,写成一个集合:{sn,h,ξn,h}n=1N}h=1H。这里 sn,h∈RI 是输入(比如时间或位置),ξn,h∈RO 是输出(比如手的速度或位置)。I 是输入的维度(比如时间是 1 维,位置是 3 维),O 是输出的维度,H 是示范次数(比如你示范了 5 次),N 是每条轨迹的长度(比如 100 个点)。这些数据就像一堆“输入-输出对”,记录了每次示范的细节。
输入和输出能代表什么?
这很灵活。
如果 s 是机器人位置,ξ 是速度,就成了“自主系统”,轨迹不靠时间,自己决定下一步。比如“手在 A 点,下一秒该往哪动”。
如果 s 是时间,ξ 是位置,就是“时间驱动轨迹”,按秒走。比如“1 秒时手在 A,2 秒时到 B”。这让模型能适应不同任务类型。
怎么学这些示范呢?
用概率模型抓住分布,比如高斯混合模型(GMM)、隐马尔可夫模型(HMM),或者简单的单高斯分布。这些模型像“统计工具”,分析多次示范的规律。GMM 把数据分成几类,每类用高斯分布描述;HMM 考虑动作顺序(比如先抬手再放下);单高斯最简单,把所有数据看成一堆。作者选了 GMM 举例,因为它能同时看输入和输出的“联合概率分布” P(s,ξ)。
GMM 的公式
[sξ]∼∑c=1CπcN(μc,Σc)。
啥意思呢?想象你在画示范的“概率地图”。GMM 把数据分成 C 个“山头”,每座山代表一种模式。πc 是每座山的大小(占比,比如 60% 快搬,40% 慢搬),μc 是山顶的位置(平均值,比如快搬的平均时间和位置),Σc 是山的形状(方差,描述散布范围)。比如,你示范三次搬箱子,GMM 可能发现两座山:一座是“快搬”,一座是“慢搬”。
具体点说,μc 是个向量
像这样:
μc=[μc,sμc,ξ],其中 μc,s 是输入的平均值,μc,ξ 是输出的平均值。Σc 是个矩阵:Σc=[Σc,ssΣc,ξsΣc,sξΣc,ξξ],描述输入和输出之间的关系和散布。比如 Σc,sξ 表示时间和位置的关系(协方差)。这些参数通过示范数据算出来,比如用期望最大化(EM)算法。
参数化轨迹
“我们从一个参数化的轨迹开始推导 KMP。”
这个轨迹写成公式:ξ(s)=Θ(s)Tw。
比如教机器人画一条线,s 是输入(比如时间或位置),ξ(s) 是输出(比如手的坐标)。Θ(s) 是一个矩阵,像一组“画笔模板”,w 是这些模板的“用力大小”(权重)。机器人用这些模板和权重组合出轨迹。
具体看 Θ(s),它定义为:Θ(s)=ϕ(s)0⋮00ϕ(s)⋮0⋯⋯⋱⋯00⋮ϕ(s),这里 Θ(s)∈RBO×O,B 是模板数量,O 是输出维度(比如 3 维位置)。ϕ(s)∈RB 是一组基函数(basis functions),就像不同形状的画笔。比如 s 是时间,ϕ(s) 可能是“直线”“曲线”之类的小模板。Θ(s) 把这些模板按输出维度排列,每个维度用同样的 ϕ(s),但独立处理。
w 是权重向量,w∈RBO,长度是 B×O,因为每个维度都要配一组权重。比如 O=3(x、y、z 坐标),B=5(5 个模板),w 就有 15 个元素。作者假设 w 服从正态分布:w∼N(μw,Σw),其中 μw 是平均值,Σw 是协方差,都是未知的,得学出来。
有了这个假设,轨迹 ξ(s) 也变成概率分布:ξ(s)∼N(Θ(s)Tμw,Θ(s)TΣwΘ(s))
ξ(s) 不再是固定值,而是一个随机值,平均是 Θ(s)Tμw(模板和权重的平均组合),方差是 Θ(s)TΣwΘ(s)(不确定性)。
目标是什么呢?“我们要模仿一个参考轨迹 {ξ^n}n=1N。”这个参考轨迹是从 2.1 节的示范(比如 GMM 学出来的)来的。我们希望公式 (4) 的分布尽量接近参考轨迹的分布。怎么做?用 KL 散度(Kullback-Leibler divergence)来衡量两者的差距,然后最小化它。KL 散度像个“相似度尺子”,值越小越像。
推导分几步:先在 2.2.1 节用 KL 散度定目标,然后在 2.2.2 和 2.2.3 节分别求解 μw 和 Σw 的最优解,最后用“核技巧”(kernel trick)把模型变成 KMP。核技巧是个聪明办法,能避开复杂的基函数,直接用数据算结果。
小结
-
参数化轨迹
- 公式:ξ(s)=Θ(s)Tw。
- s 是输入,ξ(s) 是输出,Θ(s) 是模板矩阵,w 是权重。
- 比如 s=时间,ξ(s)=位置,Θ(s) 决定形状,w 决定大小。
-
Θ(s) 的结构
- Θ(s)=ϕ(s)0⋮00ϕ(s)⋮0⋯⋯⋱⋯00⋮ϕ(s)。
- ϕ(s) 是 B 维基函数,比如 [sin(s),cos(s),…]。
- 每个输出维度(O 个)用同样的 ϕ(s),但独立组合。
-
权重的分布
- w∼N(μw,Σw)。
- w 是随机变量,μw 是平均权重,Σw 是权重的不确定性。
- 比如 w 决定“用力多大”,它不是固定值,而是带点随机。
-
轨迹的分布
- ξ(s)∼N(Θ(s)Tμw,Θ(s)TΣwΘ(s))。
- 均值 Θ(s)Tμw 是轨迹的“主线”,方差 Θ(s)TΣwΘ(s) 是“抖动范围”。
- 这模仿了示范的随机性。
-
优化目标
- 让 ξ(s) 的分布接近参考轨迹 {ξ^n} 的分布。
- 用 KL 散度最小化差距,KL 散度是概率分布的“距离”。
2.2.1 节:基于信息论的模仿学习
用信息论(KL 散度)优化 KMP 的轨迹分布,让它尽量接近参考轨迹。作者把问题拆成两个子问题:优化均值和协方差,为后面推导 KMP 铺路。
作者说:“KL 散度能衡量两个概率分布的差距,我们用它来优化参数化轨迹,让它匹配参考轨迹。”啥是 KL 散度?想象你在比较两张“概率地图”,一张是你设计的(参数化轨迹),一张是示范给的(参考轨迹)。KL 散度像个“尺子”,告诉你两张图差多少,差距越小越像。从信息论角度看,最小化 KL 散度就像“少丢信息”,保证模仿时不失真。
kL 散度
[!note] KL 散度
KL 散度(Kullback-Leibler 散度),也叫相对熵,是一种衡量两个概率分布之间差异的方法。在信息论和统计学中,它常用来量化一个分布相对于另一个分布的“信息损失”。
具体来说,对于两个概率分布 P(x) 和 Q(x),KL 散度的定义是:
DKL(P∣∣Q)=∑xP(x)log(Q(x)P(x))
如果是连续分布,则用积分形式:
DKL(P∣∣Q)=∫P(x)log(Q(x)P(x))dx
几个关键点:
- 非负性:KL 散度总是大于等于 0。当 P=Q 时,DKL(P∣∣Q)=0,表示两个分布完全相同。
- 不对称性:DKL(P∣∣Q)=DKL(Q∣∣P),所以它不是严格意义上的“距离”,而是一种散度。
- 直观理解:它可以看作是用 Q 去近似 P 时额外需要的“信息量”。
应用场景:
- 机器学习:比如在变分推断中,用 KL 散度最小化近似分布和真实分布的差异。
- 信息论:衡量编码效率或数据压缩的理论基础。
- 统计检验:比较模型分布和真实数据的契合度。
[!example] 举例
假设有两个正态分布:
- P(x) 是均值为 μ1=0,标准差为 σ1=1 的正态分布,即 P(x)=2π1e−2x2
- Q(x) 是均值为 μ2=1,标准差为 σ2=1 的正态分布,即 Q(x)=2π1e−2(x−1)2
我们要计算 DKL(P∣∣Q)。
公式是:
DKL(P∣∣Q)=∫−∞∞P(x)log(Q(x)P(x))dx
首先计算 Q(x)P(x):
Q(x)P(x)=2π1e−2(x−1)22π1e−2x2=e−2x2+2(x−1)2
化简指数部分:
−2x2+2(x−1)2=−2x2+2x2−2x+1=2x2−2x+1−x2=2−2x+1
所以:
Q(x)P(x)=e2−2x+1=e−22x−1
对数形式:
log(Q(x)P(x))=log(e−22x−1)=−22x−1
于是:
DKL(P∣∣Q)=∫−∞∞P(x)(−22x−1)dx
拆开积分:
DKL(P∣∣Q)=−21∫−∞∞P(x)(2x−1)dx=−21(2∫−∞∞xP(x)dx−∫−∞∞P(x)dx)
计算每一项:
- ∫−∞∞P(x)dx=1(概率密度函数的性质)
- ∫−∞∞xP(x)dx=EP[x]=μ1=0(P(x) 的均值)
代入:
DKL(P∣∣Q)=−21(2×0−1)=−21×(−1)=21
结果是 DKL(P∣∣Q)=21。这表明两个均值相差 1、标准差相同的正态分布之间的 KL 散度为 21。
[!note] 正态分布的 KL 散度的解析解
对于正态分布,KL 散度有解析解。当 P∼N(μ1,σ12),Q∼N(μ2,σ22) 时:
DKL(P∣∣Q)=21[σ22(μ1−μ2)2+σ22σ12−1−log(σ22σ12)]
代入 μ1=0,μ2=1,σ1=σ2=1,验证:
DKL(P∣∣Q)=21[1(0−1)2+11−1−log(11)]=21[1+1−1−0]=21
[!note] KL 散度的解析解
对于任意两个概率分布,KL 散度 DKL(P∣∣Q) 不一定都有解析解。是否能得到解析解取决于 P(x) 和 Q(x) 的具体形式以及 log(Q(x)P(x)) 是否能方便地积分或求和。
-
有解析解的情况:
-
正态分布:如上一个例子,当 P 和 Q 都是正态分布时,KL 散度有明确的公式:
DKL(P∣∣Q)=21[σ22(μ1−μ2)2+σ22σ12−1−log(σ22σ12)]
-
指数分布:如果 P(x)=λ1e−λ1x,Q(x)=λ2e−λ2x(x≥0),则:
DKL(P∣∣Q)=log(λ2λ1)+λ1λ2−1
-
离散均匀分布:如果 P 和 Q 是有限离散均匀分布,也可以直接求和得到解析解。
-
无解析解的情况:
- 当 P 和 Q 是复杂分布(如混合高斯分布、非标准分布)时,Q(x)P(x) 的形式可能非常复杂,导致积分或求和无法解析求解。
- 例如,P 是高斯混合模型,Q 是单一高斯分布,KL 散度通常需要数值方法近似计算。
因此,KL 散度的解析解并非通用的,依赖于分布对的数学性质。对于无法解析的情况,可以用蒙特卡洛方法或变分近似来估计。
[!note] 散度家族
KL 散度属于“散度”(divergence)家族的一部分,衡量分布间差异的其他方法有很多,以下是一些常见的类似概念:
-
Jensen-Shannon 散度(JS 散度)
-
定义:DJS(P∣∣Q)=21DKL(P∣∣M)+21DKL(Q∣∣M),其中 M=2P+Q 是平均分布。
-
特点:对称,且有界(对于离散分布,取值在 [0,log2] 之间)。比 KL 散度更像“距离”,但仍不是严格的度量。
-
应用:常用于机器学习中需要对称性或稳定性的场景。
-
Wasserstein 距离(地球移动距离)
-
定义:W(P,Q)=infγ∈Γ(P,Q)∫∣x−y∣dγ(x,y),其中 Γ(P,Q) 是 P 和 Q 的联合分布集合。
-
特点:是真正的距离度量(满足对称性和三角不等式),考虑分布的几何结构。
-
应用:生成模型(如 GANs)中常用,因为它能捕捉分布的空间关系。
-
总变差距离(Total Variation Distance)
-
定义:TV(P,Q)=21∫∣P(x)−Q(x)∣dx(连续)或 21∑x∣P(x)−Q(x)∣(离散)。
-
特点:对称,有界(取值在 [0,1]),简单直观。
-
应用:统计检验和概率分布比较。
-
Hellinger 距离
-
定义:H(P,Q)=21∫(P(x)−Q(x))2dx。
-
特点:对称,有界(取值在 [0,1]),对分布的平方根敏感。
-
应用:常用于信息检索和概率分布比较。
-
Rényi 散度
-
定义:Dα(P∣∣Q)=α−11log(∫P(x)αQ(x)1−αdx),其中 α>0 且 α=1。
-
特点:KL 散度是其极限形式(α→1),通过调整 α 可以控制对分布尾部的敏感度。
-
应用:信息论和统计物理。
-
f-散度
- 定义:Df(P∣∣Q)=∫Q(x)f(Q(x)P(x))dx,其中 f 是凸函数。
- 特点:KL 散度是 f(t)=tlogt 的特例,JS 散度和总变差距离也属于此类。
- 应用:提供统一的散度框架,灵活性高。
用 KL 散度把模仿学习变成优化问题。
目标是让参数化轨迹 ξ(s) 的分布匹配参考轨迹,拆成均值和协方差两步解。
目标是最小化一个函数:Jini(μw,Σw)=∑n=1NDKL(Pp(ξ∣sn)∣∣Pr(ξ∣sn))
这里 Pp(ξ∣sn) 是参数化轨迹的分布,Pr(ξ∣sn) 是参考轨迹的分布,N 是轨迹点数(比如 100 个点)。DKL 是 KL 散度,衡量每个点 sn 处的分布差距,总和就是 Jini。
Pp(ξ∣sn)=N(ξ∣Θ(sn)Tμw,Θ(sn)TΣwΘ(sn))
P_r(\xi|s_n)=\mathcal{N}(\xi|\hat{\mu}_n,\hat{\Sigma}_n)$$\hat{\mu}_n 是参考轨迹的均值(比如示范的平均位置),Σ^n 是协方差(示范的抖动范围)。
KL 散度的定义是:DKL(Pp(ξ∣sn)∣∣Pr(ξ∣sn))=∫Pp(ξ∣sn)logPr(ξ∣sn)Pp(ξ∣sn)dξ
这像在算“信息差”,但直接算积分太麻烦。
因为两个分布都是高斯分布,可以用现成的公式简化。
对于两个高斯分布 N(μ1,Σ1) 和 N(μ2,Σ2),KL 散度是:DKL=21(log∣Σ2∣−log∣Σ1∣−d+Tr(Σ2−1Σ1)+(μ1−μ2)TΣ2−1(μ1−μ2))。
这里 d 是维度(O),∣⋅∣ 是行列式,Tr(⋅) 是矩阵迹(对角线和)。
代入 Pp 和 Pr:μ1=Θ(sn)Tμw,Σ1=Θ(sn)TΣwΘ(sn),μ2=μ^n,Σ2=Σ^n。于是 Jini 变成: Jini(μw,Σw)=∑n=1N21(log∣Σ^n∣−log∣Θ(sn)TΣwΘ(sn)∣−O+Tr(Σ^n−1Θ(sn)TΣwΘ(sn))+(Θ(sn)Tμw−μ^n)TΣ^n−1(Θ(sn)Tμw−μ^n))
这个公式看着复杂,但能拆开。去掉常数项 21、log∣Σ^n∣ 和 O(因为不影响优化),分成两部分:
- 均值子问题:Jini(μw)=∑n=1N(Θ(sn)Tμw−μ^n)TΣ^n−1(Θ(sn)Tμw−μ^n)
- 这是“预测均值”和“参考均值”的加权差距,Σ^n−1 是权重(不确定性小的点更重要)。
- 协方差子问题:Jini(Σw)=∑n=1N(−log∣Θ(sn)TΣwΘ(sn)∣+Tr(Σ^n−1Θ(sn)TΣwΘ(sn)))
- 这是让预测协方差接近参考协方差。
小结
-
KL 散度的作用
- 衡量 Pp(ξ∣sn) 和 Pr(ξ∣sn) 的差距,最小化它让预测轨迹像示范轨迹。
- 信息论角度:少丢信息,模仿更准。
-
目标函数
- Jini(μw,Σw)=∑n=1NDKL(Pp(ξ∣sn)∣∣Pr(ξ∣sn))。
- 对 N 个点求和,每个点算一次分布差距。
-
两个分布
- Pp(ξ∣sn)=N(Θ(sn)Tμw,Θ(sn)TΣwΘ(sn)):预测轨迹。
- Pr(ξ∣sn)=N(μ^n,Σ^n):参考轨迹。
-
KL 散度公式
- DKL=∫PplogPrPpdξ,高斯分布有解析解。
- 代入后得 (9),包含均值差和协方差差。
-
拆分成子问题
- 均值:Jini(μw),优化 μw 让预测均值接近 μ^n。
- 协方差:Jini(Σw),优化 Σw 让预测抖动接近 Σ^n。
2.2.2 节:KMP 的均值预测。
在上一节的均值子问题基础上加了个惩罚项,推导出最优解,然后用核方法简化计算,最终得到 KMP 的均值预测公式。
“我们不像核岭回归(KRR)那样直接优化,而是加了个惩罚项 ∣∣μw∣∣2,避免过拟合。”
啥是过拟合?想象你教机器人画线,示范是“差不多直”,但它学得太死,连小抖动都模仿,结果新输入时画歪了。惩罚项就像“别太认真”,让模型简单点。
于是
新的均值子问题写成:J(μw)=∑n=1N(Θ(sn)Tμw−μ^n)TΣ^n−1(Θ(sn)Tμw−μ^n)+λμwTμw
这里 λ>0 是惩罚力度。
这个 J(μw) 像“加权最小二乘”,但多了 λμwTμw。第一部分是预测均值 Θ(sn)Tμw 和参考均值 μ^n 的差距,Σ^n−1 是权重(抖动小的点更重要);第二部分是惩罚,让 μw 别太大。跟 KRR 比,KRR 假设 Σ^n−1=IO(单位矩阵),没用示范的协方差。而这里 Σ^n 反映了示范的随机性,比如抖动大的点可以偏离多点,抖动小的得贴近。
用了 KRR 的“对偶变换”,推导出最优解:μw∗=Φ(ΦTΦ+λΣ)−1μ
这里:Φ=[Θ(s1)Θ(s2)⋯Θ(sN)],是个大矩阵,把所有点的模板拼起来;Σ=blockdiag(Σ^1,Σ^2,…,Σ^N),是对角块矩阵,装所有协方差;
μ=[μ^1Tμ^2T⋯μ^NT]T,是所有参考均值叠起来。
[!abstract]
对偶变换是凸优化中的核心工具,通过拉格朗日函数将原始问题转化为对偶问题,提供了计算和理论上的双重优势。弱对偶性总是成立,而强对偶性依赖于凸性和约束资格条件(如Slater条件)。当强对偶性成立时,最优解就会满足 KKT 条件。在机器学习中(如SVM),对偶变换不仅是优化手段,还带来了核方法等强大工具。
作者直接给出了对偶变换的结果,下面补充一下具体过程
[!note] 对偶变换过程
我们的任务是找到 μw,使 J(μw) 最小化。下面一步步推导:
- 展开损失函数
先把损失函数写得更清楚:
J(μw)=∑n=1N(Θ(s_n)⊤μ_w−μ^_n)⊤Σ^_n−1(Θ(s_n)⊤μ_w−μ^_n)+λμ_w⊤μ_w
- 第一项是所有数据点 n=1 到 N 的误差平方和,用协方差逆加权。
- 第二项是 μw 的 L 2 范数的 квадрат,乘以 λ。
为了求最小值,我们需要对 μw 求导,然后令导数等于零。
- 对 μw 求导
我们分开计算两部分的导数:
- 第一项的导数:
定义误差向量 en=Θ(sn)⊤μw−μ^n。
那么第一项是 ∑n=1Nen⊤Σ^n−1en。
对 μw 求导,矩阵微分的规则告诉我们:
∂μw∂(e_n⊤Σ^_n−1e_n)=2Θ(s_n)Σ^_n−1(Θ(s_n)⊤μ_w−μ^_n)
(推导细节:用链式法则,en 对 μw 的导数是 Θ(sn),Σ^n−1 是对称矩阵,所以结果乘以 2。)
对所有 N 个数据点求和:
∂μ_w∂∑n=1Nen⊤Σ^_n−1e_n=2∑n=1NΘ(s_n)Σ^_n−1(Θ(s_n)⊤μ_w−μ^_n)
- 第二项的导数:
∂μ_w∂(λμ_w⊤μ_w)=2λμ_w
(因为 μw⊤μw 是标量,对向量 μw 求导,结果是 2μw,再乘以 λ。)
总导数是两部分之和:
∂μw∂J=2∑n=1NΘ(s_n)Σ^_n−1(Θ(s_n)⊤μ_w−μ^_n)+2λμ_w
- 令导数等于零
为了找到极值点,令导数为零:
2∑_n=1NΘ(s_n)Σ^_n−1(Θ(s_n)⊤μ_w−μ^_n)+2λμ_w=0
两边除以 2:
∑_n=1NΘ(s_n)Σ^_n−1(Θ(s_n)⊤μ_w−μ^_n)+λμ_w=0
- 整理矩阵形式
把求和展开:
∑∗n=1NΘ(s_n)Σ^_n−1Θ(s_n)⊤μ_w−∑∗n=1NΘ(s_n)Σ^_n−1μ^_n+λμ_w=0
把含 μw 的项移到一边:
∑∗n=1NΘ(s_n)Σ^_n−1Θ(s_n)⊤μ_w+λμ_w=∑∗n=1NΘ(s_n)Σ^_n−1μ^_n
提取 μw:
(∑∗n=1NΘ(s_n)Σ^_n−1Θ(s_n)⊤+λI)μ_w=∑∗n=1NΘ(s_n)Σ^_n−1μ^_n
(这里 I 是单位矩阵,维度与 μw 一致,即 BO×BO。)
- 定义矩阵符号
文章中定义了:
- Φ=[Θ(s1),Θ(s2),…,Θ(sN)],形状是 BO×NO。
- Σ 是一个对角块矩阵,形状是 NO×NO,其逆为 Σ−1,由 Σ^1−1,Σ^2−1,…,Σ^N−1 组成。
- μ=[μ^1⊤,μ^2⊤,…,μ^N⊤]⊤,维度是 NO。
(O 是输出维度,N 是数据点数。)
用这些符号重写:
- 左边第一项:∑n=1NΘ(sn)Σ^n−1Θ(sn)⊤=ΦΣ−1Φ⊤。
(证明:Σ−1 是对角块形式,矩阵乘法正好对应求和形式。)
- 右边:∑n=1NΘ(sn)Σ^n−1μ^n=ΦΣ−1μ。
(因为 Σ−1μ 将 μ^n 按 Σ^n−1 加权,再与 Φ 相乘。)
所以方程变成:
(ΦΣ−1Φ⊤+λI)μ_w=ΦΣ−1μ
- 解出 μw∗
两边左乘 (ΦΣ−1Φ⊤+λI)−1:
μ_w=(ΦΣ−1Φ⊤+λI)−1ΦΣ−1μ
这已经是解了,但作者给出的形式是:
μ_w\*=Φ(Φ⊤Φ+λΣ)−1μ
这两种形式不同,原因是对偶变换的应用。直接解是“原始形式”,而作者用的是“对偶形式”。我们需要从对偶角度重新推导。
- 对偶变换推导
KRR 的精髓是对偶变换,将问题从高维参数空间(μw 的 BO 维)转为数据空间(NO 维)。我们回到损失函数:
J(μw)=∑n=1N(Θ(s_n)⊤μ_w−μ^_n)⊤Σ^_n−1(Θ(s_n)⊤μ_w−μ^_n)+λμ_w⊤μ_w
用矩阵形式:
J(μ_w)=(Φ⊤μ_w−μ)⊤Σ−1(Φ⊤μ_w−μ)+λμ_w⊤μ_w
假设 μw 可以表示为 Φ 的线性组合(对偶假设):
μ_w=Φα
其中 α 是对偶变量,维度是 NO。代入:
J(α)=(Φ⊤Φα−μ)⊤Σ−1(Φ⊤Φα−μ)+λα⊤Φ⊤Φα
对 α 求导:
∂α∂J=2Φ⊤ΦΣ−1(Φ⊤Φα−μ)+2λΦ⊤Φα=0
整理:
Φ⊤ΦΣ−1(Φ⊤Φα−μ)+λΦ⊤Φα=0
两边左乘 (Φ⊤Φ)−1(假设可逆,或用伪逆):
Σ−1(Φ⊤Φα−μ)+λα=0
Φ⊤Φα−μ+λΣα=0
Φ⊤Φα+λΣα=μ
(Φ⊤Φ+λΣ)α=μ
α=(Φ⊤Φ+λΣ)−1μ
所以:
μ_w\*=Φα=Φ(Φ⊤Φ+λΣ)−1μ
有了 μw∗,给个新输入 s∗(比如新时间),预测均值是:E(ξ(s∗))=Θ(s∗)Tμw∗=Θ(s∗)TΦ(ΦTΦ+λΣ)−1μ
这能算,但有个问题:Θ(s) 靠基函数 ϕ(s),高维输入(比如位置+角度)时,设计 ϕ(s) 很麻烦。
于是,作者提出 “核化” 它,避免显式定义基函数。
定义基函数的内积:ϕ(si)Tϕ(sj)=k(si,sj),k(⋅,⋅) 是核函数(比如高斯核)。
根据 Θ(s) 的结构 (3),Θ(si)TΘ(sj)=k(si,sj)0⋮00k(si,sj)⋮0⋯⋯⋱⋯00⋮k(si,sj)
这可以写成:k(si,sj)=Θ(si)TΘ(sj)=k(si,sj)IO,IO 是 O 维单位矩阵。
再定义两个矩阵:K=k(s1,s1)k(s2,s1)⋮k(sN,s1)k(s1,s2)k(s2,s2)⋮k(sN,s2)⋯⋯⋱⋯k(s1,sN)k(s2,sN)⋮k(sN,sN),是所有点对的核矩阵;
k∗=[k(s∗,s1)k(s∗,s2)⋯k(s∗,sN)],是新点和训练点的核向量。
于是,(15) 变成:E(ξ(s∗))=k∗(K+λΣ)−1μ
这不用 Θ(s),直接用核函数算,简单多了。
小结
-
加惩罚项
- J(μw)=∑n=1N(Θ(sn)Tμw−μ^n)TΣ^n−1(Θ(sn)Tμw−μ^n)+λμwTμw。
- 第一部分是误差,第二部分防过拟合。
-
跟 KRR 的区别
- KRR 没用 Σ^n,这里用它加权,抖动大的点宽松,小的点严格。
-
最优解
- μw∗=Φ(ΦTΦ+λΣ)−1μ。
- Φ 是模板矩阵,Σ 是协方差,μ 是参考均值。
-
预测
- E(ξ(s∗))=Θ(s∗)TΦ(ΦTΦ+λΣ)−1μ。
- 新点的均值靠 Θ(s∗) 算。
-
核化
- 定义 k(si,sj)=ϕ(si)Tϕ(sj),Θ(si)TΘ(sj)=k(si,sj)IO。
- K 是核矩阵,k∗ 是核向量,预测变成 E(ξ(s∗))=k∗(K+λΣ)−1μ。
2.2.3 节:KMP 的协方差预测。
“跟均值优化一样,我们在协方差子问题 (11) 加了个惩罚项,限制 Θ(sn)TΣwΘ(sn) 别太大。”
为啥要限制?如果协方差太大,轨迹抖动范围就离谱,预测不靠谱。惩罚项可以用 Σw 的最大特征值(Rayleigh 商的性质),但为了简单,他们选了个更宽松的 Tr(Σw)(矩阵迹,对角线和),因为 Σw 是正定矩阵,迹比最大特征值大。
于是
新目标函数是:J(Σw)=∑n=1N(−log∣Θ(sn)TΣwΘ(sn)∣+Tr(Σ^n−1Θ(sn)TΣwΘ(sn)))+λTr(Σw)
怎么解?对 Σw 求导并令其为 0。导数用到了矩阵求导公式(注释 †):
∂X∂∣AXB∣=∣AXB∣(XT)−1 和 ∂X∂Tr(AXB)=ATBT。
[!note] 第一项求导过程
对第一块求导:∑n=1N−log∣Θ(sn)TΣwΘ(sn)∣
这块有“行列式”(determinant,用 ∣⋅∣ 表示)。行列式是个数字,比如 2×2 矩阵 [acbd] 的行列式是 ad−bc。这里是 Θ(sn)TΣwΘ(sn) 的行列式,记作 An=Θ(sn)TΣwΘ(sn),它是 O×O 的矩阵(O 是输出维度,比如位置是 3 维)。
- 为啥有负号和对数?
−log∣An∣ 是想让 ∣An∣ 尽量大(因为负对数越小,∣An∣ 越大),但不能无限大,后面的惩罚项会限制它。
- 导数咋算?
文章注释 † 给了公式:∂X∂∣AXB∣=∣AXB∣(XT)−1。这里 A=Θ(sn)T,X=Σw,B=Θ(sn),所以:
∂Σw∂∣Θ(sn)TΣwΘ(sn)∣=∣Θ(sn)TΣwΘ(sn)∣(ΣwT)−1
因为 Σw 是对称矩阵(协方差矩阵的性质),ΣwT=Σw,所以:
∂Σw∂∣An∣=∣An∣(Σw)−1
现在外面还有 −log,用链式法则:
∂Σw∂(−log∣An∣)=∂∣An∣∂(−log∣An∣)⋅∂Σw∂∣An∣
对数的导数是:∂x∂(−logx)=−x1,所以:
∂∣An∣∂(−log∣An∣)=−∣An∣1
代入:
∂Σw∂(−log∣An∣)=−∣An∣1⋅∣An∣Σw−1=−Σw−1
对 N 个点求和:
∂Σw∂∑n=1N−log∣Θ(sn)TΣwΘ(sn)∣=∑n=1N−Σw−1
通俗理解:这一项像在说“别让 Σw 太小”,因为 Σw−1 是倒数,Σw 小了它就大了,导数变负,推动 Σw 变大。
计算后得:
∑n=1N(−Σw−1+Θ(sn)Σ^n−1Θ(sn)T)+λI=0
整理成紧凑形式,用 2.2.2 节的 Φ 和 Σ(公式 (14))
解出:Σw∗=N(ΦΣ−1ΦT+λI)−1
这像加权最小二乘的协方差,但多了 N 和正则项 λI。
新点 s∗ 的协方差是:D(ξ(s∗))=Θ(s∗)TΣw∗Θ(s∗)。代入 (24),得:D(ξ(s∗))=NΘ(s∗)T(ΦΣ−1ΦT+λI)−1Θ(s∗)。
用 Woodbury 恒等式(注释 ‡):(A+CBCT)−1=A−1−A−1C(B−1+CTA−1C)−1CTA−1
化简成:D(ξ(s∗))=λNΘ(s∗)T(I−Φ(ΦTΦ+λΣ)−1ΦT)Θ(s∗),编号是 (25)。
再用核化方法。
回忆 2.2.2 节的核定义:Θ(si)TΘ(sj)=k(si,sj)IO (18),K 是核矩阵 (19),k∗ 是核向量 (20)。
于是,Θ(s∗)TΘ(s∗)=k(s∗,s∗)IO,ΦTΘ(s∗)=[k(s1,s∗)IO⋯k(sN,s∗)IO]T=k∗T(注意 k∗ 是行向量,矩阵乘法时转置)。
代入 (25),得:D(ξ(s∗))=λN(k(s∗,s∗)−k∗(K+λΣ)−1k∗T), (26)。
这不用显式基函数,直接用核函数算。
跟 GPR 和 CrKR 比,(26) 有啥不同?
有两点
一是 (K+λΣ)−1 用示范的 Σ(公式 (14)),GPR 用单位矩阵,CrKR 用对角矩阵;
二是 KMP 预测完整的协方差矩阵,能捕捉输出维度间的关系(比如 x 和 y 的相关性),GPR 和 CrKR 只给对角线协方差。
作者把 {sn,μ^n,Σ^n}n=1N 叫“参考数据库” D,把均值和协方差预测总结成算法 1:
算法 1:核化运动基元
- 初始化
- 定义核函数 k(⋅,⋅),设 λ。
- 从示范中学习(见 2.1 节)
- 收集示范 {sn,h,ξn,h}n=1N}h=1H。
- 提取参考数据库 {sn,μ^n,Σ^n}n=1N。
- 用 KMP 预测(见 2.2 节)
- 输入:新点 s∗。
- 计算 Σ、μ(公式 (14)),K(公式 (19)),k∗(公式 (20))。
- 输出:均值 E(ξ(s∗))=k∗(K+λΣ)−1μ,协方差 D(ξ(s∗))=λN(k(s∗,s∗)−k∗(K+λΣ)−1k∗T)。
小结
-
加惩罚项
- J(Σw)=∑n=1N(−log∣Θ(sn)TΣwΘ(sn)∣+Tr(Σ^n−1Θ(sn)TΣwΘ(sn)))+λTr(Σw)。
- λTr(Σw) 限制协方差别太大。
-
求导解最优解
- ∂Σw∂J=∑n=1N(−Σw−1+Θ(sn)Σ^n−1Θ(sn)T)+λI=0。
- Σw∗=N(ΦΣ−1ΦT+λI)−1。
-
新点协方差
- D(ξ(s∗))=NΘ(s∗)T(ΦΣ−1ΦT+λI)−1Θ(s∗)。
- 用 Woodbury 化简,再核化成:D(ξ(s∗))=λN(k(s∗,s∗)−k∗(K+λΣ)−1k∗T)。
-
跟 GPR/CrKR 对比
- KMP 用 Σ 加权,预测完整协方差;GPR/CrKR 简化权重,协方差对角。
-
算法总结
第 3.1 节:使用 KMP 进行轨迹调制
[!note]+ 3.1 节的目的
通过扩展参考数据库,调整轨迹使其通过新途径点或终点,并通过更新规则解决冲突。推导过程表明,公式 31 与原始损失函数形式相同,可以直接套用 KMP 的优化方法求解最优轨迹。
问题定义
我们需要调整轨迹,使其通过 M 个新的期望点,这些点定义为 {sˉm,ξˉm}m=1M,每个点关联一个条件概率分布:
ξˉ_m∣sˉ_m∼N(μˉ_m,Σˉ_m)
这些条件分布可以根据任务需求设计:
- 如果机器人需要高精度通过某个途径点,可以设置较小的协方差 Σˉm。
- 如果允许较大的跟踪误差,可以设置较大的协方差 Σˉm。
目标是同时考虑原始参考轨迹分布和新的期望点,重新定义损失函数。原始损失函数(公式 5)是:
J(μw,Σ_w)=∑n=1ND_KL(Pp(ξ∣s_n)∥Pr(ξ∣s_n))
其中:
- Pp(ξ∣sn)=N(ξ∣Θ(sn)⊤μw,Θ(sn)⊤ΣwΘ(sn)) 是预测分布。
- Pr(ξ∣sn)=N(ξ∣μ^n,Σ^n) 是参考分布。
现在,我们引入新的期望点,重新定义损失函数(公式 27)为:
J∗Uini(μ_w,Σ_w)=∑∗n=1ND∗KL(Pp(ξ∣s_n)∥Pr(ξ∣s_n))+∑∗m=1MD_KL(Pp(ξ∣sˉ_m)∥Pd(ξ∣sˉ_m))
其中:
- Pp(ξ∣sˉm)=N(ξ∣Θ(sˉm)⊤μw,Θ(sˉm)⊤ΣwΘ(sˉm)) (公式 28)
- Pd(ξ∣sˉm)=N(ξ∣μˉm,Σˉm) (公式 29)
方法:扩展参考数据库
为了统一处理原始参考数据库 D={sn,μ^n,Σ^n}n=1N 和期望数据库 Dˉ={sˉm,μˉm,Σˉm}m=1M,我们将两者拼接,生成一个扩展的参考数据库 {sUi,μUi,ΣUi}i=1N+M,定义如下(公式 30):
{sUi=s_i,μUi=μ^i,ΣUi=Σ^i,sUi=sˉi−N,μUi=μˉi−N,ΣUi=Σˉ_i−N,if 1≤i≤Nif N<i≤N+M
使用扩展数据库,损失函数(公式 27)可以重写为(公式 31):
J∗Uini(μ_w,Σ_w)=∑∗i=1N+MD∗KL(Pp(ξ∣s∗Ui)∥P∗u(ξ∣s∗Ui))
其中:
- Pp(ξ∣sUi)=N(ξ∣Θ(sUi)⊤μw,Θ(sUi)⊤ΣwΘ(sUi)) (公式 32)
- Pu(ξ∣sUi)=N(ξ∣μUi,ΣUi) (公式 33)
从公式 27 到公式 31 的推导
我们来一步步推导如何从公式 27 得到公式 31。
-
公式 27 的展开:
公式 27 包含两部分:
- 第一部分是原始参考数据库的 KL 散度:∑n=1NDKL(Pp(ξ∣sn)∥Pr(ξ∣sn))。
- 第二部分是新期望点的 KL 散度:∑m=1MDKL(Pp(ξ∣sˉm)∥Pd(ξ∣sˉm))。
根据公式 30 的定义:
- 当 i 从 1 到 N 时,sUi=si,μUi=μ^i,ΣUi=Σ^i,因此:
P∗p(ξ∣s∗Ui)=P∗p(ξ∣s_i),Pu(ξ∣s∗Ui)=Pr(ξ∣s_i)
对应第一部分的求和。
- 当 i 从 N+1 到 N+M 时,sUi=sˉi−N,μUi=μˉi−N,ΣUi=Σˉi−N,因此:
P∗p(ξ∣s∗Ui)=P∗p(ξ∣sˉ∗i−N),P∗u(ξ∣s∗Ui)=P∗d(ξ∣sˉ∗i−N)
对应第二部分的求和。
-
合并求和:
将两部分求和合并为一个统一的求和形式:
- 第一部分求和对应 i 从 1 到 N。
- 第二部分求和对应 i 从 N+1 到 N+M,只需将下标 m=i−N 转换回 m。
因此,公式 27 可以写为:
J∗Uini(μ_w,Σ_w)=∑∗i=1ND∗KL(Pp(ξ∣s∗Ui)∥P∗u(ξ∣s∗Ui))+∑∗i=N+1N+MD∗KL(P∗p(ξ∣s∗Ui)∥P∗u(ξ∣s∗Ui))
合并后即为:
J∗Uini(μ_w,Σ_w)=∑∗i=1N+MD∗KL(Pp(ξ∣s∗Ui)∥P∗u(ξ∣s∗Ui))
这就是公式 31。
求解最优解
公式 31 的形式与原始损失函数(公式 5)相同,因此我们可以直接套用第 2.2.2 节的推导方法求解最优解 μw∗ 和 Σw∗。
-
定义扩展矩阵:
根据扩展数据库,定义:
- ΦU=[Θ(sU1),Θ(sU2),…,Θ(sU,N+M)],形状为 BO×(N+M)O。
- ΣU 是一个对角块矩阵,形状为 (N+M)O×(N+M)O,其逆 ΣU−1 由 ΣUi−1 组成。
- μU=[μU1⊤,μU2⊤,…,μU,N+M⊤]⊤,维度为 (N+M)O。
-
损失函数的矩阵形式:
公式 31 的 KL 散度可以展开(参考第 2.2.2 节的推导)。假设 Σw 已知(通常通过其他方法估计),我们只优化 μw,损失函数简化为:
J∗Uini(μ_w)=∑∗i=1N+M(Θ(sUi)⊤μ_w−μUi)⊤ΣUi−1(Θ(sUi)⊤μw−μUi)+λμ_w⊤μ_w
-
求导并解出 μw∗:
对 μw 求导并令导数为零(类似第 2.2.2 节的步骤):
∑∗i=1N+MΘ(s∗Ui)ΣUi−1(Θ(sUi)⊤μw−μUi)+λμ_w=0
整理后:
(∑∗i=1N+MΘ(s∗Ui)ΣUi−1Θ(sUi)⊤+λI)μw=∑i=1N+MΘ(sUi)ΣUi−1μ_Ui
使用矩阵形式:
(ΦUΣU−1ΦU⊤+λI)μ_w=ΦUΣU−1μU
解出 μw∗:
μw\*=(ΦUΣU−1ΦU⊤+λI)−1ΦUΣU−1μ_U
使用对偶形式(参考第 2.2.2 节):
μw\*=ΦU(ΦU⊤ΦU+λΣU)−1μU
-
核化预测:
对于新查询点 s∗,预测均值为:
\mathbb{E}[\boldsymbol{\xi}(\mathbf{s}^*)] = \boldsymbol{\Theta}(\mathbf{s}^_)^\top \boldsymbol{\mu}\_w^_ = \boldsymbol{\Theta}(\mathbf{s}^\*)^\top \boldsymbol{\Phi}_{\text{U}} (\boldsymbol{\Phi}_{\text{U}}^\top \boldsymbol{\Phi}_{\text{U}} + \lambda \boldsymbol{\Sigma}_{\text{U}})^{-1} \boldsymbol{\mu}\_{\text{U}}
引入核函数:
- ΦU⊤ΦU=KU(核矩阵)。
- Θ(s∗)⊤ΦU=kU∗。
最终预测公式为:
E[ξ(s∗)]=kU\*(KU+λΣU)−1μU
冲突处理
扩展数据库可能会导致冲突。例如,如果某个新输入 sˉm=sn,但 μˉm 和 μ^n 相距较远,而 Σˉm 和 Σ^n 几乎相同,那么公式 31 的最优解只能在 μˉm 和 μ^n 之间折中。
在轨迹调制中,通常希望新期望点具有最高优先级。因此,作者提出了一种更新参考数据库的方法,减少冲突,同时保留大部分原始数据点。具体更新步骤如下:
-
对于期望数据库中的每个数据点 {sˉm,μˉm,Σˉm},将其输入 sˉm 与参考数据库的输入 {sn}n=1N 比较,找到最近的数据点 {sr,μ^r,Σ^r},满足:
d(sˉ_m,s_r)≤d(sˉ_m,s_n),∀n∈{1,2,…,N}
其中 d(⋅) 是任意距离度量(如 2 范数)。
-
如果最近距离 d(sˉm,sr) 小于预定义阈值 ζ>0,则用 {sˉm,μˉm,Σˉm} 替换 {sr,μ^r,Σ^r}。
-
否则,将 {sˉm,μˉm,Σˉm} 插入参考数据库。
更新规则(公式 34)为:
{D←{D/{s_r,μ^_r,Σ^_r}}∪{sˉ_m,μˉ_m,Σˉ_m},D←D∪{sˉ_m,μˉ_m,Σˉ_m},if d(sˉ_m,s_r)<ζotherwise
其中 r=argminnd(sˉm,sn),n∈{1,2,…,N},符号 / 和 ∪ 分别表示排除和并集操作。
轨迹调制就像在导航中调整路线:你有一条原始路线(参考轨迹),但路上突然出现障碍(新途径点),你需要调整路线经过这些点。KMP 的方法是把新点和原始路线“合并”成一个新的路线图(扩展数据库),然后重新规划路径。如果新点和原始路线有冲突(比如两个点位置很近但目标不同),就优先选择新点(更新规则),确保机器人能按新要求走。
3.2 节:使用 KMP 进行轨迹叠加
[!note]+ 3.2 节的目的
第 3.2 节通过加权 KL 散度混合多条轨迹,推导了加权均值和协方差子问题,并将其转化为等价形式,最终使用 KMP 求解混合轨迹。
问题定义
给定 L 条参考轨迹分布,每条轨迹关联一组输入和优先级,记为 {{sn,ξ^n,l,γn,l}n=1N}l=1L,其中:
- ξ^n,l∣sn∼N(μ^n,l,Σ^n,l) 表示第 l 条轨迹在输入 sn 处的分布。
- γn,l∈(0,1) 是优先级,满足 ∑l=1Lγn,l=1。
目标是混合这 L 条轨迹,生成一条新的轨迹,考虑每条轨迹的优先级。作者提出了一种加权损失函数(公式 35):
J∗Sini(μ_w,Σ_w)=∑∗n=1N∑∗l=1Lγ∗n,lD∗KL(Pp(ξ∣s_n)∥P∗s,l(ξ∣s_n))
其中:
- Pp(ξ∣sn)=N(ξ∣Θ(sn)⊤μw,Θ(sn)⊤ΣwΘ(sn)) 是预测分布。
- Ps,l(ξ∣sn)=N(ξ∣μ^n,l,Σ^n,l) 是第 l 条参考轨迹的分布(公式 36)。
分解损失函数:从公式 35 到公式 37 和 38
我们首先推导如何从公式 35 分解出公式 37(加权均值子问题)和公式 38(加权协方差子问题)。
-
KL 散度的展开:
KL 散度 DKL(Pp∥Ps,l) 衡量预测分布和参考分布的差异。对于两个正态分布 Pp∼N(μp,Σp) 和 Ps,l∼N(μ^n,l,Σ^n,l),KL 散度公式为:
D∗KL(Pp∥P∗s,l)=21(log∣Σ_p∣∣Σ^n,l∣−d+Tr(Σ^n,l−1Σp)+(μ_p−μ^n,l)⊤Σ^n,l−1(μ_p−μ^n,l))
其中 d 是输出维度(即 O)。代入:
- μp=Θ(sn)⊤μw,Σp=Θ(sn)⊤ΣwΘ(sn)。
- 参考分布均值和协方差为 μ^n,l 和 Σ^n,l。
因此:
D∗KL(Pp(ξ∣s_n)∥P∗s,l(ξ∣sn))=21(log∣Θ(sn)⊤Σ_wΘ(s_n)∣∣Σ^n,l∣−O+Tr(Σ^n,l−1Θ(sn)⊤Σ_wΘ(s_n))+(Θ(s_n)⊤μ_w−μ^n,l)⊤Σ^n,l−1(Θ(s_n)⊤μ_w−μ^n,l))
-
分离 μw 和 Σw:
上述 KL 散度可以分为两部分:
- 与 μw 相关的项:(Θ(sn)⊤μw−μ^n,l)⊤Σ^n,l−1(Θ(sn)⊤μw−μ^n,l)。
- 与 Σw 相关的项:log∣Θ(sn)⊤ΣwΘ(sn)∣∣Σ^n,l∣−O+Tr(Σ^n,l−1Θ(sn)⊤ΣwΘ(sn))。
代入公式 35,并忽略与优化无关的常数项(例如 log∣Σ^n,l∣ 和 −O),损失函数可以分解为:
-
加权均值子问题(公式 37):
J∗Sini(μ_w)=∑∗n=1N∑∗l=1Lγ∗n,l(Θ(sn)⊤μ_w−μ^n,l)⊤Σ^n,l−1(Θ(s_n)⊤μ_w−μ^n,l)
-
加权协方差子问题(公式 38):
J∗Sini(Σ_w)=∑∗n=1N∑∗l=1Lγ∗n,l(−log∣Θ(sn)⊤Σ_wΘ(s_n)∣+Tr(Σ^n,l−1Θ(s_n)⊤Σ_wΘ(s_n)))
从公式 37 和 38 到公式 39 和 40 的推导
接下来,我们推导如何从公式 37 和 38 得到等价的公式 39 和 40。
-
加权均值子问题(从公式 37 到公式 39):
公式 37 为:
J∗Sini(μ_w)=∑∗n=1N∑∗l=1Lγ∗n,l(Θ(sn)⊤μ_w−μ^n,l)⊤Σ^n,l−1(Θ(s_n)⊤μ_w−μ^n,l)
展开每一项:
(Θ(sn)⊤μ_w−μ^n,l)⊤Σ^n,l−1(Θ(s_n)⊤μ_w−μ^n,l)=μw⊤Θ(s_n)Σ^n,l−1Θ(sn)⊤μ_w−2μ^n,l⊤Σ^n,l−1Θ(s_n)⊤μ_w+μ^n,l⊤Σ^n,l−1μ^n,l
代入并忽略与 μw 无关的常数项(即 μ^n,l⊤Σ^n,l−1μ^n,l),公式 37 可以写为:
J∗Sini(μ_w)=∑∗n=1N∑∗l=1Lγ∗n,l(μw⊤Θ(s_n)Σ^n,l−1Θ(sn)⊤μ_w−2μ^n,l⊤Σ^_n,l−1Θ(s_n)⊤μ_w)
对 μw 求导:
∂μ_w∂J∗Sini=∑∗n=1N∑∗l=1Lγ∗n,l(2Θ(sn)Σ^n,l−1Θ(sn)⊤μ_w−2Θ(s_n)Σ^n,l−1μ^_n,l)
令导数为零:
∑∗n=1N∑∗l=1Lγ∗n,lΘ(s_n)Σ^∗n,l−1Θ(sn)⊤μ_w=∑n=1N∑∗l=1Lγ∗n,lΘ(sn)Σ^n,l−1μ^_n,l
为了将问题转化为等价形式,定义加权均值和协方差:
- ΣSn−1=∑l=1L(γn,lΣ^n,l)−1 (公式 41)。
- μSn=ΣSn∑l=1L(γn,lΣ^n,l)−1μ^n,l (公式 42)。
这些定义来源于 L 个高斯分布 N(μ^n,l,Σ^n,l/γn,l) 的乘积(公式 43):
N(μSn,ΣSn)∝∏∗l=1LN(μ^∗n,l,Σ^n,l/γn,l)
现在,我们构造一个等价损失函数(公式 39):
J~Sini(μ_w)=∑n=1N(Θ(sn)⊤μ_w−μSn)⊤ΣSn−1(Θ(s_n)⊤μ_w−μSn)
展开并求导:
∂μ_w∂J~Sini=∑n=1N2Θ(sn)ΣSn−1(Θ(sn)⊤μ_w−μSn)
令导数为零:
∑∗n=1NΘ(s_n)Σ∗Sn−1Θ(sn)⊤μ_w=∑n=1NΘ(sn)ΣSn−1μ_Sn
代入 ΣSn−1 和 μSn 的定义,右边为:
∑∗n=1NΘ(s_n)Σ∗Sn−1μSn=∑n=1NΘ(sn)(∑l=1L(γn,lΣ^n,l)−1)(ΣSn∑l=1L(γn,lΣ^n,l)−1μ^_n,l)
注意到 ΣSn−1ΣSn=I,因此:
∑∗n=1NΘ(s_n)∑∗l=1L(γn,lΣ^n,l)−1μ^n,l=∑n=1N∑∗l=1Lγ∗n,lΘ(sn)Σ^n,l−1μ^_n,l
左边为:
∑∗n=1NΘ(s_n)Σ∗Sn−1Θ(sn)⊤μ_w=∑n=1N∑∗l=1Lγ∗n,lΘ(sn)Σ^n,l−1Θ(s_n)⊤μ_w
这与公式 37 的导数结果一致,因此公式 39 是公式 37 的等价形式。
-
加权协方差子问题(从公式 38 到公式 40):
公式 38 为:
J∗Sini(Σ_w)=∑∗n=1N∑∗l=1Lγ∗n,l(−log∣Θ(sn)⊤Σ_wΘ(s_n)∣+Tr(Σ^n,l−1Θ(s_n)⊤Σ_wΘ(s_n)))
注意到 ΣSn−1=∑l=1L(γn,lΣ^n,l)−1,我们构造等价损失函数(公式 40):
J~Sini(Σ_w)=∑n=1N(−log∣Θ(sn)⊤Σ_wΘ(s_n)∣+Tr(ΣSn−1Θ(s_n)⊤Σ_wΘ(s_n)))
由于 Tr 是线性运算:
∑∗l=1Lγ∗n,lTr(Σ^n,l−1Θ(s_n)⊤Σ_wΘ(s_n))=Tr((∑l=1Lγ∗n,lΣ^∗n,l−1)Θ(sn)⊤Σ_wΘ(s_n))=Tr(ΣSn−1Θ(s_n)⊤Σ_wΘ(s_n))
第一项 −log∣Θ(sn)⊤ΣwΘ(sn)∣ 不依赖 l,因此:
∑∗l=1Lγ∗n,l(−log∣Θ(sn)⊤Σ_wΘ(s_n)∣)=−log∣Θ(s_n)⊤Σ_wΘ(s_n)∣∑l=1Lγ_n,l=−log∣Θ(s_n)⊤Σ_wΘ(s_n)∣
因此,公式 38 和公式 40 等价。
求解最优解
公式 39 和 40 与第 2.2.2 节的子问题形式相同,因此可以直接套用 KMP 的优化方法。
-
加权均值子问题(公式 39):
定义:
- Φ=[Θ(s1),…,Θ(sN)],形状为 BO×NO。
- ΣS−1 是对角块矩阵,由 ΣSn−1 组成,形状为 NO×NO。
- μS=[μS1⊤,…,μSN⊤]⊤,维度为 NO。
公式 39 的矩阵形式为:
J~Sini(μ_w)=(Φ⊤μ_w−μS)⊤ΣS−1(Φ⊤μ_w−μS)
求导并令导数为零:
ΦΣS−1(Φ⊤μ_w−μS)=0
ΦΣS−1Φ⊤μ_w=ΦΣS−1μ_S
加上正则化项 λμw⊤μw(如第 2.2.2 节):
(ΦΣS−1Φ⊤+λI)μ_w=ΦΣS−1μ_S
解出 μw∗:
μw\*=(ΦΣS−1Φ⊤+λI)−1ΦΣS−1μS
使用对偶形式:
μw\*=Φ(Φ⊤Φ+λΣS)−1μ_S
-
加权协方差子问题(公式 40):
公式 40 与第 2.2.2 节的协方差优化问题相同,可以通过迭代优化或解析方法求解(具体方法在文中未详细展开,通常需要数值优化)。
-
核化预测:
对于新查询点 s∗,预测均值为:
E[ξ(s∗)]=k\*(K+λΣS)−1μS
其中 K=Φ⊤Φ,k∗ 是核向量。
方法总结
轨迹叠加的步骤如下:
- 通过公式 43 计算混合参考数据库 {sn,μSn,ΣSn}n=1N。
- 使用算法 1(Algorithm 1)预测任意查询点的混合轨迹点。
轨迹叠加就像在做决策:你有几条路可以走(候选轨迹),每条路有不同的“推荐指数”(优先级)。KMP 帮你把这些路“混合”成一条新路,优先考虑推荐指数高的路,但也尽量保留其他路的特点。公式 43 就像把所有路的“建议”加权平均,生成一条综合路线。
3.3 节:使用 KMP 进行局部运动学习
[!note]+ 3.3 节的目的
3.3 节通过局部坐标系和仿射变换扩展 KMP,增强了其外推能力。推导过程表明,公式 46 是公式 45 的最优解,表示高斯分布乘积的期望。
问题背景
之前我们讨论的轨迹都是在全局坐标系(基坐标系 {O})中表示的。然而,为了增强 KMP 在任务空间中的外推能力,可以将人类示范编码到局部坐标系中,提取局部运动模式,从而应用于更广泛的任务实例。局部坐标系的定义通常取决于具体任务。例如,在运输任务中,机器人需要将物体从起始位置(可能变化)移动到不同的目标位置,可以分别在起始和目标位置定义两个局部坐标系。
方法概述
作者提出了局部 KMP(Local-KMP)方法,通过以下步骤实现:
- 定义 P 个局部坐标系 {A(p),b(p)}p=1P,其中 A(p) 是旋转矩阵,b(p) 是平移向量,表示局部坐标系 {p} 相对于基坐标系 {O} 的变换。
- 将人类示范投影到每个局部坐标系中,生成局部参考数据库。
- 在每个局部坐标系中应用 KMP 学习局部轨迹分布。
- 对于新查询点,通过局部 KMP 预测局部轨迹点,并将其转换回基坐标系。
局部坐标系变换
定义 P 个局部坐标系 {A(p),b(p)}p=1P。对于每组人类示范 {{sn,h,ξn,h}n=1N}h=1H,将其投影到每个局部坐标系 {p} 中,生成新的轨迹点 {{sn,h(p),ξn,h(p)}n=1N}h=1H,变换公式(公式 44)为:
[sn,h(p)ξn,h(p)]=[As(p)00Aξ(p)]−1([sn,hξn,h]−[bs(p)bξ(p)])
其中 As(p)=Aξ(p)=A(p),bs(p)=bξ(p)=b(p)。这表示输入 s 和输出 ξ 使用相同的旋转和平移变换。
局部参考数据库
在每个局部坐标系 {p} 中,根据第 2.1 节的方法,从投影后的示范 {sn,h(p),ξn,h(p)} 中提取局部参考数据库 D(p)={sn(p),μ^n(p),Σ^n(p)}n=1N。
轨迹调制
为了简化讨论,作者只考虑通过途径点或终点的轨迹调制(轨迹叠加可以类似处理)。给定基坐标系 {O} 中的期望数据库 {sˉm,μˉm,Σˉm}m=1M,将其投影到每个局部坐标系中,生成局部期望数据库 Dˉ(p)={sˉm(p),μˉm(p),Σˉm(p)}m=1M,使用公式 44 进行变换。
然后,在每个局部坐标系 {p} 中,使用第 3.1 节的更新规则(公式 34)更新局部参考数据库 D(p),生成新的局部参考数据库。
预测阶段
对于基坐标系 {O} 中的新查询点 s∗:
- 根据新任务需求更新 P 个局部坐标系(A(p) 和 b(p) 可能变化)。
- 使用公式 44 将 s∗ 投影到每个局部坐标系,得到局部输入 {s∗(p)}p=1P。
- 在每个局部坐标系 {p} 中,使用 KMP 预测局部轨迹点 ξ~(p)(s∗(p))∼N(μ∗(p),Σ∗(p)),均值和协方差分别通过公式 21 和 26 计算。
将局部轨迹点转换回基坐标系
每个局部轨迹点 ξ~(p)(s∗(p)) 需要转换回基坐标系 {O}。根据公式 44 的逆变换,局部坐标系中的轨迹点转换回基坐标系为:
ξ(p)=Aξ(p)ξ~(p)+bξ(p)
因此,每个局部轨迹点服从分布:
ξ(p)∼N(μ~_p,Σ~_p)
其中:
- μ~p=Aξ(p)μ∗(p)+bξ(p)
- Σ~p=Aξ(p)Σ∗(p)(Aξ(p))⊤
最终轨迹点的计算
在基坐标系 {O} 中,查询点 s∗ 对应的轨迹点 ξ~(s∗) 通过最大化 P 个变换后高斯分布的乘积来确定(公式 45):
ξ~(s\*)=argmax∗ξ∏∗p=1PN(ξ∣μ~_p,Σ~_p)
从公式 45 到公式 46 的推导
我们推导如何从公式 45 得到公式 46。
-
高斯分布乘积:
公式 45 的目标是最大化 P 个高斯分布的乘积:
∏_p=1PN(ξ∣μ~_p,Σ~_p)
每个高斯分布的概率密度为:
N(ξ∣μ~_p,Σ~_p)=(2π)O/2∣Σ~_p∣1/21exp(−21(ξ−μ~_p)⊤Σ~_p−1(ξ−μ~_p))
取对数,最大化乘积等价于最大化对数似然:
log(∏∗p=1PN(ξ∣μ~_p,Σ~_p))=∑∗p=1PlogN(ξ∣μ~_p,Σ~_p)
忽略常数项,目标函数为:
∑_p=1P(−21log∣Σ~_p∣−21(ξ−μ~_p)⊤Σ~_p−1(ξ−μ~_p))
最大化对数似然等价于最小化:
∑_p=1P(ξ−μ~_p)⊤Σ~_p−1(ξ−μ~_p)
-
求导:
对 ξ 求导:
∂ξ∂∑∗p=1P(ξ−μ~_p)⊤Σ~_p−1(ξ−μ~_p)=∑∗p=1P2Σ~_p−1(ξ−μ~_p)
令导数为零:
∑_p=1PΣ~_p−1(ξ−μ~_p)=0
(∑∗p=1PΣ~_p−1)ξ=∑∗p=1PΣ~_p−1μ~_p
解出 ξ:
ξ~(s\*)=(∑∗p=1PΣ~_p−1)−1∑∗p=1PΣ~_p−1μ~_p
这就是公式 46。
算法 2:局部 KMP 的实现
算法 2 总结了局部 KMP 的流程:
-
初始化:
- 定义核函数 k(⋅,⋅) 和正则化参数 λ。
- 确定 P 个局部坐标系 {A(p),b(p)}p=1P。
-
从局部示范中学习:
- 收集示范 {{sn,h,ξn,h}n=1N}h=1H。
- 使用公式 44 将示范投影到局部坐标系。
- 提取局部参考数据库 {sn(p),μ^n(p),Σ^n(p)}n=1N。
-
更新局部参考数据库:
- 使用公式 44 将途径点或终点投影到局部坐标系。
- 使用公式 34 更新局部参考数据库。
- 更新每个坐标系 {p} 中的核矩阵 K(p)、均值 μ(p) 和协方差 Σ(p)。
-
使用局部 KMP 预测:
- 输入查询点 s∗。
- 根据新任务需求更新局部坐标系。
- 使用公式 44 将 s∗ 投影到局部坐标系,得到 {s∗(p)}p=1P。
- 在每个坐标系 {p} 中使用 KMP 预测局部轨迹点。
- 使用公式 46 计算基坐标系中的轨迹点 ξ~(s∗)。
局部 KMP 就像给 KMP 加了一个“地图转换器”:你在一个城市学会了走路(示范),但现在要去另一个城市(新任务空间)。KMP 通过“坐标转换”(局部坐标系和仿射变换),把你在第一个城市学到的走法“搬”到新城市,还能根据新城市的特点调整。公式 46 就像把多个城市的建议(局部轨迹点)加权平均,生成最终路线。
4 .1节:时间驱动的核化运动基元
[!note]+ 4.1 节的目的
4 .1节通过联合建模位置和速度,扩展了 KMP 到时间驱动场景。核矩阵的计算考虑了基函数及其导数,适用于时间输入,但难以推广到高维输入。
时间驱动轨迹的建模
与 ProMP(Probabilistic Movement Primitives)类似,作者将轨迹参数化为包含位置和速度的形式(公式 47):
[ξ(t)ξ˙(t)]=Θ(t)⊤w
其中:
- ξ(t) 是位置,ξ˙(t) 是速度,联合向量维度为 2O(O 是输出维度,例如 3 D 位置的 O=3)。
- Θ(t)∈RBO×2O 是基函数矩阵,定义为(公式 48):
Θ(t)=φ(t)0⋮00φ(t)⋮0⋯⋯⋱⋯00⋮φ(t)φ˙(t)0⋮00φ˙(t)⋮0⋯⋯⋱⋯00⋮φ˙(t)
- φ(t)∈RB 是基函数向量(例如高斯基函数),B 是基函数数量。
- φ˙(t) 是基函数对时间的导数。
- w∈RBO 是权重向量。
通过包含 ξ˙(t) 和 φ˙(t),公式 47 能够编码运动的动态特性(例如速度信息)。
概率建模
为了捕捉示范中的变异性,作者使用高斯混合模型(GMM)建模联合概率 P(t,ξ,ξ˙),类似于第 2.1 节的方法。通过高斯混合回归(GMR),可以提取时间输入 tn 对应的条件概率分布:
P(ξ^_n,ξ^˙_n∣tn)∼N(μ^_n,Σ^_n)
其中 μ^n 和 Σ^n 分别是联合向量 [ξ^n⊤,ξ^˙n⊤]⊤ 的均值和协方差。
时间驱动 KMP 的推导
有了参考分布,我们可以按照第 2.2 节的推导方法,构建时间驱动的 KMP。损失函数形式与之前相同,但输入从 s 变为时间 t,输出从 ξ 扩展为 [ξ⊤,ξ˙⊤]⊤。
-
损失函数:
损失函数为:
J(μw,Σ_w)=∑n=1ND_KL(Pp([ξ,ξ˙]∣tn)∥Pr([ξ^n,ξ^˙n]∣tn))
其中:
- Pp([ξ,ξ˙]∣tn)=N([ξ,ξ˙]∣Θ(tn)⊤μw,Θ(tn)⊤ΣwΘ(tn))
- Pr([ξ^n,ξ^˙n]∣tn)=N([ξ^n,ξ^˙n]∣μ^n,Σ^n)
-
优化:
按照第 2.2.2 节的方法,优化 μw 和 Σw,最终得到:
μ_w\*=Φ(Φ⊤Φ+λΣ)−1μ
其中 Φ=[Θ(t1),…,Θ(tN)],μ 和 Σ 是基于参考分布的。
核矩阵的计算
在计算核矩阵 k(ti,tj)=Θ(ti)⊤Θ(tj) 时(公式 16-18),由于 Θ(t) 包含 φ(t) 和 φ˙(t),需要计算四种内积:
- φ(ti)⊤φ(tj)
- φ(ti)⊤φ˙(tj)
- φ˙(ti)⊤φ(tj)
- φ˙(ti)⊤φ˙(tj)
作者提出使用有限差分法近似 φ˙(t):
φ˙(t)≈δφ(t+δ)−φ(t)
其中 δ>0 是一个极小的常数。基于核函数定义 φ(ti)⊤φ(tj)=k(ti,tj),核矩阵 k(ti,tj) 为(公式 49):
k(t∗i,tj)=Θ(ti)⊤Θ(tj)=[k∗tt(i,j)IOkdt(i,j)IOktd(i,j)IOkdd(i,j)I_O]
其中(公式 50):
- ktt(i,j)=k(ti,tj)
- ktd(i,j)=δk(ti,tj+δ)−k(ti,tj)
- kdt(i,j)=δk(ti+δ,tj)−k(ti,tj)
- kdd(i,j)=δ2k(ti+δ,tj+δ)−k(ti+δ,tj)−k(ti,tj+δ)+k(ti,tj)
替代方法:扩展基函数矩阵
作者指出,可以不使用 φ˙(t),而是直接扩展基函数矩阵:
Θ(t)=blockdiag(φ(t),φ(t),…,φ(t))
此时 Θ(t)∈R2BO×2O,w∈R2BO。这种方法避免了计算 φ˙(t),但增加了维度。
相比之下,使用公式 48 的定义(包含 φ˙(t)),w 的维度为 BO,更紧凑。
高维输入的挑战
时间驱动的 KMP 适用于输入为时间 t 的情况,但难以推广到高维输入 s。原因在于:
- 对于时间 t,可以使用有限差分法近似 φ˙(t)。
- 对于高维输入 s,计算导数 φ˙(s)=∂s∂φ(s)∂t∂s 需要额外的动态模型来描述 s 和 t 的关系,这是一个非平凡问题。
因此,对于高维输入 s,通常采用扩展基函数矩阵的方法(公式 2):
Θ(s)=blockdiag(φ(s),φ(s),…,φ(s))
示例:手写字母“G”
文中通过手写字母“G”的示范展示了时间驱动 KMP 的效果(图 1):
- 图 1 (a):展示了“G”的轨迹,起点和终点分别用“*”和“+”标记。
- 图 1 (b):使用 GMM 估计的分布,椭圆表示高斯分量。
- 图 1 (c):通过 GMR 提取的参考轨迹分布,红色实线和阴影区域分别表示均值和标准差。
时间驱动 KMP 就像教机器人写字:你先示范写字母“G”(包含位置和速度),KMP 学会这些轨迹的模式(用 GMM/GMR 建模)。然后,KMP 用这些模式生成新的“G”,即使起点或终点变了,也能写得差不多。核矩阵的计算就像在比较两笔画的相似性(包括速度),有限差分法是用来估算笔画速度的“近似公式”。
4.2 节:时间驱动 KMP 的时间尺度调制
[!note]+ 4.2 节的目的
第 4.2 节通过定义时间变换函数 τ(t∗),实现了时间驱动 KMP 的时间尺度调制。新查询时间 t∗ 映射到原始时间 τ(t∗),然后通过 KMP 预测调整后的轨迹。
问题背景
在时间驱动的轨迹中,机器人运动的持续时间可能需要根据新任务调整。例如,原始示范的运动持续时间为 tN(即参考轨迹的时间长度),而新任务要求运动持续时间为 tD,可能是更短(加速)或更长(减慢)。这需要对轨迹进行时间尺度调制。
方法:时间变换
为了生成适应新持续时间 tD 的轨迹,作者定义了一个单调函数 τ:[0,tD]→[0,tN],用于将新时间范围 [0,tD] 映射到原始时间范围 [0,tN]。这种时间变换也被称为“相位变换”(phase transformation),在文献中(如 Ijspeert et al., 2013; Paraschos et al., 2013)有类似讨论。
具体实现
-
时间变换函数:
τ(t∗) 将新任务中的查询时间 t∗∈[0,tD] 映射到原始时间范围中的 τ(t∗)∈[0,tN]。
- 如果 tD<tN,运动加速,τ(t∗) 增长得更快。
- 如果 tD>tN,运动减慢,τ(t∗) 增长得更慢。
一个简单的线性变换示例是:
\tau(t^_) = \frac{t_N}{t_D} t^_
这种线性映射确保:
- 当 t∗=0 时,τ(0)=0。
- 当 t∗=tD 时,τ(tD)=tN。
-
使用 KMP 预测:
对于新任务中的查询时间 t∗∈[0,tD],我们不直接使用 t∗ 作为 KMP 的输入,而是使用变换后的时间 τ(t∗)。
根据第 4 节的定义,KMP 预测轨迹点为:
\begin{bmatrix} \boldsymbol{\xi}(\tau(t^_)) \\ \dot{\boldsymbol{\xi}}(\tau(t^_)) \end{bmatrix} = \boldsymbol{\Theta}(\tau(t^_))^\top \boldsymbol{\mu}\_w^_
其中 μw∗ 是通过 KMP 优化得到的参数(参考第 2.2.2 节)。
使用核形式预测:
E[[ξ(τ(t∗))ξ˙(τ(t∗))]]=k(τ(t\*))(K+λΣ)−1μ
其中:
- k(τ(t∗)) 是核向量,基于 τ(t∗) 计算。
- K 是核矩阵,基于原始时间 {tn}n=1N。
-
速度的调整:
注意到 ξ˙(t) 是对原始时间的导数,而新轨迹的时间尺度已改变。设原始轨迹为 ξ(τ(t∗)),新轨迹的速度需要通过链式法则计算:
\dot{\boldsymbol{\xi}}\_{\text{new}}(t^_) = \frac{d}{dt^_} \boldsymbol{\xi}(\tau(t^_)) = \dot{\boldsymbol{\xi}}(\tau(t^_)) \cdot \frac{d\tau(t^_)}{dt^_}
对于线性变换 τ(t∗)=tDtNt∗:
\frac{d\tau(t^_)}{dt^_} = \frac{t_N}{t_D}
因此:
\dot{\boldsymbol{\xi}}\_{\text{new}}(t^_) = \dot{\boldsymbol{\xi}}(\tau(t^_)) \cdot \frac{t_N}{t_D}
这表明速度会根据时间尺度比例 tDtN 缩放:
- 如果 tD<tN(加速),tDtN>1,速度增大。
- 如果 tD>tN(减慢),tDtN<1,速度减小。
时间尺度调制就像调整视频播放速度:你有一段录制的机器人动作(持续时间 tN),但新任务要求更快或更慢地完成(持续时间 tD)。通过时间变换 τ(t∗),KMP 就像“重新播放”这段动作,但速度变了——如果 tD 更短,就像快进;如果 tD 更长,就像慢放。速度也会相应调整,确保动作看起来自然。