李宏毅老师课程链接
深度学习的网络往往是一个黑盒子,就是说我们并不知道里面发生了什么,怎么发生的,只知道结果如何。
所以我们要想一些办法来了解深度学习的网络究竟是怎么运作的。
在计算机视觉的领域,这似乎是比较直觉且容易做到的。比如图像识别,我们就可以通过某种办法改变图像的某些部分,然后观察其结果。
比如说我们在图像上遮盖一个灰色方块,观察它是否会对图像辨识的结果产生影响,如下图,红色区域代表遮盖无影响,蓝色区域代表遮盖影响很大。
这样一来,我们就知道了机器确实是从图中狗的部分识别出了狗,而不是把图中的人脸认成了狗。
再比如,我们也可以通过改变图中的某些像素,计算变化的梯度来知道机器是辨认了哪些部分。
不过这种方式存在一定的问题,比如我们改变大象的鼻子,使其长度缩短,但是由于鼻子依旧很长所以识别结果不变,那么可以得到结论说鼻子对于识别大象并不重要吗?(这种情况称为梯度饱和)
在之前的章节中我们提到过Deep dream ,就是对于一个已经训练好的图像识别网络,我们找到一个输入图像使得输出y的值最大。这也是explainable ML的方法之一。
不过我们也介绍过这种方法生成的图像常常看起来是杂乱无章的。为了使这种图像看起来有序,我们可以加上一些正则项,不过正则项往往也难以调整出我们想要的结果。
还有一种方法是我们先建立一个图像生成的网络,再把生成的图像x输入图像识别网络使得y最大,这样一来等于用图像生成网络限制了x,使得图像跟符合我们的认知。
神经网络往往是非线性的且复杂的,因此难以理解。那么我们可以想办法将它等同于某种线性的模型,这样的做法至少在某些局部是可行的。
这种方法称为LIME,它的步骤和过程如下图
这种取样的范围要取得合适,太小或太大都不能发挥作用。
LIME在计算机视觉的领域同样可以发挥作用。大概步骤是将一个图像分割成N个部分,将其中的若干个删除再输入图像识别网络中得到一个输出值。
接下来就是建立一个线性模型了,我们把图像中被分割的每个部分用xi表示,xi=1代表这个部分被保留了,=0表示被删去。
然后就可以列出一个关于输出y和n个xi的线性函数,通过线性回归解方程就可以得到每个x对应的权重。权重为正代表对识别成青蛙有正向影响,为负代表负向的影响。
这样一来我们就可以知道网络对于图像的理解辨识究竟是什么样的。