首页 理论教育 构造动态贝叶斯网络

构造动态贝叶斯网络

时间:2022-02-11 理论教育 版权反馈
【摘要】:要构造一个动态贝叶斯网络,我们必须指定3类信息:状态变量的先验分布P;转移模型P;以及传感器模型P。为了指定转移模型和传感器模型,必须还要指定相继时间片之间、状态变量与证据变量之间的连接关系的拓扑结构。例如,图15.11中所示的三节点网络给出了关于雨伞世界的动态贝叶斯网络的完整信息。根据这些信息,完全(半无穷)的动态贝叶斯网络可以根据需要通过复制第一个时间片的方式构造出来。

15.5.1 构造动态贝叶斯网络

要构造一个动态贝叶斯网络,我们必须指定3类信息:状态变量的先验分布P(X0);转移模型P(Xt+1|Xt);以及传感器模型P(Et|Xt)。为了指定转移模型和传感器模型,必须还要指定相继时间片之间、状态变量与证据变量之间的连接关系的拓扑结构。因为我们假设转移模型和传感器模型都是稳态的——即对于所有的时间片t都相同——那么只要为第一个时间片指定这些信息就可以了,这样是最方便的。例如,图15.11(a)中所示的三节点网络给出了关于雨伞世界的动态贝叶斯网络的完整信息。根据这些信息,完全(半无穷)的动态贝叶斯网络可以根据需要通过复制第一个时间片的方式构造出来。


图15.11 (a)对于雨伞DBN的先验概率、转移模型以及传感器模型的详细说明。所有后继的时间片都被假定为时间片1的副本。(b)一个关于X-Y平面上的机器人运动的DBN

现在让我们考虑一个更有趣的例子:监控一个在X-Y平面上运动的电池驱动机器人,这个机器人在第 15.1 节中介绍过。首先,我们需要状态变量,其中包括位置信息 Xt = (Xt, Yt)以及速度信息我们假设通过某种测量位置的方法——可能是一个固定的摄像头或者机器人载 GPS (Global Positioning System,全球定位系统)——获得测量值Zt。机器人在下一时间步的位置依赖于现在的位置和速度,如同在标准卡尔曼滤波器模型中一样。但是下一时间步的速度依赖于当前的速度以及电池状态。我们增加变量Batteryt来表示电池实际的充电水平,其父节点为上一时间片的电力水平与速度;我们再增加一个变量BMetert来表示电池充电水平的测量值。这样我们就得到了图15.11(b)所示的基本模型。

更深入地考察传感器模型BMetert的本质是值得的。为了简化,让我们假设Batteryt和BMetert都取在0到5之间的离散值——这很像典型笔记本电脑上的电池电量计。如果电量计总是精确的,那么条件概率表P(BMetert|Batteryt)应该沿“对角线”概率等于1.0,而在其他地方概率等于0.0。不过在实际测量中总会出现噪声。对于连续测量,可能会替代地使用一个具有较小方差的高斯分布[23]。对于我们的离散变量,我们可以用一个误差概率以合适的方式逐渐降低的分布来逼近高斯分布,以使得大误差出现的概率非常低。我们将用术语高斯误差模型(Gaussian error model)来涵盖连续的和离散的版本。

任何直接接触过机器人学、计算机化过程控制,或者其他形式的自动传感的人都很容易证实这样的事实,微小的测量噪声往往是问题中最次要的方面。真正的传感器往往会发生故障。当一个传感器发生故障后,它不一定会发出一个信号说:“哦,顺便告诉你,我将发出的数据其实是一堆废话。”相反,它只是把废话发送出来。最简单的一类故障称为瞬时故障,这种情况下传感器偶尔会发出一些没有意义的数据。例如,即使在电池充满电的情况下,电池电量水平传感器也可能会经常在机器人被撞击时发出一个零电量信号。

让我们看看在一个没有考虑瞬时故障的高斯误差模型中,瞬时故障出现时会发生什么样的事情。例如假设机器人静静地坐着,而电池电量读数连续20次显示为5。然后电量表发生了一次暂时性的突变,下一次的读数为BMeter21=0。这个简单高斯误差模型会如何影响我们对BMeter21的信度?根据贝叶斯法则,答案不仅依赖于传感器模型 P(BMeter21 = 0|Battery21),还依赖于预测模型 P(Battery21|BMeter1:20)。如果出现大的传感器错误的概率明显低于转移到状态Battery21=0的概率,即使后者非常不可能发生,那么后验分布也会为电池耗尽赋予较大的概率。在时刻t = 22的第二个零读数会使得这个结论几乎完全肯定。但如果之后瞬时故障消失了,读数在t = 23时回到了5,那么电池电量水平的估计值会很快魔术般地回到 5。图 15.12(a)中,上方的曲线描述了该事件过程,这条曲线显示了使用离散高斯误差模型时Batteryt随时间变化的期望值。

除非故障排除,否则总有一个时刻(t = 22)机器人会确信它的电池已经耗尽;假设,然后它应该发出一个求救信号,并且关机。哎呀,这个过于简单的传感器模型会引导机器人误入歧途。如何修正这种情况?考虑一个大家熟悉的、来自于人日常驾驶的例子:在急速转弯或者陡峭的山路上,有时汽车的“油箱已空”警示灯会打开。但驾车的人不是先查找求助电话,而只是回想起当汽油在油箱里摇来晃去时油箱表经常会发生很大的误差。这个故事的寓意是:为了让系统能够正确地处理故障,传感器模型必须包含发生故障的可能性。

关于传感器最简单的故障模型是考虑一个传感器返回某个完全不正确的值的概率,而不管世界的真实状态是什么。例如,如果电池电量计发生故障,返回0,我们可能认为:

P(BMetert=0|Batteryt=5)=0.03

这个值大概比简单高斯误差模型给出的概率大不少。让我们称之为瞬时故障模型。当我们遇到了读数 0 时这个模型会如何帮助我们?倘若根据到目前为止的读数而计算出的电池耗尽的预测概率要比0.03小得多,那么对于观察值BMeter21 = 0的最好解释是电量计发生了暂时性的故障。直观地看,我们可以认为对于电池电量水平的信度有一定的“惯性”,这能帮助我们克服电量计读数的暂时异常。在图 15.12(b)中,上方的曲线表明瞬时故障模型能够处理瞬时故障,而不会造成信度的灾难性突变。

关于暂时性现象就说到这里。但是当感知器发生持续故障时该怎么办?很遗憾,这种故障发生得实在太普遍了。如果传感器连续20次返回读数5,然后紧接着连续20次读数0,这时上一段所描述的瞬时传感器故障模型会让机器人逐渐相信它的电池确实已经耗尽,而实际的情况却可能是电量计失效了。在图15.12(b)中,下方的曲线显示了这种情况下的信度轨迹。在时刻t = 25——连续出现5个读数 0——机器人确信它的电池已经耗尽了。显然,我们宁可让机器人相信是它的电池电量计坏了——如果实际上这个事件更有可能发生的话。


图15.12 (a)上方曲线:对于一个除了t=21和t=22处取值为0以外全部取值都是5的观察序列,使用简单的高斯误差模型的Batteryt的期望值轨迹。下方曲线:当从t=21处开始保持为0的轨迹。(b)在瞬时故障模型上运行的相同实验。注意瞬时故障可以得到很好的处理,但是持续故障则导致过度悲观的结果

毫不奇怪,要处理持续故障我们需要一个能够描述传感器在正常条件下以及出现故障后如何行为表现的持续故障模型。为了做到这一点,我们需要再增加一个表示系统隐状态的附加变量,比如说BMBroken,来表示电池电量计的状态。持续故障必须用连接BMBroken0到BMBroken1的边来建立模型。这条持续边的条件概率表给出了一个在任何指定时间步发生故障的微小概率,比如说 0.001,但也明确说明一旦传感器发生故障,故障状态就会持续。当传感器正常时,BMeter 的传感器模型和瞬时故障模型是相同的;而当传感器发生故障时,它规定BMeter永远取0值,而不考虑电池的实际电量。

电池电量传感器的持续故障模型如图15.13(a)所示。它在两个数据序列(暂时突变和持续故障)下的性能如图15.13(b)所示。关于这些曲线有一些事情需要注意。首先,在暂时突变的情况下,传感器发生故障的概率在出现第二个读数0后显著上升,但是一旦观察到读数5后又很快降回到0。其次,在持续故障的情形下,传感器发生故障的概率很快上升到几乎等于1,并且保持这个概率。最后,一旦确信传感器发生了故障,机器人就只能假设其电池电量的消耗处于“正常”速度,如图中逐渐递减的曲线E(Batteryt|…)所示。

到目前为止,我们对复杂过程的表示还仅仅触及皮毛而已。转移模型的变化非常多,包含的主题之间的差异之大,就如同对人类内分泌系统建模和对高速公路上多车辆行驶建模之间的差异那样可能有根本性的不同。传感器建模本身就是一个巨大的子领域,不过一些更加精细的现象,例如传感器漂移、突然失准,以及一些外部条件(例如天气)对传感器读数的影响,都能够通过动态贝叶斯网络的显式表示加以处理。


图15.13 (a)一个DBN的局部,显示了对电池传感器的持续故障建模的感知器状态变量。(b)上方曲线:对于“瞬时故障”和“持续故障”的观察序列,Battertt期望值的轨迹。下方曲线:已知这两种观察序列,BMBroken的概率轨迹

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈