spring|机器学习中的无监督学习应用在哪些领域呢?自动驾驶?医疗影像?卷积神经网络?( 四 )

?在基于图像的自监督任务中 , 一般通过数据增强(data augmentation)来对单张图片构建不同视图 , 这些视图的图像内容高度一致 , 被视为正样本;而数据集中的其他图片则直接被视为负样本 。
同一张猫咪图片经过剪裁得到的另一视图被视作正样本 , 正样本与原图经过神经网络编码得到的表征应该相似;而数据集中的其余图片被视为负样本 , 经网络编码后的结果应当差异较大 。

完成正负样本的构建后 , 对比学习一般采用InfoNCE Loss来进行损失计算和模型更新 , 其形式如下:
其中表示训练模型对输入样本的编码过程 。 InfoNCE Loss约束模型对当前样本的编码结果和对正样本的编码结果的内积较大 , 而和负样本的编码结果的内积较小 , 可以看作是从样本集合中判别出与之匹配的正样本 。
一. MoCo
MoCo是对比学习中一个非常有代表性的方法 , 其主要思想是将对比学习过程看作一个“查字典”的过程:在一个由众多样本构成的键值(key)字典中检索到与查询样本的编码结果(query)相匹配的正样本 。 为了提升对比学习的效果 , 提出两点假设:
一.键值字典的容量应该尽可能增大以提高自监督任务的难度 , 从而提升训练效果;
二.键值字典应该在训练过程中保持一定程度的一致性以保障自监督学习过程能够稳定进行 。
基于以上两点假设 , 分析了几种对比学习机制 。
1端到端训练
即对于所有的查询样本的编码结果(query)和字典键值(key)同时进行梯度传播 , 但这一方法中显存大小会极大地限制键值字典的大小 , 导致自监督任务难度降低 , 影响训练效果;
2.基于memory bank的训练方法

迭代过程中将键值编码存储到一个memory bank中 , 每轮对比学习过程中所需要的字典键值直接从memory bank 里选取 , 而梯度计算只对查询样本的编码网络分支进行 。 因为MoCo不需要对键值字典的分支进行梯度计算 , memory bank方法可以显著提升键值字典的容量 , 但是由于每个样本在memory bank中的键值在被模型重新编码时才会被更新 , 键值字典中键值间的一致性较差 , 从而降低了训练的稳定性 。


因此 , 提出一种momentum encoder来实现对键值字典的编码 。 对于查询样本 , 使用普通encoder进行编码并直接进行梯度计算;而对于键值字典 , 首先由一个动态更新的队列维护字典的输入样本 , 再使用momentum encoder将样本编码为键值 。 Momentum encoder在训练过程中不会进行梯度计算 , 而是采用动量更新的方法从encoder更新参数 , 更新方法如下: