4

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

正如你们中的一些人可能知道的那样,训练集由对(输入,期望的输出)组成

训练阶段本身如下

for every pair in a training set

-we input the first value of the pair and calculate the output error i.e. how far is the generated output from the desired output, which is the second value of the pair

-based on that error value we use backpropagate algorithm to calculate weight gradients and update weights of ANN 

end for

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

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

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

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

例如,如果pair m要消除在pair1、 或pair2或两者之后发生的权重更新,那么尽管 ANN 会为输入 m 产生合理的输出,但它会有点忘记 和 的更新,pair1并且pair2输入 1 和 2 的结果会很差,那么训练的意义何在?

除非我们一次又一次地训练 ANN,pair1否则pair2pair m

4

3 回答 3

3

例如,如果pair m要消除pair1或pair2或两者之后发生的权重更新,那么尽管ANN会为输入m产生合理的输出,但它会有点忘记pair1和pair2的更新,以及输入的结果1和2会很差,那训练有什么意义呢??

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

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

于 2013-03-12T16:57:30.987 回答
3

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

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

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

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

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

祝你好运!

于 2013-03-13T09:55:18.127 回答
0

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

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

于 2013-03-12T20:14:31.257 回答