神经网络训练集

时间:2013-03-11 10:15:40

标签: algorithm graph artificial-intelligence neural-network

我的问题是关于监督人工神经网络(ANN)中的训练集

训练集,正如你们可能知道的那样,由成对(输入,所需输出)组成

训练阶段本身如下

对于训练集中的每一对

- 我们输入该对的第一个值并计算输出误差,即从所需输出产生的输出多远,这是该对的第二个值

- 基于该误差值,我们使用反向传播算法来计算权重梯度和更新ANN的权重

结束

现在假设训练集中有pair1,pair2,... pair m,...

我们选择pair1,产生一些错误,更新权重,然后选择pair2等等。

稍后我们到达对m,产生一些错误,并更新权重,

我的问题是,如果对m之后的重量更新将消除一些重量更新,甚至之前发生的更新怎么办?

例如,如果对m要消除在pair1或pair2或两者之后发生的权重更新,那么虽然ANN将为输入m产生合理的输出,但它将忘记对pair1和pair2的更新,以及输入1和2的结果会很差, 那么培训的重点是什么?

除非我们再次训练ANN与pair1和pair2,在对m之后

3 个答案:

答案 0 :(得分:3)

  

例如,如果对m要消除在pair1或pair2或两者之后发生的权重更新,那么虽然ANN将为输入m产生合理的输出,但它将忘记对pair1和pair2的更新,以及输入1和2的结果会很差,那么培训的重点是什么?

训练神经网络的目的是最终得到权重,为所有可能的输入值提供所需的输出。你在这里做的是在反向传播时遍历错误表面,以便你最终进入错误低于错误阈值的区域。请记住,当您反向传播一组输入的错误时,并不意味着神经网络会自动识别特定的输入并立即生成确切的响应该输入再次出现。当你反向传播时,所有这意味着你已经改变了你的权重,使你的神经网络能够更好识别出特定的输入(即错误不断减少)。

因此,如果你出现pair-1然后是pair-2,那么pair-2可能会在一定程度上否定这些变化。然而,从长远来看,神经网络的权重倾向于正确识别所有输入。问题是,您无法查看针对特定输入/输出集的特定培训尝试的结果,并担心这些更改将被否定。正如我之前提到的,当您训练神经网络时,您正在遍历错误表面以找到错误最低的位置。可以把它想象成沿着拥有一堆山丘和山谷的景观漫步。想象一下,你没有地图,并且你有一个特殊的指南针,告诉你你需要移动的方向,以及距离。罗盘基本上是试图引导您到达这个景观的最低点。现在这个指南针也不能很好地了解景观,所以在试图将你送到最低点的时候,它可能会走向一个稍微错误的方向(即,让你向某个方向上山),但它会尝试并纠正在那之后。从长远来看,你最终会在景观的最低点结束(除非你处于局部最小值,即低点,但不是最低点)。

答案 1 :(得分:3)

每当您进行有监督的训练时,您应该通过训练数据集运行几轮(甚至数千轮)。通过训练数据集的每个这样的轮次称为 epoch

在监督训练期间,还有两种不同的方法可以更新神经网络中的参数。 随机培训批量培训。批量训练是数据集中的一个循环,通过集合累计总误差,并且在累积所有误差时仅更新参数(权重)一次。随机训练是您描述的方法,其中权重针对每个输入,期望的输出对进行调整。

在几乎所有情况下,如果训练数据集对于一般情况具有相对代表性,那么您应该更喜欢随机训练而不是批量训练。 100个案例中的99个随机培训击败了批量培训! (需要引用:-))。 (简单的XOR训练案例和其他玩具问题是例外)

回到你的问题(适用于随机训练):是的,第二对确实可以调整与第一对相反方向的权重。然而,对于两种情况,所有权重都不可能相反地调整。然而,由于你将通过集合运行几个时期,因此每个时期的效果都会减弱。您还应该为每个时期随机化对的顺序。 (使用某种Fisher-Yates算法。)这会进一步降低效果。

下一篇提示:将基准数据集与训练数据分开。对于每n个训练时期,使用基准集对神经网络进行基准测试。这是计算此基准数据集中对的总误差。当错误没有减少时,是时候停止训练了。

祝你好运!

答案 2 :(得分:0)

如果您正在执行随机梯度下降(SGD),那么这可能不会发生,因为对1的参数更新将在计算对2的参数更新之前生效。这就是为什么SGD可以更快收敛。

如果您同时使用所有数据(甚至是其中的一部分)计算参数更新,则这两对可能会相互抵消。然而,这并不是一件坏事,因为很明显,这两对数据点正在提供相互矛盾的信息。这就是批量反向支持通常被认为更稳定的原因。