CSYS5030 Week 11 信息传递与传递熵讲课总结
CSYS5030 Week 11 讲课总结:Information Transfer
课程:CSYS5030 — Information Theory and Self-Organisation 讲师:Associate Professor Joseph Lizier 对应模块:Module 11 - Information transfer 来源:讲义 PDF
Week 11/Lectures/Lec7-InfoDynamics-PartII.pdf(文件名写 Part II,标题页实际是 Information dynamics – Part III – Information transfer)+ 推导讲义teDerivation.pdf(Lizier & Finn)+ tutorial Solutions:heartBeatProcess_Solutions.ipynb、TEinCellularAutomata_Solutions.ipynb、SleepApnoeaAISTEAnalysis_Solutions.ipynb。本周没有转录稿,不包含讲课现场内容。 本周覆盖:信息传递的直觉 → TE 定义 → 条件于历史的作用 → TE vs 因果 → 实践中的参数 → 条件 TE 与信息回归 → 三个 tutorial
零、本周位置
接着 Week
10 的信息存储,建模目标变量
我们在为目标的动态建模,已经考虑了目标自己的过去(信息存储)。 那么,源变量的过去还能帮我们多预测多少目标的下一个状态?
学习目标(讲义):
- 理解信息传递的度量,以及这一概念与信息存储的关系;
- 把 TE 理解为分布式内禀计算这一更大视角中的信息传递模型;
- 用 JIDT 分析信息传递,能为 TE 选择参数,评估不同的分析方案。
参考:Lizier (2014) JIDT 附录 A.2–A.3;Lizier (2013) 第 3、4 章;Bossomaier et al. (2016) 第 4 章 §4.1–4.3、§5.1;Schreiber (2000) Measuring Information Transfer。
一、直觉:Heartbeat 消息
1.1 过程定义
源
目标
转移率小(
1.2 讲义上的课堂练习
「你就是目标」:每一步
- 先只根据目标自己的过去写下预测,以及有多确定(1–10 分);
- 再看源,更新预测,评估源额外增加了多少(1–10 分)。
源在哪里添加得最多/最少?为什么?
- 最多:在切换时刻——目标一直是 0,按自己的过去会很确定地猜 0;源刚刚变成 1,告诉我们目标下一步要切换到 1。这是过去完全无法预测的「新闻」。
- 最少:在稳定持续段——目标一直是 0,下一步大概率还是 0,源也说 0,只是确认了我们已知的东西。
二、传递熵(Transfer Entropy, TE)
2.1 定义
在目标过去状态
的语境下,源的观测 中有多少关于目标下一个值 的信息?
- TE:源在过去的语境下,帮助预测下一个值的平均信息。
- 局部 TE:某个源取值在某个过去的语境下,对某个下一个值的预测提供的信息(Lizier, Prokopenko & Zomaya 2008)。
- 本质上就是一个 条件互信息(Week 4)——条件变量是目标的过去。
2.2 JIDT 中的 TE
- AutoAnalyser 里选 Transfer
Entropy;注意嵌入参数(
k_HISTORY等)。 - 所有底层 CMI 估计器都可用,参数与功能相同(显著性、局部值)。
- 用 Gaussian 估计器就等价于度量 Granger 因果(差一个因子 2;Barnett, Barrett & Seth 2009:对高斯变量,Granger 因果 = 2 × TE,TE 以 nats 计)。
Discrete TE 的构造器(tutorial 中出现):
calc = TransferEntropyCalculatorDiscrete(base, k, k_tau, l, l_tau, delay) |
三、TE vs(滞后)互信息
- 两者都有方向(源的过去 → 目标的将来)。
- 但条件于目标过去使 TE 成为一个「动态」的量。
回顾 Week 4 条件化在 CMI 中的作用:
| 作用 | 在 TE 里的意义 |
|---|---|
| 去除冗余——减少 MI | 源与目标过去冗余的信息不算传递 |
| 引入协同——增加 MI | 源在目标过去的语境下变得更有信息量的部分算进来 |
这些差异正好对应我们对「信息传递」的直觉(见第八节 heartbeat 的局部 MI vs 局部 TE 对比)。
四、为什么要条件于目标历史(三重作用)
4.1 与信息存储形成对照
- 去掉任何信息存储被误当作传递的可能(去掉过去与源之间的冗余信息)。
- 传递是相对于存储来定义的(defined in juxtaposition to storage)。
- 是建模目标计算过程的第二步:先考虑目标状态中已有的信息,再考虑源:
(这就是链式法则:
4.2 考察目标的状态转移
是目标底层状态的 Takens 嵌入。- TE 考察的是状态转移
(或包含冗余信息地写成 )。 - TE 是源提供的关于目标动态状态转移的信息(Schreiber 2000)。
4.3 在目标历史语境下考察源的贡献
- 目标过去不只是「条件掉」冗余信息,
- 还使 TE 能包含源与目标过去之间的协同(互补)信息——即「状态依赖」(state-dependent)分量。
- 把建模过程想成:以目标过去为语境来考虑其他源。
4.4 用 PID 看存储与传递的细分
部分信息分解(Partial Information Decomposition, Williams & Beer)把两源(目标过去 M、源 Y)关于下一个值的信息分为四块:独有 {M}、独有 {Y}、冗余 {M}{Y}、协同 {MY}。
| 量 | 包含的 PID 分量 |
|---|---|
| AIS(存储) | 过去的独有分量 {M} + 与源的冗余分量 {M}{Y} |
| TE(传递) | 源的独有分量 {Y} + 与目标过去的协同分量 {MY} |
所以冗余信息被算作存储,协同信息被算作传递——这是「先考虑过去」这一建模顺序的直接后果。
五、信息传递 ≠ 因果效应
- 因果关心的是干预的效应(Pearl)。
- 信息传递关心的是把动态建模为计算——信息处理视角。
讲义的例子:两列时间序列
- Process 1 和 Process 2
的观测数据一模一样,但因果结构不同(例如一个是
由 驱动,另一个是 自己翻转)。 - 信息处理模型对两者的归因相同:
的过去已完全预测下一个值 ⟹ 全部是信息存储,没有信息传递(TE = 0)。
结论(Lizier & Prokopenko 2010):
- 信息传递不直接度量因果效应:
- 因果源可能只服务于信息存储(如上例 Process 1);
- 非因果源(如隐藏的共同驱动者)可以有传递。
- ⟹ 应尽可能把分析限制在因果源上(tutorial 里 CA 只看邻居就是这个原因)。
- 信息传递度量了因果度量不到的涌现计算结构:
- heartbeat 例子中的转移;
- CA 中的 glider。
- 两个概念互补。
六、实践中使用 TE
6.1 第一步:设置目标嵌入
- 与 AIS
的考虑相同,目的是尽量不把存储的信息算作传递:
- 最大化偏差修正 AIS、Ragwitz 准则或非均匀嵌入(前两种 JIDT 有)。
- 注意事项:
- 必须先嵌入目标,才能正确解释为信息传递(而不是把源和目标一起嵌入);
- 这样可能漏掉一些与源协同才有信息量的更早的目标过去值。
JIDT(KSG 估计器)的
AUTO_EMBED_METHOD:
| 取值 | 含义 |
|---|---|
NONE |
手动设置目标和源嵌入 |
RAGWITZ |
用预测误差最小化设置目标和源嵌入 |
RAGWITZ_DEST_ONLY |
只设置目标 |
MAX_CORR_AIS |
用最大偏差修正 AIS 设置目标和源嵌入 |
MAX_CORR_AIS_DEST_ONLY |
只设置目标 |
都在
AUTO_EMBED_K_SEARCH_MAX、AUTO_EMBED_TAU_SEARCH_MAX
范围内扫描。注意与 AIS 的选项略有不同——因为现在有源 +
目标两个变量。
讲义练习:心率/呼吸数据,MAX_CORR_AIS_DEST_ONLY、K_SEARCH_MAX=10、TAU_SEARCH_MAX=1,Compute
后最优参数显示在 k_HISTORY、TAU,代码中
getProperty() 读取。
6.2 第二步:设置源嵌入
更一般的定义(前面给的是简化版):
什么时候用源状态
- 观测
掩盖了一个隐马尔可夫过程时; - 多个过去的 Y 值对 X 有因果作用时;
- 否则也可以通过非均匀嵌入从 Y 中构建贡献者集合(下周)。
6.3 第三步:设置源-目标延迟
更一般的定义:
- 选
使 TE 最大。 - 已证明在简单条件下,这个
与真实的因果延迟一致(Wibral et al. 2013)。 - JIDT:设
DELAY属性(除 kernel 估计器外都可用)。
七、条件传递熵(Conditional TE)与信息回归
7.1 定义
在目标过去
和另一个过程的观测 的语境下, 中有多少关于 的信息?
同样可以加源-目标延迟、条件变量-目标延迟、嵌入、多变量条件等。JIDT
AutoAnalyser 中有 Conditional Transfer Entropy,属性
COND_EMBED_LENGTHS、COND_TAUS、COND_DELAYS。
7.2 额外条件化 Z 带来什么变化
| 效果 | 典型结构 | 说明 |
|---|---|---|
| 去除 Y 与 Z 之间的冗余 | 共同驱动:Z → Y,Z → X | 成对 TE 会显示 Y→X 的虚假传递,条件于 Z 后消失 |
| 路径效应:Y → Z → X | Y 的信息经由 Z 到达 X,条件于 Z 后间接链接消失 | |
| 引入 Y 与 Z 之间的协同 | 门控效应:Y、Z 共同决定 X(如 XOR) | 单独的 Y 看不出作用,条件于 Z 后才显现 |
7.3 两个都需要吗?——信息回归
目标是为 X 的信息处理建模。两源情形(一般情形见 Lizier 2010):
各项名称:
- Active information storage
- Pairwise / apparent TE(成对、表观 TE) 2–.
Collective TE(
合起来的集体 TE) 3+. Conditional TE
答案:两者都需要。成对 TE 和条件 TE 按不同顺序出现在同一个链式分解里,相加等于集体 TE。哪个顺序都是对的,它们一起才给出完整图景。(样题第 19 题正考这一点。)
八、Tutorial 1:Heartbeat 过程的 TE
8.1 代码流程
data = generateHeartbeatMessages(0.05, 0.2, 100000) # 列 0 = 源,列 1 = 目标 |
Solution 输出 0.3715 bits,接近理论值 0.3735 bits;100 个 surrogate 的零分布为 0,p = 0,非常显著。
8.2
解析推导(teDerivation.pdf)
局部 TE:
完全由 决定 ⟹ 总是成立。- 代入
、 : ,由平稳性等于转移概率 。
| 配置 |
事件 | 局部 TE | λ₁=0.05, λ₀=0.2 |
|---|---|---|---|
| (1, 1, 0) | 0 → 1 切换 | 4.3 bits | |
| (0, 0, 0) | 保持 0 | 0.074 bits | |
| (1, 1, 1) | 保持 1 | 0.32 bits | |
| (0, 0, 1) | 1 → 0 切换 | 2.3 bits |
平稳边际:由
平均 TE:
λ₁ = 0.05、λ₀ = 0.2 时
观察:这恰好是 Week 09 算过的源过程的熵率——目标完美复制源,所以源每一步产生的全部「新信息」都传给了目标;而目标自身可预测的部分归为存储。
8.3 讨论题
源在哪里加得最多? 切换时刻,尤其 0→1(4.3 bits):目标过去说「几乎肯定还是 0」,源却给出了罕见的切换。1→0 次之(2.3 bits)。
最少? 稳定的 0 段(0.074 bits):目标过去已经预测得很好,源只是确认。
为什么没有负的局部 TE? 因为
8.4 挑战:局部滞后 MI vs 局部 TE
miCalc = MutualInformationCalculatorDiscrete(2, 2, 1) # 时滞 1 很重要! |
由
| 事件 | 局部 MI | 局部 TE | 差异来源 |
|---|---|---|---|
| 0 → 1 切换 | 4.32 | TE 更大:协同——在「过去是 0」的语境下,源的 1 更有信息量 | |
| 保持 1 | 2.32 | 0.32 | TE 更小:冗余——目标过去已预测「还是 1」 |
| 1 → 0 切换 | 2.32 | TE 更大:协同 | |
| 保持 0 | 0.32 | 0.074 | TE 更小:冗余 |
| 平均 | 0.722 | 0.3735 | MI 把存储也算进来了 |
MI 只看目标当前是不是 1(只要是 1 就很「有信息」),TE 看的是转移——这正是我们直觉中的「信息传递」。
可选挑战:画平均 TE 随
九、Tutorial 2:CA rule 54 中的 TE
沿用 Module 10 的 ca54.txt 和最优 k =
15。
- AutoAnalyser:TE、Discrete、勾
All pairs?、k=15,取消勾选Compute result?(全对计算太慢!),只生成代码。 - 修改:
- 只算邻居作为源(我们知道邻居才是直接贡献者——见第五节「限制在因果源上」),先做左邻:
s = (d - 1) % 10000(周期边界,不能直接d-1)。 - 合并所有(左邻→格子)对的样本:去掉对 s
的循环;
initialise()移到循环前,计算和 print 移到循环后。
- 只算邻居作为源(我们知道邻居才是直接贡献者——见第五节「限制在因果源上」),先做左邻:
- 结果:TE ≈ 0.0818 bits,样本数 5,850,000(= 10000 × 585)。若只显示 585 左右,说明只用了一对。
- 局部 TE:
locals = numpy.zeros(data.shape) |
用已从全部格子估计的 PDF 评估每个格子的局部值。
观察:glider 处局部 TE 为强正值——glider 是主要的信息传递实体(讲义剧透),而 domain/blinker 处 TE 很小(那里的信息已被存储解释)。注意:左邻→格子的 TE 只突出向右移动的 glider;看右邻(「一步向左的信息流」)会突出向左移动的 glider(讲义图 (c) Local TE right / (d) Local TE left)。
可选扩展:显著性检验;其他 CA 规则(有/无涌现结构);条件 TE(以另一侧邻居为条件)。
十、Tutorial 3:睡眠呼吸暂停数据(心率、呼吸、血氧)
数据 SFI-heartRate_breathVol_bloodOx-extract.txt:列 0
心率、列 1 呼吸、列 2
血氧。目标是呼吸,按信息回归一步步建模。
A. 呼吸的 AIS(KSG)
DYN_CORR_EXCL = 15(Week 7 定出的心率/呼吸最大自相关长度);AUTO_EMBED_METHOD = MAX_CORR_AIS、K_SEARCH_MAX = 10、TAU_SEARCH_MAX = 10(序列复杂,允许较长延迟)。- 结果 AIS ≈ 0.5848 nats——对时间上采样的连续值过程,AIS 通常比较大,因为它们变化缓慢。
局部 AIS 与动态(画 breath(n) vs breath(n+1),按局部 AIS 着色):
- 较大的 AIS 出现在极端呼吸值,尤其是前一个值也已经极端时——过去很好地预测了「继续极端」;
- 稳定范围内的呼吸值 AIS 较小:过去能预测的不多(这里接近均值,本来就最常见);
- AIS 不强的地方,正是其他源最有可能补充信息的地方(呼吸刚开始偏离稳定范围时)。
B. 心率 → 呼吸的 TE
- 默认参数:TE ≈ 0.0112 bits,不显著。别急着下结论——嵌入还没设好。
- 自动嵌入(
MAX_CORR_AIS,同时嵌入源和目标):TE 仍很小、不显著。难道目标过去已解释了心率能提供的一切? - 但 Week 7 发现心率→呼吸在滞后 6–12 上有显著 MI ⟹
扫描源-目标延迟:固定
k_HISTORY = 2、l_HISTORY = 2(自动嵌入的结果),删掉AUTO_EMBED_*行,对DELAY从 1 到 20 循环。
Solution 输出(KSG,nats;100 个 surrogate):
| delay | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 16 | 19 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TE | −0.004 | −0.012 | 0.009 | 0.025 | 0.025 | 0.055 | 0.038 | 0.040 | 0.037 | 0.030 | 0.004 | 0.021 | 0.025 | 0.026 |
| p | 0.59 | 0.84 | 0.15 | 0.01 | 0.01 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.26 | 0.09 | 0.02 | 0.00 |
- 最优延迟 = 6,TE ≈ 0.0546 nats,p = 0 ⟹ 显著。
- 多重比较:扫了 20 个延迟,若真的无关,在 α = 0.05 下也预计约 1 个会偶然显著(20 × 0.05)。延迟 16、19 的零散显著可能就是这种情况——下周讲族错误率校正。
局部 TE 着色图(plt.clim(-0.5, 0.5)
突出极端值):能看到在AIS
不强的动态部分,心率能补充显著信息。
C. 血氧 → 呼吸的 TE
- 血氧也有峰谷,更平滑,谷大致与呼吸暂停事件重合;看起来血氧先下降 → 心率上升 → 呼吸上升。
- 自相关更长 ⟹
DYN_CORR_EXCL = 21;源嵌入l_HISTORY = 2、l_TAU = 3。 - 扫描延迟:最优延迟 = 1,TE ≈ 0.0360 nats,p = 0;延迟 1–10、12、13 等都显著。
D. 条件 TE:两个源都需要吗?
心率 → 呼吸 |
血氧(COND_EMBED_LENGTHS = 2、COND_TAUS = 3、COND_DELAYS = 1,DELAY = 6,DYN_CORR_EXCL = 21):
CTE_Kraskov (KSG)(heart -> breath | bloodOx) = 0.0236 nats |
- 显著 ⟹ 即使模型里已有血氧,加入心率仍有用:心率提供了血氧单独给不了的信息。
- CTE(0.0236)小于成对
TE(0.0546):部分信息与血氧冗余(符合「血氧下降 →
心率上升」的链条,即部分路径/共同驱动效应)。不过两次计算的
DYN_CORR_EXCL不同(15 vs 21),这个比较只是粗略的。 - 这不等于证明心率对呼吸有因果作用——只说明在信息处理模型中它是有用的源。
- 若只能选一个源:成对 TE 心率更大,但要完整回答还需反向的 CTE。
反向:血氧 → 呼吸 | 心率(交换源与条件及其嵌入/延迟参数):用来判断「已有心率时,血氧是否还有用」。Solution 中没有给出这一步的输出,按同样标准看 p 值判断;若两个 CTE 都显著,模型里应同时保留两个源。
十一、本周考点速记 / 易错点
- TE
;局部 。必须条件于目标过去。 - 样题第 17 题模式:TE(源嵌入 1、目标嵌入 2)=
——认清哪个是源、哪个是目标下一值、哪个是目标过去块。 - TE vs 滞后 MI:都有方向;条件化去冗余(→存储)、加协同;TE 关注状态转移。
- PID:AIS = 独有{M} + 冗余{M}{Y};TE = 独有{Y} + 协同{MY}。
- Gaussian TE ≡ Granger 因果(因子 2)。
- TE ≠ 因果:因果源可能只贡献存储;隐藏共同驱动可产生传递;尽量只分析因果源;TE 能看到 glider、转移等涌现结构。
- 实践三步:① 目标嵌入(先嵌入目标;MAX_CORR_AIS /
Ragwitz;
_DEST_ONLY只嵌目标)② 源嵌入 (隐马尔可夫/多个过去值有作用时)③ 源-目标延迟 :取使 TE 最大的,DELAY属性(kernel 除外)。 - 条件
TE:去除共同驱动、路径效应的冗余;引入门控(协同)。成对
TE 和条件 TE 都需要——信息回归:
。 - Heartbeat:
⟹ 局部 TE = ,0→1 切换 4.3 bits 最大、保持 0 仅 0.074;无负值;平均 0.3735 bits;平稳边际 。 - CA rule 54:只用邻居作源、周期边界
% 10000、合并样本;TE ≈ 0.08 bits;glider = 传递实体;左邻源突出右行 glider。 - 生理数据:自相关排除 + 自动嵌入 + 扫描延迟;心率→呼吸最优延迟 6(0.055 nats),血氧→呼吸延迟 1;CTE(心率→呼吸|血氧) = 0.024 nats 仍显著。
- 扫描很多延迟/源时要考虑多重比较(下周)。
十二、下周预告
Week 12 — Module 12: Effective network inference:
- 功能网络 / 有效网络 / 结构网络的区别;
- 成对 TE + 阈值、成对 TE + p 值、多重比较校正(Bonferroni、FDR);
- 多变量贪心算法(逐个添加条件 TE 最大且显著的父节点,剪枝),IDTxl;
- Tutorial:在 CA rule 54 上比较 MI 功能网络、TE 有向功能网络和多变量有效网络。