在数据库中存储神经网络的最佳实践

8

我正在开发一个使用神经网络的应用程序。目前我在考虑是否将其放入基于SQL(可能是SQL Server)的关系数据库或者图形数据库中。

从性能角度来看,神经网络将非常庞大。

我的问题:

  1. 与图形数据库相比,关系数据库在处理神经网络时是否会受到性能影响?
  2. 哪种图形数据库技术最适合处理大型神经网络?
  3. 像PostGIS这样的地理空间数据库是否可以有效地表示神经网络?
2个回答

10

这取决于模型进展的目的。

  1. 你是否有一个固定的网络结构的不可变想法?例如 Kohonnen 图或现成的模型。
  2. 你是否需要测试几种关系结构,以便在各种结构之间切换。
  3. 你的模型是否将节点视为自由寻找邻居的流体自动机?每个自动机都会开发出一组公共参数的独特特性值,而你需要分析这些值如何影响它们“选择”邻居。
  4. 对于一组固定数量的节点类型/类别,你是否有一组固定的参数?或者预计节点将开发出一组独特的属性和关系?
  5. 你是否经常需要访问每个节点,尤其是嵌入在网络层深处的节点,以分析和相关它们?
  6. 你的网络是否可以看作或可以量化为状态机集合?

免责声明
首先,我要声明我只熟悉 Kohonnen 图。(所以,我承认 Kohonnen 只是任何东西中仅限于入门级的神经网络,并因此受到嘲笑。)以上问题是我多年来在阅读各种神经图表时进行的个人头脑运动的结果。

类别 vs 参数 vs 属性
我们是否可以按照车轮数量或吨位分类车辆?车轮数量或吨位应该是属性、参数还是类别特征。

了解这场辩论是构建你的存储库的关键步骤。这一辩论对于疾病和患者向量尤其重要。我曾经看到由医学专家设计的患者信息关系图表,但显然没有接受过信息科学方面的培训,他们假设每个患者都有一个共同的参数集。为每个患者记录准备了数千列,大部分未使用。当他们超出表格的列限制时,他们会创建一个新的表格,并添加更多稀疏使用的数千列。

  • 类型 1:所有节点具有共同的参数集,因此可以将节点建模成具有已知列数的表格。

  • 类型 2:有各种类别的节点。节点的类别数量是固定的。每个类别都有一组固定的参数。因此,每个类别的节点都有一个特征表格。

  • 类型 3:没有意图把节点归类。每个节点都可以自由地开发和获取自己的独特属性集。

  • 类型 4:有固定数量的节点类别。每个类别中的节点可以自由地开发和获取其自己的独特属性集。每个类别都有一组受限制的属性,节点可以获取这些属性。

请阅读EAV模型,以了解参数与属性的问题。在EAV表中,一个节点只需要三个特征列:节点ID、属性名称和属性值。
然而,在技术约束下,属性可以是数字、字符串、可枚举或类别。因此,还需要四个属性表,每个值类型一个,再加上节点表:
- 节点ID - 属性类型 - 属性名称 - 属性值 顺序/链接访问与哈希/直接地址访问 您是否需要直接访问单个节点,而不是遍历结构树以快速到达节点?
您是否需要查找具有特定特征(一组属性)的节点列表,无论它们在网络拓扑上的位置如何?您是否需要对网络节点执行分类(也称主成分分析)? 状态机 您是否希望将网络的区域视为状态机集合?
状态机是非常有用的量化实体。状态机量化可以基于邻域相似性和关系形成一系列节点的经验实体。
与其试图理解和跟踪数百万个节点的个体行为,不如将它们聚合成相似性区域。并跟踪这些区域的状态机流程。 结论 这是我的建议。您应该最初使用完全关系型数据库。原因是关系型数据库和相关的SQL提供了非常自由的关系视图。通过在关系模型上使用SQL,您可以查询或关联您不知道存在的关系。
随着实验的进行,您可能会发现某些关系建模更适合网络图形存储库,那么您应该将模式的这些部分移动到这样的适当存储库中。
在最终状态下,我会维护一个双模信息存储库。您可以维护一个关系型存储库来跟踪节点及其属性。因此,您将动态变化的结构存储在网络图形存储库中,但每个节点都引用关系数据库中的节点ID。关系数据库允许您根据属性及其值查询节点。例如:
SELECT id FROM Nodes a, NumericAttributes b
WHERE a.attributeName = $name
  AND b.value WItHIN $range
  AND a.id = b.id

我在思考,也许可以使用Hadoop代替传统的网络图数据库。但是,我不知道Hadoop对于动态关系的适应能力如何。我的理解是,Hadoop适用于一次写入,多次读取。然而,一个动态神经网络在频繁的关系变化中可能表现不佳。而关系表建模网络关系则不够高效。
尽管如此,我相信我只是提出了您需要考虑的问题,而不是为您提供明确的答案,特别是对于许多概念有生疏的情况下。

0

可以使用自引用外键将树存储在表中。 我假设需要存储的仅有两个是拓扑和权重; 这两者都可以存储在扁平化的树结构中。 当然,这可能需要许多递归选择,在您的RDBMS上,这取决于本地实现的痛苦程度(因此需要许多SQL查询来实现)。 我无法评论比较,但希望这有助于关系观点:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接