我正在参加Coursera的机器学习课程,刚开始学习神经网络。
让我感到非常神奇的是,识别像手写数字这样“人类化”的东西,一旦找到合适的线性组合权重,就变得很容易了。
当你明白一些看似抽象的东西(比如汽车)可以通过找到一些非常好的线性组合参数,并将它们组合起来,相互输入,就能被识别出来时,这更让人感到不可思议。
线性组合的组合比我之前想象的要更具表达力。
这让我开始思考,是否有可能可视化神经网络的决策过程,至少在一些简单的情况下。
例如,如果我的输入是一张20×20的灰度图像(即总共400个特征),输出是对应识别出的数字的10个类别之一,我很想看到某种视觉解释,展示哪些线性组合的级联引导神经网络得出结论。
我天真地想象,这可能通过在被识别的图像上添加视觉提示来实现,可能是显示“对决策影响最大的像素”的温度图,或者任何有助于理解神经网络在特定情况下的工作方式的东西。
有没有这样的神经网络演示可以做到这一点?
回答:
虽然这可能没有直接回答问题,但我在这篇Andrew Ng, Jeff Dean, Quoc Le, Marc’Aurelio Ranzato, Rajat Monga, Matthieu Devin, Kai Chen 和 Greg Corrado 的论文中发现了一个有趣的片段(强调是我的):
在本节中,我们将介绍两种可视化技术,以验证神经元的最佳刺激是否确实是面孔。第一种方法是可视化测试集中最具响应性的刺激。由于测试集很大,这种方法可以可靠地检测到测试神经元的近似最佳刺激。第二种方法是通过数值优化来寻找最佳刺激
…
这些可视化方法各有优缺点。例如,可视化最具响应性的刺激可能会受到噪声的影响。另一方面,数值优化方法可能容易陷入局部最小值。结果,如下所示,确认了测试的神经元确实学会了面孔的概念。
换句话说,他们选择了一个在识别面孔方面表现最佳的神经元,并
- 从数据集中选择那些使其输出最高置信度的图像;
- 数学上找到一张不在数据集中的图像,该图像将获得最高置信度。
看到它实际上“捕捉”了人脸的特征是很有趣的。
这种学习是无监督的,即输入数据没有说明图像是否是面孔。
有趣的是,这里是为猫头和人体生成的“最佳输入”图像: