微信扫一扫
分享到朋友圈

40行Python代码,实现卷积特征可视化

作者:机器之心 来源:机器之心 公众号
分享到:

01-31

选自towardsdatascience

作者:Fabio M. Graetz 

机器之心编译

机器之心编辑部


卷积神经网络(CNN)变革了计算机视觉,并将彻底改变整个世界。因此,开发解释 CNN 的技术也同样是一个重要的研究领域。本文将向你解释如何仅使用 40 行 Python 代码将卷积特征可视化。


最近在阅读 Jeremy Rifkin 的书《The End of Work》时,我读到一个有趣的关于 AI 的定义。Rifkin 写到:「今天,当科学家们谈论人工智能时,他们通常是指『一门创造机器的艺术,该机器所执行的功能在人类执行时需要智能』(Kurzweil, Raymond, The Age of Intelligent Machines (Cambridge, MA: MIT Press, 1990), p. 14.)」。我很喜欢这个定义,因为它避免了类似」在人类智力意义上 AI 是否真正达到智能」的讨论。


作为一名科学家,揭开大脑功能的基本原理并创造一个真正的智能机器的想法确实让我很兴奋,但是我认为认识到深度学习模型并不是大脑模型这一点非常重要。深度学习研究的目的是从数据中学习到目前为止还没有自动化的流程的规则并实现自动化。虽然这听起来并不是那么让人兴奋,但它确实是一件好事。举个例子:深度卷积神经网络的出现彻底改变了计算机视觉和模式识别,这让我们在医疗诊断中可以大量地引入自动化;人们可以加速为贫穷国家的人提供顶级医疗诊断,而不需要在本地培训大量的医生和专家。


尽管深度学习给人们带来了许多振奋的消息,但它如何看待和解释世界仍然是一个黑匣子。更好地理解它们如何识别特定的模式和对象,以及为什么它们能够表现地如此良好,可以让我们:1)进一步改进它们;2)解决法律问题——因为在许多情况下机器所做出的决定必须能够被人类所理解。


有两种方法可以尝试理解神经网络如何识别某种模式。如果你想知道哪种模式可以显著地激活某个特征图,你可以:1)尝试在数据集中查找导致此特征图高于平均激活的图像;2)尝试通过优化随机图像中的像素值来生成这种模式。后者的想法是由 Erhan 等人提出的。


在本文中我将向你解释如何仅用 40 行 Python 代码来实现随机图像的像素值优化(如下图),从而生成卷积神经网络的特征可视化。



本文的结构如下:首先,我将展示 VGG-16 网络的几个层次中的卷积特征的可视化;然后,尝试理解其中一些可视化,我将展示如何快速测试一个假设,即特定的滤波器会检测到哪种模式;最后,我将解释创建本文中提供的模式所需的代码。


特征可视化


神经网络学习将输入数据(如图像)转换为越来越有意义但表征越来越复杂的连续层。


你可以将深度网络看做一个多阶段信息蒸馏操作,其中信息通过连续的滤波器并不断被「提纯」。(François Chollet, Deep Learning with Python (Shelter Island, NY: Manning Publications, 2018), p. 9)


阅读完他的文章后,你将了解如何生成模式,以最大化这些层次表征的某个层中所选特征图的平均激活,如何解释其中一些可视化,以及最终如何测试所选滤波器可能响应的模式或纹理的假设。你可以在下面找到 VGG-16 网络多个层中滤波器的特征可视化。在查看它们时,希望你能观察到生成模式的复杂性如何随着进入网络的深度而增加。


Layer 7: Conv2d(64, 128)


滤波器 12, 16, 86, 110(左上到右下,逐行)


Layer 14: Conv2d(128, 256)


滤波器 1, 6, 31, 32, 54, 77, 83, 97, 125, 158, 162, 190(左上到右下,逐行)


Layer 20: Conv2d(256, 256)


滤波器 3, 34, 39, 55, 62, 105, 115, 181, 231(左上到右下,逐行)


Layer 30: Conv2d(512, 512)


滤波器 54, 62, 67, 92, 123, 141, 150, 172, 180, 213, 233, 266, 277, 293, 331, 350, 421, 427(左上到右下,逐行)


Layer 40: Conv2d(512, 512)—top of the network


滤波器 4, 9, 34, 35, 75, 123, 150, 158, 203, 234, 246, 253, 256, 261, 265, 277, 286, 462(左上到右下,逐行)


这些模式让我觉得非常震撼!部分原因是,它们太漂亮了,我都想立马将它们裱起来挂在墙上;但主要的原因是,它们仅仅是通过最大化由数千张图像训练出的数学方程中的某个值得到的。在浏览通过最大化最后一层卷积层特征图的平均激活得到的 512 个模式时,我经常发出感慨「哇,这是一只鸡」,或「这不是一根羽毛嘛」。


识别模式


我们来尝试解释几个可视化的特征。从这个开始,有没有让你想起些什么?


第 40 层第 286 个滤波器


这张照片立刻让我想起了教堂拱形天花板的圆拱。



来,让我们检验一下。人造的那张图片是通过最大化第 40 层第 286 个特征图的平均激活创造出来的。我们来看看当把拱门的照片输入网络后,第 40 层特征图的平均激活会是怎样:



看到了什么?正如期望的那样,特征图上的 286 处有一个极强的尖峰。所以,这是否意味着第 40 层第 286 个滤波器是负责检测拱形天花板的呢?这里我们要小心一点,滤波器 286 显然会响应图像中的拱形结构,但请记住,这样的拱形结构可能会在几个不同的类别中起到重要作用。


注意:虽然我使用第 40 层(卷积层)来生成我们当前正在查看的图像,但我使用了第 42 层来生成显示每个特征图的平均激活的图。第 41 和 42 层是 batch-norm 和 ReLU。ReLU 激活函数删除所有负值,选择第 42 层而不是 40 的唯一原因是,后者将显示大量负噪声,这使得我们很难看到我们感兴趣的正峰值。


再来一例。


第 40 层第 256 个滤波器


我敢保证,这些是鸡头(或者至少是鸟头)!从图中我们可以看到尖尖的喙和黑色的眼睛。我们可以用下面的这个图片来检验:



类似地,特征图上的 256 处会出现强烈的尖峰:



再来:


第 40 层第 462 个滤波器


滤波器 462 会不会对羽毛作出反应呢?来,输入一张羽毛图片:



Yes!滤波器 462 果然反应强烈:



猜一猜滤波器 265 会对什么产生响应?


第 40 层第 265 个滤波器


或许是链条吧?来,我们输入一张试试:



Yes,看起来猜对了!



不过从上图可以看到,除了最大的尖峰外,还有几个较大的次尖峰。我们看看对应的第 95 和第 303 个特征可视化图是什么:


第 40 层第 95 和第 303 个滤波器


再来看张比较酷的:


第 40 层第 64 个滤波器


有许多看起来像羽毛一样的结构,似乎还有鸟腿,左下方有个类似鸟头的东西。腿和喙显然比鸡的长,所以可能是一只鸟。我们将下面这幅图输入网络:



得到这样的特征图:



好吧,

阅读9244
python 
举报0
关注机器之心微信号:almosthuman2014

用微信扫描二维码即可关注
声明

1、头条易读遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2、本文内容来自“机器之心”微信公众号,文章版权归机器之心公众号所有。

评论
更多

文章来自于公众号:

机器之心

微信号:almosthuman2014

邮箱qunxueyuan#163.com(将#换成@)
微信编辑器
免责声明
www.weixinyidu.com   免责声明
版权声明:本站收录微信公众号和微信文章内容全部来自于网络,仅供个人学习、研究或者欣赏使用。版权归原作者所有。禁止一切商业用途。其中内容并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现头条易读网站上有侵犯您的知识产权的内容,请与我们联系,我们会及时修改或删除。
本站声明:本站与腾讯微信、微信公众平台无任何关联,非腾讯微信官方网站。