Fig 1.7 在对比学习中,BN层导致预训练任务失效的原因猜想。 为了解决这个问题,作者提出了Shuffling BN的概念,而这个层必须在多GPU卡上才能进行。首先作者将不同GPU的sub mini batch进行汇聚,然后对汇聚后的batch进行打乱,并且记下打乱后的索引(便于恢复shuffle结果),在提取了Key编码特征后,通过之前记下的索引,恢复sh...
(后来看Shuffling BN的时候才知道Memory Bank的正样本不是像MoCo这样来自于每一个batchszie本身不同的数据增强,而是和负样本一样取自于Memory Bank,因为Memory Bank中包含了所有样本,正样本只要取和他相对应的序号的即可) 在memory bank中只有一个编码器,也就是query的编码器是可以通过梯度回传来进行更新学习的,...
MoCo论文中的小trick:Shuffling BN (这个操作在接下来很多论文里,甚至包括作者团队接下来的工作,比如SimSiam也没有再用Shuffling NB这个操作了) 因为用了BN以后,很有可能造成当前batch里的样本中间的信息的泄露,因为BN要计算这些样本的running mean和running variance,也就是说,它能通过这些泄露信息很容易地找到正样本,...
但在MoCo中,当编码器fq和fk都使用BN后,BN 会阻止模型学到更好的特征表示,因为网络会欺骗辅助任务,找到损失最小的方法,而不去学习更好的表示,何凯明团队推测这可能是由BN引起的,每个batch内的样本之间计算mean和std导致信息泄露,产生退化解。 于是,他们提出采用Shuffling BN。通过多GPU训练,分开计算BN,并且shuffle不...
如果是都用LN或者干脆都不用BN,模型坍塌,什么都没学到。 最终分析: 作者认为在Projector层使用BN之后,是计算了整个batch的均值和方差,这意味着是有信息泄露的(MoCo使用了 Shuffling BN ,就是为了防止这种信息泄露)。模型不光是正样本自己和自己学,还和batch norm产生的平均图片(mode,中值)对比着学,这种平均图片...
Shuffling BN 另外,MoCo还发现ResNet里的BN层会阻碍模型学习一个好的特征。由于每个batch内的样本之间计算mean和std导致信息泄露,产生退化解。MoCo通过多GPU训练,分开计算BN,并且shuffle不同GPU上产生的BN信息来解决这个问题。 实验 通过对end-to-end、memory...
Shuffling BN:因为用了BN,很可能导致batch样本中间的信息会泄露,因为BN要算这些样本的running mean和running variance,能通过泄露的信息很容易的找到正样本,而不需要学一个真正好的模型。因为BN大部分都是在当前GPU上算的,所以作者在做多卡训练之前先把样本的训练打乱,再送到所有的GPU上去,算完了特征再把顺序恢复来...
MoCo三部曲,从首发的MoCov1,到后来的MoCov2、MoCov3,讲述了Self-Supervised Learning领域的创新与演变。在CV领域停滞不前之际,MoCo横空出世,开启CV领域Self-Supervised新篇章,与Transformer联手,成为深度学习研究的热点。MoCov1设计了三个核心操作:Dictionary as a queue、Momentum update和Shuffling B...
MoCo主要设计了三个核心操作:Dictionary as a queue、Momentum update和Shuffling BN。 Dictionary as a queue 正如我之前的文章中提到的,避免退化解最好的办法就是同时满足alignment和uniformity,即需要positive pair和negative pair。其中uniformity是为了不同feature尽可能均匀的分布在unit hypersphere上,为了更有效率的达...
④ Shuffling BN. - 问题:ResNet里的BN层会阻碍MoCo模型学习一个好的特征。由于每个batch内的样本之间计算mean和std导致信息泄露,产生退化解。 - 解决:MoCo通过多GPU训练,分开计算BN,并且shuffle不同GPU上产生的BN信息来解决这个问题。 3.3 MoCo v2层: ...