首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

来源: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上的安装方法

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

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

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

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

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

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

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

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

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180112G0WBJF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券