A1 · TENSOR FOUNDATIONS

从 tensor 操作到可信实验

不重写当年的作业;用小输入、shape ledger 与证据重新审计 KNN 和向量化。

Tensor contractVectorizationExperimental evidence

Review Lab,不是作业答案。阅读现有实现,先预测,再运行小实验并解释证据;原始仓库快照是代码事实来源。

阶段 01

张量契约

能逐轴解释 batch、feature 与 class,而不是靠广播碰巧运行。

为什么需要它

后面的每一个模型都建立在 shape、dtype、device 与 broadcasting 的可预测性上。

开始前应该已经会回答

  • 能解释 [M,1,D] 与 [1,N,D] 如何广播
  • 能区分 view/reshape 与数据复制

输入、输出与契约

输入
X_train [N,D], X_test [M,D]
输出
distance [M,N]
不变量
  • 每个单元只对应一对样本
  • 结果非负,完全相同输入距离为 0
不成立的假设
  • 把 batch 轴当 feature 轴
  • 依赖隐式广播但说不出扩张方向

用最小例子检查

取 M=2,N=3,D=2,用纸手算六个平方距离,再与代码逐项比较。

如果你看到……

shape 正确但每行完全相同

优先检查:广播轴或 reduction dimension

距离出现负数

优先检查:平方和公式、数值误差与是否漏掉 square

预测 → 实验 → 证据

先预测
把 one-loop 改成 no-loop 后,数值应该一致;运行时间会下降,但临时 tensor 可能增大。
做实验
固定同一小输入,比较 two-loop / one-loop / no-loop 的最大绝对误差与 wall time。
留证据
  • 三种实现误差
  • 输入 shape/dtype/device
  • 是否同步计时、重复次数

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先写出目标 distance matrix 的每个轴

提示 2

检查 sum 的 dimension,而不是先改公式

提示 3

把输入缩到 2×3×2 并打印广播后的 shape

闭卷检查 · 张量契约

  • 三种实现逐项一致
  • 能闭卷解释广播
  • 测量记录包含配置
阶段 02

KNN 决策规则

让距离矩阵经过 top-k 与多数表决产生确定预测。

为什么需要它

距离计算正确不代表分类正确;tie-break、axis 与 label dtype 都属于算法契约。

开始前应该已经会回答

  • 能解释 k 改变 bias/variance
  • 能区分最近样本索引与样本标签

输入、输出与契约

输入
distance [M,N], y_train [N]
输出
y_pred [M]
不变量
  • 每个 test example 独立投票
  • 平票规则确定且可复现
不成立的假设
  • 在训练样本轴外取 top-k
  • 依赖 unordered 容器决定平票

用最小例子检查

构造三个训练点,令两个类别 1:1 平票;先写出预期 tie-break 再运行。

如果你看到……

所有测试样本预测相同

优先检查:top-k 的 axis 与 batch indexing

重复运行偶尔改变答案

优先检查:平票规则或无序集合

预测 → 实验 → 证据

先预测
k=1 对局部噪声敏感;k 增大通常更平滑,但过大可能吞掉局部结构。
做实验
在固定 split 上画 k 与 validation accuracy,不使用 test set 选 k。
留证据
  • 每个 k 的 validation accuracy
  • 固定 split/seed
  • 最终 test 只评一次

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先确认 nearest indices 的 shape

提示 2

将 labels 和 indices 同时打印

提示 3

对单个 test example 手推投票

闭卷检查 · KNN 决策规则

  • tiny tie case 确定
  • validation 选择与 test 评估分离
  • 能解释 k 的取舍
阶段 03

证据检查

把“代码跑通”升级成可复现实验结论。

为什么需要它

Notebook 输出若缺配置、基线和分离的数据集,只能说明一次运行发生过。

开始前应该已经会回答

  • 能说明 baseline 是什么
  • 知道随机种子不等于完全确定性

输入、输出与契约

输入
实现 + 数据 split + 配置
输出
可复现结论
不变量
  • 验证集用于选择,测试集用于最终报告
  • 比较只改变一个主要变量
不成立的假设
  • 用 test accuracy 反复调参
  • 只报告最好数字不报告条件

用最小例子检查

故意交换 validation/test 的角色,解释为什么结果会乐观且不可复用。

如果你看到……

每次结果差异很大

优先检查:split、seed 与并列投票

validation 很高但 test 明显掉点

优先检查:是否对 validation 过拟合

预测 → 实验 → 证据

先预测
向量化应改变速度而非预测;k 改变预测而非距离。
做实验
建立 2×2 ablation:loop/no-loop × 两个 k,分别记录数值一致性、速度和 accuracy。
留证据
  • baseline
  • 单变量变化
  • 结果与机制解释

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先把“实现优化”和“模型超参数”分栏

提示 2

预测哪些指标应该不变

提示 3

若结论反常,先检查控制变量

闭卷检查 · 证据检查

  • 能从证据区分性能优化与算法变化
  • 记录足够复现
  • 写出一条被数据否定的原预测

复盘与迁移