神经网络通常具有海量数据和使用并行计算的必要性。它是否使函数式语言更适合构建神经网络?
问问题
747 次
1 回答
3
并不真地。如果您坚持不变性(或更准确地说是避免任何类型的不受控制的副作用),函数式语言通常会使并行化变得微不足道。如果你不这样做,那么在非函数式语言中使事情并行并不容易。在这种情况下,您有两种选择:
使用副作用,但以本地化的方式,因此并行线程之间没有业务:例如,您评估了很多 NN-s,它们中的每一个都可以发生在它自己的线程上(使用线程池的线程数不多于CPU 内核的数量是个好主意)。
对于非本地化的副作用,您需要依靠同步或其他一些方法来控制它。一个这样的例子是 actor 的计算模型(在函数式语言用户中非常流行,但也适用于 java,请参阅http://akka.io/),它通常让您在您的 actor 中产生副作用,但是演员有其严格的规定。这将使您从低级线程处理业务中解放出来。
您应该考虑的另一件事是,拥有一个中等性能的 NN 实现并不太难,拥有一个纯功能性的实现也不是很复杂,但同时做这两者可能是一项具有挑战性的任务。所以 - 除非你有函数式语言的经验 - 我认为用非函数式语言编写并行化 NN 更容易,或者至少以非纯方式编写。
于 2012-10-03T07:51:10.430 回答