神经网络权重的收敛


10

我遇到一种情况,即使经过500次迭代,我的神经网络的权重仍未收敛。我的神经网络包含1个输入层,1个隐藏层和1个输出层。它们在输入层中约为230个节点,在隐藏层中约为9个节点,在输出层中约为1个输出节点。我想知道是否要尽早停止条件(例如,在100次迭代后停止神经网络训练)。这会对模型产生什么影响?

还想知道如果神经网络中的权重不收敛,行业的工作标准是什么?


您的数据是否正确归一化?这通常是这种行为的原因。
sashkello

通常,隐藏层中神经元的数量应与输入层中神经元的数量相同。我认为9个神经元太小了。您是否尝试增加到200-300个神经元?
2013年

@sashkello是,数据已正确标准化。
学习者

1
@juampa没有理由在隐藏层中有9个节点。我们认为在隐藏层中拥有更多节点会增加网络的复杂性并过度拟合数据。
Learner

3
您需要给出更多解释。您要解决的问题是什么?您有几个训练数据点?您不收敛是什么意思?-您是说表现不好(在训练组上),还是您的体重没有收敛...如果体重在收敛,则您需要使用较低的学习率或逐渐减少的学习率。您可能还希望使用逻辑/线性回归作为基线。最后,您的输入有多相关?如果它们之间具有很高的相关性,则归一化是不够的,您应该考虑对角化(aka PCA)。
seanv507

Answers:


13

有很多问题要问:

  • 你每一层都有适当数量的神经元吗
  • 您是否在使用适当类型的传递函数?
  • 您是否在使用适当类型的学习算法
  • 你有足够大的样本量吗
  • 您是否可以确认您的样本彼此之间具有正确的关系以提供信息?(不是多余的,具有相关尺寸,等等。)

您可以用星历表给什么?您能否告诉我们一些有关数据性质的信息?

您可以制作神经网络的梯度增强树。

您问如果早停会怎样。

您可以尝试一下。运行300x,从随机初始化的权重开始,然后在指定的迭代次数处停止,比如说100。此时,计算集合误差,训练子集误差和测试集误差。重复。在具有300个值来告诉您错误是什么之后,您可以了解100次学习迭代后的错误分布。如果愿意,您可以从其他几个学习价值中取样该分布。我建议进行200、500和1000次迭代。这将使您了解SNR如何随时间变化。SNR与迭代计数的关系图可以使您对“悬崖”或“足够好”有所了解。有时在悬崖上错误会崩溃。有时错误在那时是可以接受的。

系统需要“相对简单”的数据或“相当好”的运气才能始终收敛于100次迭代以下。两者都与可重复性无关,也不是可推广的。

您为什么要考虑权重收敛而不是错误低于特定阈值。您听说过投票悖论吗?(链接)当您的系统中存在周期性的交互作用时(例如神经网络中的反馈),那么您可能会有投票悖论-耦合的变化。我不知道单独权重是否足以作为网络融合的指标。

您可以将权重视为一个空间。它有3个以上的尺寸,但仍然是一个空间。该空间的“质心”是您的“最适合”区域。离质心较远的位置不太适合。您可以将权重的当前设置视为该空间中的单个点。

现在您不知道“好”实际上在哪里。您所拥有的只是一个本地“坡度”。给定您当前的位置,您可以向本地“更好”方向执行梯度下降。它并没有告诉您“通用性”更好,但是本地总比没有好。

因此,您开始迭代,下山朝那个更好的山谷走去。您进行迭代,直到您认为自己完成了。也许您的体重值很大。也许他们到处弹跳。也许计算“花费的时间太长”。您想完成。

那么,您如何知道自己所在的位置是否“足够好”?

这是您可以执行的快速测试:

取数据的30个统一随机子集(每个子集占百分之几),然后在它们上重新训练网络。它应该快得多。观察他们收敛所需的时间,并将其与大集合的收敛历史进行比较。针对这些子集上的整个数据测试网络的错误,并查看错误分布与您的大错误的比较。现在,将子集的大小增加到数据的5%,然后重复。看看这会教给你什么。

这是粒子群优化(请参阅参考资料)的一种变体,该模型以蜜蜂如何根据侦察决策来建模。

您问如果权重不收敛会发生什么。

神经网络是一种工具。它们不是唯一的工具。还有其他 我会考虑使用其中之一。

我根据信息标准工作,因此我同时研究了权重(参数计数)和错误。您可以尝试其中之一。

有一些类型的预处理可能有用。中心和比例。使用主要部件旋转。如果您查看主成分中的特征值,则可以使用skree绘图规则来估计数据的维数。减小尺寸可以改善收敛。如果您对“基础物理学”有所了解,则可以对数据进行平滑或过滤以消除噪声。有时收敛是关于系统中的噪声的。

我发现压缩感测的想法很有趣。它可以允许对某些系统进行根本性的二次采样而又不失一般性。我将研究一些自举重新采样的统计数据和数据分布,以确定训练集是否具有代表性以及在什么级别的子采样上具有代表性。这为您提供了一些数据“健康”的度量。

有时候,他们不收敛是一件好事

您听说过投票悖论吗?您可能会认为它是双向僵局的更高表亲。这是一个循环。在两人投票的悖论中,第一个人想要候选人“ A”,而第二个人想要候选人“ B”(或者不是-A等)。重要的部分是您可以将其视为一个循环。

循环在神经网络中很重要。反馈。递归。它使感知器能够解决类似XOR的问题。它会产生循环,有时循环会像投票悖论一样起作用,如果您进行无限次迭代,循环将不断改变权重。它们并不是收敛的,因为重要的不是各个权重,而是循环中权重的相互作用。

注意:

仅使用500次迭代可能是一个问题。我有NN,其中10,000次迭代勉强够用。正如我已经指出的,“足够”的迭代次数取决于数据,NN拓扑,节点传递函数,学习/训练函数,甚至计算机硬件。您必须对它们如何与您的迭代计数进行交互有一个很好的了解,然后才能说存在“足够”或“太多”的迭代。还应考虑其他因素,例如时间,预算,以及在完成培训后要对NN进行的处理。

Chen RB,Chang,SP,Wang W.,&Wong,WK(2011年9月)。通过粒子群优化方法的最佳实验设计(预印本),2012年3月25日,取自http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf


2

对我来说很难说你的问题是什么。要考虑的一点是您使用的具体实现。具体来说,什么优化算法。如果您的网络收敛需要很长时间,并且您正在使用某种形式的随机梯度下降(或小批量),则可能是您的网络处于平稳状态(能量/误差函数非常平坦的区域)因此渐变非常低,因此收敛)。

如果是这样,请检查梯度的大小以查看是否存在这种情况。有许多不同的技术可以解决此问题,例如为梯度添加动量。

有关交易技巧和技巧的详细概述,请查看Yann LeCun撰写的这篇(必读)论文。



0

我有许多收敛缓慢的数据集-可能是因为输入之间的相关性很高。

我编写了自己的C ++ NN分析器,并使用它可以改变每个权重的学习率。对于每个边缘上的每个权重,我要做两件事,对您有所帮助。

首先,我将每个学习率乘以[0,1]中均匀分布的随机数。我猜这有助于解决相关性问题。

另一个技巧是,我将当前渐变与每个边缘上的先前渐变进行比较。如果梯度几乎没有按百分比降低,那么我将该边缘的学习率乘以最多5。

对于这些技巧,我都没有任何特别的道理,但它们似乎效果很好。

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.