【问题标题】:Multithreaded backpropagation多线程反向传播
【发布时间】:2012-02-03 17:07:27
【问题描述】:

我在 VB.NET 中编写了一个反向传播类 - 它运行良好 - 我正在一个 C# 人工智能项目中使用它。

但我家里有 AMD Phenom X3,学校有 Intel i5。而且我的神经网络不是多线程的。

如何将该反向传播类转换为多线程算法?或者如何在其中使用GPGPU编程?还是应该使用任何具有多线程反向传播神经网络的第三方库?

【问题讨论】:

    标签: multithreading artificial-intelligence neural-network gpgpu backpropagation


    【解决方案1】:

    我尝试为 RPROP 批处理实现多个线程,但它似乎总是比使用单个线程慢。我尝试在循环级别“#pragma omp parallel”并通过计算单独线程中的错误、梯度和权重来单独实现。在我的解释中,似乎每个线程中完成的计算太小而无法产生在切换线程和同步结果(互斥体)中完成的计算。我想知道我是否做错了什么?我的结论是,运行 RPROP 单线程会更聪明,同时在单独的线程中处理多个神经元网络。大多数实现通常意味着多个互连的神经网络,所以这是有道理的。

    【讨论】:

      【解决方案2】:

      JeffHeaton has recommend that you use resilient propagation (RPROP) 而不是反向传播。有如何做多线程RPROP(MPROP)的例子:

      这里很难讨论所有细节,所以我建议您阅读那篇文章并查看我参考的书的相关章节。当然,这是假设您熟悉并发编程。

      更新:

      弹性传播通常会优于反向传播 相当大的因素。此外,RPROP 没有必须的参数 被设置。反向传播需要学习率和动量 值被指定。寻找最佳学习率和动量 反向传播的价值可能很困难。这不是必需的 弹性传播。 (来源:Encog Machine Learning

      【讨论】:

      • 你能告诉我为什么 RPROP 比反向传播更好吗?
      • 我已经更新了我的答案,描述了为什么 RPROP 更好,但您不必使用 RPROP。多线程概念与 backprop 相同。
      • 谢谢,那篇文章是否说我应该对主循环内的循环进行多线程处理(哪一次运行意味着一个周期/纪元)?如果这是正确的,每个 epoch 只需 50-200 毫秒即可完成。它不会导致初始化新线程的神经网络变慢吗?
      • 如果我的问题是正确的(在之前的评论中),我应该使用这个:stackoverflow.com/questions/8751324/…
      • 您上面提到的问题的答案都将解决您的问题,但简而言之:您想要创建一些线程并在您想要运行的操作上一遍又一遍地重用它们(即训练你的神经网络)。
      猜你喜欢
      • 2014-08-04
      • 2020-11-23
      • 2021-12-10
      • 1970-01-01
      • 2020-09-10
      • 2012-04-18
      • 2010-12-22
      • 2019-03-18
      • 1970-01-01
      相关资源
      最近更新 更多