From SJTU, MSRA and PKU.
Authors: Chaoyu Guan, Xiting Wang, Quanshi Zhang, Runjin Chen, Di He, Xing Xie.
Title: Towards a Deep and Unified Understanding of Deep Neural Models in NLP
In: ICML 2019.
Codes: icml2019paper2428/Towards-A-Deep-and-Unified-Understanding-of-Deep-Neural-Models-in-NLP
前段时间看过张拳石老师介绍这篇论文的文章,很感兴趣,自己原来也有这方面的其他想法,但是并没有实践过,这篇论文收获颇丰。
不管是深度学习的哪个方向,深度神经网络(DNN)的可解释性一直是一个困扰我们的问题。基于DNN的NLP模型效果为什么好?貌似没有一个好的解释方法。之前有几个尝试性的工作:
这些方法一定程度上定量分析了模型的中间层,虽然可以进一步理解神经网络的内部机制,但是存在not coherency(“普适性”)和not generality(“一贯性”)问题:
文章试图找到一个可以定量分析(解释/可视化)NLP神经网络模型的方法,利用互信息[3]这一具有“普适性”特点的信息度量,定义了一种统一的information-based measure,量化NLP深度神经模型中的中间层对每个词编码的信息,研究每个单词的信息遗忘程度。
文章想从两个角度解释中间层的隐层状态:word information quantification【词信息定量分析】和fine-grained analysis of word attributes【细粒度词属性分析】。
定量计算隐层状态编码输入词的信息量:
corpus-level:
M I ( X ; S ) = H ( X ) − H ( X ∣ S ) MI(\mathbf{X} ; \mathbf{S})=H(\mathbf{X})-H(\mathbf{X} | \mathbf{S}) MI(X;S)=H(X)−H(X∣S)
MI是互信息,H是熵。对于同一个输入,H(X)是恒量,模型中每一层每一个神经元对输入X对编码程度不一样,用H(X|S)表示隐层S丢弃X的信息量,MI就是S编码X的信息量。
其中: H ( X ∣ S ) = ∫ s ∈ S p ( s ) H ( X ∣ s ) d s H(\mathbf{X} | \mathbf{S})=\int_{\mathbf{s} \in \mathbf{S}} p(\mathbf{s}) H(\mathbf{X} | \mathbf{s}) d \mathbf{s} H(X∣S)=∫s∈Sp(s)H(X∣s)ds
sentence-level:
H ( X ∣ s ) = − ∫ x ′ ∈ X p ( x ′ ∣ s ) log p ( x ′ ∣ s ) d x ′ H(\mathbf{X} | \mathbf{s})=-\int_{\mathbf{x}^{\prime} \in \mathbf{X}} p\left(\mathbf{x}^{\prime} | \mathbf{s}\right) \log p\left(\mathbf{x}^{\prime} | \mathbf{s}\right) d \mathbf{x}^{\prime} H(X∣s)=−∫x′∈Xp(x′∣s)logp(x′∣s)dx′
其中: s = Φ ( x ) \mathbf{s}=\Phi(\mathbf{x}) s=Φ(x) 表示x对应的隐层状态。用H(X|s)表示中间层中对应的隐层状态集s丢弃X的信息量。
word-level:
H ( X ∣ s ) = ∑ i H ( X i ∣ s ) H ( X i ∣ s ) = − ∫ x i ′ ∈ X i p ( x i ′ ∣ s ) log p ( x i ′ ∣ s ) d x i ′ H(\mathbf{X} | \mathbf{s})=\sum_{i} H\left(\mathbf{X}_{i} | \mathbf{s}\right) H\left(\mathbf{X}_{i} | \mathbf{s}\right)=-\int_{\mathbf{x}_{i}^{\prime} \in \mathbf{X}_{i}} p\left(\mathbf{x}_{i}^{\prime} | \mathbf{s}\right) \log p\left(\mathbf{x}_{i}^{\prime} | \mathbf{s}\right) d \mathbf{x}_{i}^{\prime} H(X∣s)=i∑H(Xi∣s)H(Xi∣s)=−∫xi′∈Xip(xi′∣s)logp(xi′∣s)dxi′
其中 X i X_i Xi表示第i个词的向量。
在计算word-level信息量时,概率 p ( x i ′ ∣ s ) p\left(\mathbf{x}_{i}^{\prime} | \mathbf{s}\right) p(xi′∣s) 很难算,这部分详见论文[2]3.2.2节和补充材料。为了便于计算,文章引入了perturbation-based approximation【扰动近似】。核心思想就是给每个词加一个高斯扰动项 x ~ i = x i + ϵ i \tilde{\mathbf{x}}_{i}=\mathbf{x}_{i}+\boldsymbol{\epsilon}_{i} x~i=xi+ϵi,经过近似之后,目标函数变换成求极值问题:
L ( σ ) = ∑ i = 1 n ( − log σ i ) + 1 K λ E x ~ i ⋅ ϵ i ∼ N ( 0 , σ i 2 I ) ∥ Φ ( x ~ ) − s ∥ 2 σ S 2 L(\boldsymbol{\sigma})=\sum_{i=1}^{n}\left(-\log \sigma_{i}\right)+\frac{1}{K \lambda} \mathbb{E}_{\tilde{\mathbf{x}}_{i} \cdot \boldsymbol{\epsilon}_{i} \sim \mathcal{N}\left(\mathbf{0}, \sigma_{i}^{2} \mathbf{I}\right)} \frac{\|\Phi(\tilde{\mathbf{x}})-\mathbf{s}\|^{2}}{\sigma_{\mathbf{S}}^{2}} L(σ)=i=1∑n(−logσi)+Kλ1Ex~i⋅ϵi∼N(0,σi2I)σS2∥Φ(x~)−s∥2
这里把补充材料的例子搬过来,更容易理解,扰动项就是解释指标的关键。
目标函数分为两部分:
左边部分是给每一个词向量加扰动, σ \sigma σ 越大,说明这个词需要丢弃的信息越多【也就是这个词越不重要】;
右边部分是经过DNN编码之后,加扰动之后输入,经过DNN编码得到的 Φ ( x ~ ) \Phi(\tilde{\mathbf{x}}) Φ(x~) 要与原始输入的 s 差距越小越好。
按照这个最优化目标,学习得到的扰动项可以很好地表示词的重要程度。
这部分分析了神经网络中间层的每个输入词内部的细粒度属性信息,属性来自DBpedia和Microsoft Concept Graph,概念 c (例如,情感形容词)由属于该概念的一组词组成(例如,happy,sorrowful,sad,…)。对于每一个词 x_i ,通过计算 s 编码当前词相对于随机词的相对置信度,将共同概念 c 中的信息从目标词的所有信息中解放出来。Figure_8对这方面做了实验。
近似计算 s 编码当前词 x_i (当前词是概念,在 c 中)相对于随机词 x i ′ {x}_{i}^{\prime} xi′ 的相对置信度 A_i 和 A_c :
A i = log p ( x i ∣ s ) − E x i ′ ∈ X i log p ( x i ′ ∣ s ) A_{i}=\log p\left(\mathbf{x}_{i} | \mathbf{s}\right)-\mathbb{E}_{\mathbf{x}_{i}^{\prime} \in \mathbf{X}_{i}} \log p\left(\mathbf{x}_{i}^{\prime} | \mathbf{s}\right) Ai=logp(xi∣s)−Exi′∈Xilogp(xi′∣s)
A c = E x i ′ ∈ X c log p ( x i ′ ∣ s ) − E x i ′ ∈ X i log p ( x i ′ ∣ s ) A_{\mathrm{c}}=\mathbb{E}_{\mathbf{x}_{i}^{\prime} \in \mathbf{X}_{\mathrm{c}}} \log p\left(\mathbf{x}_{i}^{\prime} | \mathbf{s}\right)-\mathbb{E}_{\mathbf{x}_{i}^{\prime} \in \mathbf{X}_{i}} \log p\left(\mathbf{x}_{i}^{\prime} | \mathbf{s}\right) Ac=Exi′∈Xclogp(xi′∣s)−Exi′∈Xilogp(xi′∣s)
然后在将两项做差,表示当前词x_i 去掉共有属性 c 之后的剩余信息:
r i , c = A i − A c = log p ( x i ∣ s ) − E x i ′ ∈ X c log p ( x i ′ ∣ s ) r_{i, c}=A_{i}-A_{\mathbf{c}}=\log p\left(\mathbf{x}_{i} | \mathbf{s}\right)-\mathbb{E}_{\mathbf{x}_{i}^{\prime} \in \mathbf{X}_{\mathrm{c}}} \log p\left(\mathbf{x}_{i}^{\prime} | \mathbf{s}\right) ri,c=Ai−Ac=logp(xi∣s)−Exi′∈Xclogp(xi′∣s)
第一部分实验分别跨时间戳、图层和模型,评价基于信息的解释方法。对比基准有:
实验可视化分析reverse sequence【逆向序列】神经网络中层特征关注点的区别,基于词信息量的方法,可以更加平滑自然的显示神经网络内部信息处理逻辑。其他方法也还可以,LRP方法就难以显示。
实验可视化分析了不同解释方法在SST2任务上神经网络中层特征关注点的区别。基于词信息量的方法,可以更加平滑自然的显示神经网络内部信息处理逻辑。结果表明,LRP和Gradient实效了,Perturbation噪音很大。
实验研究了超参数的不同选择如何影响模型学习的隐藏状态。结果表明,基于词信息量的方法可以快速识别大学习率的模型包含的信息太少,应该减少学习率来改善性能。相比之下,Gradient方法不能在超参数调整方面提供类似的指导。
第二组实验分析比较了四种在NLP中常用的深度学习模型,即BERT、Transformer、LSTM和CNN,BERT为什么效果最好呢?文章有了初步解释,相比于LSTM和CNN,BERT和Transformer往往可以更加精确地找到与任务相关的目标单词,而CNN和LSTM往往使用大范围的词去做预测,没有聚焦。
并且,BERT模型在预测过程中往往使用具有实际意义的单词作为分类依据,而其他模型把更多的注意力放在了and/the/to/is/that 这类缺少实际意义的单词上。
在SST-2任务上,BERT模型在L3-L4层就已经遗忘了EOS单词,往往在第5到12层逐渐遗忘其他与情感语义分析无关的单词。相比于其他模型,BERT模型在单词选择上更有针对性,没有预训练的Transformer每次都照顾到所有的词,LSTM更关注前面的词,CNN基本上就是眉毛胡子一把抓。
前面提到的细粒度词属性信息,这里分析了各个单词的概念信息遗忘。BERT模型对各种细粒度概念信息保留得最好,曲线平缓。
最后还有一个实验展示了在LSTM和BERT的所有层的训练过程中,互信息是如何变化的。可以看到,BERT的互信息变化很稳定,最后几层在2500层之前压缩信息,达到稳定状态。LSTM一开始让更多的信息通过,然后再抛弃无用信息以达到更好的效果。
本文定义了一种统一的基于词信息量的方法,来定量解释NLP深度神经模型的中间层。与现有方法相比,基于词信息量的方法可以跨时间戳、图层和模型(一贯性)提供一致且忠实的结果。 而且,它可以用最小化假设(普适性)来定义,适用与各个模型结构和任务。 最后,实验展示了如何将基于词信息的度量用作解释模型的工具,并展示了如何丰富理解DNN的能力。
如有错误,欢迎讨论和指出,万分感谢。
[1]. 神经网络的可解释性,从经验主义到数学建模(一篇icml文)
[2]. Towards a Deep and Unified Understanding of Deep Neural Models in NLP
[3]. Kinney, J. B. and Atwal, G. S. Equitability, mutual information, and the maximal information coefficient. National Academy of Sciences, pp. 201309933, 2014.