神经网络中的神经元应该是异步的吗?

时间:2016-07-07 16:17:43

标签: machine-learning erlang neural-network artificial-intelligence

我正在设计一个神经网络,并试图确定我是否应该以这样的方式编写它,即每个神经元在Erlang中都是它自己的“进程”,或者我是否应该使用C ++并在一个线程中运行网络(我仍然会通过在自己的线程中运行每个网络的实例来使用我的所有核心。)

是否有充分理由放弃Erlang提供的异步神经元的C ++速度?

5 个答案:

答案 0 :(得分:1)

我不确定我明白你要做什么。人工神经网络基本上由节点之间的连接的权重表示。节点本身并不孤立存在;它们的值仅在给定输入时通过前向传播算法计算(至少在前馈网络中)。

用于更新权重的反向传播算法肯定是可并行化的,但这似乎并不是您所描述的。

答案 1 :(得分:1)

在神经网络(NN)中使用神经元的有用之处在于,要有一个多维矩阵,您需要处理这些系数(训练它们,改变它们,一点一点地调整它们,以便它们适合以及你想要解决的问题)。在此矩阵上,您可以应用数值方法(经过验证且有效),以便在可接受的时间内找到可接受的解决方案。

恕我直言,有了NN(即采用反向传播训练方法),目标是建立一个在运行时/预测时和训练时都有效的矩阵。

我没有意识到拥有异步神经元的意义。它会提供什么?它会解决什么问题?

也许你可以清楚地解释一下你会解决什么问题让他们异步?

我的确在颠覆你的问题:你对传统NN技术的异步性有什么期望?

答案 2 :(得分:1)

这取决于您的用例:神经网络计算模型和您的执行环境。以下是Plotnikova等人最近的一篇论文(2014),该论文使用“Erlang和平台Erlang / OTP以及演员模型函数的预定义基础实现”和作者开发的新模型,他们将其描述为“一个神经元 - 一个过程”使用“万有引力搜索算法”进行训练:

http://link.springer.com/chapter/10.1007%2F978-3-319-06764-3_52

简要引用他们的摘要,“本文开发了该算法的异步分布式修改并提供了实验结果。所提出的架构显示了具有不同环境参数的分布式系统的性能提升(高性能集群和本地网络具有慢速互连总线)。“

此外,这里的大多数其他答案都参考了一个计算模型,该模型使用矩阵运算作为训练和模拟的基础,本文作者通过比较说,“这种情况下神经网络模型[即基于矩阵运算]变得完全数学及其原始性质(来自神经网络生物原型)迷失了“

测试在三种类型的系统上运行;

  1. IBM群集表示为15个虚拟机。
  2. 部署到本地网络的分布式系统表示为15台物理机。
  3. 混合系统基于系统2,但每台物理机器都有四个处理器核心。
  4. 它们提供了以下具体结果:“所提出的结果证明了引力搜索的良好分布能力,特别是对于大型网络(801和更多神经元)。加速度几乎线性地取决于节点数。如果我们使用15个节点,我们可以大约加速八次训练过程。“

    最后,他们总结了他们的模型,“该模型包括三个抽象级别:NNET,MLP和NEURON。这种架构允许在一般级别上封装一些一般特征,并且在特殊级别上特定于所考虑的神经网络特征。在级别之间传递可以区分训练和模拟算法的同步和异步部分,从而改善资源的使用。“

答案 3 :(得分:0)

我认为NN的异步计算可能证明对(识别)性能有益。事实上,使用dropout的结果可能相似(可能不太明显)。

但异步NN的直接实现会慢得多,因为对于同步NN,你可以使用线性代数库,它可以很好地利用矢量化或GPU。

答案 4 :(得分:0)

这取决于你的目标。

神经网络的

第二代是同步的。它们在没有延迟的情况下基于输入 - 输出执行计算,并且可以通过增强或反向传播来训练。如果您正试图通过机器学习,大量文献和实例来解决问题,那么这是当前流行的ANN类型,也是最容易上手的。

神经网络的

第三代(所谓的" Spiking Neural Networks")是异步的。信号作为尖峰事件的链式反应在内部通过网络传播,并且可以创建interesting patterns and oscillations depending on the shape of the network。虽然他们更接近地模拟生物大脑,但他们也是harder to make use of in a practical setting