from colah.github.io
Neural Networks, Manifolds, and Topology
神经网络,流形和拓扑学
1. 一个简单的例子
我们需要对图1(a)的数据进行二分类 。
- 如果只用最简单的神经网络,一个输入层、一个输出层,那么我们只能得到线性分类的结果如图1(b)所示。
- 如果使用一个包含一层隐藏层的神经网络,得到的结果如图1(d)所示。

图1
在经过网络的隐藏层后,网络将对数据进行变化,产生一个新的表示 (representation)。在本例中,隐藏层学习到了原始数据的新表示,如图1(c)所示。在新的表示下,可以通过线性(或超平面)对数据进行分类。
2. 层的连续可视化
我们考察隐藏层在对一个输入层进行变化时发生了什么。例如,在使用tanh(Wx+b)作为隐藏层的激活函数时,隐藏层的输入和输出之间的变化过程如图2所示。

图2
这样的变化过程可以总结为:对输入x通过点积(point-wise application)进行仿射变换(affine),然后通过一个单调(monotone)的激活函数。
下面是一个更复杂的例子,使用了4个隐藏层,使得最终结果是线性可分的:

图3
但是如果使用更多的隐藏层,可能使得结果并不能得到很好的分类结果(此处图可见原博客)。
3. tanh层拓扑结构
每一层可以对空间进行拉伸和挤压(stretch and squish),但是不会对空间进行切割、破坏和折叠(cut,break,fold)。直观上,数据的拓扑经过一层后是仍然保持的。不改变拓扑的变换被称为同胚(homeomorphisms)。
定理:一个有N个输入、N个输出、且权重矩阵W是非奇异的(满秩)的层是同胚的。
4. 流形假设(manifold hypothesis)
流形假设指的是自然数据是在其空间中由低维的流形构成的。环(link)和结(knot)是一维的流形。
5. 环(link)和同伦(Homotopy)
用纽结理论(knot theory)来解释神经网络可视化做的事情,就是把扭在一起的结,不经过切割而打开。在拓扑学中,我们称原始纽结和分离的结之间的状态为活结(ambient isotopy)。如下图,就是一个活结(unlink)。活结有什么好处?可以通过各种变换达到线形可分。

图4
定理:如果输入和隐藏层表示之间有活结,需要满足:a) W是非奇异的(满秩),b) 隐藏层的神经元是可以任意排列的,c) 隐藏层至少有1层。
5. 简单地去理解神经网络干了啥
神经网络要做的事情就是把很多交织的流形,通过不断的拉扯,将它们分离,使得每个独立流形越“瘦”越好(可能是比较好线性分离?)。
6. 操纵流形有没有更好的方式?
一个标准的神经网络,就是把数据进行仿射变换,然后再通过一个点积的激活函数。再仔细想想,这个方法的做法好像并没有那么吸引人了。
考虑一下我们想对流形操作的目的——就是想让不同的流形分离。对于colah而言,他认为应该学习一些向量,可以直接操作于流形上,这样的向量可能是像图5(a)这样的。空间经过这样的向量变形后,变成图5(b)这样。

图5
人们可以在某些固定的点处(比如从训练集中选出一些anchor)学习这些向量,并通过某些方式进行插值(interpolation)得到一个新的表示。