Lecture 03 学习讲义
正文
工具
按问题查找
学习信号与表示怎样增加候选,同时让历史表示仍可比较?

先看轴身份,再数每行的候选

解释、算例与证据

P14 · 比较更多候选,代价在哪里?

从同一个视图列表指认查询、自身和正例:4×4 到 6×6,每行候选从 3 项到 5 项。随后再把候选来源转为计算组织问题,为 MoCo 队列做铺垫。

P14 同一视图列表的 6×6 对比矩阵:自身排除、同源正例与其他候选两轴同列 A1、A2、B1、B2、C1、C2,共 6 个视图。每行查询自身所在的灰色斜线格排除;同源另一个视图为绿色正例。A1 行排除 A1,正例为 A2,其余 4 项为 B1、B2、C1、C2;每行共 5 个候选。完整矩阵为 6×6。右侧历史键字典是下一方法 MoCo 的资源取舍,不是直接给本批 SimCLR 添加旧键。全部来自当前批次能否复用历史特征?3 张原图 → 6 个视图原图 AA1A2原图 BB1B2原图 CC1C2两轴使用同一个视图列表;行表示查询A1+A2+B1+B2+C1+C2+A1A2B1B2C1C2固定查询 A1A1:自身,排除A2:同源正例B1、B2、C1、C2:其余候选每行:1 + 4 = 5 项自身排除同源正例2N−2 个其余候选当前编码 6 个视图;完整比较矩阵 6 × 6(随 2N 平方增长)。下一方法:MoCo 的取舍先问能否保存已算的 key复用旧向量,减少本轮编码候选数与当前批次能否解耦?旧键还足够可比吗?

当前批次从原图 A、B 的 A1/A2/B1/B2 四视图(4×4)扩为 A、B、C 的六视图(6×6)。矩阵两轴使用同一视图列表,灰色斜线主对角为自身并排除;每行只有同源的另一个视图为绿色正例,其余 2N−2 个为其他候选。A1 行显示全部候选身份。右侧将复用历史 key 作为下一方法 MoCo 的资源取舍。

  • 全部来自当前批次
  • 能否复用历史特征?
  • 3 张原图 → 6 个视图
  • 原图 A
  • A1
  • A2
  • 原图 B
  • B1
  • B2
  • 原图 C
  • C1
  • C2
  • 两轴使用同一个视图列表;行表示查询
  • A1
  • +
  • A2
  • +
  • B1
  • +
  • B2
  • +
  • C1
  • +
  • C2
  • +
  • A1
  • A2
  • B1
  • B2
  • C1
  • C2
  • 固定查询 A1
  • A1:自身,排除
  • A2:同源正例
  • B1、B2、C1、C2:其余候选
  • 每行:1 + 4 = 5 项
  • 自身排除
  • 同源正例
  • 2N−2 个其余候选
  • 当前编码 6 个视图;完整比较矩阵 6 × 6(随 2N 平方增长)。
  • 下一方法:MoCo 的取舍
  • 先问能否保存已算的 key
  • 复用旧向量,减少本轮编码
  • 候选数与当前批次能否解耦?
  • 旧键还足够可比吗?
当前批次从原图 A、B 的 A1/A2/B1/B2 四视图(4×4)扩为 A、B、C 的六视图(6×6)。矩阵两轴使用同一视图列表,灰色斜线主对角为自身并排除;每行只有同源的另一个视图为绿色正例,其余 2N−2 个为其他候选。A1 行显示全部候选身份。右侧将复用历史 key 作为下一方法 MoCo 的资源取舍。 查看对应图解状态
查看完整图解

课堂讲述

我们先给格子里的对象起名字。A 和 B 是两张原图,每张各取两个视图,所以两轴都列 A1、A2、B1、B2。固定看 A1 这一行:它和自己比较的格子排除;A2 是我们指定的正例;B1、B2 是另外两个候选。现在每行有三个候选。 把原图增加到三张,得到六个视图,每行就有五个候选。更多候选可以提供比较,但也要付本轮编码与比较的成本;完整矩阵的格子数从 4×4 变为 6×6。我们不把大批次推广成所有对比方法的普遍规律,而是借这张图看见 SimCLR 的一项资源约束。 下一步问,能否复用先前已经算出的键,让候选数量和当前批次分开?这不是向刚才的 SimCLR 矩阵直接加入旧键,而是转向 MoCo 的设计问题。以前算出的向量,和今天正在变化的编码器,是否还处在足够一致的表示空间中?

批内候选数为什么和 batch 绑在一起?

独立阅读

SimCLR 从 N 张原图产生 2N 个视图。P14 的两轴使用同一个视图列表,行是查询、列是候选。两张原图 A、B 对应 A1、A2、B1、B2;矩阵是 4×4。固定查询 A1,A1 自身排除,A2 是同源正例,B1、B2 是其余候选,所以每行比较 3 项。三张原图再加 C1、C2,矩阵成为 6×6,每行比较 5 项。一般地,每行排除自身后有 2N−1 项:1 个同源正例、2N−2 个其他候选。

主对角用灰色斜线排除,绿色格表示同一原图的另一个视图。若采用“两组不同视图分别作为两轴”的另一种排法,正例可以在对角;不能离开轴身份,仅凭绿色位置判断矩阵的含义。

这些候选都由当前参数编码,彼此处于同一轮表示空间;代价是本步要处理更多图像与反向传播状态,完整的两两比较矩阵随视图数平方增加。增大 N 也会改变优化行为,并不只是免费加几个负例。

MoCo 的提问是:能否复用前几批已经算好的 key,让候选数超过当前 batch?这是下一方法的资源取舍,不是在 SimCLR 这一次比较中直接把旧键塞进矩阵。保存向量通常比保存整个图像计算图轻,但旧向量来自旧参数。下一页的队列解决“从哪里拿更多候选”,再下一页的 EMA 处理“拿来的旧候选是否仍可比较”。

沿着图解追问

以下是备课用的模拟师生对话,不是课堂实录。

学生:绿色格为什么不在主对角?

教师:因为本图两轴用的是同一个视图列表,主对角是同一个视图与自身。正例是同一原图的另一个视图。若两轴分别排两组不同视图,绿色可以在对角;判断要先看轴身份。

沿这个问题继续

用N=3画出配对与自身屏蔽;随后读P15,暂不展开多设备通信。

图示条件与公式约定

两轴同列同一组 2N 个视图,行是查询、列是候选。主对角是同一视图与自身,排除;同源另一个视图是唯一指定正例,其余 2N−2 项为其他候选。N=2 时 4×4,每行 3 项(1 正例、2 其他项);N=3 时 6×6,每行 5 项(1 正例、4 其他项)。当前视图越多,本轮编码也越多;完整两两比较矩阵随视图数平方增长。历史键字典是引入下一方法 MoCo 的问题,不表示 SimCLR 本次直接混入旧键。