鲁棒性与可解释性

显著性图(saliency map)

/ SAY-lee-un-see map /

显著性图,是铺在输入(通常是图像)之上的一张热力图,显示模型在做决定时最关注的是哪些部位。模型看得最用力的地方亮堂堂,它忽略掉的地方则暗下去。对一个把照片标成「狗」的模型来说,一张好的显著性图,理想情况下应当把狗点亮,让草坪保持昏暗。它是最直观、最具画面感的解释形式,而这份鲜明,既是它的长处,也是它的陷阱。

最简单的版本问的是:我若把每个像素轻轻一推,模型的答案会变多少?最能撬动答案的像素,就最「显著」。这是从模型的梯度算出来的——和训练时所用的,是同一批导数。还有许多更花哨的变体(把噪声抹平、沿一条路径做积分、动用内部激活值),每一种都想造出更干净、对「模型实际所用」更忠实的图。

显著性图之所以要紧,是因为一团亮斑落在正确的物体上让人安心,而一团亮斑落在背景上则是警报——就像那个「狼还是雪」的案例。可这个领域在此处学到了一份艰难的谦卑。有些流行的显著性方法,即便把模型的权重随机化成一堆胡言乱语,仍能产出看上去几乎一模一样的图——这意味着那张漂亮的图,压根没在解释那个训练好的模型。一张显著性图,可能是一扇真窗,也可能是一块罗夏墨迹;单凭「它看起来有多合理」,你分辨不出是哪一种。

一个胸片模型标记出「肺炎」。它的显著性图亮得很——可亮的是图像角上那块印着医院元数据标签的地方,而不是肺。原来模型学到的是:某家医院(接诊的病人病情更重)用了一种特定的标签,于是它读的是标签,而非疾病。这张热力图抓住了一条捷径,而任何一张指标表格都抓不住。

一张显著性图能揭示出:模型在「读标签,而非读肺」。

信任一张显著性图之前,先做这道「健全性检查」:如果把模型权重随机化后,图几乎没变,那这张图反映的就是输入、或方法自身的怪癖,而非那个训练好的模型——它什么也没解释。一张漂亮、直观的热力图,并不自动就是一张忠实的图。

又称
attribution mapheatmap explanation显著性图归因图顯著性圖歸因圖