当前位置:  开发笔记 > 人工智能 > 正文

函数式编程中的大数据结构

如何解决《函数式编程中的大数据结构》经验,为你挑选了1个好方法。

我是功能编程的新手.

我有一个巨大的神经网络,有数千个神经元,神经元之间的每个连接都有它的重量.我必须经常更新这些权重,每次学习会话数千次.

FP仍适用于此吗?我的意思是在fp中我们不能修改变量,只能返回不改变先前值的新变量.这是否意味着我必须在每次重量更新时重新创建整个网络?



1> Jon Harrop..:

FP仍适用于此吗?

你当然可以用功能性的渐近算法效率来编写它,但你不太可能获得10倍的体面命令式解决方案的性能,因为纯粹的函数式编程使得很难有效地使用CPU缓存.

我的意思是在fp中我们不能修改变量,只能返回不改变先前值的新变量.这是否意味着我必须在每次重量更新时重新创建整个网络?

不,有两个原因:

    纯功能数据结构可以有效地更新,因为它们将大型结构(例如散列表)分解为许多小的递归定义结构(例如,平衡二叉树).当您更新不可变树中的单个节点时,您将从路径中的每个节点复制数据从根到目的地,但通过引用安全返回所有其他分支,因为它们不能在您之下更改,因为它们是不可变的.所以你只做O(log n)工作而不是O(n)工作.

    纯功能数据结构通常提供的功能map允许以相同的方式更新每个元素,并通过复制源树的结构来避免重新平衡.所以n次更新的时间是O(n)而不是O(n log n).

所以你应该能够达到类似甚至相等的渐近时间复杂度,但从绝对意义上说,你将使用几倍于空间和时间的必要解决方案.我在我的Visual F#2010 for Technical Computing一书中详细描述了这些基础知识,并为OCaml期刊撰写了人工智能:神经网络(2010年5月8日)的文章.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有