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

沿着一个 key,走完当前步与下一步

解释、算例与证据

P17 · 把一次学习完整走通

本页把前两页对象放回一条可追踪过程。纸面步骤与Notebook时序有细微差异,说明已明确标注。

P17 学习表示机制图,状态 3P17 学习表示机制图,状态 3同一输入视图 a视图 bquery 编码器key 编码器qk⁺ = k₅L = −ln p⁺比较用旧字典k₁ … k₄q 与所有候选比较k⁺ 是本轮正确项梯度 → θqEMAk₅ 入队;k₁ 退队k₂ k₃ k₄ k₅下一批的字典按原文算法 1:更新 query,再平均 key 参数并维护下一批的字典。

一对同源视图、query/key编码、正键与旧字典、损失、query梯度、key EMA和下一批字典在同图逐步接齐。

  • 同一输入
  • 视图 a
  • 视图 b
  • query 编码器
  • key 编码器
  • q
  • k⁺ = k₅
  • L = −ln p⁺
  • 比较用旧字典
  • k₁ … k₄
  • q 与所有候选比较
  • k⁺ 是本轮正确项
  • 梯度 → θq
  • EMA
  • k₅ 入队;k₁ 退队
  • k₂ k₃ k₄ k₅
  • 下一批的字典
  • 按原文算法 1:更新 query,再平均 key 参数并维护下一批的字典。
一对同源视图、query/key编码、正键与旧字典、损失、query梯度、key EMA和下一批字典在同图逐步接齐。 查看对应图解状态
查看完整图解

课堂讲述

现在把刚才拆开的部件接起来。同一图片产生两个视图,分别形成查询和正键;再加上队列中的其他键,构成这次需要区分的候选。 比较产生损失,损失通过查询分支改变参数。键编码器按自己的平均规则跟随,新的键进入队列,旧键离开。下一批数据到来时,网络参数和字典内容都已经不是上一批的状态。 请沿着箭头看:视图关系提供答案,损失提供更新方向,字典组织提供更多比较对象,慢编码器支持跨步复用。我们不需要在课堂手写整个训练框架,但要能够说明每个部件解决什么问题。否则拿掉一个部件以后,连实验在检验哪项假设都说不清楚。

把一次学习走通,也读清实现顺序

独立阅读

沿当前图逐项走:本批原图产生两视图;query/key编码器分别给出q、k⁺;q与k⁺及旧队列比较;loss更新query;key按EMA跟随;本次已经算出的k⁺入队、最老key出队。旧队列不因本步更新重算。

主讲画面按原论文Algorithm 1排列。当前LAB 07教学代码则在计算本批key之前执行EMA,再计算loss和query更新。这是训练步内的时序约定差异,读代码时必须跟着实际顺序,不要声称逐行相同。两者共享的关键机制是:query接受梯度、key停止梯度并平滑跟随、队列复用历史特征。

LAB 07另外在队列保存源图ID,屏蔽同源旧key,避免同一图片再次出现时成为自己的负例;不同源图仍可能属于同一类别。它没有论文的分布式ShuffleBN,训练15轮的效果也不用于论文排名。学生完成本节后,应能指出一条key何时生成、何时用于比较、何时离开。

模拟问答:旧 key 还能比较吗?

独立阅读

以下为备课用模拟对话,不是实际课堂记录。

学生:“你说是前面算过的特征,图上到底哪几个?”

教师:“队列里的k1到k4是本步开始前就存在的。正在两视图分支里生成的k5是这次的新key。比较结束后k1离开,k5进入;你看下一批字典仍有k2、k3、k4。”

学生:“编码器已经变了,它们为什么还能比?”

教师:“这是设计需要处理的困难。query可以随梯度更新,key参数用EMA缓慢跟随,减少相邻批之间的变化。旧向量没有重算,所以只能说缓和漂移,不能说完全一致。队列越长,最旧条目越老,取舍就更明显。”

学生:“那EMA是不是改了队列里面的数?”

教师:“没有。看箭头:EMA连的是两套网络参数,FIFO操作连的是向量槽位。把这两条箭头分开,整步就清楚了。”

沿这个问题继续

先读模拟对话并指着图回答,再读LAB 07真实训练函数;检查key无梯度、FIFO和源图ID屏蔽。

图示条件与公式约定

本图按 MoCo 原文 Algorithm 1 理解一次循环:两分支编码并对 key 停止梯度,使用旧字典计算损失,反传更新 query,EMA 更新 key 参数,再将本批键入队并移除最旧键。本页单样本教学循环:正键k+=k5,新字典为[k2,k3,k4,k5],只移出k1。P15另用双样本说明入队批量,二者规模明确区分。字典旧向量不被追溯重算。