SimCLR NT-XEnt 与 linear probe
预训练任务准确率不是目标——看 downstream finetune 的 sample efficiency 和 slice,对比 random init 和 supervised pretrain 才有意义。

1. 别看 pretext acc,看下游
自监督 pretext(旋转预测、SimCLR 对比学习)训完,rotation prediction 准确率 90%—— meaningless。SSL 的价值在 downstream:同样标注量下,linear probe 或 fine-tune 是否比 from-scratch 更好、sample efficiency 是否更高。预训练域越接近下游,收益越大;ImageNet 预训练训 street scene 检测,增广和 domain 不匹配时增益有限。汇报 SSL 实验必须带 random init 和 supervised pretrain 两条 baseline,否则无法判断自监督是否值得算力。
rotation、jigsaw 等 pretext 与 downstream 任务语义距离远,常不如 contrastive。选型时先问:无标数据 domain 与下游是否一致?batch 能否撑到 contrastive 所需 negative 数?厂内无标数据若是连续视频帧,相邻帧当 positive 会引入 trivial shortcut(时间近则外观近),须用间隔采样或 scene-level 去重。SSL 预算应优先花在 增广设计与 negative 构造,而非盲目加深 projection head——head 只在 pretrain 用,下游 discard,过深 head 有时反而损害 encoder 通用性。
2. SimCLR 与 InfoNCE 机制
SimCLR 对同一样本两次强增广得到 ,经 projection head 后 L2 normalize,batch 内其余样本为 negative,NT-Xent loss:
增广是 inductive bias 核心:crop + color jitter + blur + grayscale。大 batch(4096+)提供更多 negative,对比学习更稳;小 batch 可用 MoCo 的 queue(65536)作 negative pool,momentum encoder 提供一致的正样本 key。temperature 常见 0.1–0.5,过小 collapse、过大 gradient 弱。
InfoNCE 把 当唯一 positive,batch 内其余 个视图为 negative——分母越大,对比越「硬」。SimCLR 要求 两路增广足够强:弱增广时 positive 过易,encoder 学 low-level 统计即可降 loss。MoCo 用 momentum encoder 提供稳定 key,queue 存历史 embedding 扩充 negative,batch=256 也能训。BYOL/SimSiam 去掉 explicit negative,靠 predictor 与 stop-gradient 防 collapse,小显存友好但 hyper 敏感。无论哪种,pretrain 结束 只导出 encoder,projection head 权重丢弃是标准协议。
z1, z2 = encoder(aug1(x)), encoder(aug2(x))
z1, z2 = F.normalize(z1, dim=1), F.normalize(z2, dim=1)
# NT-Xent within batch3. linear probe vs fine-tune
linear probe:freeze encoder,只训 linear head on downstream——测 representation 质量,不引入 encoder 过拟合。fine-tune:全模型微调——通常更强,但难区分是 representation 好还是 end-to-end 过拟合。report 两者,并对比 random init from-scratch 在 10%/25%/50%/100% 标注下的曲线——SSL 的核心卖点是 sample efficiency,不是 100% 标注时的 SOTA。
linear probe 协议要固定:同一 downstream 划分、同一 head 结构(通常 global pool + Linear)、同一训练 epoch 与 LR grid。只报 100% 标注 fine-tune 会掩盖 SSL 价值——许多业务场景是「先上线 10% 标注 MVP」。曲线应在 对数标注量 横轴上画,SSL 相对 scratch 的 gap 在低标注区最明显。ImageNet supervised pretrain 仍是强 baseline:厂内 domain 与 ImageNet 差很远时,自监督 on 厂内无标数据常赢;domain 接近时 supervised 可能 parity,此时 SSL ROI 在合规(不能用外部标)或数据规模,而非 raw metric。
MoCo v2、BYOL、SimSiam 去掉或弱化 negative,小 batch 友好;验收标准仍是 downstream。预训练结束 discard projection head,downstream 只加载 encoder backbone。
4. 失败模式
pretext 域与 downstream 差太远:SSL 学 ImageNet 纹理,下游 depth/LiDAR——迁移有限。只看 pretext loss 下降:可能 collapse 到 trivial solution(常数 representation),必须看 linear probe。大 batch 做不到却强行 SimCLR:negative 太少,换 MoCo 或减小 projection dim。GroupSplit 泄漏:同 scene 进 pretrain 与 downstream val,probe acc 虚高。collapse 的早期信号是 embedding 方差趋近 0 或 kNN 准确率随机——应监控 batch 内 cosine 相似度分布,而非仅看 loss。下游 slice(昼夜、设备批次)须分别报,避免 aggregate probe acc 掩盖某 slice 仍不如 scratch。
5. 案例:linear probe 涨点但 fine-tune parity
某厂内场景分类,SimCLR pretrain 200 epoch,linear probe 50% 标注达全监督 90% 性能,但 fine-tune 100% 标注与 ImageNet init parity。结论:SSL 价值在 少标注,不在替换 supervised pretrain。若业务永远是全标注,SSL ROI 低。
该结论直接指导资源分配:标注团队能稳定供给全量时,优先清洗 label 与增广;标注稀缺或合规禁止外部 pretrain 时,上 SimCLR on 厂内无标。同一 run 应保存 pretrain checkpoint + downstream 各标注比例曲线,避免只留一个 fine-tune best 导致无法复现 sample efficiency 叙事。
6. 验收
- downstream sample efficiency 曲线(10%/25%/50%/100% 标注)。
- 对比 random init、ImageNet supervised、自监督三条线,固定 downstream 协议。
- 按 downstream slice 报 metric,不只看 aggregate。
- GroupSplit 按 scene_id 划分 val。
- 记录 pretrain batch size、queue size、τ,复现须对齐。
自监督的成功标准是 downstream 增益,不是 pretext acc;增广与 domain 匹配是 ROI 最高的杠杆。改 pretrain 一项时固定 downstream 协议,才分得清是 representation 问题还是 probe 过拟合。pretrain 日志除 loss,还应周期性跑 固定下游 linear probe(哪怕只用 1% 标注),避免训满 200 epoch 才发现 representation 未提升。复现时对齐 augmentation pipeline 与 ImageNet 预训练差异,否则 negative 构造不一致,结论不可比。
相关
也可以看看
- ·16 分钟阅读
KV cache 分页与前缀复用:吞吐上去后正确性怎么验
沿 block table、前缀哈希与抢占回收拆开缓存一致性风险,说明错页复用为何表现为「偶发胡话」;用确定性前缀集、强制抢占和逐 token 对照验收。
- ·18 分钟阅读
混合精度下的梯度累积:loss 缩放、裁剪与 step 顺序
沿 autocast、GradScaler、unscale_、裁剪与 optimizer.step 的数据流说明静默错误;区分 micro-batch 平均与求和,并用等价性测试验收。
- ·9 分钟阅读
torch.compile 图断裂:先定位重编译,再谈模式选择
从 Dynamo guard、graph break 与动态形状入手,建立可复现的编译诊断和冷启动、稳态验收方法。
johan's blog