# LAB 18 · XOR:信息保留与线性读出 并入相关学习路径 XOR的任务信息/身份信息、离散互信息与线性读出算例 对应课堂(2 页) 可先阅读已有结果,再决定是否运行。重算时请核对各节记录的数据、参数、环境与日期。 **学习路径:** [表示怎样迁移到新任务](/course/study/readout-transfer.html) 这是[CLS 06](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/c0645a4db6e04188ab5b119e87c53bed)的一项短检查:**信息还在,为什么一条直线仍读不出?** 先看[XOR四点与乘积特征图](/course/blocks/information-and-readable-form.html),判断原四点是否碰撞,再比较h和z的线性读出。代码精确计算离散互信息:z保留XOR标签,却丢掉四个角点的完整身份。 产出一组对照:把任务从XOR改成“第一坐标是否为正”,说明同一个z为什么不再足够。bit数只适用于本构造,不能直接变成连续图像表示的通用评分。[P23](/course/pages/l3-r2-p23.html)连接评价协议;想在图像上看读出差异,再用[LAB 01](https://deepnote.com/project/38755e4e-23f6-4f5f-8c68-8a2e4114b1c1/notebook/4dd8605ed9904820919ea9e13d9e7d7c)。 [此段独立阅读](/course/notebook-blocks/c98ad8d2a25f41578ac66b80719df8db.html)展开完整实现代码 ``` # Writable ephemeral workspace for detached readonly cloud runs. import os, tempfile os.chdir(tempfile.mkdtemp(prefix='lec03_lab21_')) import numpy as np from collections import Counter h=[(-1,-1),(-1,1),(1,-1),(1,1)]; y=[0,1,1,0]; z=[a*b for a,b in h]; c=[0]*4 def mutual(a,b): n=len(a); joint=Counter(zip(a,b)); ca=Counter(a); cb=Counter(b) return sum(v/n*np.log2(v*n/(ca[x]*cb[t])) for (x,t),v in joint.items()) def fit(X,y): X=np.c_[X,np.ones(len(y))]; w=np.zeros(X.shape[1]); y=np.array(y) for _ in range(500): p=1/(1+np.exp(-X@w)); w-=.2*X.T@(p-y)/len(y) return (1/(1+np.exp(-X@w))).round(4) print('I(h;y), I(z;y), I(constant;y) bits',mutual(h,y),mutual(z,y),mutual(c,y)) print('I(h;h), I(h;z) bits',mutual(h,h),mutual(h,z)) print('linear probabilities on h',fit(np.array(h),y).tolist(),'on z',fit(np.array(z)[:,None],y).tolist()) assert mutual(h,y)==mutual(z,y)==1 and mutual(h,h)==2 and mutual(h,z)==1 print('z keeps XOR label, loses which corner: label sufficiency is task dependent') ``` [此段独立阅读](/course/notebook-blocks/c5113894a7934003bb3fd12a1d78f39c.html) ## 已完成的基准运行 以下是本轮本地独立 Python 进程的实际标准输出,云端执行另行记录。 ``` I(h;y), I(z;y), I(constant;y) bits 1.0 1.0 0.0 I(h;h), I(h;z) bits 2.0 1.0 linear probabilities on h [0.5, 0.5, 0.5, 0.5] on z [0.0102, 0.9898, 0.9898, 0.0102] z keeps XOR label, loses which corner: label sufficiency is task dependent ``` h→z是确定映射,数据处理不能创造关于y的新信息;这里I(h;y)=I(z;y)=1bit,但z降低了读出难度。若下游任务换成“x₁是否为正”,z将无法区分两种答案。这给颜色增强提供了精确类比:某个目标需要忽略颜色,不代表其他目标也不需要。逻辑回归h的对称初始化停在0.5符合凸损失对称最优,不能把二分类threshold的偶然准确率称为XOR已学会。连接LAB06的h/z实训练,再检查有限样本与函数类的限制。 [此段独立阅读](/course/notebook-blocks/202bf43aba9a4bc88dd38e6ce6b76405.html) ## 旧版热身(历史参考) 旧版热身仅保留为历史参考,不参与当前基准运行;当前解释与计算以上方完整实验为准。旧版的 identity is preserved 表述已纠正:z 保留 XOR 标签信息,但没有保留四个角点的完整身份。 #### 展开查看旧版代码(仅展示,不执行) ``` h=[(-1,-1),(-1,1),(1,-1),(1,1)]; y=[0,1,1,0]; z=[a*b for a,b in h]; pred=[int(v<0) for v in z] print('h unique',len(set(h)),'nonlinear feature',z,'readout',pred); assert pred==y print('identity is preserved; linear separability is a different question') ``` [此段独立阅读](/course/notebook-blocks/eec26396f50540529159208805f0276f.html)