[原创] 从埃航空难报告看AI系统的容错性

2019-04-09 14:00:59 来源: 半导体行业观察

2019年4月4日,埃航发布了波音737 MAX 8飞机空难的初期报告 [1]。埃航和去年印尼狮航的空难出于几乎相同的原因,让346人失去了生命。众所周知,两起空难都是由于MCAS(机动特性增强系统,即自动防失速系统)根据错误的攻角传感器数据下压机头,导致飞机起飞后几分钟内就俯冲坠毁。从埃航 [1] 和狮航 [2] 的报告中,看到飞行员与自动防失速系统的搏斗,简直是人类与AI的人机大战了。笔者作为一个计算机系统研究者,虽然不是飞行专业人士,但也试图通过技术分析,指出MCAS不容错、不可见、不受限、难关闭的四大问题,给更多的AI系统带来启示。

技术背景简介

飞机之所以能在空中飞行,是因为机翼在不断“攻击”前方的空气。顾名思义,攻角(Angle of Attack,AOA)就是指机翼弦线(如图1所示的红色长线)与相对风向(图1中的蓝箭头)之间的夹角。在一定的范围内,攻角越大,气流对机翼“推动”作用向上的分量也就越大,从而飞机的升力越大。但是,如果攻角过大,升力就会急剧下降,从而发生失速。这个达到最大升力但即将失速的攻角称为临界攻角,一般是十几到二十几度。

图1:攻角(Angle of Attack)的定义(来源:维基百科)。

飞机的攻角一般是通过机头的上下俯仰(pitch)来调整。我们常见的客机尾部有一对水平方向的翼面,叫做水平尾翼。两个水平尾翼的后边缘各有一个能够上下活动的舵面,叫做升降舵(elevator)。飞行员向后“拉杆”时,升降舵会向上偏转,气流对它有个向下压的力,飞机就会抬头;反之,飞行员向前“推杆”时,飞机就会低头。但是,如果只有升降舵,飞行员即使在匀速平飞的时候,也得不停地推杆拉杆,这太累了。因此,为了提高俯仰方向上的静稳定性,水平尾翼的水平翼面也是能够旋转的,称为水平安定面(stabilizer)。把水平安定面调整到飞机力矩平衡的状态,就叫做配平(trim)。配平大致可以分为人工、电动、自动配平三种方式。如图2所示,人工配平就是用手去通过液压传动机构转动安定面;电动配平是按动电钮,向上或向下按一次,水平安定面就会转动一点;自动配平则是让计算机根据速度或自动驾驶系统的指令来操作。

图2:波音737 MAX 8的俯仰控制系统(来源:[1])。

前面我们提到,飞机攻角过大会导致失速。由于波音737 MAX 8气动构型设计的一些原因,为防止失速,飞机安装了MCAS系统,也就是在飞机的攻角传感器检测到攻角超过临界攻角时,自动转动水平安定面,下压机头。不管自动驾驶开启还是关闭,只要水平安定面的电源开着,MCAS系统就会起作用,而且不达目的不罢休,这点我们后面还会讨论到。现在我们就来分析导致空难的三个环环相扣的技术问题。

问题一:攻角传感器读数离谱并且不一致

波音737 MAX 8飞机有左右两个独立的攻角传感器。从埃航空难班机飞行记录仪的数据(图3)可以看出,右侧攻角传感器(AOA-R)在15度左右比较正常,而左侧攻角传感器(AOA-L)在05:38:45突然上升到75度左右了。此时飞机正在上升高度,攻角加上飞机本身的仰角就接近90度了,这意味着飞机几乎是在竖直向上飞。这是当火箭呢?因此攻角传感器的数值显然是离谱的。左右攻角传感器的差值也高达60度,侧风的影响也不至于这么大。然而MCAS系统并没有考虑到这些,而是根据左侧攻角传感器单方面的数值来下压机头。

计算机系统中有个著名的拜占庭将军问题,就是几个军官之间在通信不可靠、军官中还可能有叛徒的情况下,如何保证忠诚的军官之间能达成一致的协议。这个问题是早在20世纪七八十年代,Leslie Lamport就在NASA的容错航电计算机系统项目中提出的。这也是使他获得图灵奖的重要成就之一。航空航天领域对容错性要求很高,这些容错的系统设计也在21世纪的今天被应用在上千上万台机器组成的数据中心里。然而MCAS系统却没有足够的容错性。最早一些人把事故归因于攻角传感器被鸟击,但单侧攻角传感器损坏就导致飞机失控,显然不符合飞控系统的容错性要求。在波音事故后的软件更新 [3] 中,飞控系统将比较攻角传感器的输入,如果相差超过5.5度就不会触发MCAS系统,这就解决了第一个问题。

图3:埃航空难班机飞行记录仪的数据(来源:[1])

问题二:MCAS的操作对飞行员不可见

去年的狮航空难前,飞行员操作手册中根本没有关于MCAS系统的说明,飞行员不知道为什么机头自己下沉了,此时飞行员的内心想必是蒙圈的。后来波音尽管更新了安定面失控检查单,但MCAS在发现攻角达到临界时还是不会通知飞行员,而是悄悄地执行安定面配平操作。此外,这个机型上的攻角指示器是选配的,因此事故航班的飞行员看不到攻角,也不知道攻角不一致,直到坠毁前几十秒才发现左侧攻角传感器(left alpha vane)故障这个根本原因(图4),但由于后面将讨论到的问题还是没能挽救飞机。对有经验的飞行员而言,攻角指示器确实不必要,不过有传感无指示,就很难发现仪表故障。很多自动系统为了让用户省心,隐藏了大量技术细节,却给故障的定位和调试带来了麻烦。理想的设计应当是平时减少对用户的干扰,但在异常时提醒用户,用户也能按需查看系统的数据来源和内部细节。

图4:埃航事故班机飞行历史的最后阶段(来源:[1])

波音软件更新中,增加了攻角指示器和攻角不一致的告警,如图5所示。

图5:波音软件更新中飞行员主显示面板上的攻角指示器和攻角不一致警告(来源:[3])

问题三:MCAS系统与飞行员持续较劲

第三个问题就是MCAS系统把自己当成了救世主,不恢复攻角不罢休,不断跟飞行员较劲,而且“力气”比人更大。例如在去年狮航事故中,左右攻角传感器差了20度,飞行员与MCAS大战二十多个回合,看起来胆战心惊。如图5所示,锯齿状的蓝线是手动配平(trim manual),橙线是自动配平(trim automatic),每次手动配平之后自动配平都会被触发,然后飞行员再去手动配平,但最后几次自动配平的“力气”明显比人大,飞行员也无力回天。海恩法则指出:每一起严重事故的背后,必然有29次轻微事故和300起未遂先兆以及1000起事故隐患。就在狮航事故班机的上一次飞行中,如图6所示,就出现了飞行员与MCAS系统较劲的问题,还好控制住了,紧急返航成功。

图6:狮航事故当次航班的飞行记录仪信息(来源:[2])

图7:狮航事故上一次航班的飞行记录仪信息(来源:[2])

波音最近的软件更新中,增加了两个限制:首先,每次检测到攻角异常,都只会启动MCAS一次,而不是多次启动MCAS直到攻角恢复正常。只要不是飞行员故意跟它较劲,只需修正一次安定面,就能从失速边缘解除危险。其次,MCAS对安定面的输入不能超过飞行员用力拉杆时对升降舵的输入,这保证飞行员始终能通过拉杆的方式抵消MCAS的错误操作。多数情况下,AI系统不需要预防人类的恶意操作,而应当作为人类的辅助和失误时的临时补救。

问题四:要么断电,要么开启MCAS

最后一个问题是MCAS系统与电动控制系统的紧密耦合。埃航空难中,飞行员按照波音的检查单,给水平安定面断电(stab trim cutout)。我们知道,拉杆(升降舵)和配平(水平安定面)都可以控制飞机的俯仰。因此,在安定面状态异常的情况下,飞行员用力拉了两分多钟的杆,让飞机爬升。但是水平安定面一直这样异常着总不是好事,因此飞行员还是想配平。在飞机超速的情况下,手动配平需要的力气很大,飞行员弄不动。因此,飞行员又恢复供电,试图电动配平。这在五秒后激活了MCAS系统,一个俯冲把机头拉到40度了(图8)。在打开电动系统的情况下,尽管自动驾驶系统可以关闭,但MCAS系统无法关闭。波音在狮航空难后给出的检查单认为拔掉电源手动配平就行了,但在埃航的情况下手动弄不动。因此自动控制系统应该有办法与基本电动系统解耦。此外,MCAS系统的操作幅度过大也是问题,最后的下压机头操作飞行员来不及挽回,这在波音的软件更新中已经解决。

图8:埃航事故班机拉杆、超速、尝试手动配平失败的过程(来源:[1])

对AI系统的启示

MCAS系统是有用的,但不容错、不可见、不受限、难关闭的软件设计导致了人机大战,并以人类的惨败告终。随着物联网、自动驾驶、工业自动化和工业互联网的普及,越来越多重要甚至生命攸关的系统将使用人工智能(AI)自动控制。在数据中心的自动控制系统中,也存在很多故障恢复机制反而导致了更大规模故障的案例 [4]。

我们希望AI系统能够吸取四条教训:

1.应当更谨慎地对待它的输入,输入异常时应提醒用户并保护性关闭;

2.用户应当知道AI的存在,其操作应当对用户可见;

3.应当限制自动操作的次数和强度,保证人类能超控(override);

4.应当提供拔电源以外更优雅的关闭方式。

希望人机大战的悲剧不再重演。

责任编辑:Sophie
半导体行业观察
摩尔芯闻

热门评论