40⾏Python代码,实现卷积特征可视化
卷积神经⽹络(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)
python新手代码图案如何保存滤波器 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 个模式时,我经常发出感慨「哇,这是⼀只鸡」,或「这不是⼀根⽻⽑嘛」。
识别模式
我们来尝试解释⼏个可视化的特征。从这个开始,有没有让你想起些什么?