黑盒解密:神经网络在想什么?

2018 年 1 月 12 日 论智 Bing
来源:Hive
编译:Bing

编者按:为什么神经网络能做出决策?长久以来,这个黑盒问题一直困扰着我们。不过好在一些技术能帮助我们理解神经网络的决策过程。Hive是一家利用深度学习进行数据分析的公司,他们创造的模型grad-cam能帮助我们一窥神经网络的内部机制。以下是论智对该公司博文的编译。

我们很想知道神经网络学到了什么、它是依靠什么来判断某张图片是有用的。利用grad-cam,我们研究了模型的预测:运动类型、行动/静止、毒品(drugs)、暴力、吸引点、种族、年龄等等。

GitHub地址:github.com/hiveml/tensorflow-grad-cam

很显然,在上面两个图片中,吸引力模型关注更多的是身体,也就是图片中部而非人脸。有趣的是,在训练中并没有加入任何边框信息,但模型自己就学会了定位。该模型在20万张图片上进行训练,研究团队Hive从中将其分成三类:hot、neutral、not。然后将每组中的分数合并,生成一个打分器,分数从0到10。

主要思想是在全局池化之前将Logit层应用到最后一个卷积层。这会创建一个地图,展示网络决策中每个像素的重要性。

上图最左,橄榄球运动员的照片告诉模型这是一个动作。分类器同样能识别中间的裸体图片和右边代表暴力的枪支。

上图右侧的图片中有一位穿着西装的男士,分类器将其认成“电视节目”而非“商业事物”,而这是帮助我们了解grad-CAM是如何解释模型决策的重要例子。

分类器还可以识别动画片。分类器的关注点往往在人物的边缘,同时还会加上背景,非常有趣。

CAM和GradCam

类别激活地图(CAM)最初是由Zhou创建的,它可以显示网络正在查看什么。对于每个类别,CAM可以标明图像中最重要的部分。

接着,Ramprasaath扩大了CAM的应用范围。具体来说,CAM可以处理全连接层和更加复杂的场景,例如问答。幸运的是,我们不需要修改网络就能计算grad-CAM。

最近,Chattopadhyay进一步改进了模型,提高了输出热图的准确度,改进后的模型成为Grad-CAM++,它能够更高效地处理多个类别中的对象,同时能识别出对象的整个轮廓,而非只对明显部位有反应。这样的结果是通过正偏导数的加权组合得到的。

以下是在TensorFlow上的安装方法

  
    
    
    
  1. one_hot = tf.sparse_to_dense(predicted_class, [num_classes], 1.0)

  2. signal = tf.multiply(end_points[‘Logits’], one_hot)

  3. loss = tf.reduce_mean(signal)

这里生成一个num_classes元素的数组,其中只有非零的预测类别的logit,这定义了损失函数。

  
    
    
    
  1. grads = tf.gradients(loss, conv_layer)[0]

  2. norm_grads = tf.divide(grads, tf.sqrt(tf.reduce_mean(tf.square(grads)))

  3.    + tf.constant(1e-5))

然后我们计算了损失函数相对于最后一个卷积层的导数,并对这些梯度进行归一化。

  
    
    
    
  1. output, grads_val = sess.run([conv_layer, norm_grads],

  2.    feed_dict={imgs0: img})

之后运行图形来计算最后一个卷积层的输出和归一化的梯度。

  
    
    
    
  1. weights = np.mean(grads_val, axis = (0, 1))             # [2048]

  2. cam = np.ones(output.shape[0 : 2], dtype = np.float32)  # [10,10]

计算每个10×10网格的梯度均值作为权重(假设输入的是299×299的图片)。由于在最终的10×10的卷积层上有2048个输出通道,因此有2048个权重。

  
    
    
    
  1. cam = np.ones(output.shape[0 : 2], dtype = np.float32)  # [10,10]

  2. for i, w in enumerate(weights):

  3.    cam += w * output[:, :, i]

生成10×10的粗略输出作为平均梯度值和最终卷积层的加权总和。

将cam通过RELU,只取积极的分类结果。然后我们将地图的粗略输出调整为适合输入的大小并显示出来。

最后,主要功能为TensorFlow的slim模型和预处理功能。通过它们计算出grad-CAM的输出,并将其与输入照片混合。在下面的代码中,我们使用softmax概率最大的类别作为grad_cam的输入。除此之外,我们还可以选择任意一个类别,例如:

该模型以99%的概率将图片预测为“酒精”,0.4%的概率是“赌博”。但是当把predicted_class从酒精转换成赌博后,我们可以看到,尽管赌博的概率很低,但它仍然能清楚地定位图片中表示赌博的地方。

原文地址:thehive.ai/blog/inside-a-neural-networks-mind

登录查看更多
1

相关内容

在科学,计算和工程学中,黑盒是一种设备,系统或对象,可以根据其输入和输出(或传输特性)对其进行查看,而无需对其内部工作有任何了解。 它的实现是“不透明的”(黑色)。 几乎任何事物都可以被称为黑盒:晶体管,引擎,算法,人脑,机构或政府。为了使用典型的“黑匣子方法”来分析建模为开放系统的事物,仅考虑刺激/响应的行为,以推断(未知)盒子。 该黑匣子系统的通常表示形式是在该方框中居中的数据流程图。黑盒的对立面是一个内部组件或逻辑可用于检查的系统,通常将其称为白盒(有时也称为“透明盒”或“玻璃盒”)。
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
【浙江大学】对抗样本生成技术综述
专知会员服务
91+阅读 · 2020年1月6日
胶囊网络,是什么?
人工智能头条
32+阅读 · 2019年1月2日
卷积网络背后的直觉
论智
4+阅读 · 2018年5月31日
神经网络可解释性最新进展
专知
18+阅读 · 2018年3月10日
斯坦福完全可解释深度神经网络:你需要用决策树搞点事
中国人工智能学会
4+阅读 · 2018年1月10日
理解神经网络的激活函数
论智
7+阅读 · 2018年1月8日
如何简单形象又有趣地讲解神经网络是什么?
算法与数据结构
5+阅读 · 2018年1月5日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
神经网络中的「注意力」是什么?怎么用?
北京思腾合力科技有限公司
17+阅读 · 2017年10月28日
Seeing What a GAN Cannot Generate
Arxiv
8+阅读 · 2019年10月24日
Arxiv
19+阅读 · 2018年5月17日
Arxiv
6+阅读 · 2018年2月8日
VIP会员
相关资讯
胶囊网络,是什么?
人工智能头条
32+阅读 · 2019年1月2日
卷积网络背后的直觉
论智
4+阅读 · 2018年5月31日
神经网络可解释性最新进展
专知
18+阅读 · 2018年3月10日
斯坦福完全可解释深度神经网络:你需要用决策树搞点事
中国人工智能学会
4+阅读 · 2018年1月10日
理解神经网络的激活函数
论智
7+阅读 · 2018年1月8日
如何简单形象又有趣地讲解神经网络是什么?
算法与数据结构
5+阅读 · 2018年1月5日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
神经网络中的「注意力」是什么?怎么用?
北京思腾合力科技有限公司
17+阅读 · 2017年10月28日
Top
微信扫码咨询专知VIP会员