Explainable Learning

    xiaoxiao2023-10-04  170

    https://www.wordstream.com/blog/ws/2017/07/28/machine-learning-applications

    之前我们已经学习到了很多的机器学习模型,比如Linear Regression、Logistics Regression、Decision Tree、Random Forest、Neural Network……,它们有着各自不同的用途,比如可以使用DT做分类,用LR来做回归。但除了各自擅长的领域不同之外,它们还有一个很大的不同之处,那便是可解释性。

    https://www.google.com.hk/url?sa=i&source=images&cd=&ved=2ahUKEwj6utqC27XiAhUSa94KHcRzBVsQjRx6BAgBEAU&url=http://randomforestmusic.com/&psig=AOvVaw1H7xw48HAlt08ydDBSosSW&ust=1558840286778818

    我们知道一个简单的Decision Tree可以看做是IF-THEN规则的集合,当输入一个样本到决策树中,叶子节点就会给出一个分类的结果。从叶子节点到根节点的路径中,就可以看出决策树根据哪些规则来给出它的判别结果,这样的结果也很符合人的判别准则,我们就认为这样的模型解释性较强。如果我们将多个简单的决策树进行集成,就得到广泛使用的Random Forest,由于它可能包含了成千上百的决策树,参数众多,我们就很难对于它给出的结果做出一个合理的解释。

    此外,作为深度学习主角的神经网络已经在很多的领域得到了广泛的应用,比如用于图像识别的CNN,用于自然语言处理的RNN和LSTM,已经最近热门的Attention model,还有强大的生成模型GAN等等。但是,神经网络作为一个黑盒子,我们可以使用它处理各种复杂的任务,并得到很好的效果,但是并不知道它为什么给出这样的结果,即不清楚模型内部学习到了关于具体任务的哪些东西。因此针对模型的可解释性,很多人投入到了相关的研究之中,也取得了一定的成果,下面我们就来简要的了解一下有关机器学习模型解释性方面的内容。


    假如今天要做的是图像分类的任务,给我们预先建好的神经网络模型一个输入图像,它就会给出在多大可能性下判别它为某一个类别的结果。例如,我们给分类器一张猫的图像,它可以在90%多的信心确定它是一只猫。但是我们想要不只是让分类器给出正确的判别结果,同时还希望知道分类器为什么会认为它是一只猫,或者说它学到了关于输入图像的什么东西,使它认为图像中的物体是猫。

    关于模型的解释性我们可以从两个层级上来考虑:

    局部的可解释性(Local Explanation):即为什么分类器认为输入的某一个样本是某个具体的类别,例如为什么上述的分类器认为输入的图像是一只猫;全局的可解释性(Global Explanation):即知道分类器认为某一类别的东西应该具有什么样的特征,例如上述的分类器认为只要是猫,它就应该是什么样的

    对于全局可解释性来说,并不意味着我们需要完整的知道模型是如何运作的,类比来说,我们至今都无法知道人类大脑的原理,所以也不必奢求要完全弄明白网络模型的工作原理。整体上来说,提高模型的可解释性有如下的两个需求:

    说服别人:当你为某个团体针对某一个具体的任务设计了一个机器学习的模型后,你需要向用户解释模型得出的结果的合理性,比如用于诊断疾病的模型,给出一个结果说某人患病了,不能只是简单的说:模型就是这样讲的!说服自己:在建好一个模型后,通过模型的可解释性,我们可以知道它是否按预期正常的运作,是否达到了理想的效果,从而帮助人进行判断和决策

    而且在未来的发展中,我们不仅想要模型做到上述的事情,更希望它可以根据不同的用户,给出个性化的解释。此外,模型的能力的大小和可解释性的强弱是需要平衡的一件事,简单的线性模型解释性强,但是效果差,只能用于特定的简单的任务;神经网络模型效果好,但是解释性很差。但是我们也不能因为不知道网络模型做了什么,就单纯的弃用它,这是不合理的做法,而是想办法弄清楚它做了什么。


    Local Explanation

    一般化来说,我们丢给模型一个输入 x x x,它可能包含多个成分 { x 1 , x 2 , . . . , x N } \{x_{1},x_{2},...,x_{N}\} {x1,x2,...,xN},例如对于图像来说,这些成分可能是一个一个的像素值,或是不同的语义部分,然后模型就会根据这些给出一个结果。我们想知道的是,在全部的成分中,哪些对于最终的决策起着至关重要的影响。怎么做呢?一个简单的想法就是移除或修改其中的某些成分,看这样的操作对于最后的结果造成的影响的大小。

    Reference: Zeiler, M. D., & Fergus, R. (2014). Visualizing and understanding convolutional networks. In Computer Vision–ECCV 2014 (pp. 818-833)

    如上所示,我们使用一个灰色的窗口在图像上的不同位置进行遮挡,然后看它是否会影响模型的决策。经过多次实验可以看:对于第一幅图来说,模型判别它是一只狗,它关注的是中间关于狗的部分;在第二幅图中,模型因为看到了车轮,所以判断它是一辆汽车;第三幅图像中,模型是因为看到了狗的部分,所以判断图中有狗。这样的理解方式和人十分的相似,说明黑盒的模型确实学习到了一些东西,然后根据学习到的内容给出合理的结果。但是,当你使用这种方法时,窗口的大小对于效果的影响是很显著的,需要用户仔细考量。

    另一种方法是对于输入的某些成分加一些扰动,看它是否会影响最后的结果。假设我们的输入是 { x 1 , x 2 , . . . , x N ; y k } \{x_{1},x_{2},...,x_{N};y_{k}\} {x1,x2,...,xN;yk},对某一个成分加上扰动后变为 { x 1 , x 2 , . . . , x i + △ x , . . . , x N ; y k + △ y } \{x_{1},x_{2},...,x_{i}+△x,...,x_{N};y_{k}+△y\} {x1,x2,...,xi+x,...,xN;yk+y},这样我们就可以得到输入样本的Saliency Map,如下所示

    Karen Simonyan, Andrea Vedaldi, Andrew Zisserman, “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps”, ICLR, 2014

    从中我们发现,当扰动的是关于Saliency Map中较亮的部分时,对于模型的效果影响很大。此外上述的模型可能会遇到梯度饱和的问题,怎么理解呢?我们以下图为例:

    横轴为图像中生物鼻子的长度,纵轴是判别为大象的概率,当 x x x的值到一个点之后,我们就很肯定的认为它就是大象, x x x的值再大也不会再增加判别的概率,此时梯度值就为零了。为了解决这个问题,研究人员也想出了不同的办法,如:

    Integrated gradient (https://arxiv.org/abs/1611.02639) DeepLIFT (https://arxiv.org/abs/1704.02685)

    我们的模型还可能会遭到攻击,如下图所示,正常的情况下,模型会因为图像中关于卡车的部分的成分存在,所以判别它是一辆卡车。但是如果我们加入某些神奇的噪声后,它就很可能看到了图像中的某朵云而判别它是一辆车

    《Interpretation of Neural Networks is Fragile》https://arxiv.org/abs/1710.10547


    Global Explanation

    为了了解模型认为某一类别的物体应该具有哪些特征时,我们可以训练一个生成器(Generator),它可以是VAE、GAN等其他的生成模型,当给它一个低维的向量 z z z后,通过生成器 G G G就可以得到一个图像 x = G ( z ) x = G(z) x=G(z)。我们希望它得到的图像接近我们训练集中的样本,通过理解生成器,我们可以理解模型的机制

    此外还可以加入一个分类器 C C C来提高生成效果,最后我们希望得到一个最后的 z ∗ z^* z

    通过这样的方式,我们确实可以得到不错的结果

    有关生成对抗网络可以看我关于GAN的博文

    https://blog.csdn.net/forlogen/article/category/8810069


    除了上述的做法外,我们还可以使用一个解释性强的其他模型来帮助理解黑盒模型。假设输入为 x 1 , x 2 , . . . , x N x^{1},x^{2},...,x^{N} x1,x2,...,xN,当输入到黑盒模型中得到结果 y 1 , y 2 , . . . , y N y^{1},y^{2},...,y^{N} y1,y2,...,yN,而输入到选择辅助模型(例如线性模型)时,输出为 y ~ 1 , y ~ 2 , . . . , y ~ N \tilde{y}^{1},\tilde{y}^{2},...,\tilde{y}^{N} y~1,y~2,...,y~N,我们希望两个模型的输出尽可能的接近,这样我们就可以使用线性模型来近似的理解黑盒模型。

    LIME就是基于这样思想的一个工具,它可以简单的概括为4步:

    给定想要解释的样本在样本点附近采样使用上一步采样得到的数据来拟合线性模型(或是其他解释性强的模型)通过解释线性模型来理解黑盒模型

    例如下图中蓝色实线表示要解释的黑盒模型 ,黄色的实心点表示想要解释的数据点,如果我们在它附近采样,那么在局部我们就可以采用线性模型进行拟合。这样不断地选择不同的数据点,我们就可以对于整体的模型有一个不错的理解。

    有关LIME的介绍可见

    https://blog.csdn.net/Forlogen/article/details/88745364

    详细的可见原论文

    《“Why Should I Trust You? ”Explaining the Predictions of Any Classifier》 https://arxiv.org/pdf/1602.04938v1.pdf https://blog.csdn.net/evilhunter222/article/details/80043251

    还有一种有趣的想法是使用决策树来解释黑盒模型,同样我们希望它的输出和黑盒的输出尽可能相近,但又不希望它的复杂的太高。所以在训练网络模型的时候就考虑到了它要被决策树解释,因此目标函数就变成了: θ ∗ = arg ⁡ min ⁡ θ L ( θ ) + λ O ( T θ ) \theta^{*}=\arg \min _{\theta} L(\theta)+\lambda O\left(T_{\theta}\right) θ=argθminL(θ)+λO(Tθ)它的效果居然还是可以的

    具体内容可见原论文

    《Beyond Sparsity: Tree Regularization of Deep Models for Interpretability》 https://arxiv.org/pdf/1711.06178.pdf

    最新回复(0)