神经网络:计算权重增量是一个瓶颈

时间:2013-09-26 04:33:48

标签: neural-network

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

有效地计算这些值的技巧吗?

1 个答案:

答案 0 :(得分:1)

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

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

如果你正在剖析,我会建议你描述一个更接近神经网络设计目的的问题(我猜你没有设计它来解决XOR或玩tic tac toe)而你可能会发现像-rate*gradient + momentum*previous_delta - decay*rate*weight这样的优化代码或多或少是浪费时间,至少这是我的经验。

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

  1. 考虑并行化。诸如在反向传播技术中实现的那些搜索算法的许多搜索算法都适合于并行尝试以改善收敛。由于权重调整在给定网络的计算需求方面是相同的,请考虑Open MP中的static循环。
  2. 修改收敛标准(停止调整权重之前的临界收敛率)以执行较少的这些计算
  3. 考虑一种替代确定性解决方案,例如反向传播,无论如何都更容易进行局部优化。考虑高斯变异(所有事物都相等于高斯变异将1)减少相对于回测的变异所花费的时间2)增加收敛时间和3)不太容易陷入错误搜索空间的局部最小值)
  4. 请注意,这是对我所解释为非技术性问题的非技术性答案。