学习信号与表示怎样判断表示支持了哪种使用方式?
LAB 18 · XOR:信息保留与线性读出
并入相关学习路径
XOR的任务信息/身份信息、离散互信息与线性读出算例
对应课堂(2 页)
可先阅读已有结果,再决定是否运行。重算时请核对各节记录的数据、参数、环境与日期。
学习路径: 表示怎样迁移到新任务
这是CLS 06的一项短检查:信息还在,为什么一条直线仍读不出?
先看XOR四点与乘积特征图,判断原四点是否碰撞,再比较h和z的线性读出。代码精确计算离散互信息:z保留XOR标签,却丢掉四个角点的完整身份。
展开完整实现代码
# 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')学习信号与表示怎样判断表示支持了哪种使用方式?
已完成的基准运行
以下是本轮本地独立 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实训练,再检查有限样本与函数类的限制。
学习信号与表示怎样判断表示支持了哪种使用方式?
旧版热身(历史参考)
旧版热身仅保留为历史参考,不参与当前基准运行;当前解释与计算以上方完整实验为准。旧版的 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')
此引用的原文已在较早版本调整
原位置:block-eec26396f50540529159208805f0276f。当前正文保留在本篇;此旧引用没有足够证据自动等同于某个新段落。
此引用的原文已在较早版本调整
原位置:block-eec26396f50540529159208805f0276f。当前正文保留在本篇;此旧引用没有足够证据自动等同于某个新段落。
此引用的原文已在较早版本调整
原位置:block-eec26396f50540529159208805f0276f。当前正文保留在本篇;此旧引用没有足够证据自动等同于某个新段落。
此引用的原文已在较早版本调整
原位置:block-eec26396f50540529159208805f0276f。当前正文保留在本篇;此旧引用没有足够证据自动等同于某个新段落。