打入神经网络思维内部

2018 年 1 月 29 日 AI前线 神经网络


作者| Ryan
编译 | 孙浩
编辑|Emily
AI 前线导读:为什么神经网络会做出这样的决策呢?通常情况下我们不知道;这是一个黑盒。幸运的是,现在有一些技术可以帮助我们了解它们的情况,以便我们理解它们是如何做出决策的。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)

神经网络学到了什么对决策效用最大?它在哪里决定一张图像是否满足任务需求?利用 grad-CAM,我们探索了我们的预测模型:运动类型、动作 / 非动作、药物、暴力、魅力度、种族、年龄等。

Github repo:

https://github.com/hiveml/tensorflow-grad-cam


嘿,我也在上面的图片中!很明显,在上图中,这种吸引力模型更侧重于身体而不是脸部。有趣的是,在训练中它还学会了在没有特定边框信息的情况下识别出人的局部情况。该模型在 200k 张图像上进行了训练,并通过 Hive 将其标记为三个类别:火辣,自然,两者都不是。然后,将每个类别的得分组合起来,形成一个 0-10 的分数评级。这个分类器可在这里 1 找到。


其主要思想是在全局池之前将 logit 层应用到最后一个卷积层。这就创建了一张显示网络决策中表示每个像素的重要性的地图。


运动,少儿不宜的图片,暴力

这位足球运动员的姿势告诉模型,他正在进行一场比赛。我们可以很清楚地在 NSFW 和暴力图像中找到裸体和枪支。


单板滑雪,电视节目

一个西装革履的人,很明显地表明这是一个电视节目而不是一个商业广告 (右边)。电视 / 商业模型是一个很好的例子,展示了 grad-CAM 如何发现我们的模型做出决策背后的意想不到的原因。它们也可以证实我们的预期,正如在单板滑雪的例子中所看到的那样 (左)。


辛普森一家,Rick 和 Morty

这个例子使用了我们的动画显示分类器。值得注意的是,上图中最重要的点是 Bart 和 Morty 的边缘,以及这两种情况下的大量背景。


CAM 和 GradCam

类激活映射 (CAM),最先是由 Zhou2 开发的,它展现了网络正在查看的内容。对于每一个类,CAM 都阐明了对这个类来说最重要的图像部分。

Ramprasaath3 将 CAM 扩展到了更广泛的体系结构中,而且不需要任何更改。具体来说,grad-CAM 可以处理完全连接的层甚至更复杂的场景,如问题应答。幸运的是,我们根本不需要修改网络来计算 grad-CAM。

最近,Chattopadhyay4 使用 grad-CAM++ 进一步推广了该方法,提高了输出热图的精度。Grad-CAM++ 更擅长处理多实例类,并突出显示整个类,而不仅仅是最突出的那部分。它利用正偏导数的加权组合来达到这个效果。

以下是它在 Tensorflow 中的实现方式:

one_hot = tf.sparse_to_dense(predicted_class, [num_classes], 1.0) signal = tf.multiply(end_points[‘Logits’], one_hot) loss = tf.reduce_mean(signal)


这将返回一个 num_classes 元素数组,其中只有非零预期分类的 logit 层,它定义了损失值。

grads = tf.gradients(loss, conv_layer)[0] norm_grads = tf.divide(grads, tf.sqrt(tf.reduce_mean(tf.square(grads))) + tf.constant(1e-5))


然后我们计算损失对最后的卷积层的导数,并使这些梯度标准化。

output, grads_val = sess.run([conv_layer, norm_grads], feed_dict={imgs0: img})


运行这个图形来计算得到我们输入和标准化梯度的最后一个卷积层的输出。

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

计算权重,作为每个 10x10 网格的梯度值的平均值 (假设输入大小为 299x299)。我们使用的网络有 2048 个权重,在 10x10 大小的最终卷积层上有 2048 个输出通道。

cam = np.ones(output.shape[0 : 2], dtype = np.float32) # [10,10] for i, w in enumerate(weights): cam += w * output[:, :, i]


将 cam 10x10 的粗输出作为加权平均梯度值和最终的卷积层的加权和。

cam = np.maximum(cam, 0) cam = cam / np.max(cam) cam = cv2.resize(cam, (eval_image_size, eval_image_size))

通过一个 RELU 传递 cam,并只对这个类采取正向的建议。然后,我们将 cam 粗略的输出调整为输入大小,并将其融合到显示中。

最后,主功能将获取 tensorflow 超薄模型定义和预处理功能。通过这些方法,它将计算得到 grad-CAM 输出,并将其与输入照片相融合。在下面的代码中,我们使用强大的 softmax 概率实现的类作为 grad_cam 的输入。这里我们可以选择任何物体的类。例如:

酒精,赌博

该模型预测结果 99% 的情况下首选是酒精,选择赌博的比例仅为 0.4%。通过将预测层从酒精转变到赌博,我们可以看到低层预测的可能性,它可以清楚地分辨出图像中的赌博。

References

  1. Our attractiveness classifier: https://thehive.ai/demo/attractiveness

  2. Bolei Zhou, Aditya Khosla, Àgata Lapedriza, Aude Oliva, and Antonio Torralba. Learning deep features for discriminative localization. CoRR, abs/1512.04150, 2015

  3. Ramprasaath R. Selvaraju, Abhishek Das, Ramakrishna Vedantam, Michael Cogswell, Devi Parikh, and Dhruv Batra. Grad-cam: Why did you say that? visual explanations from deep networks via gradient-based localization. CoRR, abs/1610.02391, 2016

  4. Aditya Chattopadhyay, Anirban Sarkar, Prantik Howlader, and Vineeth N. Balasubramanian. Grad-cam++: Generalized gradient-based visual explanations for deep convolutional networks. CoRR, abs/1710.11063, 2017

  5. Tensorflow Slim: https://github.com/tensorflow/models/tree/master/research/slim

  6. Our grad-cam github: https://github.com/hiveml/tensorflow-grad-cam

  7. Original grad-cam repo https://github.com/Ankush96/grad-cam.tensorflow

英文原文链接:

https://thehive.ai/blog/inside-a-neural-networks-mind

登录查看更多
1

相关内容

人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。 最近十多年来,人工神经网络的研究工作不断深入,已经取得了很大的进展,其在模式识别、智能机器人、自动控制、预测估计、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。
专知会员服务
54+阅读 · 2020年7月4日
神经网络的拓扑结构,TOPOLOGY OF DEEP NEURAL NETWORKS
专知会员服务
30+阅读 · 2020年4月15日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
深度学习算法与架构回顾
专知会员服务
77+阅读 · 2019年10月20日
神经网络与深度学习,复旦大学邱锡鹏老师
专知会员服务
116+阅读 · 2019年9月24日
【初学者指南】神经网络中的数学
专知
31+阅读 · 2019年12月16日
卷积神经网络数学原理解析
算法与数学之美
19+阅读 · 2019年8月23日
用深度学习揭示数据的因果关系
专知
28+阅读 · 2019年5月18日
谷歌 MorphNet:让你的神经网络更小但更快
机器学习算法与Python学习
5+阅读 · 2019年4月18日
一个神经网络实现4大图像任务,GitHub已开源
简单到出人意料的CNN图像分类策略
机器学习算法与Python学习
4+阅读 · 2019年2月14日
神经网络可解释性最新进展
专知
18+阅读 · 2018年3月10日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
CNN神经网络内部知识表达的“黑”与“白“
Arxiv
19+阅读 · 2019年11月23日
Arxiv
9+阅读 · 2018年10月24日
Arxiv
23+阅读 · 2018年10月1日
Relational recurrent neural networks
Arxiv
8+阅读 · 2018年6月28日
Arxiv
9+阅读 · 2018年2月4日
Arxiv
25+阅读 · 2018年1月24日
VIP会员
相关VIP内容
相关资讯
【初学者指南】神经网络中的数学
专知
31+阅读 · 2019年12月16日
卷积神经网络数学原理解析
算法与数学之美
19+阅读 · 2019年8月23日
用深度学习揭示数据的因果关系
专知
28+阅读 · 2019年5月18日
谷歌 MorphNet:让你的神经网络更小但更快
机器学习算法与Python学习
5+阅读 · 2019年4月18日
一个神经网络实现4大图像任务,GitHub已开源
简单到出人意料的CNN图像分类策略
机器学习算法与Python学习
4+阅读 · 2019年2月14日
神经网络可解释性最新进展
专知
18+阅读 · 2018年3月10日
从零开始:教你如何训练神经网络
机器之心
5+阅读 · 2017年12月11日
CNN神经网络内部知识表达的“黑”与“白“
相关论文
Arxiv
19+阅读 · 2019年11月23日
Arxiv
9+阅读 · 2018年10月24日
Arxiv
23+阅读 · 2018年10月1日
Relational recurrent neural networks
Arxiv
8+阅读 · 2018年6月28日
Arxiv
9+阅读 · 2018年2月4日
Arxiv
25+阅读 · 2018年1月24日
Top
微信扫码咨询专知VIP会员