Lecture 03 学习讲义
正文
工具
按问题查找
学习信号与表示怎样判断表示支持了哪种使用方式?

LAB 18 · XOR:信息保留与线性读出

并入相关学习路径

XOR的任务信息/身份信息、离散互信息与线性读出算例

对应课堂(2 页)

可先阅读已有结果,再决定是否运行。重算时请核对各节记录的数据、参数、环境与日期。

这是CLS 06的一项短检查:信息还在,为什么一条直线仍读不出?

先看XOR四点与乘积特征图,判断原四点是否碰撞,再比较h和z的线性读出。代码精确计算离散互信息:z保留XOR标签,却丢掉四个角点的完整身份。

产出一组对照:把任务从XOR改成“第一坐标是否为正”,说明同一个z为什么不再足够。bit数只适用于本构造,不能直接变成连续图像表示的通用评分。P23连接评价协议;想在图像上看读出差异,再用LAB 01。

此段独立阅读
展开完整实现代码
# 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')
此段独立阅读
3 / 3