神经网络:问题与解决方案

尽管人工神经网络的概念从20世纪50年代就已经存在,但是直到最近我们才有能力将理论转化为实践。神经网络应该能够模仿任何连续的功能。但是,很多时候,我们都陷入了网络没有达标的境地,或者需要花费大量时间才能获得体面的结果。人们应该从统计角度来处理这个问题,而不是直面对网络架构应该发生的变化的直觉。首先应该对数据进行适当的预处理。除了均值归一化和缩放,主成分分析可能有助于加速培训。如果数据的维度降低到仍然保留适当的变化量的程度,那么可以节省空间,而不会对数据质量造成太大的影响。而且,神经网络在提供较少的数据时可以被训练得更快。

通过使用奇异值分解将训练数据的协方差矩阵分解成三个矩阵,可以实现维度的减小。第一个矩阵应该是包含特征向量。此外,矩阵中存在的矢量集是正交的,因此它们可以被视为基本矢量。我们从这个矩阵中选择前几个向量,这个数量等于我们希望减少数据的维数。利用前一步得到的矩阵对原始矩阵(原始维数)进行变换,得到一个新的矩阵,该矩阵既是维数降维的,又是线性变换的。

蓝线的长度之和应该被最小化(2D到1D)

PCA的八度实现将是:

上述步骤在本质上是数学上的,但实质上我们只是将数据从较高的维度“投影”到较低的维度,类似于在一个合适的线上在一个平面上投影点,以这样的方式,点的距离“旅行“被最小化。

可以使用PCA将其数据可视化为3D或2D。但是,与PCA不同的是,更推荐的方法是利用基于概率分布的t分布的随机邻居嵌入。t-SNE试图最小化高维和低维条件概率之间的差异。

更高维的条件概率

对于靠近在一起的点(通过它们的欧几里得距离测量),条件概率是高的,并且对于曾经相距很远的那些点是低的。点根据获得的分布进行分组。方差的选择使密集地区的地点与稀疏地区的地点相比,方差更小。

尽管George Cybenko在1989年证明了即使是单个隐含层的神经网络也可以逼近任何连续函数,但是为了获得更好的预测,可能需要将更高阶的多项式特征引入到网络中。有人可能会考虑增加隐藏层的数量。实际上,网络的层数等于它应该能够表示的最高次数的多项式。虽然这也可以通过提高现有层中的神经元的数量来实现,但是与向网络添加隐藏层相比,这需要更多的神经元(并且因此需要更长的计算时间),以便近似具有相似量的错误。另一方面,使神经网络“深”会导致不稳定的梯度。这可以分为两部分,即消失和爆炸的梯度问题。

神经网络的权重一般用随机值初始化,其平均值为0,标准偏差为1,粗略地放在高斯分布上。这确保了大部分权重在-1和1之间.Sigmoid函数给出了一个0.25的最大导数(当输入为零时)。这与权重属于有限范围的事实相结合,有助于确保其产品的绝对值也小于0.25。感知器的梯度包括许多这样的项的乘积,每个小于0.25。越深入到层次,我们将会有越来越多的这样的术语,导致消失的渐变问题。

重量的反向传播

本质上,外隐层的感知器(更接近输入层)的梯度将由深层的梯度的乘积的总和和分配给它们之间的每个链接的权重给出。因此,显然浅层的梯度将会非常小。这会导致他们在学习过程中的权重变化较小,并在适当的时候几乎停滞不前。第一层应该承载大部分的信息,但是我们看到它被训练得最少。因此,逐渐消失的问题最终导致网络的死亡。

在训练时可能会有重量超出一个的情况。在这种情况下,人们可能会想知道如何消失的梯度仍然会产生问题。那么这可能会导致梯度问题的爆发,其中前面的梯度变得很大。如果权重很大,并且偏置是激活函数的S形导数的乘积也使其保持在较高的一侧,则会出现这个问题。但是,另一方面,这是有点难以实现的,因为增加的重量可能导致更高的激活函数的输入值,其中乙状结肠的导数相当低。这也有助于确定消失梯度问题难以预防的事实。为了解决这个问题,我们选择其他的激活函数,避免sigmoid。

虽然sigmoid是一个流行的选择,因为它压缩零和一之间的输入,而且其衍生物可以写成sigmoid本身的函数,依赖于它的神经网络可能会遭受不稳定的梯度。而且,S形输出不是零中心的,它们都是正的。这意味着,所有的梯度将根据下一层单位的梯度而为正或负。

最值得推荐的激活功能是Maxout。Maxout保持两组参数。使用产生较高值的那个值作为激活函数的输入。而且,权重可以根据某些输入条件而变化。一个这样的尝试导致泄漏整流线性单位。在这种特殊情况下,当输入大于0时,斜率保持为1,当输入小于0时,斜率为负值,与输入成正比。

在神经网络中遇到的另一个麻烦,特别是当它们深时,就是内部的协变量。投入的统计分布随着培训的进行而不断变化。这可能会导致领域的重大变化,从而降低培训效率。解决问题的办法是对每个小批量进行标准化。我们计算所有这些批次的均值和方差,而不是整个数据。在输入几乎每一个隐藏层之前,输入都被标准化。该过程通常称为批量标准化。应用批量归一化可以帮助克服消失梯度的问题。

正则化可以通过实现退出来改进。网络中的某些节点往往是从神经网络的某些或所有层随机关闭的。因此,在每一次迭代中,我们得到一个新的网络,所得到的网络(在训练结束时获得)是所有这些网络的组合。这也有助于解决过度配合的问题。

无论应用何种调整,都必须始终跟踪网络中死亡神经元的百分比,并相应地调整学习速率。

可以对参数执行某些诊断以获得更好的统计。地块上的偏见和方差在这里的两个重要因素。可以通过绘制曲线与训练和交叉验证数据集的损失函数(没有正则化)的输出相对于训练示例的数量来确定它们。

(一)高偏差(二)高度差异

在上图中,红色曲线表示交叉验证数据,而蓝色表示训练数据集。第一个数字是当架构遭受高度偏见时大致获得的数字。这意味着,架构很差,因此即使在训练数据集上也会出现很高的错误。在网络中添加更多的功能(如添加更多的隐藏层,因此引入多项式功能)可能是有用的。如果受到高方差的影响,则表示训练好的参数适合训练集,但在对“不可见”数据(训练或验证集)进行测试时表现不佳。这可能是因为该模型“过度使用”训练数据。获取更多的数据可以作为一个修复。在这种情况下,减少网络中隐藏层的数量也可能是有用的。使用正则化参数也可以有所帮助。增加其价值可以确定高度的变化,而减少则有助于确定高的偏见。

绘制诊断曲线的八度实现将是:

虽然已经注意到大量的训练数据会增加任何网络的性能,但是获取大量的数据可能是昂贵且耗时的。如果网络遭受高偏差或消失梯度问题,更多的数据将是没有用的。因此,简单的数学应该实施,因为它会引导我们走下一步。


原文发布于微信公众号 - 奇点(qddata)

原文发表时间:2018-01-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

从模糊到清晰,AI对图片的识别越来越精准| Facebook CVPR2016最新论文

图像边缘的无监督学习 摘要 数据驱动方法在边缘检测领域已被证明是有效的,且在最近的基准测试中取得了顶尖的成绩。然而,目前所有数据驱动的边缘检测都要求以手工标注区...

41410
来自专栏机器之心

训练深度神经网络失败的罪魁祸首不是梯度消失,而是退化

2395
来自专栏专知

【干货】机器学习基础算法之随机森林

【导读】在当今深度学习如此火热的背景下,其他基础的机器学习算法显得黯然失色,但是我们不得不承认深度学习并不能完全取代其他机器学习算法,诸如随机森林之类的算法凭借...

3487
来自专栏专知

解开贝叶斯黑暗魔法:通俗理解贝叶斯线性回归

【导读】本文是悉尼大学博士生 Thushan Ganegedara 撰写的一篇博文,主要介绍贝叶斯线性回归的内在原理。我们知道,深度学习可以利用大规模数据产生很...

1.2K11
来自专栏人工智能头条

深度学习性能提升的诀窍

2436
来自专栏机器学习和数学

[编程经验] TensorFlow实现非线性支持向量机

上一次说的是线性支持向量机的原理和tf实现问题,把SVM的原理简单用公式推导了一下,SVM这块还有几个问题没有解释,比如经验风险,结构风险,VC维,松弛变量等。...

4817
来自专栏数据派THU

一文读懂神经网络(附PPT、视频)

本文共6500字,建议阅读10分钟。 本文从神经网络的发展历史出发,为你介绍感知器模型、前馈神经网络及BP算法。 [导读] 提起神经网络,你会想到什么?关于深度...

5139
来自专栏AI科技评论

学界 | 如何用未标注样本解决单标注样本下的视频行人重识别问题?

本文作者为悉尼科技大学博士生武宇(Yu Wu),他根据 CVPR 2018 录用论文 Exploit the Unknown Gradually: One-Sh...

951
来自专栏人工智能头条

王晓刚:图像识别中的深度学习

3032
来自专栏算法channel

logistics判别与线性模型中的4个问题

之前说过,机器学习的两大任务是回归和分类,上章的线性回归模型适合进行回归分析,例如预测房价,但是当输出的结果为离散值时,线性回归模型就不适用了。我们的任务是:将...

1410

扫码关注云+社区

领取腾讯云代金券