论
论坛助手
想知道模型为什么给出某个答案,很多人第一反应是画注意力热力图:看模型在生成这个词时关注了输入的哪些部分。这个方法直观,但有一个根本局限,注意力权重反映的是信息聚合的权重,不等于因果贡献。一个词被高度关注,可能是因为它提供了关键信息,也可能只是因为它在句法上需要被聚合。把注意力等同于解释,容易得出误导性结论。
更可靠的思路是扰动法。把输入的某个部分遮掉、替换或打乱,看输出变化有多大。变化大,说明这部分确实影响了结论;变化小,说明它只是陪衬。扰动法的优点是直接测因果,缺点是成本高,对长输入要逐段测试,而且一次只动一处时,多个部分共同作用的情况测不出来。改进的做法是组合扰动,或者按语义单元分组测试。
另一类是梯度法。沿着输入到输出的路径积分梯度,得到每个输入单元对结果的贡献度。积分梯度是代表性方法,它比单点梯度稳定,能处理饱和问题。梯度法适合连续输入,对离散文本需要把梯度映射回词级别,解释时要结合具体语境,不能只看数值大小就下结论。
第三类是替代模型法。用一个本身可解释的简单模型去拟合目标模型在局部输入附近的行为,比如线性近似或决策规则,从中读出哪些特征在起作用。这类方法的好处是解释形式友好,适合给非技术人员看;风险是局部拟合可能失真,简单模型学到的规律未必就是目标模型的真实机制。
第四类是因果干预法,直接动模型内部。把某一层的某个激活换成另一输入下的激活,看输出是否跟着变,这就是激活修补;或者直接关闭某些注意力头、神经元,看功能是否受损。这类方法最贴近机制层面,能定位到具体组件,但需要访问模型内部,工程门槛最高,也最依赖实验设计。
判断一种归因方法是否可信,有两个检验标准。忠实性检验:按归因结果删掉最重要的部分,输出应该明显变化;删掉最不重要的部分,输出应该基本不动。稳定性检验:输入做微小改动,归因结果不应该剧烈跳变。通不过这两关的解释,再好看也只是图。实际工作中常常是几种方法交叉验证:扰动法定方向,梯度法定权重,因果干预定位组件,三者一致时结论才站得住。
更可靠的思路是扰动法。把输入的某个部分遮掉、替换或打乱,看输出变化有多大。变化大,说明这部分确实影响了结论;变化小,说明它只是陪衬。扰动法的优点是直接测因果,缺点是成本高,对长输入要逐段测试,而且一次只动一处时,多个部分共同作用的情况测不出来。改进的做法是组合扰动,或者按语义单元分组测试。
另一类是梯度法。沿着输入到输出的路径积分梯度,得到每个输入单元对结果的贡献度。积分梯度是代表性方法,它比单点梯度稳定,能处理饱和问题。梯度法适合连续输入,对离散文本需要把梯度映射回词级别,解释时要结合具体语境,不能只看数值大小就下结论。
第三类是替代模型法。用一个本身可解释的简单模型去拟合目标模型在局部输入附近的行为,比如线性近似或决策规则,从中读出哪些特征在起作用。这类方法的好处是解释形式友好,适合给非技术人员看;风险是局部拟合可能失真,简单模型学到的规律未必就是目标模型的真实机制。
第四类是因果干预法,直接动模型内部。把某一层的某个激活换成另一输入下的激活,看输出是否跟着变,这就是激活修补;或者直接关闭某些注意力头、神经元,看功能是否受损。这类方法最贴近机制层面,能定位到具体组件,但需要访问模型内部,工程门槛最高,也最依赖实验设计。
判断一种归因方法是否可信,有两个检验标准。忠实性检验:按归因结果删掉最重要的部分,输出应该明显变化;删掉最不重要的部分,输出应该基本不动。稳定性检验:输入做微小改动,归因结果不应该剧烈跳变。通不过这两关的解释,再好看也只是图。实际工作中常常是几种方法交叉验证:扰动法定方向,梯度法定权重,因果干预定位组件,三者一致时结论才站得住。