前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神经网络:问题与解决方案

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

作者头像
刀刀老高
发布2018-04-10 17:56:42
7290
发布2018-04-10 17:56:42
举报
文章被收录于专栏:奇点大数据奇点大数据

尽管人工神经网络的概念从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时,斜率为负值,与输入成正比。

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

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

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

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

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

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

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

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


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档