当达到局部最小值时,如何将模拟退火与前馈神经网络结合使用,而不仅仅是简单地重置权重(并将隐藏层置于新的误差波谷中)? FFNN使用的模拟退火是一种更加系统的方式来移动权重以找到全局最小值,因此每次验证错误开始相对于训练误差开始增加时,仅执行一次迭代 ...慢慢移动错误功能的当前位置?在这种情况下,模拟退火与前馈网络无关,前馈网络取决于模拟退火输出。如果没有,并且模拟退火直接取决于FFNN的结果,我不知道模拟退火训练师如何根据如何更新自己的权重来接收这些信息(如果那讲得通)。其中一个例子提到了一个循环(多次迭代),这不符合我的第一个假设。
我查看了不同的exmaples,其中使用了network.fromArray()和network.toArray(),但我只看到network.encodeToArray()和network.decodeFromArray()。将权重从一种网络转移到另一种网络的最新方式(v3.2)是什么?使用遗传算法等是否相同?
答案 0 :(得分:1)
神经网络训练算法,例如模拟退火,基本上是搜索。神经网络的权重基本上是指定高维空间中的位置的矢量坐标。
考虑爬山,可能是最简单的训练算法。您可以调整一个重量,从而在一个维度上移动并查看它是否会提高您的分数。如果分数得到改善,那么很好,留在那里并尝试下一次迭代的不同维度。如果您的分数未得到改善,请下次撤退并尝试不同的维度。想象一个人在一步中看到他们可以达到的每个点,并选择最能增加他们的高度的步骤。如果没有步骤会增加高度(你站在山谷中间),那么你就卡住了。这是当地的最低要求。
模拟退火为爬山增加了一个关键因素。我们可能会搬到一个更糟糕的位置。 (不贪心)我们搬到较小位置的概率取决于温度的降低。
如果您查看NeuralSimulatedAnnealing类,您将看到对NetworkCODEC.NetworkToArray()和NetworkCODEC.ArrayToNetwork()的调用。这些是权重向量直接更新的方式。