这篇文章中,我们将回顾一些目前用来可视化理解深度神经网络的方法。我不会深入探讨这些材料中的细节,而是阐述一些个人观点以及我在学习这些材料时的个人体会。所有原始材料来自 Andrej Karpathy 在伯克利大学的客座讲座,CS294 课程。该讲座的演讲视频可点击文末「阅读原文」查看。
II. 凸优化(Convex Optimization)vs. 非凸神经网络(Non-Convex Neural Networks) 凸优化是一个数学上非常严谨的问题,人们对此也一直颇有研究。它的优美之处在于能够推导出易实现的、达到全局最优的下降算法。而非凸优化问题,却很难证明其最优性。也因此,我们会担心针对这些问题提出的优化算法会停滞在局部最小值。然而,这并不是说我们不能证明非凸问题最优解。我已经碰到过一些技术,这些技术使用了区间分析(interval analysis)方法,只要函数在某些阶上(some odrder)Lipschitz 连续,并且它的解(局部最小值)并不会产生组合性爆炸。 神经网络本质上是一个非凸问题。因此,对其最优性的形式证明寥寥无几。在过去,担心差在局部最小值是真的,特别是神经网络刚刚开始发展的阶段(上世纪 80 年代)。其中一篇关于探讨这个话题的论文: 多层网络的损失面(The Loss Surfaces of Multilayer Networks by Choromanska etal. 2015),实证表明,随着问题维数增加(可视为隐藏层更多了),你的最终解的损失方差会下降。因此,基本上,最优解和最差解之间的间隔在不断锐减,你的所有的局部最小值会变得相同。因此,非凸优化解决方案不过是走开了,人们并没有真正的解决这个问题,它仅仅是变得不重要了。
III. 层图表达以及 t-SNE 可视化 (编者注: t-SNE 是 t-distributed stochastic neighbor embedding 的缩写,即 t 分布随机邻域嵌入算法) 卷积神经网络,简单来说,就是一个多层巨无霸三明治。一种用来视化理解这些网络的方法就是从网络中取出一个单独神经元,观察让这个神经元兴奋的是什么。本质上,我们经验使用这些激活反应来可视化神经元响应的对象。
图注:可视化激活神经网络的事物 另一个技术是可视化网络权重。这需要训练自己的神经网络然后显示它学习到的 Gabor 过滤器。不过这种办法只对卷积神经网络首层有效,因为针对输入的图片所得出的权重在第一层后又会再做卷积操作。当你不断深入网络,我们就不太能解释 这些滤波器的结果了,因为每一层的权重都是在前一层输出结果上进行了卷积操作。
图注:可视化网络权重 在此,Andrej 给出了一个关于使用 ConvNetJS 来实现可视化技术的链接(https://cs.stanford.edu/people/karpathy/convnetjs/),该项技术能把网络逐层分解,你可以利用这个来观察网络在输出最终分类结果前每一层的梯度、激活函数、 权重等。此外,Andrej 还推荐了一下 TensorFlow Playground:,以及 Jason Yosinski 的博客: IV. 不仅仅是单个神经元的可视化 有一种观察卷积神经网络的方法是看其全局表达,即卷积神经网络对任何一张图片,其顶层的输出结果。我们将一张图片传入卷积神经网络网络去处理。这个网络的每一层将对该图片进行重新的表达,而对于每一层,我们可以学习到原始的图片是如何被整合到这一层中的。因此,为了可视化这一过程,我们希望能将这些表达整合到 2 维空间。这时候,就需要用到一种超炫的技术,叫做 t-SNE 可视化技术(Van der Maaten, Hinton**)。**这种技术将高维的点嵌入到低维空间,而局部的成对距离被保留了(在低维空间相邻的点在高维空间也依然相邻)。
图注:t-SNE 可视化,了解更多可查阅
图注:用强化学习玩 Atari 游戏的可视化 V. 遮盖实验 (责任编辑:本港台直播) |