最近在阅读 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