因果关系推断介绍
因果推断是机器学习领域的重要研究方向,特别是在大语言模型时代,理解因果关系对于构建可解释、可信赖的 AI 系统至关重要。
为什么需要因果推断?
传统机器学习依赖相关性,但相关性不等于因果性。例如:
- 冰淇淋销量与溺水事件正相关(共同原因:夏天)
- LLM 可能学到虚假相关性,导致 hallucination
因果推断帮助我们:
- 理解干预效果(如果我做 X,会发生什么?)
- 进行反事实推理(如果当时做了 Y,结果会怎样?)
- 构建更鲁棒的模型
核心概念
因果图 (Causal Graph)
使用有向无环图 (DAG) 表示变量之间的因果关系:
1 | X → Y → Z (链式结构) |
结构因果模型 (SCM)
其中
do 算子与干预
区分观测和干预:
- 观测:
— 看到 X=x 时 Y 的分布 - 干预:
— 强制设置 X=x 时 Y 的分布
因果发现算法
PC 算法
基于条件独立性检验的经典算法:
1 | # PC 算法伪代码 |
Python 实现参考:fooSynaptic/py_pcalg
现代方法
| 方法 | 特点 | 适用场景 |
|---|---|---|
| NOTEARS | 连续优化,可微分 | 线性/非线性因果发现 |
| DAG-GNN | 基于图神经网络 | 大规模因果图学习 |
| Causal Transformer | 结合注意力机制 | 时序因果推断 |
因果推断与大语言模型
LLM 中的因果问题
- Hallucination:模型学到虚假相关性
- Bias:训练数据中的混杂因素
- Robustness:分布外泛化能力差
解决方案
1 | # 因果提示 (Causal Prompting) 示例 |
因果推理增强 RAG
1 | class CausalRAG: |
工具与资源
| 工具 | 语言 | 功能 |
|---|---|---|
| DoWhy | Python | 因果推断框架 |
| CausalNex | Python | 贝叶斯网络 + 因果发现 |
| pgmpy | Python | 概率图模型 |
| Tetrad | Java | 因果搜索算法 |
1 | # DoWhy 示例 |
延伸阅读
- Judea Pearl, The Book of Why (2018)
- Peters et al., Elements of Causal Inference (2017)
- Stanford CS 228: Probabilistic Graphical Models
转载请注明出处