moco论文精读读后感

无监督学习的最终目标就是在一个大的数据集上预训练好一个模型(提取特征),然后迁移到下游任务上也能有一个较好的精度。
对比学习:无监督学习的一种,一般是通过一个代理任务来生成正样本和负样本来实现自监督学习,如moco使用的instance discrimination 就是把一个图片做两次数据增强,一次的结果作为锚点,另一次的结果作为负样本,然后把batch里其他所有图片作为负样本。
由于图片像素点不像自然语言的词具有离散性以及明确的语义,图片的像素点是连续且冗余的,因此要想无监督学习得到一个跟NLP领域类似的好结果,想办法做一个字典是一个方向,MOCO就是基于这个方向出发的。而对图像做字典又要满足两个条件:1.字典大 2.提取字典特征的编码器参数的一致性。
moco之前的工作有两类分别满足了两个条件之一还不能满足另一个条件。其中end to end模型每一轮编码器提取到字典的特征都是从同样的编码器参数得来的,这保证了字典特征的编码器一致性,但是由于每一轮都要将所有图片输入作为字典特征,batch的选取就无法做到很大,因此字典大小有限。另一个工作memory bank是将整个数据集当做字典,训练时随机采样后根据编码器更新的参数再更新特征后放回字典,而提取key特征的编码器是每一轮单独更新的,这个工作保证了字典的大小,但由于每轮用来更新字典的编码器参数都是新更新的,差异很大,因此有可能导致特征对比交叉熵时并不是因为真正学到了某个特征,而是因为某个编码器模型导致的损失很小。
moco通过采用给提取key特征编码器的参数加上动量的方式,解决了字典一致性的问题,同时通过采用一个队列来存储字典,每次输入一个batch进入字典队列,最早进队的batch出队,这样就剥离了batch的大小和字典大小的关系,可以把字典大小设置的很大。
moco的目标函数采用的是info NCE,NCE是噪声对比估值的缩写,实际上就是用softmax函数只不过把class改成了字典k,最后加上-log就转变为交叉熵,NCE为了减少计算量,只分了两类,一类就是正样本,另一类是所有负样本,而infoNCE为了学到更多的分类,还是维持了k+1类。

你可能感兴趣的:(算法)