详细内容或原文请订阅后点击阅览
自监督学习教程:使用 pytorch lightning 实现 SimCLR
了解如何实现臭名昭著的对比自监督学习方法 SimCLR。在 PyTorch 和 PyTorch-lightning 中逐步实现
来源:AI夏令营在本动手教程中,我们将为您提供 SimCLR 自监督学习方法的重新实现,用于预训练稳健的特征提取器。此方法相当通用,可应用于任何视觉数据集以及不同的下游任务。
在之前的教程中,我写了一些关于自监督学习领域的背景知识。现在是时候开始您的第一个项目了,在一个名为 STL10 的包含 100K 张未标记图像的小型数据集上运行 SimCLR。
上一个教程, STL10代码可在 Github 上找到。
代码可在 Github 上找到。
可在 Github 上获取SimCLR 方法:对比学习
让 sim(u,v)sim(u,v)sim(u,v) 表示 2 个归一化 uuu 和 vvv 向量之间的点积(即余弦相似度)。
sim(u,v)sim(u,v)sim(u,v) sim(u,v)sim(u,v)sim(u,v) sim(u,v)sim(u,v)那么一对正样本 (i,j) 的损失函数定义为:
ℓi,j=−logexp(sim(zi,zj)/τ)Σk =12N1[k≠i]exp(sim(zi,zk)/τ)\ell_{i, j}=-\log \frac{\exp \left(\operatorname{sim}\left(\boldsymbol{z}_{i}, \boldsymbol{z}_{j}\right) / \tau\right)}{\sum_{k=1}^{2 N} \mathbb{1}_{[k \neq i]} \exp \left(\operatorname{sim}\left(\boldsymbol{z}_{i}, \boldsymbol{z}_{k}\right) / \tau\right)}ℓi,j=−log∑k=12N1[k=i]exp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ) ℓi,j=−logexp(sim(zi,zj)/τ)∑k=12N1[k≠i]exp(sim(zi,zk)/τ)\ell_{i, j}=-\log \frac{\exp \left(\operatorname{sim}\left(\boldsymbol{z}_{i}, \boldsymbol{z}_{j}\right) / \tau\right)}{\sum_{k=1}^{2 N} \mathbb{1}_{[k \neq i]} \exp \left(\operatorname{sim}\left(\boldsymbol{z}_{i}, \boldsymbol{z}_{k}\right) / \tau\right)}ℓi,j=−log∑k=12N1[k=i]exp(sim(zi,zk)/τ)exp(sim(zi,zj)/τ)