学习信号与表示怎样判断表示支持了哪种使用方式?
LAB 19 · 新域:捷径反转与少标签适配
按问题继续
源域捷径、目标域反转、少标签适配与同预算scratch
对应课堂(1 页)
可先阅读已有结果,再决定是否运行。重算时请核对各节记录的数据、参数、环境与日期。
学习路径: 表示怎样迁移到新任务
这是CLS 06的新域支路:到新环境变差,与迁移不如从头训练,是同一句话吗?
先预测两维线索中哪一维会失效,再读源域、目标域直接使用、32标签适配与同预算scratch四项评价。分别算“适配相对直接使用”和“迁移相对scratch”的差值;它们回答不同问题。
展开完整实现代码
# Writable ephemeral workspace for detached readonly cloud runs.
import os, tempfile
os.chdir(tempfile.mkdtemp(prefix='lec03_lab22_'))
import numpy as np
def data(seed,n,environment):
r=np.random.default_rng(seed); y=r.integers(0,2,n); sign=2*y-1
x=np.c_[sign+r.normal(0,1.,n),environment*sign+r.normal(0,.15,n),np.ones(n)]
return x,y
def train(x,y,w,steps,lr=.1,l2=.01):
w=w.copy()
for _ in range(steps):
p=1/(1+np.exp(-np.clip(x@w,-30,30))); w-=lr*(x.T@(p-y)/len(y)+l2*np.r_[w[:2],0])
return w
def acc(w,d): x,y=d; return float(((x@w>=0)==y).mean())
source=data(220,512,1); source_test=data(221,512,1); adapt=data(222,32,-1); target_test=data(223,512,-1)
w=train(*source,np.zeros(3),500); adapted=train(*adapt,w,150); scratch=train(*adapt,np.zeros(3),150)
print('source-trained weights stable/spurious/bias',w.round(3).tolist())
result={'source_holdout':acc(w,source_test),'target_zero_shot':acc(w,target_test),'target_adapt32':acc(adapted,target_test),'target_scratch32':acc(scratch,target_test)}
print(result); print('adaptation gain over zero-shot',round(result['target_adapt32']-result['target_zero_shot'],4),'transfer advantage vs scratch',round(result['target_adapt32']-result['target_scratch32'],4))
print('test seeds 221/223 never used by optimizer; adaptation seed222 only')学习信号与表示怎样判断表示支持了哪种使用方式?
已完成的基准运行
以下是本轮本地独立 Python 进程的实际标准输出,云端执行另行记录。
source-trained weights stable/spurious/bias [1.009, 2.7, 0.0]
{'source_holdout': 1.0, 'target_zero_shot': 0.076171875, 'target_adapt32': 0.9921875, 'target_scratch32': 1.0}
adaptation gain over zero-shot 0.916 transfer advantage vs scratch -0.0078
test seeds 221/223 never used by optimizer; adaptation seed222 only
目标域零样本下降来自我们显式翻转的相关线索;这不是对现实部署原因的自动诊断。适配收益与迁移相对从零的收益不同,结果表分别报告两者。只把adapt样本数32改为8,重新生成相同环境的独立训练样本,观察方差;多种子评价时保留预先固定的测试种子,不挑最好一次。若背景在所有训练环境都相同方向相关,仅凭随机划分无法知道哪维稳定;增加环境多样性与领域知识是不同干预。WILDS提供真实分布变化基准;本例是自制可控反例。
学习信号与表示怎样判断表示支持了哪种使用方式?
旧版热身(历史参考)
旧版热身仅保留为历史参考,不参与当前基准运行;当前解释与计算以上方完整实验为准。
展开查看旧版代码(仅展示,不执行)
train=[('grass','cow')]*8+[('water','duck')]*8; test=[('water','cow')]*4+[('grass','duck')]*4
def bg_rule(bg):return 'cow' if bg=='grass' else 'duck'
print('train acc',sum(bg_rule(x)==y for x,y in train)/len(train)); print('environment-shift acc',sum(bg_rule(x)==y for x,y in test)/len(test))
此引用的原文已在较早版本调整
原位置:block-b8f620816c50450aa37772c7ee9ebfb1。当前正文保留在本篇;此旧引用没有足够证据自动等同于某个新段落。
此引用的原文已在较早版本调整
原位置:block-b8f620816c50450aa37772c7ee9ebfb1。当前正文保留在本篇;此旧引用没有足够证据自动等同于某个新段落。
此引用的原文已在较早版本调整
原位置:block-b8f620816c50450aa37772c7ee9ebfb1。当前正文保留在本篇;此旧引用没有足够证据自动等同于某个新段落。
此引用的原文已在较早版本调整
原位置:block-b8f620816c50450aa37772c7ee9ebfb1。当前正文保留在本篇;此旧引用没有足够证据自动等同于某个新段落。