当前位置: 首页 > 面试题库 >

如何将多线程应用于反向传播神经网络训练?

松秦斩
2023-03-14
问题内容

对于我的大学项目,我正在创建一个神经网络,可以对信用卡交易是否欺诈的可能性进行分类。我正在用反向传播训练。我用Java编写。我想应用多线程,因为我的计算机是四核i7。花费几个小时进行培训并看到我的大多数核心处于闲置状态,这使我感到烦恼。

但是如何将多线程应用于反向传播?Backprop的工作原理是通过网络向后调整错误。必须先完成一层,然后才能继续进行。有什么方法可以修改程序以执行多核背景程序?


问题答案:

首先,不要使用反向传播。还有许多其他选择。我建议尝试使用RPROP(弹性传播)。对您的反向传播算法的修改不会那么大。您无需指定学习率或动力。实际上,对于神经网络中的每个连接,几乎就像您具有一个单独的,可变的学习率。

至于将多线程应用于反向传播。我刚刚写了一篇有关该主题的文章。

http://www.heatonresearch.com/encog/mprop/compare.html

基本上,我创建了多个线程并划分了训练数据,因此每个线程的数量几乎相等。我正在计算每个线程中的梯度,并将它们累加到一个归约步骤中。如何将梯度应用于权重取决于所使用的传播训练算法,但是权重更新是在关键部分完成的。

如果训练样本的数量远多于权重,则代码在多线程梯度计算中所花费的时间要比关键部分权重更新所花的时间多得多。

我在上面的链接中提供了一些性能结果。它确实确实加快了速度!



 类似资料:
  • 我正在尝试实现一个简单的神经网络。我知道已经有很多可用的库,这不是重点。 我的网络只有3层:一个输入层一个隐藏层一个输出层 输出层有8个神经元,每个神经元代表不同的类。 我知道如何实现feedfoward算法,但我真的很难实现反向传播算法。 这是我到目前为止得出的结论: 我尝试使用Iris数据集进行测试:https://en.wikipedia.org/wiki/Iris_flower_data_

  • 我正在尝试用RELU实现神经网络。 输入层- 以上是我的神经网络结构。我对这个relu的反向传播感到困惑。对于RELU的导数,如果x 有人能解释一下我的神经网络架构的反向传播“一步一步”吗?

  • 我很难构建好的神经网络教学算法,因为有一些人工操作。第一件事:我的目标是教nn-xor函数,我使用sigmoid作为激活函数和简单的梯度下降。前馈很容易,但backprop在某种程度上令人困惑——大多数算法描述中常见的步骤有:1。计算输出层上的错误。2、将此错误传播到有关权重3的隐藏层。更新突触上的权重 所以我的问题:1。偏差也应该更新吗?如果是,如何更新?目前我随机选择偏差[0.5;1]?2.在

  • 考虑具有以下架构的卷积神经网络: Standford的深度学习教程使用以下等式来实现这一点: 然而,在使用这个等式时,我面临以下问题: 我做错了什么?有人能解释一下如何通过卷积层传播错误吗? 简单的MATLAB示例将受到高度赞赏。

  • 我们首先回顾DNN的反向传播算法。在DNN中,我们是首先计算出输出层的$$deltaL:deltaL = frac{partial J(W,b)}{partial zL} = frac{partial J(W,b)}{partial aL}odot sigma{'}(zL)$$ 利用数学归纳法,用$$delta{l+1}$$的值一步步的向前求出第l层的$$deltal$$,表达式为:$$delta

  • 我正在从头开始编写一个backprop神经网络迷你库,我需要一些帮助来编写有意义的自动测试。到目前为止,我已经进行了自动化测试,以验证backprop算法是否正确计算了权重和偏差梯度,但没有测试训练本身是否有效。 到目前为止,我使用的代码可以执行以下操作: 定义一个具有任意层数和每层神经元数的神经网络 鉴于所有这些,我可以编写什么样的自动化测试来确保训练算法被正确实施。我应该尝试近似什么函数(si