神经网络学习数据集的特征作为实现某些目标的手段。完成后,我们可能想知道神经网络学到了什么。有哪些功能以及为什么要关心这些功能。有人可以就有关此问题的工作主体提供一些参考吗?
我的神经网络刚刚学到了什么?它关心哪些功能,为什么?
确实很难理解神经网络在学习什么,但在这方面已经做了很多工作。我们绝对可以了解我们的网络正在寻找什么。
让我们考虑用于图像的卷积神经网络的情况。我们对第一层的解释是我们在图像上滑动个过滤器,因此我们的第一个隐藏层对应于图像的小块与我们的各种过滤器之间的一致性。我们可以可视化这些过滤器,看看我们的第一层表示是什么:
这张图片是来自AlexNet的第一层过滤器,取自这个精彩的教程:http ://cs231n.github.io/understanding-cnn/ 。这让我们将第一个隐藏层解释为学习将由原始像素组成的图像表示为张量,其中每个坐标是滤波器与图像小区域的一致性。然后下一层使用这些过滤器激活。
理解第一个隐藏层并不难,因为我们只需查看过滤器即可了解它们的行为,因为它们直接应用于输入图像。例如,假设您正在处理黑白图像(因此我们的过滤器是 2D 而不是 3D)并且您有一个类似于
想象一下将其应用于图像的 3x3 区域(忽略偏差项)。如果每个像素都是相同的颜色,那么你会得到,因为它们会相互抵消。但是,如果上半部分与下半部分不同,那么您将获得一个潜在的大值。实际上,这个过滤器是一个边缘检测器,我们可以通过将其应用于图像并查看会发生什么来弄清楚这一点。但是要理解更深的层次要困难得多,因为整个问题是我们不知道如何解释我们将过滤器应用于什么。
Erhan et al (2009) 的这篇论文同意这一点:他们说第一个隐藏层可视化很常见(那是在 2009 年),但更深层次的可视化是困难的部分。从那篇论文:
这项研究的主要实验发现非常令人惊讶:作为图像空间中的一个函数,内部单元对输入图像的响应似乎是单峰的,或者至少对于所有测试的随机初始化,都能可靠且一致地找到最大值. 这很有趣,因为找到这种主要模式相对容易,然后显示它可以很好地描述该单元的功能。
Chris Olah 等人 ( https://distill.pub/2017/feature-visualization/ ) 在此基础上讨论了一般情况下您如何 (1) 生成导致大量激活的图像,以便了解网络是什么在寻找; 或者 (2) 获取实际的输入图像,看看图像的不同部分如何激活网络。那篇文章的重点是(1)。
在下图中,取自 Olah 等人的链接文章,作者讨论了您可以检查的网络的不同方面。最左边的图像显示了在输入图像空间上优化特定神经元激活的结果,依此类推。
如果您想更深入地了解这一点,我强烈建议您完整阅读该文章,并且通过阅读它的参考资料,您应该可以很好地掌握对此所做的事情。
当然,这一切都只是为了我们人类可以理解输入的图像。如果你正在处理更难解释的东西,比如只是一个大的数字向量,那么你可能无法做出如此酷的可视化,但原则上你仍然可以考虑这些技术来评估各种神经元、层等.
神经网络是黑盒模型之一,它不会给出“易于理解”的规则/或学到的东西。
具体来说,学到的是模型中的参数,但是参数可以很大:几十万个参数是很正常的。
另外,关于学习到的重要特征也不清楚,可以理解模型使用了所有的特征,通过很多复杂的操作来推导出结果,哪里不好用通俗易懂的英语说模型如何变换每个特征使用呢。
事实上,以逻辑函数作为激活函数的单层神经网络(没有隐藏层)与逻辑回归是相同的。逻辑回归的解释非常丰富。这是一个例子。但是对于复杂的神经网络/更多的隐藏层,这种解释将不适用。