拓扑学, 神经网络, 深度学习, 流形假设
最近, 深度神经网络引起了人们广泛的关注, 因为它在计算机视觉等领域取得了突破性的成果 1
但是, 他们仍然有一些担忧一个是人们无法监控到神经网络究竟在做什么例如一个人训练得好, 就能获得高质量的成绩, 但要了解这个过程是如何发展的过程是比较困难的所以网络出现故障, 很难理解出了什么问题
尽管深入了解深度神经网络的行为是一个很大的挑战, 但是探索低维深度神经网络 - 每层只有少量神经元的网络要容易得多事实上, 我们可以创建可视化来完全理解这种网络的行为和培训为了使我们能够更深入地了解神经网络的行为, 我们可以将神经网络与数学的拓扑结构关联起来进行研究
随之而来的是一些问题, 例如我们如何界定对于不同数据集进行分类的神经网络复杂性的基本下界
一个简单的例子
让我们从一个非常简单的数据集开始研究, 一个平面上的两条曲线神经网络将会判定平面上的某个点属于两条曲线中的哪一条
简单的数据集
可视化神经网络的行为或任何分类算法的比较简单的方法就是查看它如何分类每个可能的数据点
我们将从最简单的神经网络开始这样的网络只是试图通过用一条线来分隔两类数据
简单神经网络分割数据点
这种简单神经网络没有什么研究意义因为现代神经网络通常在其输入和输出之间具有多个层, 称为隐藏层这些复杂网络至少有一个隐藏层
来自 Wikipedia 的简单网络图
和以前一样, 我们可以通过查看神经网络中的不同点的划分来研究神经网络的行为它将数据分成比一条线更复杂的曲线
复杂的神经网络划分数据点
每一层, 神经网络将数据转换创建一个新的 representation(表示)2 我们可以查看每个表示中的数据以及神经网络如何对它们进行分类当神经网络通过将数据转换成不同的表示后, 神经网络将会在数据平面 (或者更高维的超平面) 中画一条线
在之前的可视化中, 我们以原始表示的形式查看数据我们就相当于在输入层中直接看这些数据表示现在我们将在第一层被转换之后再来看数据表示你可以想象成我们在看隐藏层中的数据
每个维度对应于图层中的神经元的活动
一层处理后的可视化数据
连续可视化图层
在上一节中概述的方法中, 我们通过查看与每个图层相对应的表示来了解神经网络我们获取到了一个离散的 representation(表示)列表
比较困难的部分是我们如何从一个表示到另一个表示值得庆幸的是, 神经网络图层使得这一过程变得非常简单
神经网络中使用了各种各样的层我们将讨论一个具体的例子 tanh 层 Tanh 层 tanh(Wx + b) 包括:
由权重矩阵 W 的线性变换
由矢量 b
单点应用 tanh
我们可以通过持续变化看到神经网络处理数据的过程:
神经网络处理过程
这个与其他标准层的情况大致相同, 其中包括仿射变换, 然后逐点应用激励函数
我们可以运用这种技术来了解更复杂的网络例如, 以下网络使用四个隐藏层将两个稍微纠缠的螺旋分类随着时间的推移, 我们可以看到它从原始表示转变为更高层次的表达的过程虽然螺旋本来是纠缠在一起, 但最终它们是线性可分的
另一方面, 下面的网络, 也是使用多层, 却无法分割纠缠更复杂的两个螺旋
这里值得明确的指出, 这些任务只是有点挑战, 因为我们仅使用了低维神经网络如果我们使用高维度的神经网络, 这一切都将非常简单
(Andrej Karpathy 已经根据 ConvnetJS 做了一个很好的演示, 可以让你通过这种可视化的训练来交互式地探索网络)
tanh 层的拓扑
每一层都会拉伸和挤压空间, 但不会切割, 折断或折叠直觉上, 我们可以看到它保留了拓扑性质例如, 一个数据集合在被处理变化后还能与变化之前相关联
像这样的不影响拓扑的变换被称为同胚从形式上来说, 它们是双向连续函数
定理: 如果权重矩阵 W 是非奇异的, 那么具有 N 个输入和 N 个输出的层是同胚的 (需要注意区域和范围是否相同)
证明: 我们一步一步考虑这个问题:
我们假设 W 是一个非零行列式那么它是一个具有线性可逆的双线性函数线性函数是连续的所以, 乘以 W 是一个同胚
变换是同胚的
tanh(和 sigmoid 还有 softplus)是反函数连续的连续函数, 但是 ReLU 不是如果我们规定了合适的定义域, 他们就是双向连续的逐点应用函数后就是同胚
因此, 如果 W 是一个非零行列式, 我们的层变换就是一个同胚
如果我们把这些层中的许多层合在一起的话, 结果仍是同胚
拓扑和分类
A 是红色的, B 是蓝色的
考虑具有两个类的二维数据集 A,B 是包含于 2 维实数集合的:
- A = {x | d(x,0) < 1/3}
- B = {x | 2/3 < d(x,0) < 1}
要求: 不管深度如何, 神经网络需要有 3 层或 3 层以上的隐藏层来处理才可能分割开这个数据集合
如前所述, 用 sigmoid 单元或 softmax 层进行分类相当于试图找到一个超平面(或在这种情况下是一条线), 可以将 A 和 B 分割开但是在只有两个隐藏层的网络拓扑结构中不可能以这种方式分离数据
在下面的可视化图片中, 我们观察到网络训练时的隐藏表示, 以及分类线正如我们所看到的, 它正在努力学习如何去做这件事
最后它被拉到了一个无法分割开的形状虽然, 它实际上能够实现 80% 的分类准确性
因为这个例子只有一个隐藏层, 所以无论如何都会失败
证明: 每一层都是同胚或者该层的权重矩阵具有全 0 行列式如果它是一个同胚的, A 仍然被 B 环绕, 不能将它们分开但是假设它有一个 0 的行列式: 那么数据集就会在某个轴上折叠由于我们正在处理与原始数据集同胚的类, 且 A 被 B 环绕着, 任何轴上的折叠都会使 A 与 B 重叠二无法分离
如果我们添加第三个隐藏单位, 问题就变得微不足道了神经网络学习如下表示:
有了这个表示, 我们可以用超平面分割此数据集
为了更好地理解发生了什么, 让我们考虑一个更简单的 1 维数据集:
一维数据集
- A=[13,13]
- B=[1,23][23,1]
如果没有使用两层或更多隐藏单元, 我们无法对这个数据集进行分类但是, 如果我们使用两个隐藏单元, 我们可以将数据表示为一条很好的曲线, 使我们能够用一条直线来分隔类:
发生了什么? 当 x > - 1 时, 一个隐藏单位学会命中 x>-1/2, 而另一个隐藏单元会命中 x < 1/2 当 x > -1/2 且 x < 1/2 时, 那就是类别 A
流形假说
这与现实世界的数据集, 如图像数据有关吗? 如果真的认真对待多种假设, 我认为这是有可能的
流形假设是自然数据在其嵌入空间中形成低维流形理论 3 和实验 4 都有充分的证据证实这一点如果你相信这一点, 那么分类算法的任务就是从根本上分离一堆纠缠的流形
在前面的例子中, 一类完全包围另一类然而, 狗的影像似乎不可能完全被猫影像流形包围但是, 还有其他一些更合理的拓扑结构供我们研究, 我们将在下一节中看到
链接和同胚
另一个值得考虑的有趣数据集是两个连接的圆环面, A 和 B
圆环面
就像我们考虑的以前的数据集一样, 这个数据集不能使用 n + 1 维来分离, 即四维
这个链接可以用拓扑领域的结理论 (knot theory) 来研究有时候, 当我们看到一个链接, 它确定是否是一个真实的链接(一堆纠结在一起, 但可以通过连续变形分离)
一个相对简单的非连接
如果使用仅有 3 个单位的层的神经网络可以对它进行分类, 那么它是非连接的(问题: 从理论上讲, 只有 3 个单位的网络是否可以将所有的连接分类?)
从这个结点来看, 我们连续可视化的神经网络产生的表示不仅仅是一个的动画, 它是一个解开连接的过程在拓扑结构中, 我们将其称为原始链接和分离链接之间的环境同位素
形式上, 流形之间的环境同位素 A 和 B 是一个连续的函数 F:[0 ,1] × X Y, 这样每个 Ft 是 X 的一个同胚到它的域, F0 是单位函數, 而 F1 是从 A 到 B 的映射那么函数 Ft 就是不断从 A 的同胚中来完成映射 A 到 B
定理: 在输入和网络层的表示之间是同伦的, 如果: a)W 不是奇异的, b)我们愿意排列隐藏层中的神经元, c)有超过 1 个隐藏单元
证明: 同样, 我们分别考虑网络的每个阶段:
最难的部分是线性转换为了做到这一点, 我们需要 W 有一个积极的决定因素当然前提是它不是零矩阵, 如果没办法切换两个隐藏的神经元, 我们可以翻转这个符号, 这样我们可以保证行列式是正的正行列式矩阵的空间是路径连接的, 所以存在 p:[0,1]GLn()p:[0,1]GLn(R)5 , 使得 p(0)=Idp(0)=Idandp(1)=Wp(1)=W 我们可以不断从单位函数转换到 W 用函数 xp(t)x, 乘以 X 在每个时间点 t 通过连续转换矩阵 p(t)
我们可以不断从单位函数转换到 b 用函数 x x + tb
我们可以连续地从恒等函数来逐点使用σ的与功能转变: X (1-t)x + tσ(x)
我想如果有一个程序可以自动发现这样的环境同位素, 并自动证明某些链接的等价性, 或某些链接是可分的那一定很有趣神经网络是否能击败艺术的现状是很有意思的议题
(显然如果 knots 是非常复杂的非定常多项式(NP), 这对于神经网络来说不是一个好兆头)
到目前为止, 我们讨论过的那种连接看起来似乎不太可能出现在现实世界中, 但是有更高维度的描述在现实世界的数据中似乎可能存在这样的事情
连接和结是 111 维度流形, 但是我们需要 4 个维度来解决所有这些问题同样, 人们可能需要更高维度的空间才能够解开 n 维流形所有 n 维流形可以在 2 n + 2 维中解开 6
(我对结理论知之甚少, 真的需要更多地了解关于维度和连接的已知知识, 如果我们知道一个流形可以嵌入到 n 维空间中, 而不是多维的维数, 我们有什么限制? )
简单的出路
神经网络自然而然的做法是, 非常简单的路线是尝试将上限拉开, 并尽可能地拉伸缠绕的部分虽然这不会接近真正的解决方案, 但它可以达到相对较高的分类准确度, 并且是一个最小值
它会在试图拉伸的区域表现为非常夸张的形状, 而且在它试图拉伸的地方导数很大, 并且会出现尖锐的断层 7 为了解决这个问题, 我们可以通过引入压缩来缓解这一现象 8
由于这类局部极小值从解决拓扑问题的角度来看绝对没有用处, 所以拓扑问题可能为探讨这些问题提供了一个很好的着手点
另一方面, 如果我们只关心取得良好的分类结果如果数据流形的一小部分在另一个流形上被截断了, 这似乎对我们没有影响尽管如此, 我们似乎应该能够得到更好更准确的分类结果
(我的直觉是试图以这样的方式来欺骗这个问题是一个坏主意: 很难想象它不会是一个死胡同, 特别是在一个局部最小化是一个大问题的优化问题中, 不能真正解决问题似乎是一个糟糕的表现配方)
更好的层次操纵流形?
我对标准神经网络层次的思考越多(标准神经网络也就是说, 仿射变换之后是点激活函数), 我就越迷惑
也许有一个不同的层, 我们可以用来对传统知识的方式进行分类?
我就去学习了矢量场, 这是我觉得可以成为下一个操作流型的方法:
然后根据它来变形空间:
人们可以在固定点学习矢量场 (只需从训练集中取一些固定点作为锚点) 并以某种方式进行插值上面的矢量字段的形式是:
其中 V0 和 v1 是矢量和 f0(x)和 f1(x)是 n 维高斯面这是由径向基函数而来的
K - 最邻近层
我开始觉得, 线性可分离性可能是不合理的, 相当于神经网络的需求量在某些方面, 感觉自然要做的是使用 k 最近邻 (k-NN) 然而, k-NN 的成功在很大程度上取决于它对数据进行分类的表示, 因此一个好的数据分类表示是 k-NN 的必要条件
作为第一个实验中, 我通过训练取得了一些 MNIST 网络 (两层卷积网, 没有下降现象) 约 1 %测试错误率然后, 我放弃了最后的 softmax 层, 并使用了 k-NN 算法我能够始终如一地将测试误差降低到了 0.1-0.2%
尽管如此, 这还不是很正确网络仍然试图进行线性分类, 但是由于我们在测试时使用了 k-NN, 所以它能够从纠正此错误
由于 1 / 距离权重, k-NN 关于其所作用的表示是可区分的因此, 我们可以直接训练一个网络进行 k-NN 分类这可以被认为是一种最近邻居层, 可以作为 softmax 的替代品
我们不希望为每个小批量的整个训练集进行前馈, 因为这会导致计算量非常大我认为一个很好的方法是根据最小批量的其他元素的类别对每个小批量的元素进行分类, 给每个元素赋予 1 /(距离分类目标的距离)的权重 9
令人遗憾的是, 即使使用复杂的体系结构, 使用 k-NN 也只会降低 5-4%的测试错误 - 而使用更简单的体系结构会导致更糟糕的结果
不过, 我真的很喜欢这种方法, 因为我们要求网络做的方式似乎更合理我们希望同一个流形的点比其他点更接近, 而流形可以用超平面分离这应该对应于不同类别的之间的膨胀空间来分离流型这就像简化
结论
数据的拓扑属性 (如链接) 可能会使无法使用低维网络线性分隔类即使在技术上可行的情况下, 例如螺旋, 这样做也是非常具有挑战性的
为了用神经网络准确地分类数据, 有时需要宽层而且, 传统的神经网络层在表示重要的流形操作方面似乎不是很好; 即使我们巧妙地手动设置权重, 但要紧凑地表示我们想要的转换也是很难的新的处理层, 特别是机器学习的多样性的处理方法, 可能是有用的补充
(这是一个正在开展的研究项目, 作为一个公开的研究实验, 我很乐意收到你对这些想法的反馈意见, 你可以在线或在最后发表评论, 对于错别字, 技术错误或你想要的澄清看到添加, 你可以在 github 上提交你的变动)
致谢
感谢 Yoshua Bengio,Michael Nielsen,Dario Amodei,Eliana Lorch,Jacob Steinhardt 和 Tamsyn Waterhouse 的评论和鼓励
Krizhevsky 等人似乎真的开始了这个工作,(2012), 他们拼凑了许多不同的作品, 取得了优异的成绩从那以后, 还有许多很棒的工作
希望这些表示可以使数据更好, 以便网络分类最近有很多工作在探索交涉也许最令人着迷的是自然语言处理: 我们学习的词语表达, 称为词嵌入, 具有有趣的属性见 Mikolov et al(2013 年),Turian et al (2010 年)和理查德. 瑟歇的工作为了给你一个快速的味道, 有一个非常漂亮的与 Turian 纸相关的可视化
你可能想对图像执行很多自然转换, 比如翻译或缩放对象, 或者改变光照, 如果连续执行它们, 会在图像空间中形成连续的曲线
Carlsson 等人 发现当地的图像补丁形成一个克莱恩瓶
GLn()GLn(R)是可逆 n × n 对实数矩阵, 正式称为一般线性群度 n
维基百科关于等值版本的小节中提到了这个结果
见 Szegedy et al 在那里他们能够修改数据样本, 并发现一些细微的修改, 导致一些最好的图像分类神经网络 misclasify 数据这很麻烦
压缩性自动编码器引入了压缩性惩罚参见 Rifai et al(2011 年)
我使用稍微不太完美, 但大致相同的算法, 因为在 Theano 中实现更为实用: 同时 feedforward 两个不同分支, 并基于彼此进行分类
来源: https://cloud.tencent.com/developer/article/1031068