论文地址 Bootstrap your own latent: A new approach to self-supervised Learning
开源代码 deepmind-research/byol at master · deepmind/deepmind-research · GitHub
1.摘要
BYOL依赖于两个神经网络,即在线网络和目标网络,它们相互作用和相互学习。
从一个图像的增强视图出发,我们训练在线网络来预测同一图像在不同的增强视图下的目标网络表示。BYOL作为一种对比式自监督方法,相比于其他模型只使用了正对。
2.介绍
学习良好的图像表示是计算机视觉中的一个关键挑战,因为它允许对下游任务进行有效的训练。许多不同的训练方法被提出来学习这种表征,通常依赖于视觉“pretext tasks”。常用的对比方法是通过减少正对之间的差距和增加负对之间的距离。性能严重取决于图像增强方式。
而BYOL不使用负对。它迭代地引导网络的输出,以作为增强表示的目标。此外,BYOL对图像增强的选择比对比方法更鲁棒;BYOL使用两种神经网络,被称为在线网络和目标网络,它们相互作用和相互学习。从一个图像的增强视图开始,BYOL训练其在线网络来预测目标网络对同一图像的另一个增强视图的表示。虽然这个目标允许折叠解,例如,对所有的图像输出相同的向量,但我们的经验表明,BYOL并不收敛于这样的解。(个人理解:loss(online(img1),target(img2)), 而不是loss(online(img),target(img1)))。此外在线网络添加一个预测头(MLP),以增加更多信息,避免崩溃。
BYOL在ImageNet上获得了最先进的结果。
3.相关工作
BYOL与PBL[Bootstrap latent-predictive representations for multitask reinforcement learning]有一些相似之处,与PBL不同,BYOL使用其表示的缓慢移动的平均值[slow-moving average]来提供其目标,并且不需要第二个网络。
最后,在自监督学习中,MoCo使用一个缓慢移动的平均网络(动量编码器)来保持从记忆库中提取的负对的一致表示。相反,BYOL使用一个移动平均网络来产生预测目标,作为稳定引导步骤的一种手段。我们在第5节中表明,这种纯粹的稳定效应也可以改进现有的对比方法。
4.方法
如前所述,BYOL使用两种神经网络来学习:在线网络和目标网络。在线网络由一组权值θ定义,由三个阶段组成:编码器fθ、投影仪gθ和预测器qθ。目标网络具有与在线网络相同的架构,但使用不同的权值ξ。目标网络提供了对在线网络进行训练的回归目标,其参数ξ是在线参数θ[54]的指数移动平均值。
代码如下:
class EMA():
def __init__(self, beta):
super().__init__()
self.beta = beta
def update_average(self, old, new):
if old is None:
return new
return old * self.beta + (1 - self.beta) * new
在线分支应用预测器头,这使得在线网络和目标网络之间的体系结构不对称。最后,我们定义了以下标准化预测和目标预测之间的均方误差,
def loss_fn(x, y):
x = F.normalize(x, dim=-1, p=2)
y = F.normalize(y, dim=-1, p=2)
return 2 - 2 * (x * y).sum(dim=-1)
我们执行一个随机优化步骤来最小化BYOL损失,只对在线网络优化。
由于没有使用显式术语来防止崩溃(如负对[10]),BYOL的目标参数更新并不是朝着Loss下降的方向。这类似于GANs,其中没有共同最小化w.r.t.的损失鉴别器和发生器的参数。因此,没有先验理由解释BYOL的参数收敛到最小的LBYOL。
实现细节
图像增强BYOL使用了与SimCLR[8]中相同的一组图像增强。首先,选择图像的随机斑块并通过随机水平翻转调整到224×224,然后是颜色失真,包括亮度、对比度的随机序列、饱和度、色度调整和可选的灰度转换。最后应用高斯模糊和偏线化算法。
from torchvision import transforms as T
class RandomApply(nn.Module):
def __init__(self, fn, p):
super().__init__()
self.fn = fn
self.p = p
def forward(self, x):
if random.random() > self.p:
return x
return self.fn(x)
# default SimCLR augmentation
DEFAULT_AUG = torch.nn.Sequential(
RandomApply(
T.ColorJitter(0.8, 0.8, 0.8, 0.2),
p = 0.3
),
T.RandomGrayscale(p=0.2),
T.RandomHorizontalFlip(),
RandomApply(
T.GaussianBlur((3, 3), (1.0, 2.0)),
p = 0.2
),
T.RandomResizedCrop((image_size, image_size)),
T.Normalize(
mean=torch.tensor([0.485, 0.456, 0.406]),
std=torch.tensor([0.229, 0.224, 0.225])),
)
使用LARS优化器。LearningRate = 0.2 × BatchSize / 256。此外,我们使用了全局1.5·10−6的权重衰减参数,同时排除了LARS自适应和权重衰减的偏差和批归一化参数。对于目标网络,指数移动平均参数τ从τbase=0.996开始,并在训练过程中增加到1。具体来说,我们将τ,1−(1−τbase)·(cos(πk/K)+1)/2设置为当前训练步数,K设置为最大训练步数。
实验略。
本文代码来源:Bootstrap Your Own Latent" self-supervised learninghttps://github.com/lucidrains/byol-pytorch
5. 结论
我们介绍了一种新的图像表示的自监督学习算法BYOL。BYOL通过预测其输出的以前版本来学习它的表示,而不使用负对。我们展示了BYOL在各种基准测试上取得了最先进的结果。特别是,在使用RmageNet-50(1×)的ImageNet线性评估协议下,BYOL实现了一种新的技术,并弥补了自监督方法和[8]的监督学习基线之间的大部分剩余差距。使用ResNet-200(2×),BYOL达到了79.6%的前1位精度,比之前的技术水平(76.8%)有所提高,同时少使用了30%的参数。
然而,BYOL仍然依赖于特定于视觉应用程序的现有增强集。为了将BYOL推广到其他模式(例如,音频、视频、文本、……),有必要为每种模式获得类似的合适的扩充。设计这样的增强功能可能需要大量的努力和专业知识。因此,自动搜索这些增强功能将是将BYOL推广到其他模式的重要下一步。