1

在分析了我的神经网络的代码后,我意识到计算网络中每个弧的权重变化的方法 ( -rate*gradient + momentum*previous_delta - decay*rate*weight),已经给定了梯度,是瓶颈(包含 55% 的样本)。

有什么技巧可以有效地计算这些值吗?

4

1 回答 1

1

这是正常行为。我假设您正在使用迭代过程来解决每个进化步骤的权重(例如反向传播?)。如果神经元的数量很大并且训练(回测)算法很短,那么在神经网络的训练过程中,像这样的权重突变会消耗更多的计算时间是很正常的。

您是否使用简单的 XOR 问题或类似问题得到了这个结果?如果是这样,您可能会发现,如果您开始解决更复杂的问题(例如多维数组中的模式检测、图像处理等),这些函数将开始消耗很少的计算时间。

如果您正在分析,我建议您分析一个更接近神经网络设计目的的问题(我猜您设计它不是为了解决 XOR 或玩井字游戏),您可能会发现优化代码-rate*gradient + momentum*previous_delta - decay*rate*weight或多或少是浪费时间,至少这是我的经验。

如果您确实发现此代码在实际应用程序中是计算密集型的,那么我建议您尝试减少通过结构更改执行此代码行的次数。神经网络优化是一个丰富的领域,我不可能从如此广泛的问题中给你有用的建议,但我会说,如果你的程序异常缓慢,你不太可能通过在如此低的水平上进行修补来看到显着的改进代码。但是,我会根据自己的经验提出以下建议:

  1. 考虑并行化。许多搜索算法,例如那些在反向传播技术中实现的算法,都可以通过并行尝试来提高收敛性。由于权重调整在给定网络的计算需求方面是相同的,因此请考虑Open MPstatic中的循环。
  2. 修改收敛标准(停止调整权重之前的临界收敛速度)以减少执行这些计算
  3. 考虑一个替代确定性解决方案的替代方案,例如反向传播,无论如何这些解决方案更容易进行局部优化。考虑高斯变异(所有事物都相等,高斯变异将 1)相对于回测减少变异所花费的时间 2)增加收敛时间 3)不易陷入错误搜索空间的局部最小值)

请注意,这是对我解释为非技术问题的非技术答案。

于 2013-09-29T01:11:49.623 回答