# 把一次学习走通,也读清实现顺序 [独立阅读](/course/blocks/moco-one-step-paper-and-code.html)**课堂上下文:从哪个问题来** 本页把前两页对象放回一条可追踪过程。纸面步骤与Notebook时序有细微差异,说明已明确标注。 沿当前图逐项走:本批原图产生两视图;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何时生成、何时用于比较、何时离开。 图内标签与数值:P17 学习表示机制图,状态 3;同一输入;视图 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、正例、旧队列、两次参数更新与FIFO是同一步的不同对象。 查看对应图解状态 - 同一输入 - 视图 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、正例、旧队列、两次参数更新与FIFO是同一步的不同对象。 [查看对应图解状态](/#/l3-r2-p17/2)[查看完整图解](/#/l3-r2-p17/2) **出处:**[MoCo 原论文 §3、§4.2、Table 2](https://arxiv.org/html/1911.05722v3) ## 继续阅读与实验