多层 OpenNARS

理论上,AGI 并不一定要明确分层,且目标的正反推理/激活和反馈,也能慢慢形成某些“层次”,但并不一定有泾渭分明的层。

本篇想讲的是,实践中,我们可以探索稍微不同的路径,即,明确分层且由多个 NARS 相互合作构成的一套叠加系统(为了更好的适配分层,可能每个 NARS 需要做一些功能的增减)。

从脊椎动物的神经元分布,我们可以大略的看到神经元向上汇聚的趋势(当然,这只是一种猜测)

从公司、企业运营角度看,我们也时常看到合理的分层能够让管理者卸下包袱,更专注于把控企业的方向舵。

从各种心理、生理、文学角度看,我们更不缺各种分层理论,比如马斯洛需求层次理论。

由于 AIKR plus (智能体、以及它的 设计者 都同时具有不足预设),也就是说,知识和资源不足的情况下,明确分层使得设计者更容易对海量的硅基神经元节点进行观察和调优

目前 OpenNARS 的记忆体是一个单一的 Bag.java 结构,这样会带来一些小困扰:

  1. 目标节点、注意力激活节点在这个单一记忆体中会占据大量的计算资源,其它节点虽然也能获得计算时间,但比较难。
  2. 如果降低目标节点或注意力节点的权重,给其它中间层节点让道,这样又容易让目标不持久或注意力涣散,只能采取定时激活目标等办法。
  3. 按目前的策略,通过伪随机进行资源均摊,虽然也有不错的效果,但没有直接利用多核多线程和多层次来得更直观。
  4. 虽然 Bag.java 中也有 level,但各种类型的节点都在往最高层挤,使得设计者很难区分这些节点那些更接近目标层,哪些更接近行为层。
  5. 如果用多线程直接操作整个记忆体,虽然也是很好的方案,但在视觉可视化上,依然不够直观,不利于监控和调试。
  6. 即便是把通道当做一个层,这个层如何呈现,依然比较模糊,我们可能仍然需要一个明确分层的机制。

最直接的办法就是,让目标、知识、操作三种节点分别运行在不同的层面上,并完整的呈现在设计者的屏幕中,每个层都可以冻结或运行,放慢或加快,放大或缩小,调参或固化。

举例来说,如果运行在一个 32 核的硬件系统上,那么可以让这 32 核分别控制 32 层,目标节点 单独占据顶层或某些特定层,中间知识 占据中间的 30 层,操作/行为 则单独占 1 层。 当然,实际比例不一定是这样,但只要分层之后,系统的可视化才有了依托。

这里需要特别和反复说明的是,分层的最主要目的,并不是单纯为了增强性能,也不是为了分层而分层,而是为了一些很明确的目的:

  1. 让设计者更清楚特定节点的位置,哪些节点靠近决策层,哪些节点靠近感知行为层。
  2. 让设计者更容易地解读白盒系统中的每一层。
  3. 让算力的分布情况更直观,以便于设计者及时调整系统算力分布的相关参数。
  4. 这其实也是一个实验,看看 NARS 中的节点除了具有适应环境的能力,是否也有能力适应设计者人为构筑的疏导栅栏和分层格子。

最后,我手工画一下不分层、分层在视觉上的差异,这样可能会比较直观:

不分层

分层

分层的效果,看上去是不是有点华而不实?但解读分析起来是不是更直观?

不过我还要解答一些关键问题(或者说反驳):

人的思绪是千头万绪的,而人脑之中的神经元,也并没有这么严格分层,或者说,看不到如此明显、简单的分层,如何证明这样能诞生智能?

跨层有没有必要连接,如何跨层链接?

这些话题我也在探索中,还没有完美答案,后面再抽时间写写我对这些问题的想法,可能另起一文,可能修改此文。

Last Updated:
Contributors: poerlang