文章目录
⏱️ 预计阅读时间:30-40分钟
🎯 学习目标:学会怎么用逻辑规则推理,怎么用概率处理不确定信息,怎么用经验解决新问题
📚 核心结论(塔尖):符号推理+不确定性推理+案例推理,根据问题特点选择
想象一下,你想基于已有知识进行推理。不同的问题需要不同的推理方法。符号推理就像数学证明,从已知的公理和定理推导出新的结论,确定无疑;不确定性推理就像天气预报,根据已知的天气条件预测下雨的概率,有不确定性;案例推理就像医生看病,回忆过去见过的类似病例,参考之前的诊断和治疗方案。
那么,怎么用符号表示和逻辑推理实现确定性推理?怎么用概率方法处理不确定信息?怎么基于过去的经验解决新问题?这些正是本文要解决的核心。
一、符号推理:基于逻辑规则的确定性推理
1. 知识表示:将知识转换为计算机可处理的形式
符号推理通过符号表示(逻辑表示法、产生式系统、框架表示法、知识图谱)将知识转换为计算机可处理的形式,就像把自然语言翻译成计算机能理解的形式语言。
比如,你想让计算机理解"如果今天下雨,那么地面会湿"这个知识。用不同的表示方法:
-
逻辑表示法使用形式化的逻辑语言(命题逻辑、一阶逻辑、描述逻辑)表达知识,就像用数学公式表达知识。比如"如果今天下雨,那么地面会湿"可以写成: 下雨 → 地面湿 下雨 \rightarrow 地面湿 下雨→地面湿,就像数学里的"如果A,那么B"。
-
产生式系统使用IF-THEN规则表示知识,通过规则匹配和执行进行推理,就像"如果A,那么B"这样的规则。比如:
- 规则1:IF 今天下雨 THEN 地面湿
- 规则2:IF 地面湿 AND 温度低于0度 THEN 地面结冰
当你告诉系统"今天下雨",它就能自动推导出"地面湿",再结合温度信息,还能推导出"地面结冰"。
-
知识图谱通过节点和边表示实体及其关系,支持复杂关系表示,就像用图表示知识之间的关系。比如:
- 节点:北京、中国、首都
- 边:北京-位于->中国,北京-是->首都
这样就能表示"北京是中国的首都"这个知识,还能表示更复杂的关系网络。
2. 逻辑推理:从已知知识推导出新知识
通过逻辑推理(模型检查、推理规则、正向推理、反向推理)从已知知识推导出新知识,就像从已知前提推导出结论。
比如,你有一个知识库:
- 规则1:如果今天下雨,那么地面湿
- 规则2:如果地面湿,那么容易滑倒
- 事实:今天下雨
正向推理就像从已知前提往前推:你知道"今天下雨",应用规则1得到"地面湿",再应用规则2得到"容易滑倒"。就像解数学题,从已知条件一步步推导出答案。
反向推理就像从目标往回找:你想证明"容易滑倒",需要"地面湿",而"地面湿"需要"今天下雨",正好知识库里有"今天下雨",所以能证明"容易滑倒"。就像证明题,从要证明的结论往回找需要的条件。
模型检查通过枚举所有可能的模型来验证推理结果,就像把所有可能的情况都检查一遍。比如验证"如果A且B,那么C"是否成立,就检查所有A、B、C的可能组合,看是否都满足这个规则。
推理规则通过应用推理规则逐步推导出结论,避免枚举所有模型,就像用规则一步步推导。比如用"如果A,那么B"和"A成立",直接推导出"B成立",不用检查所有可能的情况。
二、不确定性推理:基于概率处理不确定信息
1. 全概率推理:把所有可能的情况加起来
不确定性推理通过全概率推理计算边缘概率,通过边缘化(对所有其他变量求和)计算边缘概率,通过条件化(固定某些变量)计算条件概率,就像把所有可能的情况加起来。
比如,你想知道"明天会下雨"的概率。但下雨可能因为不同的原因:冷空气南下、台风、对流天气等。全概率推理就是把所有可能的原因都考虑进去,计算每种原因导致下雨的概率,然后加起来,得到总的下雨概率。就像你算考试及格的概率,要考虑"复习充分且及格"、"复习不充分但及格"等所有可能的情况,然后把它们加起来。
2. 贝叶斯法则:从因果推理到诊断推理的转换
贝叶斯法则通过 P ( X ∣ Y ) = P ( Y ∣ X ) P ( X ) / P ( Y ) P(X|Y) = P(Y|X)P(X)/P(Y) P(X∣Y)=P(Y∣X)P(X)/P(Y)实现从因果推理到诊断推理的转换,就像从"如果下雨,地面会湿"推导出"如果地面湿,可能下过雨",从原因推结果变成从结果推原因。
比如,医生看病:
- 因果推理:如果得了流感,那么会发烧(P(发烧|流感)=0.9)
- 诊断推理:如果发烧了,可能得了流感(P(流感|发烧)=?)
贝叶斯法则帮你从"得了流感会发烧"这个因果知识,推导出"发烧了可能得了流感"这个诊断知识。就像你看到地面湿了,想知道是不是下过雨,贝叶斯法则帮你从"下雨会导致地面湿"推导出"地面湿可能是因为下过雨"。
再比如,你想知道"如果检测结果是阳性,真的得病的概率是多少"。虽然检测准确率很高(比如95%),但如果这个病本身很罕见(比如只有1%的人得病),那么即使检测阳性,真的得病的概率也可能不高。贝叶斯法则帮你综合考虑检测准确率和疾病发病率,得到更准确的诊断概率。
3. 贝叶斯网络:利用条件独立性大幅提高推理效率
贝叶斯网络通过有向无环图表示变量之间的依赖关系,利用条件独立性将指数级的联合概率分布压缩为线性级的条件概率分布,大幅提高推理效率,就像用图表示变量之间的关系,利用独立性减少计算量。
比如,你想诊断一个病人的疾病。需要考虑很多因素:症状(发烧、咳嗽、头痛)、检查结果(血常规、X光)、病史等。如果不用贝叶斯网络,你需要考虑所有可能的组合(发烧+咳嗽+头痛+血常规正常+X光异常+…),组合数是指数级的,计算量巨大。
但用贝叶斯网络,你可以表示变量之间的依赖关系:
- 发烧和咳嗽都依赖于"是否得流感"
- 如果知道"得流感",那么发烧和咳嗽是独立的(条件独立)
这样,你只需要存储"得流感→发烧"、"得流感→咳嗽"这样的条件概率,而不是所有可能的组合。就像你不需要记住"发烧+咳嗽+头痛+…“的所有组合,只需要记住"得流感时,发烧的概率”、"得流感时,咳嗽的概率"等,计算量从指数级降到线性级。
再比如,你想预测"明天会不会下雨"。需要考虑:今天天气、温度、湿度、气压、风向等。如果所有变量都相互依赖,需要存储所有组合的概率,计算量巨大。但用贝叶斯网络,你可以表示:温度影响湿度,湿度和气压共同影响下雨。这样就能利用条件独立性,大幅减少需要存储和计算的概率数量。
三、案例推理:基于经验解决新问题
1. 案例表示与索引:把经验记录下来
案例推理通过案例表示与索引存储经验(就像把经验记录下来)。案例表示使用Flat feature-value list、Object-oriented representations、Graph representations等方法表示和存储案例,就像用不同的方式记录经验。
比如,医生记录病例:
- 特征列表:患者年龄=35,症状=发烧+咳嗽,体温=38.5度,诊断=流感,治疗=抗病毒药物
- 对象表示:把病例当作一个对象,有属性(年龄、症状)和方法(诊断、治疗)
- 图表示:用图表示病例之间的关系,比如"类似症状的病例"、“相似年龄的病例”
就像你记录做过的项目,可以用表格(特征列表)、文档(对象表示)、思维导图(图表示)等不同方式,方便以后查找和参考。
2. 相似性评价:找最相似的病例
相似性评价基于"相似的问题具有相似的答案"的假设,通过局部相似性和全局相似性度量案例相似度,使用k-NN等方法找到相似案例,就像找最相似的病例。
比如,医生遇到一个新病人:35岁,发烧38.5度,咳嗽。系统会在病例库中找最相似的病例:
- 病例1:30岁,发烧38度,咳嗽,诊断=流感
- 病例2:40岁,发烧39度,咳嗽+头痛,诊断=流感
- 病例3:35岁,发烧38.5度,咳嗽,诊断=流感
系统会计算相似度:年龄接近、症状相同、体温接近的病例相似度高。就像你遇到一个新问题,会回忆"以前有没有遇到过类似的问题",找最相似的经验。
局部相似性看单个特征的相似度,比如年龄、症状;全局相似性看整体特征的相似度,综合考虑所有特征。就像找房子,你可以只看价格(局部),也可以综合考虑价格、位置、面积(全局)。
3. 调整:根据情况修改方案
调整识别新问题与相似案例之间的差异,通过参数调整、结构调整、替换调整等方法将相似案例的解决方案调整为新问题的解决方案,就像根据当前患者的具体情况修改治疗方案。
比如,医生找到相似病例:30岁,发烧38度,咳嗽,诊断=流感,治疗=抗病毒药物A,剂量=标准剂量。
但新病人是35岁,体重更重,对药物A过敏。医生需要调整:
- 参数调整:因为体重更重,增加剂量
- 替换调整:因为过敏,把药物A换成药物B
就像你参考之前的项目方案,但新项目有些不同:预算更少、时间更紧、团队更小。你需要调整方案:减少功能(参数调整)、改变实现方式(结构调整)、替换技术栈(替换调整)。
4. 案例库维护:不断积累经验
案例库维护通过添加新案例、删除无用案例、更新案例信息,保持案例库的有效性和质量,就像不断更新经验库。
比如,医生每次看完病,会把新病例加入病例库。如果发现某个旧病例的诊断有误,会更新它。如果某个病例太老了(比如20年前的),治疗方法已经过时,可能会删除或标记为过时。
就像你维护自己的知识库:遇到新问题,记录下来;发现旧方法有更好的替代,更新它;过时的经验,删除或标记。这样你的经验库越来越丰富,也越来越准确。
四、方法选择:根据问题特点权衡
从确定性到不确定性:符号推理(基于逻辑规则,确定性推理,就像数学证明)→ 不确定性推理(基于概率,处理不确定信息,就像天气预报)。从规则到概率:符号推理(基于逻辑规则)→ 不确定性推理(基于概率分布)。从概率到经验:不确定性推理(基于概率论)→ 案例推理(基于经验,就像医生看病)。
不确定性推理的演进:从全概率推理(需要完整联合概率分布,计算量大)到贝叶斯法则(实现反向推理,从结果推原因)到贝叶斯网络(利用条件独立性提高效率,大幅减少计算量)。从需要指数级参数到线性级参数,从完整分布到条件独立性,逐步提高推理效率。
在实际选择时,你需要在几个方面权衡:
场景1:法律推理(符号推理)
- 问题:判断某个行为是否违法
- 特点:有明确的法律条文,需要确定性的结论
- 选择:用符号推理,因为需要"说得清楚",每一步推理都要有依据,不能有模糊性
场景2:医疗诊断(不确定性推理)
- 问题:根据症状诊断疾病
- 特点:症状和疾病的关系不确定,需要概率判断
- 选择:用不确定性推理(贝叶斯网络),因为需要处理不确定性,而且能利用条件独立性提高效率
场景3:法律案例检索(案例推理)
- 问题:找类似的法律案例
- 特点:没有明确的规则,但有大量历史案例
- 选择:用案例推理,因为可以找到相似案例,参考之前的判决
在说得清楚和算得快之间权衡(符号推理说得清楚但可能算得慢),在准确性和效率之间权衡(不确定性推理需要计算概率分布),在相似度准确性和计算复杂度之间权衡(案例推理需要评价相似性)。设计推理算法的核心就是在这些维度之间找到平衡点,既要保证推理准确性,又要提高推理效率。没有完美的算法,只有适合不同场景的算法。
926

被折叠的 条评论
为什么被折叠?



