1. 项目概述:当机器学习遇见认知心理学

最近在捣鼓一个挺有意思的交叉领域项目,我把它叫做“基于非公理推理系统(NARS)的机器学习心理学”。听起来有点绕,但核心目标其实很直接:我们想造一个智能体,让它能像巴甫洛夫的狗或者斯金纳箱里的小白鼠那样,通过“刺激-反应-强化”这套经典的操作性条件反射机制来学习,而不是单纯地靠海量数据去拟合一个函数。这个想法的源头,是我在思考当前主流机器学习(尤其是深度学习)的一个根本性局限:它们太依赖静态的、标注好的数据集了,学习过程像个黑箱,缺乏一个能动态适应环境、能解释自己为什么这么做的“心智”模型。

NARS(Non-Axiomatic Reasoning System,非公理推理系统)恰恰提供了一个绝佳的理论框架。它不是一个具体的算法库,而是一个关于通用智能应该如何运作的形式化理论。它的核心是“意义公设”和“经验导向的推理”,认为智能体的所有知识和信念都应该源于其与环境的交互经验,并且这些信念的真值(或置信度)会随着新证据的输入而动态调整。这和我们大脑的学习机制何其相似!我们不是生来就带着一本真理手册,而是在不断试错、接收反馈(奖励或惩罚)的过程中,建立起对世界的认知和应对策略。这个项目,就是试图用NARS的计算模型,去具象化心理学中的操作性条件反射理论,构建一个能真正“从经验中学习”的智能体原型。

这个智能体将生活在一个简化的模拟环境中,它会有一些基本的“需求”(比如维持某个内部状态值),并能执行几种简单的“动作”。环境会对它的动作给出反馈(正强化或负强化)。智能体的目标不是预测下一个状态,而是通过NARS的推理机制,自主地形成“在什么情境下做什么动作能获得好结果”的信念,并随着经验的积累不断优化这些信念。这不同于强化学习,虽然目标相似,但内在机制截然不同。强化学习依赖于一个预设的奖励函数和值函数迭代,而我们的NARS智能体,其“奖励”概念是内生于它的需求体系中的,学习过程是通过逻辑推理和信念修正来完成的,每一步都有(至少在理论上)可追溯的推理链条。这对于实现可解释AI、发展更接近生物学习本质的机器学习模型,是一次有趣的探索。

2. 核心理论框架拆解:NARS如何承载操作性条件反射

要理解这个项目,必须吃透两个基石:NARS的运作原理,以及操作性条件反射的心理模型。然后我们需要像搭积木一样,把后者映射到前者的计算框架里。

2.1 非公理推理系统(NARS)精要

NARS由王培教授提出,其核心思想是“智能即在知识和资源相对不足的条件下适应环境的能力”。这直接点明了其与基于公理的形式系统(如数学逻辑)和基于大数据统计的模型之间的根本区别。NARS有几个关键构件:

  1. 概念与术语 :NARS用 <S, P, copula, truth> 这样的四元组来表示一个“陈述”。例如 <{cat}, {animal}, →, (0.9, 0.5)> 可以理解为“猫是动物”这个判断,其真值用频率(frequency)和信度(confidence)两个参数 (f, c) 表示。 f=0.9 表示历史经验中90%的证据支持该判断, c=0.5 表示这个频率估计的可靠程度。所有知识都用这种带有“主观真值”的陈述句网络来存储。
  2. 推理规则 :NARS定义了一套形式化的推理规则,如演绎(Deduction)、归纳(Induction)、溯因(Abduction)等。关键点在于,每次推理都会根据输入陈述的真值,通过一套公式计算出输出陈述的真值。例如,从“猫是哺乳动物”(f1, c1)和“哺乳动物是动物”(f2, c2),通过演绎规则可以得到“猫是动物”,其真值 (f, c) (f1*f2, c1*c2) 的函数。这意味着知识的真值不是固定的,而是在推理流中动态传播和演化的。
  3. 经验与信念更新 :这是NARS的灵魂。当系统接收到一个新的证据(也是一个带真值的陈述)时,如果它与已有信念中的某个陈述对应,NARS会用“真值函数修正”规则来更新原有信念的 (f, c) 。公式大致是 f_new = (f_old * c_old + f_evidence * c_evidence) / (c_old + c_evidence) c_new = c_old + c_evidence 。这完美模拟了“随着证据积累,信念不断调整并趋于稳定”的过程。高信度的旧信念不易被单次新证据改变,这体现了信念的惯性。
  4. 目标与决策 :NARS有“目标”的概念,目标也是带有真值(可理解为渴望度或紧迫度)的陈述。系统通过推理,寻找能达成目标的“方法”(另一个陈述),并最终转化为可执行的“操作”。决策时,它会评估不同操作对达成目标的预期效用,这个效用同样是基于相关信念的真值计算出来的。

注意 :NARS的真值计算和信念更新公式是其区别于概率图模型(如贝叶斯网络)的关键。它不假设完备的概率空间,而是采用一种基于经验频率和信度的主观度量,更贴近资源有限的智能体在实际中的推理方式。

2.2 操作性条件反射的计算机理

操作性条件反射,由斯金纳系统阐述,包含几个要素: 辨别刺激(SD) 操作行为(R) 强化刺激(SR) 。其核心规律是:一个行为如果之后伴随着强化物(正强化给予奖励,负强化移除厌恶刺激),那么该行为在未来出现的概率就会增加。

在计算建模中,我们需要将其离散化和形式化:

  • 情境(S) :智能体感知到的环境状态的一个抽象表示,对应“辨别刺激”。在我们的项目中,可以是一个状态编码(如 location=roomA, light=on )。
  • 操作(A) :智能体可以执行的一个原子动作,对应“操作行为”。如 move_left , press_lever
  • 效用(U) :动作带来的结果对智能体内部需求满足程度的度量,对应“强化刺激”的强度。正强化对应U>0,负强化(惩罚)对应U<0。
  • 学习机制 :形成并强化“在情境S下执行操作A,会导致高效用U”的联结。

2.3 关键映射:用NARS的“语言”描述反射学习

现在,我们把操作性条件反射的要素“翻译”成NARS能理解的形式。这是整个项目的设计核心。

  1. 将“情境-操作-结果”编码为NARS陈述

    • 我们创建一个复合概念 S_A ,表示“在情境S下执行了操作A”这个事件。
    • 我们有一个表示“好结果”或“需求满足”的概念 G
    • 那么,一次成功的学习经验(在S下做A得到了奖励),就应该在NARS的知识库中形成或强化一个陈述: <{S_A}, {G}, ⇒, (f_init, c_init)> 。这里的 是蕴含关系连接词,表示“S_A导致G”。初始真值 (f_init, c_init) 可以根据本次效用的强度来设定。例如,一次大的正强化可以对应较高的初始频率 f
  2. 将“强化”实现为NARS的信念更新

    • 每次智能体执行 (S, A, U) 后,它都会生成一个证据陈述 E: <{S_A}, {G}, ⇒, (f_evi, c_evi)> 。其中 f_evi 直接由效用U映射(例如,通过一个sigmoid函数将U映射到[0,1]区间), c_evi 可以是一个固定的小值,表示单次经验的可靠性有限。
    • NARS系统将这个证据 E 输入。如果知识库中已有关于 <{S_A}, {G}, ⇒, ...> 的信念 B ,则触发真值修正,按照前面提到的公式更新 B (f, c) 。如果尚不存在此信念,则 E 可能作为一个新信念被加入(取决于系统设置)。
    • 这就是“强化”的计算本质 :一次正经验(U>0)会提高对应信念的频率 f 和信度 c ,使得“在S下做A会导致好结果”这个想法变得更牢固、更可信。
  3. 将“决策”实现为基于信念的推理

    • 当智能体再次处于情境S时,它有一个内在目标“达成G”。
    • NARS的推理引擎会从目标 G 和知识库中的信念出发进行反向推理(溯因)。它会寻找那些结论是 G 的蕴含式。此时,之前被强化的信念 <{S_A}, {G}, ⇒, (f_now, c_now)> 就会被激活。
    • 系统会计算执行 A 的预期价值,这通常与信念的真值 (f_now, c_now) 相关(例如, f_now * c_now 可以作为一个简单的期望效用估计)。
    • 最终,系统从所有可能的操作中,选择预期价值最高的一个执行。这就完成了从“习得的联结”到“行为选择”的闭环。

通过这一套映射,我们就在NARS的形式框架内,重建了一个可计算的操作性条件反射学习模型。智能体不再是被动地更新Q表或策略网络参数,而是主动地构建、修正一个关于“行动-结果”关系的符号化信念网络,并通过逻辑推理来指导行为。

3. 智能体设计与环境构建实操

理论打通后,我们需要构建一个具体的实验场。为了让智能体的学习过程清晰可见,我们设计一个尽可能简单但能体现核心机制的环境。

3.1 简易网格世界环境设计

我们构建一个5x5的网格世界。智能体(@)初始位于中心(2,2)。世界中有一个“食物”源(F)固定在(4,4),一个“电击”区(Z)固定在(0,0)。智能体有四个移动动作:上(W)、下(S)、左(A)、右(D)。此外,为了体现“操作”性,我们增加一个特殊的“按钮”(B)在(2,4),按下按钮(动作 Press )本身无直接奖励,但会改变环境规则。

  • 智能体内部状态 :定义一个“能量”值,初始为50。每移动一步消耗1能量,吃到食物增加30能量,进入电击区立即减少15能量并结束本轮(如果能量<=0,智能体“死亡”,本轮结束)。
  • 环境反馈(强化刺激)
    • 移动到食物所在格: U = +30 (强正强化)
    • 移动到电击区所在格: U = -15 (强负强化)
    • 移动到空白格: U = -1 (轻微负强化,模拟移动消耗)
    • 关键操作设计 :当按钮处于“未按下”状态时,食物是“隐形”的(智能体移动到(4,4)也得不到奖励)。只有当智能体移动到(2,4)并执行 Press 动作后,按钮状态变为“已按下”,食物在本次运行中变为“显形”,此后移动到(4,4)才能获得奖励。按下按钮的动作本身给予 U = +0.5 的微小正反馈(探索鼓励)。

这个设计包含了操作性条件反射的经典元素:

  1. 简单联结 :移动->接近食物/电击。
  2. 工具性行为 Press 按钮是一个典型的工具性操作,它本身奖励微薄,但其后果(使食物可得)价值巨大。智能体需要学习这种间接的因果关系。
  3. 情境辨别 :按钮按下前后的世界,对于“移动到(4,4)”这个行为的结果是不同的。智能体需要学会区分“按钮未按下”和“按钮已按下”这两种情境(S)。

3.2 NARS智能体的核心实现模块

我们基于一个开源的NARS实现(例如OpenNARS for Applications, ONA)来构建智能体。主要实现以下模块:

  1. 感知模块 :将环境状态(智能体坐标、按钮状态、周围一格内是否有特殊物体)编码成NARS的术语(Term)。例如, (pos_2_2, button_off) 。这里的关键是编码的粒度,太细会导致概念爆炸,太粗会无法区分重要情境。我们从简,将坐标离散化为 pos_x_y ,按钮状态为 button_on/off
  2. 需求与目标生成模块 :我们定义智能体的核心需求是“维持高能量”。将其转化为NARS的目标陈述: <(*, Self), {high_energy}, -->, (1.0, 0.9)> ,表示“自我拥有高能量”是一个渴望度为1.0、信度0.9的目标( (*, Self) 是表示自我的特殊术语)。这个目标会被持续输入NARS系统。
  3. 动作-结果经验编码器 :这是学习的关键。在每个时间步t,智能体执行动作A_t,从状态S_t转移到S_{t+1},并获得效用U_t。编码器需要做:
    • S_t A_t 组合成事件概念 Event_S_t_A_t
    • 根据 U_t 的正负和大小,生成结果概念 Good_Outcome Bad_Outcome (也可以用一个带强度的概念 Outcome_Value )。
    • 生成证据陈述: <{Event_S_t_A_t}, {Good_Outcome}, =>, (f_evi, c_evi)> 。其中 f_evi = sigmoid(U_t) c_evi = 0.1 (单次经验信度低)。
    • 将此陈述作为新输入送入NARS。
  4. 决策模块 :在每一步,感知模块将当前状态S编码为术语输入NARS。NARS系统以“达成 high_energy ”为目标进行推理。推理过程会激活知识库中与当前状态 S 和各类动作 A 相关的信念。我们需要从NARS输出的候选操作中,选择一个来执行。一个简单的策略是:
    • 收集所有形如 <{Event_S_A}, {Good_Outcome}, =>, (f, c)> 的信念。
    • 计算每个动作A的期望效用得分: score(A) = f * c
    • 以softmax或ε-greedy策略选择动作(需引入探索)。
  5. NARS系统配置 :需要设置合适的参数,如概念激活阈值、推理步数限制、真值衰减因子等。这些参数会影响学习速度和稳定性。例如,真值衰减因子可以让久未证实的信念逐渐被遗忘,模拟记忆消退。

实操心得 :在实现事件编码时,切忌生成过于独特的术语。例如,不要为每个绝对坐标生成独立术语,而应该使用相对关系,如 (near_food, button_off) 。否则,智能体将无法进行泛化,学到的知识只能用于完全相同的格子,学习效率极低。这对应了心理学中的“刺激泛化”能力,是智能体从有限经验中提取一般规律的关键。

4. 训练流程、核心环节与参数调试

有了智能体和环境,我们就可以开始运行实验,观察这个“数字小白鼠”是如何学习的。

4.1 单轮训练流程详解

一轮训练(一个episode)从智能体出生(能量50,位置(2,2),按钮关闭)开始,到能量耗尽或达到最大步数(如200步)结束。单步循环如下:

  1. 感知 :智能体获取当前坐标、按钮状态、视野内物体信息,编码成NARS术语集 CurrentStateTerms
  2. 目标注入 :将目标 <(*, Self), {high_energy}, -->, (1.0, 0.9)> 送入NARS工作空间。
  3. 推理与决策
    • CurrentStateTerms 作为新感知输入NARS。
    • 启动NARS进行固定周期(如100个推理周期)的推理。在此期间,系统会基于 CurrentStateTerms 和已有信念,推导出可能达成 high_energy 目标的操作。
    • 推理结束后,决策模块扫描NARS输出的“操作命令”(在ONA中通常是 ^operator 形式的语句),或从活跃的“事件-好结果”信念中提取候选动作。
    • 根据得分和探索策略(例如,80%概率选最高分,20%概率随机选),选择动作 A_t
  4. 执行与环境反馈 :执行 A_t ,环境返回新状态 S_{t+1} 和效用 U_t
  5. 学习(信念更新)
    • 经验编码器将 (S_t, A_t, U_t) 转化为NARS证据陈述 E
    • E 作为新输入送入NARS。NARS内部会将其与已有知识库中的对应信念进行真值修正,或作为新信念存储。
  6. 状态更新 t = t + 1 ,回到步骤1。

4.2 关键学习环节的NARS内部观察

为了调试和理解,我们需要监控NARS知识库的关键变化。以下是一个理想的学习过程片段:

  • 初期(随机探索) :智能体随机移动,偶尔撞到电击区(Z),获得强负效用。我们会在知识库中看到类似以下的信念被建立并强化(真值表示为(f, c)):
    • <{pos_0_0_move_up}, {Good_Outcome}, =>, (0.0, 0.5)> (因为从(0,0)向上移动可能还是负收益)
    • 更可能形成的是: <{Event_at_Z}, {Bad_Outcome}, =>, (0.8, 0.6)> (接近Z导致坏结果)
  • 中期(发现关联) :智能体偶然来到食物点(4,4)但未按按钮,无奖励。后来它偶然按了按钮(B),再去(4,4)获得巨大奖励。这是突破性时刻。NARS中会先后形成:
    1. <{pos_2_4_press}, {Good_Outcome}, =>, (0.55, 0.1)> (按按钮有微弱好结果,来自+0.5的奖励)。
    2. 在按钮按下( button_on )的情境下, <{pos_4_4_move_left}, {Good_Outcome}, =>, (0.0, 0.1)> (假设它从食物点向左走,无直接奖励)。
    3. 关键推理 :系统可能会通过归纳推理,将“按按钮”和随后“在(4,4)获得奖励”这两个在时间上接近的事件关联起来。虽然NARS的归纳规则需要更多样本,但在设计时我们可以增强这种时空邻近事件的关联性。最终,我们希望形成一个 高阶信念
      • <{button_off_press}, {button_on}, =>, (0.9, 0.3)> (按按钮导致按钮开启)
      • <{button_on_pos_4_4}, {Good_Outcome}, =>, (0.95, 0.5)> (按钮开启时在(4,4)有好结果)
    4. 通过演绎推理,系统可以潜在推导出: <{button_off_press}, {Good_Outcome}, =>, (0.85, 0.2)> 。这意味着智能体“理解”了按按钮的长期价值。
  • 后期(策略稳定) :智能体学会策略:如果按钮关闭( button_off ),首要目标是走向(2,4)并按按钮。按钮开启后,首要目标是走向(4,4)获取食物。同时,坚决避开(0,0)。相应的信念真值 (f, c) 会变得很高且稳定。

4.3 核心参数调试与影响

NARS系统的行为对参数敏感,调试是项目难点。

参数名 (示例) 功能描述 设置过低的影响 设置过高的影响 调试建议
概念激活阈值 决定一个概念/信念能否进入工作记忆参与推理 系统反应迟钝,重要信念不被激活 工作记忆充斥过多无关信念,推理效率低下,易分心 从默认值开始,观察智能体对关键刺激(如食物、电击)的反应速度。
推理周期数/步数限制 单次决策允许的最大推理量 推理不充分,决策短视,难以发现复杂因果链 决策延迟大,计算开销大,可能陷入无效推理循环 与任务复杂度匹配。简单网格世界,100-200步可能足够;复杂任务需增加。
真值衰减因子 信念真值(尤其是信度c)随时间自然衰减的速率 信念僵化,无法忘记过时或错误的知识 记忆消退太快,难以形成稳定策略,总是从头学起 对于动态环境可设高一些(如0.99/步),静态环境设低一些(如0.9999/步)。
单次证据信度 (c_evi) 每次经验输入时,其证据陈述的初始信度 学习速度极慢,需要大量重复才能巩固信念 单次经验就能大幅改变牢固信念,导致策略不稳定、易受噪声干扰 通常设为较小的值(如0.05-0.2),强调经验的累积性。重大事件(如死亡)可临时提高。
探索率 (ε) 决策时随机选择动作的概率 探索不足,容易陷入局部最优(如只学会躲电击,找不到食物) 探索过度,策略无法收敛,表现随机 可采用衰减策略,训练初期高(如0.3),后期逐渐降低(如0.05)。

调试是一个迭代过程。需要结合智能体的“行为表现”(如平均每轮存活步数、获得奖励次数)和“内部信念状态”(导出关键信念的真值变化曲线)来综合判断。例如,如果智能体始终学不会按按钮,可能需要检查:1) Press 动作的微小正奖励是否有效编码;2)NARS的归纳推理参数是否允许它建立“按钮状态改变”与“后续奖励”之间的跨时序关联;3)探索率是否足够让它有机会执行 Press 这个非移动动作。

5. 典型问题、排查记录与进阶思考

在实际搭建和运行过程中,会遇到许多预料之中和意料之外的问题。

5.1 常见问题与排查技巧实录

问题1:智能体行为完全随机,毫无学习迹象。

  • 排查
    1. 检查感知编码 :确保环境状态被正确编码为NARS能识别的术语。在NARS日志中搜索输入的感知语句,看是否出现。
    2. 检查目标注入 :确认“维持高能量”等目标是否被持续输入。没有目标,NARS就没有推理的方向。
    3. 检查经验输入 :确认动作执行后的 (S, A, U) 三元组是否被正确转化为证据陈述并输入NARS。查看日志中是否有新证据触发的真值修正记录。
    4. 检查决策链路 :确认决策模块是否能正确地从NARS的输出中解析出“推荐动作”。可能是输出格式不匹配或解析逻辑有误。
  • 解决 :通常问题出在接口层。编写详细的日志,打印每个环节的输入输出数据,与NARS系统本身的输入输出格式进行严格比对。

问题2:智能体学会了一些简单反应(如躲开电击),但始终学不会“按按钮”这种工具性行为。

  • 排查
    1. 探索问题 Press 动作可能因为探索率ε太低或动作选择策略 bias 而极少被执行。增加探索率,或为 Press 动作设置一个初始的好奇心权重。
    2. 信用分配问题 :按按钮的奖励(+0.5)与后续吃到食物的奖励(+30)在时间上是分离的。NARS默认的推理机制可能无法自动将远端的奖励归因于之前的动作。
  • 解决
    • 引入 资格迹(Eligibility Trace) 的简化概念。在NARS中,可以为最近发生的事件序列打上一个临时的“标记”,当远端奖励到来时,不仅更新当前状态-动作的信念,也回溯更新这个“标记”序列中所有状态-动作对的信念。这需要在经验编码器上做额外设计。
    • 设计更丰富的中间反馈。例如,按下按钮后,环境可以返回一个特殊的“状态改变”信号(如 world_changed ),并将其编码为一个具有中等正效用的“好结果”。这样,按按钮就直接与一个明确的“好结果”关联,而这个“好结果”又与最终的大奖励通过信念网络间接关联,降低了学习难度。

问题3:信念系统混乱,前后矛盾的知识很多,导致决策摇摆不定。

  • 排查 :检查真值更新公式和信度 c 的增长。如果单次经验的 c_evi 设置过高,或者真值衰减因子设置过低,可能导致早期的一些随机经验(比如偶然在电击区旁边移动没出事)形成了高信度的错误信念,后期难以纠正。
  • 解决 :调低单次证据信度 c_evi (如从0.2降到0.05),提高真值衰减因子(让旧信念缓慢遗忘)。确保负强化(惩罚)的证据也能被同等强度地输入系统,以纠正错误行为。

5.2 从项目实践中获得的深层体会

经过这个项目的构建与调试,我对“机器学习心理学”这个交叉领域有了更具体的认识:

  1. 符号与子符号的桥梁 :NARS提供了一个独特的视角。它用符号(术语、陈述)来表示知识,但用子符号(真值对 (f, c) )来量化这些知识的可信度和重要性。这使得它既能进行逻辑推理,又能进行不确定性的、基于经验的量化学习。我们的项目正是利用这一点,将操作性条件反射这种看似“子符号”的联结学习,用符号推理的框架实现了出来。
  2. 学习与推理的一体化 :在深度强化学习中,学习(网络权重更新)和推理(前向传播选择动作)是分开的、不同质的两个过程。而在我们的NARS智能体中,学习(信念真值更新)和推理(基于信念的逻辑推导)是同一个引擎下的两种操作模式,它们使用共同的知识表示。这更接近人类“在思考中学习,在学习后思考”的连续认知过程。
  3. 可解释性的天然优势 :这是NARS类系统最吸引人的地方。我们可以随时“审问”智能体:“你为什么想去按按钮?”理论上,我们可以追溯它的推理链条:因为我有目标G(高能量),我相信 <{button_off_press}, {button_on}, =>, (0.9, 0.3)> ,并且相信 <{button_on_pos_4_4}, {Good_Outcome}, =>, (0.95, 0.5)> ,通过演绎我推断按按钮有助于达成G。这种解释是基于它自己构建的信念,而不是神经网络中难以解读的激活模式。
  4. 效率与泛化的权衡 :NARS智能体在简单网格世界中的学习速度,远不如一个精心调参的DQN(深度Q网络)。这是符号系统在起步阶段的天然劣势。然而,它的潜力在于 泛化和抽象 。一旦它学会了“按按钮可以开启好东西”这个概念,如果环境变成“拉杠杆”或“踩踏板”,只要我们将这些操作与“按钮”归为同一类“工具性操作”,它可能更快地迁移知识。这是基于统计的模型难以做到的。

这个项目就像一个概念验证原型,它笨拙、缓慢,但清晰地展示了一条不同于主流深度学习的AI路径:一种基于经验构建内部符号模型,并通过逻辑推理来决策的路径。它提醒我们,在追求大数据和大算力的同时,那些源于心理学和认知科学的古老智慧,依然能为机器智能的探索提供宝贵的灵感。

更多推荐