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 过程定义

源 :两状态泊松切换过程(马尔可夫链)

目标 :简单地复制源的上一个值, 。

转移率小()且 ,所以值通常是 0,偶尔出现一段 1(像心跳)。例: , 。

1.2 讲义上的课堂练习

「你就是目标」:每一步

  1. 先只根据目标自己的过去写下预测,以及有多确定(1–10 分);
  2. 再看源,更新预测,评估源额外增加了多少(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)
calc = calcClass(2, 1, 1, 1, 1, 1) # 二值,k=1,源嵌入 l=1,延迟 1

三、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)。
  • 信息传递关心的是把动态建模为计算——信息处理视角。

讲义的例子:两列时间序列 ,都是 0/1 交替,且相互反相。

  • 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):

各项名称:

  1. Active information storage
  2. 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 = 目标
calc = TransferEntropyCalculatorDiscrete(2, 1, 1, 1, 1, 1)
calc.initialise()
calc.addObservations(source, destination)
result = calc.computeAverageLocalOfObservations() # ≈ 0.3715 bits
measDist = calc.computeSignificance(100) # null 0.0000 ± 0.0000, p = 0
locals = calc.computeLocalFromPreviousObservations(source, destination)

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 时 bits。

观察:这恰好是 Week 09 算过的源过程的熵率——目标完美复制源,所以源每一步产生的全部「新信息」都传给了目标;而目标自身可预测的部分归为存储。

8.3 讨论题

源在哪里加得最多? 切换时刻,尤其 0→1(4.3 bits):目标过去说「几乎肯定还是 0」,源却给出了罕见的切换。1→0 次之(2.3 bits)。

最少? 稳定的 0 段(0.074 bits):目标过去已经预测得很好,源只是确认。

为什么没有负的局部 TE? 因为 ,比值总 ≥ 1。源从不误导——目标是源的完美复制。

8.4 挑战:局部滞后 MI vs 局部 TE

miCalc = MutualInformationCalculatorDiscrete(2, 2, 1)   # 时滞 1 很重要!
...
localsMI = numpy.append([0], localsMI) # 补一个 0 对齐 TE

由 : bits,局部 MI :

事件 局部 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。

  1. AutoAnalyser:TE、Discrete、勾 All pairs?、k=15,取消勾选 Compute result?(全对计算太慢!),只生成代码。
  2. 修改:
    • 只算邻居作为源(我们知道邻居才是直接贡献者——见第五节「限制在因果源上」),先做左邻:s = (d - 1) % 10000(周期边界,不能直接 d-1)。
    • 合并所有(左邻→格子)对的样本:去掉对 s 的循环;initialise() 移到循环前,计算和 print 移到循环后。
  3. 结果:TE ≈ 0.0818 bits,样本数 5,850,000(= 10000 × 585)。若只显示 585 左右,说明只用了一对。
  4. 局部 TE:
locals = numpy.zeros(data.shape)
for d in range(10000):
s = (d - 1) % 10000
locals[:, d] = calc.computeLocalFromPreviousObservations(data[:, s], data[:, d])

用已从全部格子估计的 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

  1. 默认参数:TE ≈ 0.0112 bits,不显著。别急着下结论——嵌入还没设好。
  2. 自动嵌入(MAX_CORR_AIS,同时嵌入源和目标):TE 仍很小、不显著。难道目标过去已解释了心率能提供的一切?
  3. 但 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
(null: -0.0020 +/- 0.0103 std dev.; p(surrogate > measured)=0.00000 from 100 surrogates)
  • 显著 ⟹ 即使模型里已有血氧,加入心率仍有用:心率提供了血氧单独给不了的信息。
  • CTE(0.0236)小于成对 TE(0.0546):部分信息与血氧冗余(符合「血氧下降 → 心率上升」的链条,即部分路径/共同驱动效应)。不过两次计算的 DYN_CORR_EXCL 不同(15 vs 21),这个比较只是粗略的。
  • 这不等于证明心率对呼吸有因果作用——只说明在信息处理模型中它是有用的源。
  • 若只能选一个源:成对 TE 心率更大,但要完整回答还需反向的 CTE。

反向:血氧 → 呼吸 | 心率(交换源与条件及其嵌入/延迟参数):用来判断「已有心率时,血氧是否还有用」。Solution 中没有给出这一步的输出,按同样标准看 p 值判断;若两个 CTE 都显著,模型里应同时保留两个源。


十一、本周考点速记 / 易错点

  1. TE ;局部 。必须条件于目标过去。
  2. 样题第 17 题模式:TE(源嵌入 1、目标嵌入 2)= ——认清哪个是源、哪个是目标下一值、哪个是目标过去块。
  3. TE vs 滞后 MI:都有方向;条件化去冗余(→存储)、加协同;TE 关注状态转移。
  4. PID:AIS = 独有{M} + 冗余{M}{Y};TE = 独有{Y} + 协同{MY}。
  5. Gaussian TE ≡ Granger 因果(因子 2)。
  6. TE ≠ 因果:因果源可能只贡献存储;隐藏共同驱动可产生传递;尽量只分析因果源;TE 能看到 glider、转移等涌现结构。
  7. 实践三步:① 目标嵌入(先嵌入目标;MAX_CORR_AIS / Ragwitz;_DEST_ONLY 只嵌目标)② 源嵌入 (隐马尔可夫/多个过去值有作用时)③ 源-目标延迟 :取使 TE 最大的,DELAY 属性(kernel 除外)。
  8. 条件 TE:去除共同驱动、路径效应的冗余;引入门控(协同)。成对 TE 和条件 TE 都需要——信息回归: 。
  9. Heartbeat: ⟹ 局部 TE = ,0→1 切换 4.3 bits 最大、保持 0 仅 0.074;无负值;平均 0.3735 bits;平稳边际 。
  10. CA rule 54:只用邻居作源、周期边界 % 10000、合并样本;TE ≈ 0.08 bits;glider = 传递实体;左邻源突出右行 glider。
  11. 生理数据:自相关排除 + 自动嵌入 + 扫描延迟;心率→呼吸最优延迟 6(0.055 nats),血氧→呼吸延迟 1;CTE(心率→呼吸|血氧) = 0.024 nats 仍显著。
  12. 扫描很多延迟/源时要考虑多重比较(下周)。

十二、下周预告

Week 12 — Module 12: Effective network inference:

  • 功能网络 / 有效网络 / 结构网络的区别;
  • 成对 TE + 阈值、成对 TE + p 值、多重比较校正(Bonferroni、FDR);
  • 多变量贪心算法(逐个添加条件 TE 最大且显著的父节点,剪枝),IDTxl;
  • Tutorial:在 CA rule 54 上比较 MI 功能网络、TE 有向功能网络和多变量有效网络。