BYOL
BYOL
MoCo,SimCLR等对比学习方法都依赖于负样本,BYOL不需要负样本也能在ImageNet上取得74.3%的top-1分类准确率。BYOL使用两个神经网络,online网络和targets网络。online网络的参数设为 θ \theta θ,由三部分组成,编码器 f θ f_{\theta} fθ,projector g θ g_{\theta} gθ和projector q θ q_{\theta} qθ;target网络与online网络有相同的架构,但是拥有不同的参数 ξ \xi ξ。target网络提供回归目标训练online网络,但是target网络的参数 ξ \xi ξ采用EMA(指数滑动平均)公式(与MoCo的动量更新公式相似)进行更新。公式为 ξ ← τ ξ + ( 1 − τ ) θ \xi \leftarrow \tau \xi + \left( 1 - \tau \right)\theta ξ←τξ+(1−τ)θ
对于位于图像集 D D D中的一张图像 x x x,使用两种数据增广方式对图像 x x x进行扩增得到两种扩增视图 v v v和 v ′ {v}' v′,然后第一个扩增视图 v v v经过online网络得到表示 y θ = f θ ( v ) y_{\theta}=f_{\theta}\left( v \right) yθ=fθ(v)和映射 z θ = g θ ( v ) z_{\theta} = g_{\theta}\left( v \right) zθ=gθ(v),将第二个扩增视图 v ′ {v}' v′喂入target网络也分别得到表示 y ξ ′ = f ξ ( v ′ ) {y}'_{\xi}=f_{\xi}\left( {v}' \right) yξ′=fξ(v′)和映射输出 z ξ ′ = g ξ ( v ′ ) {z}'_{\xi} = g_{\xi}\left( {v}' \right) zξ′=gξ(v′)。online网络比target网络多了预测输出 q θ ( z θ ) q_{\theta}\left( z_{\theta} \right) qθ(zθ),分别对 q θ ( z θ ) q_{\theta}\left( z_{\theta} \right) qθ(zθ)和 z ξ ′ {z}'_{\xi} zξ′进行l2正则化得到 q ˉ θ ( z θ ) = q θ ( z θ ) / ∥ q θ ( z θ ) ∥ 2 \bar{q}_{\theta}\left( z_{\theta} \right) = q_{\theta}\left( z_{\theta} \right) / \| q_{\theta}\left( z_{\theta} \right) \|_{2} qˉθ(zθ)=qθ(zθ)/∥qθ(zθ)∥2和 z ˉ ξ ′ = z ξ ′ / ∥ z ξ ′ ∥ 2 {\bar{z}}'_{\xi} = {z}'_{\xi} / \| {z}'_{\xi} \|_{2} zˉξ′=zξ′/∥zξ′∥2,最后定义正则化的预测输出 q ˉ θ \bar{q}_{\theta} qˉθ和target网络的映射输出 z ˉ ξ ′ {\bar{z}}'_{\xi} zˉξ′的MSE函数作为损失函数。
L θ , ξ = ∥ q ˉ θ ( z θ ) − z ˉ ξ ′ ∥ 2 2 = 2 − 2 ⋅ ⟨ q θ ( z θ ) , z ˉ ξ ′ ⟩ ∥ q θ ( z θ ) ∥ 2 ⋅ ∥ z ξ ′ ∥ 2 L_{\theta, \xi} = \| \bar{q}_{\theta}\left( z_{\theta} \right) - {\bar{z}}'_{\xi} \|_{2}^{2} = 2 - 2 \cdot \frac{\left \langle q_{\theta}\left( z_{\theta} \right), {\bar{z}}'_{\xi} \right \rangle}{\| q_{\theta}\left( z_{\theta} \right) \|_{2} \cdot \| {z}'_{\xi} \|_{2} } Lθ,ξ=∥qˉθ(zθ)−zˉξ′∥22=2−2⋅∥qθ(zθ)∥2⋅∥zξ′∥2⟨qθ(zθ),zˉξ′⟩
通过将 v ′ {v}' v′喂入online网络和将 v v v喂入targets网络得到对称损失函数 L ~ θ , ξ \tilde{L}_{\theta, \xi} L~θ,ξ, BYOL总的损失函数为 L θ , ξ B Y O L = L θ , ξ + L ~ θ , ξ L_{\theta, \xi}^{BYOL} = L_{\theta, \xi} + \tilde{L}_{\theta, \xi} Lθ,ξBYOL=Lθ,ξ+L~θ,ξ。模型训练过程中只有参数 θ \theta θ根据梯度进行更新,参数 ξ \xi ξ依据EMA公式进行更新。
算法对比
SimCLR算法将某一输入图像 x x x的两个不同views喂入相同的网络得到两个projection输出 z z z和 z ′ {z}' z′,SimCLR对比损失的宗旨是:最大化输入图像 x x x的两个projection输出 z z z和 z ′ {z}' z′之间的相似性,同时最小化与同一batch中的其他图像的projection之间的相似性。MoCo V2借鉴了SimCLR中的数据增广和projection层,减少batch size并提高性能。不同于SimCLR,MoCo V2中应用了动量更新,编码器分成了online 网络和momentum网络,online网络训练时通过SGD进行更新,momentum网络则是基于online网络参数的滑动平均进行更新。BYOL借鉴了MoCo的momentum网络,添加了一个MLP层 q θ q_{\theta} qθ从 z z z预测 z ′ {z}' z′, p = q θ ( z ) p = q_{\theta}\left( z \right) p=qθ(z)。BYOL用正则化后的目标 z ′ {z}' z′和正则化后映射输出 p p p的L2损失函数替代了对比损失函数。BYOL中不需要负样本,所以BYOL不需要memory bank。
- SimCLR中的MLP,每个线性层后都带有BN
- MoCo V2中的MLP,不使用BN
- BYOL中的MLP,只在第一个线性层之后带有BN
由于这三个算法中的MLP中BN的使用不同,导致使用MoCo中的MLP去训练BYOL时,模型的表现和模型随机的效果接近。参考[3]的博客作者发现:即使在损失函数中没有负样本,BN也隐含地在BYOL中引入对比学习。显然,这和BYOL算法不使用负样本的思想相悖。
BN的作用
为了驳回BYOL需要BN防止模型坍塌,是因为BN提供隐含的负样本,这一假设,BYOL论文作者又做了大量实验,探索在SimCLR和BYOL不同组件(编码器,SimCLR和BYOL的projector和BYOL的predictor)中使用不同正则化(BN or LN)和移除正则化的影响。实验结果如下图所示。从下图中可以看出,删除BYOL中的所有BN实例,BYOL的表现和随机模型效果差不多。这对BYOL是独有的,因为SimCLR在相同的情况下,表现良好。然而,仅在BYOL中的编码中加入BN实例就足以使得BYOL取得较好的性能。
当使用不用统计信息的LN替换BN时,BYOL模型坍塌,但是SimCLR却表现良好,BYOL和SimCLR模型性能的差异似乎更支持BYOL需要BN中提供的隐含负样本防止模型坍塌这一假设。然而,BN似乎主要作用于编码器。已知标准初始化会导致条件变差,BYOL在创建自己的目标时,更容易受到不正确初始化的影响,因此,论文作者假设BN在BYOL中的主要作用是补偿不正确的初始化,而不是BN隐含提供负样本的假设。
为了验证上述的假设,作者设计了不带BN的适当的初始化实验模拟BN对初始规模和动态训练的影响。1000个epoch之后,初始化实验的线性验证取得了65.7%的top-1准确率,相比于baseline模型的74.3%top-1准确率有所下降,但是也能证明BYOL在不使用BN的情况下,可以学习到非坍塌表示,而且也能证明BN的另一个作用是提供更好地初始规模和训练动态。使用GN代替所有的BN,并通过WS方案对卷积和线性参数进行权重标准化。由于GN和WS都不计算批处理统计信息,所以使用GN+WS的BYOL无法处理批处理中的元素,因此它同样无法实现批处理隐式对比机制。实验证明,没有BN的BYOL算法也能保持其大部分性能。
参考
- Bootstrap Your Own Latent A New Approach to Self-Supervised Learning
- BYOL works even without batch statistics
- Understanding Self-Supervised and Contrastive Learning with “Bootstrap Your Own Latent” (BYOL)
附录
指数滑动平均
EMA(Exponential Moving Average)指数滑动平均,是一种给与最近数据更高权重的平均方法,也被称为权重滑动平均(weighted moving average)。在深度学习优化过程中, θ t \theta_{t} θt是 t t t时刻的模型参数, v t v_{t} vt是 t t t时刻的影子参数,在模型训练过程中, θ t \theta_{t} θt的参数的更新与梯度下降有关 θ t = θ n − 1 − α ⋅ ▽ θ J ( θ ) \theta_{t} = \theta_{n-1} - \alpha \cdot \triangledown_{\theta} J\left( \theta\right) θt=θn−1−α⋅▽θJ(θ)(其中 α \alpha α为学习率, J ( θ ) J\left( \theta\right) J(θ)为损失函数关于参数 θ \theta θ的偏导数), v t v_{t} vt的更新与 θ t \theta_{t} θt有关,公式如下: v t = β ⋅ v t − 1 + ( 1 − β ) ⋅ θ t v_{t}= \beta \cdot v_{t-1} + \left( 1 - \beta \right) \cdot \theta_{t} vt=β⋅vt−1+(1−β)⋅θt。
为了简单起见,将学习率设为1, t − 1 t-1 t−1时刻的梯度为 g t − 1 g_{t-1} gt−1,设 θ t = θ t − 1 − g t − 1 \theta_{t} = \theta_{t-1} - g_{t-1} θt=θt−1−gt−1,对其进行变换,如下所示:
θ
n
=
θ
t
−
1
−
g
t
−
1
=
θ
t
−
2
−
g
t
−
1
−
g
t
−
2
=
θ
1
−
∑
i
=
1
n
−
1
g
i
\begin{matrix} \theta_{n} &= \theta_{t-1} - g_{t-1} \quad \quad \quad \\ &= \theta_{t-2} - g_{t-1} - g_{t-2} \; \\ & = \theta_{1} - \sum_{i=1}^{n-1}g_{i} \quad \quad \quad \end{matrix}
θn=θt−1−gt−1=θt−2−gt−1−gt−2=θ1−∑i=1n−1gi
同样对影子权重
v
t
v_{t}
vt进行变换,如下所示:
v
t
=
β
⋅
v
t
−
1
+
(
1
−
β
)
⋅
θ
t
=
β
(
β
⋅
v
t
−
2
(
1
−
β
)
⋅
θ
t
−
1
)
+
(
1
−
β
)
⋅
θ
t
=
β
n
v
0
+
(
1
−
β
)
(
θ
n
+
β
θ
n
−
1
+
⋯
+
β
n
−
1
θ
n
)
=
θ
1
−
∑
i
=
1
n
−
1
(
1
−
β
n
−
i
)
g
i
\begin{matrix} v_{t} &= \beta \cdot v_{t-1} + \left( 1 - \beta \right) \cdot \theta_{t} \quad \quad \quad \quad \quad \quad \quad \quad \quad \; \\ &= \beta\left( \beta \cdot v_{t-2}\left( 1 - \beta \right) \cdot \theta_{t-1} \right) + \left( 1 - \beta \right) \cdot \theta_{t} \quad \quad \\ &= \beta^{n}v_{0} + \left( 1 - \beta \right) \left( \theta_{n} + \beta \theta_{n-1} + \cdots + \beta^{n-1} \theta_{n} \right) \\ & = \theta_{1} - \sum_{i=1}^{n-1} \left( 1- \beta^{n-i}\right)g_{i} \quad \quad \quad \quad \quad \quad \quad \quad \quad \end{matrix}
vt=β⋅vt−1+(1−β)⋅θt=β(β⋅vt−2(1−β)⋅θt−1)+(1−β)⋅θt=βnv0+(1−β)(θn+βθn−1+⋯+βn−1θn)=θ1−∑i=1n−1(1−βn−i)gi
对于
t
t
t时刻的参数
θ
t
\theta_{t}
θt和
v
t
v_{t}
vt,
v
t
v_{t}
vt比
θ
t
\theta_{t}
θt更新地更缓慢。
Group normalization
对于维度为 ( N , H , W , C ) \left( N, H, W, C \right) (N,H,W,C)的张量 X X X,GN首先将通道切分成 G G G个大小相同的组,然后在大小为 ( 1 , H , W , C / G ) \left( 1, H, W, C/G \right) (1,H,W,C/G)不相交的切片上计算平均值和标准差从而规范化激活。当 G = 1 G=1 G=1时,GN相当于LN(Layer Normalization);当 G = C G=C G=C时,GN相当于IN(Instance Normalization)。重要的是,GN在每个批次元素上独立运行,因而它不依赖批次统计信息。
Weight standardization
WS使用权重统计信息规范化每个激活对应的权重。权重矩阵 W W W中每一行被正则化得到一个新的权重矩阵 W ^ \hat{W} W^。只有归一化权重 W ^ \hat{W} W^用于计算卷积输出,但是损失根据非标准化权重 W W W进行区分。
W ^ i , j = W i , j − μ i σ i , w i t h μ i = 1 I ∑ j = 1 I W i , j a n d σ i = ε + 1 I ∑ j = 1 I ( W i , j − μ ) 2 \begin{matrix} \hat{W}_{i,j} = \frac{W_{i,j} - \mu_{i}}{\sigma_{i}} , \\ with \quad \mu_{i} = \frac{1}{I} \sum_{j=1}^{I} W_{i,j} \\ and \quad \sigma_{i}= \sqrt{ \varepsilon + \frac{1}{I} \sum_{j=1}^{I} \left( W_{i,j} - \mu \right)^{2}} \end{matrix} W^i,j=σiWi,j−μi,withμi=I1∑j=1IWi,jandσi=ε+I1∑j=1I(Wi,j−μ)2
其中 I I I是输入维度, ε = 1 0 − 4 \varepsilon = 10^{-4} ε=10−4。