Unsupervised Feature Learning via Non-Parametric Instance Discrimination
文章目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0f6b2a738ddd934c63a77c3423698325.png#pic_center)
在ImageNet数据集上,top-5分类错误率明显比top-1分类错误率低。普遍地,对于某一输入图像,其softmax输出概率对应的第二类别通常与第一类别视觉上相似。如上图所示,输入图像中有一只豹子(leopard),类别为豹子(leopard)类,观察它的分类输出,这张图片前四的类别分别是豹子(leopard),美洲豹(jaguar),猎豹(cheetah)和雪豹(snow leopard)。而且我们会发现美洲豹(jaguar)类别对应的概率值要高于书架(bookcase)类别对应的概率值。从展示的示例图片上看,不同豹类图片之间的图片相似性较高,豹子和救生艇(lifeboat),购物车(shopcart)和书架(bookcase)类别之间明显存在很高的差异性。
通过这些观察,作者揭示了一种典型的区分性学习方法能够自动发现语义类别之间的明显相似性,而无需额外指导。也就是说,表面相似性不是从语义注释中获得的,而是从视觉数据本身获得的。
将类别扩展到实例,那么能否仅仅通过要求特征区分单个实例学习到一个能捕捉实例之间的明显相似性的特征表示?一个图像本身是独特的,每个图像都可能与来自于同一语义范围的其图像有显著的差异。如果不需要类别语义信息区分单个图像,学习到的特征捕捉到实例之间的相似性,类似于类别监督学习特征学习到特征之间的相似性。
方法
我们的目标是学习一个无监督的嵌入函数 v = f ( θ ) v = f \left( \theta \right) v=f(θ)。 f θ f_{\theta} fθ是参数为 θ \theta θ的深度学习网络,输入图像为 x x x,输出特征为 v v v。此嵌入会在图像空间上产生一个度量,对于实例x和y,记为 d θ ( x , y ) = ∥ f θ ( x ) − f θ ( y ) ∥ d_{\theta}\left( x, y \right) = \| f_{\theta}\left( x \right) - f_{\theta}\left( y \right) \| dθ(x,y)=∥fθ(x)−fθ(y)∥。一个好的嵌入应当将视觉上相似的图像映射到彼此相近的位置。
假设有 n n n个图像 x 1 , ⋯ , x n x_{1}, \cdots, x_{n} x1,⋯,xn, n n n个类别,它们的特征分别为 v 1 , ⋯ , v n v_{1}, \cdots, v_{n} v1,⋯,vn。对于图像 x x x,其特征为 v = f θ ( x ) v = f_{\theta}\left(x\right) v=fθ(x),使用softmax函数进行instance-level分类,它被识别为第 i i i类的条件概率如下所示:
P
(
i
∣
v
)
=
e
x
p
(
w
i
T
v
)
∑
j
=
1
n
e
x
p
(
w
j
T
v
)
(
1
)
P\left( i | v \right) = \frac{exp\left( w_{i}^{T}v \right)}{\sum_{j=1}^{n}exp\left( w_{j}^{T}v\right)} \quad \quad \quad \left(1\right)
P(i∣v)=∑j=1nexp(wjTv)exp(wiTv)(1)
w
j
w_{j}
wj为类别
j
j
j的权重向量和
w
j
T
v
w_{j}^{T}v
wjTv计算
v
v
v和第
j
j
j类的匹配程度。其中
w
j
w_{j}
wj是需要被学习的参数,我们称之为有参数的分类器。softmax参数分类的问题在于权重向量
w
j
w_{j}
wj作为类别原型,阻止了实例之间的比较。论文中使用
v
j
T
v
v_{j}^{T}v
vjTv替代
W
j
T
v
W_{j}^{T}v
WjTv,通过L2正则化层使得
∥
v
∥
=
1
\| v \| = 1
∥v∥=1,那么实例
x
x
x被识别成第
i
i
i类的条件概率如下所示
P
(
i
∣
v
)
=
e
x
p
(
v
i
T
v
/
τ
)
∑
j
=
1
n
e
x
p
(
v
j
T
v
/
τ
)
(
2
)
P\left( i | v \right) = \frac{exp\left( v_{i}^{T}v / \tau\right)}{\sum_{j=1}^{n} exp \left( v_{j}^{T}v / \tau \right)} \quad \quad \quad \left(2\right)
P(i∣v)=∑j=1nexp(vjTv/τ)exp(viTv/τ)(2)
其中
τ
\tau
τ是温度参数,控制着分布的concentration level。公式(2)没有要学习的参数变量,称为无参数的softmax分类器。
学习的目标函数为最大化联合概率 ∏ i = 1 n P θ ( i ∣ f θ ( x i ) ) \prod_{i=1}^{n} P_{\theta} \left( i | f_{\theta} \left( x_{i} \right) \right) ∏i=1nPθ(i∣fθ(xi)),或者等价于最小化对数似然的负数。
J ( θ ) = − ∑ i = 1 n l o g P ( i ∣ f θ ( x i ) ) J \left( \theta \right) = - \sum_{i=1}^{n} log P \left( i | f_{\theta} \left( x_{i} \right) \right) J(θ)=−i=1∑nlogP(i∣fθ(xi))
为了计算公式2中的概率 P ( i ∣ v ) P\left( i | v \right) P(i∣v),所有图片的 v j v_{j} vj是需要的。为了不用每次穷尽地计算这些表示,论文维护了一个储存图片特征的memory bank。假设 V = { v j } V=\{v_{j}\} V={vj}为memory bank, f i = f θ ( x i ) f_{i} = f_{\theta} \left( x_{i} \right) fi=fθ(xi)为 x i x_{i} xi的特征。在每次学习迭代中,表示 f i f_{i} fi和网络参数 θ \theta θ通过SGD进行优化,然后 f i f_{i} fi在相应的实例条目 f i → v i f_{i} \rightarrow v_{i} fi→vi处更新 V V V。初始化memory bank V V V的所有表示为单位随机向量(unit random vectors)。
NCE
对于ImageNet-1k数据集来说,120万张图片和1000个类别。但是对于instance-level,每个图像都是一类,则有120万类。
公式2的无参数softmax,需要计算与训练集中的所有实例之间的相似性,当
n
n
n比较大的时候,计算成本较高。论文使用NCE(noise-contrastive estimation)解决这个问题。基本思想是将多类分类问题转换成一组二分类问题。其中二分类任务区分数据样本和噪声样本。在memory bank中特征表示
v
v
v与第
i
i
i个样本关联的概率为:
P
(
i
∣
v
)
=
e
x
p
(
v
T
f
i
/
τ
)
Z
i
Z
i
=
∑
j
=
1
n
e
x
p
(
v
j
T
f
i
/
τ
)
(
3
)
P\left( i | v \right) = \frac{exp\left( v^{T} f_{i} / \tau \right)}{Z_{i}} \\ Z_{i} = \sum_{j=1}^{n} exp \left( v_{j}^{T} f_{i} / \tau \right) \quad \quad \quad \left(3\right)
P(i∣v)=Ziexp(vTfi/τ)Zi=j=1∑nexp(vjTfi/τ)(3)
其中 Z i Z_{i} Zi是归一化常数。假设噪声分布为 P n = 1 / n P_{n}=1/n Pn=1/n,并且噪声样本是数据样本的 m m m倍。那么对于来自于数据分布的样例 i i i,特征为 v v v的后验概率为:
h ( i , v ) = P ( D = 1 ∣ i , v ) = P ( i ∣ v ) P ( i ∣ v ) + m P n ( i ) h\left( i,v \right) = P\left( D=1|i,v \right) = \frac{P\left( i | v \right)}{P\left( i | v\right) + m P_{n}\left( i \right)} h(i,v)=P(D=1∣i,v)=P(i∣v)+mPn(i)P(i∣v)
近似训练目标是最小化数据样本和噪声样本的log后验分布的负数。公式如下:
J N C E ( θ ) = − E P d [ l o g h ( i , v ) ] − m ⋅ E p n [ l o g ( 1 − h ( i , v ′ ) ) ] J_{NCE} \left( \theta \right) = -E_{P_{d}} [ log h\left( i, v \right) ] - m \cdot E_{p_{n}} [log \left( 1 - h\left( i, {v}' \right) \right)] JNCE(θ)=−EPd[logh(i,v)]−m⋅Epn[log(1−h(i,v′))]
其中 P d P_{d} Pd表示数据分布。对于 P d P_{d} Pd, v v v是 x i x_{i} xi的特征;对于 P n P_{n} Pn, v ′ {v}' v′是从噪声分布 P n P_{n} Pn随机抽样的样本的特征。对于论文中的模型, v v v和 v ′ {v}' v′都是从无参数memory bank中抽样得到的。
计算公式3中的正则常量 Z i Z_{i} Zi消耗较大,借鉴其他论文的方法,将它看做一个常量,通过Monte Carlo 近似方法估计它的值。
Z
≃
Z
i
≃
n
E
j
[
e
x
p
(
v
j
T
f
i
/
τ
)
]
=
n
m
∑
k
=
1
m
e
x
p
(
v
j
k
T
f
i
/
τ
)
Z \simeq Z_{i} \simeq nE_{j} [exp\left( v_{j}^{T} f_{i} / \tau \right)] = \frac{n}{m}\sum_{k=1}^{m}exp\left( v_{j_{k}}^{T} f_{i} / \tau \right)
Z≃Zi≃nEj[exp(vjTfi/τ)]=mnk=1∑mexp(vjkTfi/τ)
其中
j
k
j_{k}
jk是下标的随机子集,NCE将每个样例的计算复杂度从
O
(
n
)
O\left( n \right)
O(n)降到
O
(
1
)
O\left( 1 \right)
O(1)。
Proximal Regularization
论文中的模型是instance-level的分类器,不同于常见的分类模型,每个类别有多张图片,instance-level模型每个类别一张实例。在训练过程中,每个类别仅仅被观察一次。那么学习过程会因为随机抽样而波动很大。论文采用proximal regularization的方法,通过添加迭代参数 t t t,平滑训练过程。
设当前迭代为 t t t,数据 x i x_{i} xi的特征表示为 v i ( t ) = f θ ( x i ) v_{i}^{\left( t \right)} = f_{\theta}\left( x_{i} \right) vi(t)=fθ(xi),前一个迭代的特征内存库为 V = { v ( t − 1 ) } V=\{v^{\left( t -1 \right)} \} V={v(t−1)},那么一个正样本(来自 P d P_{d} Pd分布)的损失函数为:
−
l
o
g
h
(
i
,
v
i
(
t
−
1
)
)
+
λ
∥
v
i
(
t
)
−
v
i
(
t
−
1
)
∥
2
2
-log h \left( i, v_{i}^{\left( t-1 \right)} \right) + \lambda \| v_{i}^{\left( t\right)} - v_{i}^{\left( t-1 \right)} \|_{2}^{2}
−logh(i,vi(t−1))+λ∥vi(t)−vi(t−1)∥22
随着学习的迭代,迭代之间的差异,逐渐消失,增加的损失减少到原先的损失。加入proximal regularization之后的目标方程为:
J
N
C
E
(
θ
)
=
−
E
P
d
[
l
o
g
h
(
i
,
v
i
(
t
−
1
)
)
−
λ
∥
v
i
(
t
)
−
v
i
(
t
−
1
)
∥
2
2
]
−
m
⋅
E
p
n
[
l
o
g
(
1
−
h
(
i
,
v
′
(
t
−
1
)
)
)
]
\begin{matrix} J_{NCE} \left( \theta \right) =& -E_{P_{d}} [ log h\left( i, v_{i}^{\left( t-1 \right)} \right) - \lambda \| v_{i}^{\left( t\right)} - v_{i}^{\left( t-1 \right)} \|_{2}^{2}] \\ &- m \cdot E_{p_{n}} [log \left( 1 - h\left( i, {v}'^{\left( t-1 \right)} \right) \right)] \end{matrix}
JNCE(θ)=−EPd[logh(i,vi(t−1))−λ∥vi(t)−vi(t−1)∥22]−m⋅Epn[log(1−h(i,v′(t−1)))]
Weighted k-Nearest Neighborhood Classification
对于一个测试图片 x ^ \hat{x} x^,首先计算它的特征 x ^ = f θ ( x ^ ) \hat{x} = f_{\theta}\left( \hat{x} \right) x^=fθ(x^),然后使用余弦相似度 s i = c o s ( v i , f ^ ) s_{i} = cos\left( v_{i}, \hat{f}\right) si=cos(vi,f^)与memory bank中的所有图片嵌入特征进行比较,最相似的k个邻居,表示为 N k N_{k} Nk,最后通过加权投票的方式进行预测。
假设预测的类别为 c c c,类别 c c c的总权重为 ω c = ∑ i ∈ N k α i ∗ 1 ( c i = c ) \omega_{c} = \sum_{i \in N_{k}}\alpha_{i} * 1\left( c_{i} = c\right) ωc=∑i∈Nkαi∗1(ci=c)。其中 α i = e x p ( s i / τ ) \alpha_{i} = exp\left( s_{i} / \tau \right) αi=exp(si/τ)是邻居 x i x_{i} xi的贡献度。论文在训练时选择 τ = 0.07 \tau=0.07 τ=0.07,并且设 k = 200 k=200 k=200。