【自监督学习】iBOT in ICLR 2022

一、引言

论文: iBOT🤖: Image BERT Pre-Training with Online Tokenizer
作者: ByteDance
代码: iBOT
注意: 该方法是在另一个自监督预训练方法基础上的改进,学习之前建议掌握DINO
特点: 对于一张图片,该方法首先进行两次全局裁剪与增强得到两张全局视图,之后进行随机mask再产生两张带mask的全局视图,并分别送入教师和学生网络;学生与教师网络均有两个映射头,一个用于映射 [ CLS ] [\text{CLS}] [CLS],另一个用于映射特征图,之后以两个网络的输出一致性为损失进行学生网络的更新;教师网络由指数移动平均更新,还采用了中心化和锐化操作避免模式崩溃。

二、详情

  1. 对于一张图片,进行2次全局裁剪(面积占比在 [ 0.14 , 1 ] [0.14,1] [0.14,1],resize为224),之后对2个切片进行随机增强(翻转、色彩变化、高斯模糊、归一化等)得到2个正常的全局视图;接着按照16*16的patch分配14*14的mask,mask为1表示被遮掩,为1的概率为0.3,被遮掩的patch被设置为全0,于是又得到2个带mask的全局视图。
  2. 2个正常的全局视图送入教师网络,另外两个带mask的全局视图送入学生网络。教师网络和学生网络的结构相同初始参数也相同,可以是ViTSwin Transformer等等。教师网络和学生网络都有两个映射头,最后输出维度相同都是8192,学生网络的两个头不共享参数,教师网络的两个头共享参数。一个映射头用于映射 [ CLS ] [\textbf{CLS}] [CLS],输出2*8192,另一个映射头用于映射图像特征,输出2*196*8192。
  3. 教师网络的 [ CLS ] [\text{CLS}] [CLS]输出先减去center1(初始全0)再除以temp1=0.04之后求softmax;教师网络的图像特征输出先减去center2(初始全0)再除以temp2(前30个epoch等间隔在0.04-0.07取值,后70个epoch全为0.07)之后求softmax。学生网络的输出均先除以temp=0.1,然后求softmax再取log;最后,教师与学生网络的 [ CLS ] [\text{CLS}] [CLS]输出之间计算损失,图像特征输出之间计算损失(其实就是在标准的交叉熵损失 − p t log ⁡ p s -p_t\log p_s ptlogps中对教师网络输出引入了锐化和中心化,对学生网络输出引入了锐化)。

除以temp的操作称为锐化(sharping),减去中心的操作称为中心化(centering),两个操作叠加是为了避免模式崩溃(无论哪个图像网络输出softmax后始终是某一项很大或始终接近均匀分布)。锐化能放大分布中某一个值减小其他值,中心化能促使分布更接近均匀分布,两个相反的操作相互作用使得模式崩溃得以避免。
⚠️ 图像特征输出mask=0的部分不计算损失,也就是说该项损失是希望学生网络能够借助教师网络的指导通过非mask部分预测出被mask的部分。 [ CLS ] [\text{CLS}] [CLS]对应的损失则是希望网络能够捕捉图像中的高层语义信息。

  1. 之后更新中心center1center2,两个center均用下式更新:

center = center_momentum * center + (1 - center_momentum) * batch_center
其中,center_momentum=0.9,batch_center是当前批次所有全局视图经教师网络输出的均值( [ CLS ] [\text{CLS}] [CLS]输出的均值更新center1,图像特征输出的均值更新center2)。
其实这个操作就是指数移动平均,一般公式为 b = λ b + ( 1 − λ ) a b=\lambda b+(1-\lambda)a b=λb+(1λ)a,简单来说就是用另外一个参数更新自己,但是保留自己的一部分。

  1. 根据3中的损失更新学生网络,教师网络不用损失更新,而是用指数移动平均更新,见下式:

θ t = λ θ t + ( 1 − λ ) θ s \theta_{t}=\lambda\theta_{t}+(1-\lambda)\theta_{s} θt=λθt+(1λ)θs
其中, λ \lambda λ在训练时是遵循cosine schedule,从0.996到1变化。即用学生网络更新教师网络,但保留教师网络的一部分。
⚠️ 因教师网络的 [ CLS ] [\text{CLS}] [CLS]和图像特征共用映射头,所以只需要用上式更新 [ CLS ] [\text{CLS}] [CLS]对应的映射头。

伪代码如下:

内容概要:本文档是一份基于最新Java技术趋势的实操指南,涵盖微服务架构(Spring Cloud Alibaba)、响应式编程(Spring WebFlux + Reactor)、容器化与云原生(Docker + Kubernetes)、函数式编程与Java新特性、性能优化与调优以及单元测试与集成测试六大技术领域。针对每个领域,文档不仅列出了面试中的高频考点,还提供了详细的实操场景、具体实现步骤及示例代码。例如,在微服务架构中介绍了如何利用Nacos进行服务注册与发现、配置管理,以及使用Sentinel实现熔断限流;在响应式编程部分展示了响应式控制器开发、数据库访问和流处理的方法;对于容器化,则从Dockerfile编写到Kubernetes部署配置进行了讲解。 适合人群:具有一定的Java编程基础,尤其是正在准备面试或希望深入理解并掌握当前主流Java技术栈的研发人员。 使用场景及目标:①帮助求职者熟悉并能熟练运用微服务、响应式编程等现代Java开发技术栈应对面试;②指导开发者在实际项目中快速上手相关技术,提高开发效率和技术水平;③为那些想要深入了解Java新特性和最佳实践的程序员提供有价值的参考资料。 阅读建议:由于文档内容丰富且涉及多个方面,建议读者按照自身需求选择感兴趣的主题深入学习,同时结合实际项目进行练习,确保理论与实践相结合。对于每一个技术点,不仅要关注代码实现,更要理解背后的原理和应用场景,这样才能更好地掌握这些技能。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fulin_Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值