Lecture 03 学习讲义
正文
工具
按问题查找
Lecture 03LAB 18 · XOR:信息保留与线性读出 · 实现代码

LAB 18 · XOR:信息保留与线性读出 · 实现代码

独立阅读

并入相关学习路径

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')