学习信号与表示怎样增加候选,同时让历史表示仍可比较?
两种参数更新解决不同任务:query学当前选择,key维持较平滑的编码规则。
query分支接受损失梯度,key分支停止梯度且参数由EMA跟随;算例0.9×1+0.1×2=1.1。 查看对应图解状态查看完整图解 查询编码器用梯度学习;键编码器不直接通过这条对比损失反向更新,而是用查询编码器参数的移动平均来跟随。
例如只看一个参数分量,旧的键参数是 1,当前查询参数是 2,平均系数取 0.9,那么键参数会变成 1.1,而不是立刻跳到 2。真实网络是对所有参数作这样的更新,这个小数字只是帮助我们看清“缓慢跟随”是什么意思。
这里的 momentum 平均的是网络参数,不是优化器里累积梯度的动量。较慢变化的键编码器,让跨批次保存的键更一致,但旧特征依然不是被神奇地刷新为今天的结果。队列和参数平均,分别回应“大”和“相对一致”两个要求。
query编码器从当前损失接收梯度,例如 θq←θq−η∇θqL。key编码器不沿当前loss反传,而通过参数移动平均跟随query:θk←mθk+(1−m)θq。
令旧key参数为(0,2),当前query参数为(2,4),m=0.9,则key变为(0.2,2.2)。若query下一次仍不变,再更新得到(0.38,2.38)。平均的是网络参数,不是历史队列向量;也不同于优化器保存的梯度动量。
较慢的key变化减轻历史向量的坐标系漂移。它并不把历史key全部校正为新参数下的值,也不保证任意队列容量都合适。m=0立即追上query,m=1彻底冻结;这两个极端帮助理解时间尺度,但通常不是希望采用的默认方案。
EMA 算例 m=.9、旧 θk=1、当前 θq=2,结果1.1。真实网络对参数张量更新;这不是优化器梯度动量。