图像识别神经网络_图像攻防和神经网络

hacker|
321

神经网络、流形和拓扑

译者:树石

最近,由于在诸如计算机视觉领域取得了突破性成果,深层神经网络引起了广泛的关注和兴趣。

然而,该领域仍然存在一些顾虑。比如, 要了解神经网络能够做什么相当具有挑战性 。如果一个网路被训练得很好,输出高品质的结果,但了解它是如何做到的具有挑战性。如果网络出现故障,也很难理解什么地方出了错。

虽然通常理解深层神经网络的行为比较困难, 探索低维度深层神经网络相对容易的多 ——在每一层只有几个神经元的网络。事实上,我们可以通过创建可视化效果来理解网络的行为和对网络的培训。这种方法将让我们 获取对神经网络行为的深层直觉,并观察到神经网络和拓扑学之间的联系 。

另外,还探讨了一些有趣的事情,包括对某些数据集进行分类的神经网络的最低复杂性。

让我们从一个非常简单的数据集开始:在一个平面上的两条曲线。该网络将学习如何将线上的点归类为这一个还是另外一个。

将神经网络(或任何分类算法)的行为可视化,显而易见的方法是简单地看它是如何对每一个可能的数据点进行分类。

我们将先从最简单的神经网络开始,只有一个输入层和一个输出层的网络。这样的网络只是试图通过画一条线将两个类数据的分离。

诸如此类的网络不是很有趣。现代神经网络一般在输入和输出之间,具有称为“隐藏”层的多个层次。至少包含一个隐藏层。

与以前一样,我们可以通过查看它对其领域不同点进行的处理来观察这个网络的行为。数据分割通过一条曲线来完成,而不是直线。

通过神经网络的每一层,数据被转换,创建了一个新的 表示 (represention)。我们可以看一下在这些表示中的数据以及网络是如何划分他们的。当我们到达最后一层的表示时,网络只需要绘制一条线(或者,在更高维度里绘制一个超平面)。

在前面的可视化中,我们看到其“原始”表示的数据,你可以将其视为输入层。现在我们将看看经过第一层转化后,你可以认为这是我们看到了隐藏层。

每个维度对应于该层中神经元的兴奋。

在上一节中所概述的方法,我们知道通过查看每层的表示来了解网络。这给了我们一个离散的表示列表。

最棘手的部分是了解我们是如何从一个表示到另一个的。值得庆幸的是,神经网络层具有很好的性能,使这一点变得很容易。

神经网络由多种不同类型的层构成。我们将谈论一个具体的例子:双曲正切层(tanh)。一个双曲正切层tanh⁡(Wx+b)由以下组成:

我们可以观察到这是一个连续变换,具体如下:

这个故事和其它标准层大体相同,由一个映射变换之后单调激活函数的逐点应用。

我们可以用这种技术来了解更复杂的网络。例如,下面的网络划分两个被略微缠结的螺旋,使用四个隐藏层。随着时间的推移,我们可以看到它的“原始”表示转移到更高层次为了对数据进行分类。而螺旋最初是纠结的,最终他们是线性可分的。

另一方面,以下的网络,也是使用多个层,分类两个螺旋没有成功,反而更加缠结。

这里值得明确指出,这些任务将变得有些困难,如果我们使用的是低维神经网络。如果我们使用更广泛的网络,这一切都将是相当容易的。

( Andrei Karpathy有 很好的演示 基于ConvnetJS,让您可以交互式地浏览网络,就像上面的这种可视化培训! )

每一层都会拉伸和挤压空间,但它永远不会切割、断裂和褶皱它。直观地说,我们可以看到它保留了拓扑性质。例如,一组数据将在转化后保持连接,如果它之前是连接的(反之亦然)。

这样的转换,不影响拓扑结构,被称为同胚。在形式上,他们是连续函数的双向映射。

定理 :具有N个输入和N个输出的层是同胚,如果权重矩阵W是非奇异的。(虽然需要小心它的值域和范围。)

证明 :让我们一步步考虑:

因此,如果W所有因子都是非零的,我们的层就是同胚的。∎

这一结果始终正确,如果我们将任意多个这些层组合在一起。

考虑包含两个类的二维数据集

![][01]

[01]: \subset\mathbb{R}^2

A = {x | d(x,0) 1/3}

B = {x | 2/3 d(x,0) 1}

如前面提到的,用一个S形函数或SOFTMAX层分类相当于试图找到一个超平面(或在这种情况下是一条线)在最终表示中分隔A与B。只有两个隐藏层的网络对于分离这组数据在拓扑上是无能的,并注定要失败。

在下面的可视化图中,我们观察到网络训练隐藏的表示,通过试图使用一条直线来分类。我们可以看到,它在努力学习某种方式来做到这一点是不断挣扎而且困难重重。

最后,它被拉到一个相当低效的拟合。虽然它实际上能够实现〜80%分类精度。

这个例子只有一个隐藏层,但无论如何它都会失败。

证明 :要么每层是一个同胚,要么该层的权重矩阵具有0因子。如果该层是同胚的,A被B所环绕,一个直线不能将它们分开。但是,假设它具有一个0因子:那么数据集将在某些轴上崩塌。因为我们正在处理的东西同胚于原始数据集,A被B所包围,在任一轴崩塌于意味着我们将有一些A中的点和B中的点混合,从而无法完成A与B的区分。∎

如果我们增加第三个隐藏层,问题就变得微不足道。神经网络学习以下表示:

用这个表示,我们可以用一个超平面分开数据集。

为了更好的理解这是怎么做到的,让我们考虑一个更简单的一维数据集:

![][02]

[02]: [- \frac{1}{3},,\frac{1}{3}]

![][03]

[03]: [-1,- \frac{2}{3}]\cup[\frac{2}{3},1]

如果不使用两个或多个隐藏单元层,我们不能将此数据集进行分类。但是,如果我们使用一个带有两层的网络,我们就学会将数据转化成一个很好的曲线,让我们能用一条线将数据分开:

发生了什么?一个隐藏单元学习当x-1/2时兴奋,另一个单元学习当x1/2时兴奋。当第一个兴奋,而不是第二个时,我们知道数据属于A。

这个假说和现实世界的数据集相关吗,比如图像数据?如果你认真对待流形假说,我觉得他值得思考。

流形假说是指自然数据在它的嵌入空间构成了较低维度的数据流形。同时具有理论和实验的理由相信这一假说是真的。如果你相信这一点,那么分类算法的任务是从根本上分离一堆纠结的流形。

在前面的例子中,一个类完全被另一个类包围。然而,这似乎并不可能,比如狗的图像流形完全被猫的图像流形包围。因为我们将在下一节中看到其他更合理的拓扑情况。

另一个有趣的数据集要考虑的是两个链接的tori,A和B。

就像之前的数据集,这个数据不能被分离,如果不使用n+1维,即4个维度。

链接在结点理论(knot theory)中被讨论,拓扑学的一个领域。有时,当我们看到一个链接,并不能一眼看出它是否真正相连(一堆被缠结在一起的事情,但可以通过连续变形分开)。

如果仅仅使用3个层次的神经网络就能够对其进行分类,那么它就是一个未链接(unlink)。(问:理论上是否能将所有未链接都通过只有3个层次的网络进行分类?)

从这个结的角度看,我们通过神经网络产生的连续可视化不仅仅是一个漂亮的动画,它是解开链接的程序。在拓扑学中,我们把它称为原始链接和分离环之间一个环境同痕(an ambient isotopy)。

形式上,流形A和B之间的一个环境同痕是一个连续函数F:[0,1]× X→Y,使得每个Ft是一个从X到它自己范围的同胚,F0是一个标识函数,并F1是从A到B的一个映射。也就是,Ft是从A到自身的映射到从A到B的映射的连续转换。

定理 :在输入和网络层之间具有环境同痕,如果:

证明 :同样,我们分别考虑网络的每个阶段:

我想这也许是十分有趣的,通过程序自动发现这样的环境同痕并自动证明某些链接的等价性,或者某些环节是可分离的。这将很有趣知道,如果神经网络是否可以各种情况。

(显然,确定结点是否重要是一个NP,这不太适用于神经网络。)

我们已经谈到的这类链接,到目前为止似乎不太可能是现实世界的数据,但他们是更高维的生成。这似乎是合理的。

链接和结点是1维流形,但我们需要4个维度才能够解开他们。类似地,可能需要更高维度的空间,以便能够解开n维流形。所有n维流形可在2n+2维度上解开。

(我对于结点理了解不多,确实需要更多地了解维度和链接。如果我们知道一个流形可以被嵌入到n维空间,而不是流形的维度,我们有什么限制? )

很自然的想法,一个神经网络试图直接将流形从纠结尽可能薄的部分拉出。虽然这不会在任何情况下都是一个好的解决方案,但是大多情况它可以实现较高的分类准确率,到达一个诱人的最低点(local miminum)。

它试图拉伸具有高延展性的空间,并锐化靠近中断处。我们知道这些事情发生。压缩的处罚,在对数据点衍生层的处罚,都是很自然的做法。

由于这些局部最小点对于解决这种拓扑问题完全无用,拓扑问题值得很好的探索。

在另一方面,如果我们只关心取得了良好的分类结果,好像我们可能并不关心。如果很小的一个数据流形的点陷入另一个流形,会是一个问题吗?看起来我们应该能够得到很好的分类结果,尽管有这个问题。

(我的直觉是,像这样欺骗自己是一个坏主意:这是很难想象它不会是死路一条。特别是,针对一个局部最小很重要的优化问题,选择这种方式不能真正解决问题,这似乎是糟糕的表现。)

我越思考标准的神经网络层 - 即用映射变换后逐点激活功能 - 我就越不抱幻想。很难想象,他们能够很好地操纵流形。

也许这可能是有意义的,我们采用一个非常不同的层,而不是传统的神经网络层?

非常自然的感觉是,通过一个矢量场的学习,我们希望流形移动方向:

然后再对他变形空间:

人们可以学会在固定点的矢量场(只是需要从训练集合选取一些固定点作为锚),并以某种方式介入。上面的矢量场的形式是:

![][04]

[04]: \frac{v_0f_0(x)+v_1f_1(x)}{1+f_0(x)+f_1(x)}

其中,v0和v1是矢量,F0(X)和F1(X)是n维高斯函数。这一点来自于径向基函数(radial basis functions)的灵感。

我也开始觉得线性可分可能是一个巨大的,也可能不合理的,神经网络的需求。在某些方面,非常自然的会想到使用K-近邻(K-NN)。然而,K-NN的成功在很大程度上取决于它所分类的数据表示(represention),因此,人们在K-NN之前,需要一种良好的表示。

作为第一个实验中,我训练了一些MNIST网络(两层卷积网,没有下降现象)到达〜1%测试误差。然后我放弃了最后的SOFTMAX层而使用K-NN算法,我能够始终如一地降低0.1-0.2%的测试误差。

不过,这并不完全觉得是正确的事情。该网络还在试图做线性分类,但由于我们使用K-NN测试,它能够从它所犯的错误中恢复一些。

K-NN有区别于相对于它的网络层次,因为会用到(1 /距离值)加权。因此,我们可以直接训练网络K-NN分类。这可以被认为是一种“k-NN”层替SOFTMAX。

我们不希望为每个小批量数据遍历整个训练集,因为这将非常消耗计算资源。我认为一个很好的办法是根据小批次的其它元素对每个小批次的元素进行分类,赋予每一个元素(1 /从分类目标的距离)的权重。

可悲的是,即使有完善的体系结构,采用K-NN只下到5-4%检测错误 - 使用简单的架构会得到更坏的结果。不过,我已经很少把努力放在高维参数上了。

不过,我真的很喜欢这个方法,因为它好像就是我们“要求”网络运行的更加合理。我们希望在同一流形的点比其它的点更加接近,相对于由一个超平面被分离的其他流形。这相对需要拉伸不同类别流形之间的空间,同时收缩每一个流形。这感觉就像是在简化问题。

具有拓扑性质的数据,例如链接,可能导致无法使用低维网络进行线性分类,无论深度有多大。即使在技术上是可能的情况下,例如螺旋,也是非常具有挑战性的。

为了使神经网络准确的分类数据,多个层次有时是必要的 。此外,传统的神经网络层似乎并不能很好的处理流形数据;即使我们巧妙的手工设置权重,想要紧凑的表达我们想要的转换也是非常困难的。新建层次,特别使用流形相关的机器学习,可能是有用的补充。

(这是一个发展中的研究项目。相关研究信息会在网上公布。我会很高兴听听您对这些想法的反馈:您可以发表评论。对于错别字,技术错误,或任何澄清,我们鼓励你发一个请求在GitHub上。)

致谢

谢谢Yoshua Bengio,迈克尔·尼尔森,达里奥 Amodei,埃利安娜洛奇,雅各布斯坦哈特和Tamsyn Waterhouse的意见和鼓励。

神经网络,流形和拓扑

本文翻译自colah的博客中的文章《Neural Networks, Manifolds, and Topology》

链接:

发布于2014年4月6日

关键词:拓扑,神经网络,深度学习,流形假设(manifold hypothesis)

最近,深度神经网络给人们带来很大的振奋,引起了极大的兴趣,因为其在像计算机视觉等领域中取得的突破性成果。[1]

但是,人们对其仍存在一些担忧。一个是要真正理解一个神经网络在做什么是一件十分具有挑战的事情。如果一个人将其训练得很好,它可以取得高质量的结果,但是要理解其是如何做到这一点很难。如果网络出现故障,很难了解哪里出现了问题。

虽然,总体上来说要理解深度神经网络的行为具有挑战性,但事实证明,探索低维深度神经网络要容易得多,低维深度神经网络是指每层中只有少量神经元的网络。事实上,我们可以创建可视化来完全理解这种网络的行为和训练过程。这种观点将使我们能够更深入地了解神经网络的行为,并观察到神经网络和一个称为拓扑的数学领域之间的联系。

从中可以得到许多有趣的东西,包括能够对某些特定数据集进行分类的神经网络复杂度的基本下界。

让我们从一个非常简单的数据集开始,在平面上有两条曲线。网络将学习把点归类为属于一个或另一个。

对于这个问题,可视化神经网络行为的明显方法 - 或者任何分类算法 - 就是简单地看一下它如何对每个可能的数据点进行分类。

我们将从最简单的神经网络类别开始,只有一个输入层和一个输出层。这样的网络只是试图通过用直线划分它们来分离这两类数据。

那种网络不是很有趣。现代神经网络通常在其输入和输出之间具有多个层,称为“隐藏”层。至少有一个。

和前面一样,我们可以通过查看它对域中不同点的划分来可视化该网络的行为。它使用比直线更复杂的曲线将数据分离。

对于每一层,网络都会转换数据,创建一个新的表示。[2] 我们可以查看每个表示中的数据以及网络如何对它们进行分类。当我们到达最终表示时,网络将只绘制一条穿过数据的线(或者,在更高维度下,绘制一个超平面)。

在之前的可视化中,我们以“原始”表示形式查看了数据。当我们看输入层时,你可以想到这一点。现在我们将在第一层转换后查看它。你可以把它想象成我们在看隐藏层。

每个维度对应于层中神经元的发射。

在上一节中概述的方法中,我们通过查看与每个层对应的表示来学习理解网络。这给了我们一个离散的表示序列。

棘手的部分是理解我们如何从一个到另一个。值得庆幸的是,神经网络层具有很好的属性,使这很容易实现。

在神经网络中使用各种不同类型的层。我们将讨论tanh(双曲正切)层作为一个具体示例。 tanh层 tanh(Wx + b) 包括:

1. 经过“权重”矩阵 W 的线性变换

2. 经过矢量 b 的平移

3. 点式地应用tanh。

我们可以将其视为一个连续的转换,如下所示:

其他标准层的过程大致相同,包括仿射变换,然后逐点应用单调激活函数。

我们可以应用这种技术来理解更复杂的网络。例如,以下网络使用四个隐藏层对两个略微纠缠的螺旋进行分类。随着时间的推移,我们可以看到它从“原始”表示转变为它为了对数据进行分类而学到的更高级别的表示。虽然螺旋最初是缠绕的,但最终它们是线性可分的。

另一方面,以下网络也使用多个层,无法对两个更纠缠的螺旋进行分类。

值得明确指出的是,这些任务只是有些挑战,因为我们使用的是低维神经网络。如果我们使用更广泛的网络,所有这一切都会非常容易。

(Andrej Karpathy基于ConvnetJS做了一个很好的演示,它允许您通过这种对训练的可视化来交互式地探索网络!)

每一层都伸展并占据空间,但它永远不会削减,折断或折叠它。直觉上,我们可以看到它保留了拓扑属性。例如,如果一个集合之前是连通的那其之后也是连通的(反之亦然)。

像这样不会影响拓扑的变换,称为同胚。在形式上,它们是双向连续函数的双射。

定理 :如果权重矩阵W是非奇异的,则具有 N 个输入和 N 个输出的层是同胚。 (虽然需要注意域和范围。)

证明 :让我们一步一步考虑:

1. 假设W具有非零行列式。然后它是具有线性逆的双射线性函数。线性函数是连续的。因此,乘以 W 是同胚。

2. 平移是同胚的。

3. tanh(和sigmoid和softplus但不是ReLU)是具有连续逆的连续函数。如果我们对我们考虑的域和范围保持谨慎,它们就是双射的。逐点应用它们是同胚。

因此,如果 W 具有非零行列式,则我们的层是同胚。 ∎

如果我们将这些层中任意多个组合在一起,这个结果就会继续存在。

考虑一个二维数据集,有两个类A和B⊂R2:

A={x|d(x,0)1/3}

B={x|2/3d(x,0)1}

声明 :如果没有具有3个或更多隐藏单位的层,神经网络就无法对此数据集进行分类,无论深度如何。

如前所述,使用S形单元或softmax层进行分类等同于尝试找到在最终表示中分离A和B的超平面(或在这种情况下为线)。由于只有两个隐藏单元,网络在拓扑上无法以这种方式分离数据,并且注定要在此数据集上失败。

在下面的可视化中,我们观察到网络训练时的隐藏表示以及分类线。正如我们所看到的那样,它正在努力学习如何做到这一点。

最终,它会被拉入一个相当低效的局部最小值。 虽然,它实际上能够达到~ 80% 的分类准确度。

这个例子只有一个隐藏层,但无论如何都会失败。

证明 :每一层都是同胚,或者层的权重矩阵具有行列式0.如果它是一个同胚,A仍然被B包围,并且一条线不能将它们分开。 但是假设它有一个行列式为0:那么数据集会在某个轴上折叠。 由于我们处理与原始数据集同胚的某些东西,A被B包围,并且在任何轴上折叠意味着我们将有一些A和B混合的点并且变得无法区分。∎

如果我们添加第三个隐藏单元,问题就变得微不足道了。 神经网络学习以下表示:

通过这种表示,我们可以使用超平面分离数据集。

为了更好地了解正在发生的事情,让我们考虑一个更简单的1维数据集:

A=[−1/3,1/3]

B=[−1,−2/3]∪[2/3,1]

如果不使用两个或更多隐藏单元的层,我们就无法对此数据集进行分类。 但是如果我们使用有两个单元的层,我们学会将数据表示为一条很好的曲线,允许我们用一条线来将不同的类分隔开来:

发生了什么? 一个隐藏单元在x -1/2时学会开火,一个在x 1/2时学会开火。当第一个开火但第二个没开火时,我们知道我们在A中。

这与现实世界的数据集,比如图像数据有关吗? 如果你真的认真对待流形假设,我认为值得考虑。

流形假设是自然数据在其嵌入空间中形成低维流形。 理论上[3]和实验上[4]都有理由认为这是真的。 如果你相信这一点,那么分类算法的任务就是从根本上分离出一堆纠结的流形。

在前面的例子中,一个类完全包围了另一个类。 然而,狗图像流形似乎不太可能被猫图像流形完全包围。 但是,正如我们将在下一节中看到的那样,还有其他更合理的拓扑情况可能仍然存在问题。

另一个值得考虑的有趣数据集是两个链接的圆环, A 和 B .

与我们考虑的先前数据集非常相似,如果不使用n+1维,即第4维,则无法分离此数据集。

链接是在结理论中研究的,这是一个拓扑领域。 有时当我们看到一个链接时,它是否是一个非链接(一堆东西纠结在一起,但可以通过连续变形分开)并不是很明显。

如果使用仅有3个单元的层的神经网络可以对其进行分类,那么它就是非链接。 (问题:理论上,所有非链接是否都可以被只有3个单元的网络进行分类?)

从这个结的角度来看,我们对神经网络产生的连续可视化的表示不仅仅是一个很好的动画,它还是一个解开链接的过程。在拓扑中,我们将其称为原始链接和分离链接之间的环境同位素(ambient isotopy)。

形式上,流形A和B之间的环境同位素是连续函数F:[0,1]×X→Y,使得每个Ft是从X到其范围的同胚,F0是恒等函数,F1将A映射到B。也就是说,Ft连续地从A向自身映射转换到A向B映射。

定理 :在输入和网络层表示之间存在环境同位素,如果:a) W 不是奇异的,b)我们愿意置换隐藏层中的神经元,并且c)存在多于1个隐藏单元。

证明 :同样,我们分别考虑网络的每个阶段:

1. 最难的部分是线性变换。 为了使这成为可能,我们需要 W 有一个正的行列式。 我们的前提是它不是零,如果它是负的,我们可以通过切换两个隐藏的神经元来翻转符号,那么我们可以保证行列式是正的。 正行列式矩阵的空间是路径连通的,因此存在 p :[ 0,1 ] →  GLn (R)5,使得  p(0) = Id  且  p(1) = W 。 我们可以用函数  x → p(t)x  连续地从恒等函数转换到 W 变换,在每个时间点 t 将 x 乘以连续转换矩阵 p(t) 。

2. 我们可以用函数 x → x + tb 不断地从恒等函数转换到b转换。

3. 通过函数: x → (1- t)x +tσ(x) ,我们可以不断地从恒等函数过渡到σ的逐点使用。∎

我想可能有兴趣自动发现这种环境同位素并自动证明某些链接的等价性,或某些链接是可分离的。知道神经网络能否击败现有技术水平将会很有趣。

(显然确定结是否平凡是NP问题。这对神经网络来说不是好兆头。)

到目前为止我们谈到的那种链接似乎不太可能出现在现实世界的数据中,但是有更高的维度的拓展。在现实世界的数据中可能存在这样的事情似乎是合理的。

链接和结是一维流形,但我们需要4个维度才能解开所有这些。类似地,人们可能需要更高维度的空间以能够解开n维流形。所有n维流形都可以在 2n + 2 维中解开。[6]

(我对结理论知之甚少,真的需要更多地了解有关维度和链接的知识。如果我们知道流形可以嵌入到n维空间中,而不是流形的维数,我们有什么限制? )

一个神经网络要做的自然的事情,非常简单的路线,是试图将流形分开,并尽可能地拉伸缠绕的部分。 虽然这不会接近真正的解决方案,但它可以实现相对较高的分类准确度并且是诱人的局部最小值。

它会在它试图拉伸的区域中表现为 非常高的衍生物 (very high derivatives)和近乎不连续性。我们知道这些事情会发生.[7] 在数据点处惩罚层的衍生物的收缩惩罚是对抗这种情况的自然方式.[8]

由于这些局部极小值从试图解决拓扑问题的角度来看是绝对无用的,拓扑问题可能提供了探索解决这些问题的良好动机。

另一方面,如果我们只关心实现良好的分类结果,似乎我们可能不在乎。如果数据流形的一小部分被另一个流形钩住,对我们来说这是一个问题吗?尽管存在这个问题,似乎我们也应该能够获得主观上来看不错的分类结果。

(我的直觉是试图欺骗这个问题是一个坏主意:很难想象它不会是一个死胡同。特别是在一个优化问题中,局部最小值是一个大问题,选择一个架构,不能真正解决问题似乎是表现不佳的秘诀。)

我对标准神经网络层的思考越多 - 即是,通过仿射变换后跟一个逐点激活函数 - 我感觉更加失去理智。 很难想象这些对于操纵流形真的很有益。

或许有一种非常不同的层可以用来组成更传统的层?

我自然想到的是学习一个矢量场,这个矢量场带有我们想要改变流形的方向:

然后根据它来变形空间:

人们可以在固定点学习矢量场(只需从训练集中取一些固定点作为锚点)并以某种方式进行插值。 上面的矢量场的形式如下:

其中v0和v1是向量,f0(x)和f1(x)是n维高斯。 这受到径向基函数的启发。

我也开始思考线性可分性对于神经网络的需求可能是巨大的,虽然可能是不合理的。在某些方面,感觉自然要做的就是使用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上发出pull请求。)

感谢Yoshua Bengio, Michael Nielsen, Dario Amodei, Eliana Lorch, Jacob Steinhardt, and Tamsyn Waterhouse的评论和鼓励。

1. This seems to have really kicked off with  Krizhevsky  et al. , (2012) , who put together a lot of different pieces to achieve outstanding results. Since then there’s been a lot of other exciting work. ↩

2. These representations, hopefully, make the data “nicer” for the network to classify. There has been a lot of work exploring representations recently. Perhaps the most fascinating has been in Natural Language Processing: the representations we learn of words, called word embeddings, have interesting properties. See  Mikolov  et al.  (2013) ,  Turian  et al.  (2010) , and,  Richard Socher’s work . To give you a quick flavor, there is a  very nice visualization  associated with the Turian paper. ↩

3. A lot of the natural transformations you might want to perform on an image, like translating or scaling an object in it, or changing the lighting, would form continuous curves in image space if you performed them continuously. ↩

4.  Carlsson  et al.  found that local patches of images form a klein bottle. ↩

5. GLn(R)is the set of invertible n×n matrices on the reals, formally called the  general linear group  of degree n. ↩

6. This result is mentioned in  Wikipedia’s subsection on Isotopy versions . ↩

7. See  Szegedy  et al. , where they are able to modify data samples and find slight modifications that cause some of the best image classification neural networks to misclasify the data. It’s quite troubling. ↩

8. Contractive penalties were introduced in contractive autoencoders. See  Rifai  et al. (2011) . ↩

9. I used a slightly less elegant, but roughly equivalent algorithm because it was more practical to implement in Theano: feedforward two different batches at the same time, and classify them based on each other. ↩

卷积神经网络和深度神经网络的区别是什么

主要区别是在多层感知机中,对层定义和深度处理方法不同。深度神经网络模仿人脑思考方式,首先逐层构建单层神经元,这样每次都是训练一个单层网络。当所有层训练完后,使用wake-sleep算法进行调优。卷积神经网络通过“卷积核”作为中介。同一个卷积核在所有图像内是共享的,图像通过卷积操作后仍然保留原先的位置关系。

0条大神的评论

发表评论