1 基于样本对的损失函数
1.1 Contrastive Loss
L = 1 2 N ∑ n = 1 N y d 2 + ( 1 − y ) m a x ( m a r g i n − d , 0 ) 2 L = \frac1{2N}\sum_{n=1}Nyd^2 + (1-y)max(margin -d,0)^2 L=2N1n=1∑Nyd2+(1−y)max(margin−d,0)2
d = ∣ ∣ a n − b n ∣ ∣ d = ||a_n - b_n|| d=∣∣an−bn∣∣, d 代表两个样本特征的欧氏距离,y为两个样本是否匹配的标签,y=1代表两个样本相似或者匹配,y=0则代表不匹配,margin为设定的阈值。
仅考虑到了两个样本之间的距离
1.2 Triplet Loss
triplet:一个三元组,这个三元组是这样构成的:从训练数据集中随机选一个样本,该样本称为Anchor,然后再随机选取一个和Anchor (记为 x a x_a xa)属于同一类的样本和不同类的样本,这两个样本对应的称为Positive (记为 x p x_p xp)和Negative (记为 x n x_n xn),由此构成一个三元组.
针对三元组中的每个元素(样本),训练一个参数共享或者不共享的网络,得到三个元素的特征表达,分别记为: f ( x a ) f(x_a) f(xa)、 f ( x p ) f(x_p) f(xp)、 f ( x n ) f(x_n) f(xn)。通过学习,让 x a x_a xa和 x p x_p xp特征表达之间的距离尽可能小,而 x a x_a xa和 x n x_n xn的特征表达之间的距离尽可能大,并且要让 x a x_a xa与 x n x_n xn之间的距离和 x a x_a xa与 x p x_p xp之间的距离之间有一个最小的间隔
L
=
∑
i
N
[
∣
∣
f
(
x
i
a
)
−
f
(
x
i
p
)
∣
∣
2
2
−
∣
∣
f
(
x
i
a
)
−
f
(
x
i
n
)
∣
∣
2
2
+
α
]
+
L = \sum_i^N[||f(x_i^a) -f(x_i^p) ||_2^2 - ||f(x_i^a) -f(x_i^n) ||_2^2 +\alpha]_+
L=i∑N[∣∣f(xia)−f(xip)∣∣22−∣∣f(xia)−f(xin)∣∣22+α]+
所以最终的优化目标是拉近 a, p的距离, 拉远 a, n的距离
- easy triplets: L = 0 即 d ( a , p ) + m a r g i n < d ( a , n ) d ( a , p ) + m a r g i n <d ( a , n ) d(a,p)+margin<d(a,n)这种情况不需要优化,天然a, p的距离很近, a, n的距离远
- hard triplets: d ( a , n ) < d ( a , p ) d( a , n ) < d( a , p ) d(a,n)<d(a,p) 即a, p的距离远
- semi-hard triplets: d ( a , p ) < d ( a , n ) < d ( a , p ) + m a r g i n d(a,p) < d(a,n)<d(a,p) + margin d(a,p)<d(a,n)<d(a,p)+margin, 即a, n的距离靠的很近,但是有一个margin
为了提高计算效率,一般采样满足 semi-hard 的样本
triplet loss 考虑了正负样本之间的关系,增大类内相似度,降低类间相似度,但仅考虑了与一个负样本的关系
1.3N-pair-ms loss
N-pair-ms loss 每次参数更新的时候考虑到了 query 样本与其他多个不同类的负样本之间的关系,让query 与其他所有的类有保持距离,可以加快模型收敛速度
N-pair-ms loss 每个训练样本由N+1 元组组成,即 x, x + x^+ x+,…… x N − 1 x_{N-1} xN−1,其中 x + x^+ x+ 是相对于 x 而言的正样本,其余为负样本
具体损失函数
L
(
x
,
x
+
,
x
i
i
=
1
N
−
1
;
f
)
=
l
o
g
(
1
+
∑
i
=
1
N
−
1
e
x
p
(
f
T
f
i
−
f
T
f
+
)
)
L(x,x^+,{x_i}^{N-1}_{i=1};f) = log(1+\sum^{N-1}_{i=1}exp(f^Tf_i - f^Tf^+))
L(x,x+,xii=1N−1;f)=log(1+i=1∑N−1exp(fTfi−fTf+))
其中 $ f(.;\theta)$ 是神经网络的embedding kernel,
f
i
f_i
fi 表示负样本经过embedding层后的记过,
1.4 Multi-Similarity loss
L M S = 1 m ∑ i = 1 m { 1 α l o g [ 1 + ∑ k ∈ P i e − α ( s i k − λ ) ] + 1 β l o g [ 1 + ∑ k ∈ N i e − β ( s i k − λ ) ] } L_{MS} = \frac1m\sum_{i =1 }^m\{\frac1\alpha log[1+\sum_{k\in P_i}e^{-\alpha(s_{ik} -\lambda)}] +\frac1\beta log[1+\sum_{k\in N_i}e^{-\beta(s_{ik} -\lambda)}]\} LMS=m1i=1∑m{α1log[1+k∈Pi∑e−α(sik−λ)]+β1log[1+k∈Ni∑e−β(sik−λ)]}
S i k S_{ik} Sik=样本对的余弦相似度, α , β , λ \alpha,\beta,\lambda α,β,λ 为超参数
其中正负样本采样,正样本要满足: S i j + < m a x y k ≠ y i S i k + ϵ S_{ij}^+ < \underset{y_k \neq y_i}{max}S_{ik} + \epsilon Sij+<yk=yimaxSik+ϵ 负样本要满足: S i j − > m a x y k = y i S i k − ϵ S_{ij}^- > \underset{y_k \ = y_i}{max}S_{ik} - \epsilon Sij−>yk =yimaxSik−ϵ
其中 ϵ \epsilon ϵ 为超参数,认为设定的阈值
1.5 Circle loss
大多数的损失函数,包括triplet loss 和softmax loss损失函数,都是使类间相似性
s
n
s_n
sn和类内相似性
s
p
s_p
sp嵌入到一个相似性对,并且去最小化
s
n
−
s
p
s_n - s_p
sn−sp 。这样的优化方式是不够灵活的,因为其对每一个单一相似性分数的惩罚强度是相等的。Circle loss提出如果一个相似性得分远离最优的中心,那么其应该被更多的关注(即惩罚)。基于这个目的,circle loss重新加权那些欠优化的相似性得分
L
c
i
r
c
l
e
=
l
o
g
[
1
+
∑
j
=
1
L
e
x
p
(
γ
α
n
j
(
s
n
j
−
Δ
n
)
)
e
x
p
(
−
γ
α
p
i
(
s
p
i
−
Δ
p
)
)
]
L_{circle} = log[1+\sum_{j=1}^Lexp(\gamma\alpha_n^j(s_n^j-\Delta_n))exp(-\gamma\alpha_p^i(s_p^i-\Delta_p))]
Lcircle=log[1+j=1∑Lexp(γαnj(snj−Δn))exp(−γαpi(spi−Δp))]
其中 :$ \alpha_p^i=[O_p - s_p^i]+ $ ,$ \alpha_nj=[s_nj - O_n]+$ , O p = 1 + m O_p = 1 +m Op=1+m , 0 n = − m 0_n = -m 0n=−m , Δ p = 1 − m \Delta_p = 1-m Δp=1−m , Δ n = m \Delta_n = m Δn=m
2 基于代理的损失函数
2.1 Proxy NCA loss
这个方法提出的目的是去解决采样的问题。假设 W 代表着训练集中的一小部分数据,在采样时通过选择与 W 中距离最近的一个样本 u 作为代理 ( proxy ),即: p ( u ) = a r g m i n ω ∈ W d ( u , ω ) p(u) = argmin_{\omega \in W} d(u,\omega) p(u)=argminω∈Wd(u,ω)
则 NCA 损失为:
L
(
a
,
u
)
=
−
l
o
g
(
e
x
p
(
−
d
(
a
,
p
(
u
)
)
)
∑
z
∈
Z
e
x
p
(
−
d
(
a
,
p
(
u
)
)
)
)
+
\begin{aligned} L(a,u) = &-log(\frac{exp(-d(a,p(u)))}{\sum_{z \in Z}exp(-d(a,p(u)))}) &+ \end{aligned}
L(a,u)=−log(∑z∈Zexp(−d(a,p(u)))exp(−d(a,p(u))))+
2.2 Proxy Anchor loss
Proxy-Anchor Loss为每一个类别赋予了一个proxy,将一个batch的数据和所有的proxy之间求distance,意在拉近每个类别的数据和该类别对应的proxy之间的距离且拉远与其他类别的proxy之间的距离
L
(
x
)
=
1
∣
P
+
∣
∑
p
∈
P
+
l
o
g
(
1
+
∑
e
−
α
(
s
(
x
,
p
)
−
δ
)
x
∈
X
p
+
)
+
1
∣
P
∣
∑
p
∈
P
l
o
g
(
1
+
∑
e
α
(
s
(
x
,
p
)
+
δ
)
x
∈
X
p
−
)
\begin{aligned} L(x) = & \frac1{|P^+| } \underset{p \in P^+}{\sum}log(1+ \underset{x \in X_p ^+}{\sum e^{-\alpha(s(x,p)-\delta)}}) \\ &+ \frac1{|P|} \underset{p \in P}{\sum}log(1+ \underset{x \in X_p ^-}{\sum e^{\alpha(s(x,p)+\delta)}} ) \end{aligned}
L(x)=∣P+∣1p∈P+∑log(1+x∈Xp+∑e−α(s(x,p)−δ))+∣P∣1p∈P∑log(1+x∈Xp−∑eα(s(x,p)+δ))
3 基于分类的损失函数
3.1 Softmax loss
Softmax损失函数,实际上指代的是FC+Softmax+Cross-entropy loss。即对于神经网络提取出的特征,其首先会通过一个全连接层(FC),之后通过Softmax函数进行归一化,然后通过交叉熵损失进行分类
L
=
1
N
∑
i
L
i
=
1
N
∑
i
−
l
o
g
(
e
f
y
i
∑
i
e
f
y
i
)
L = \frac1N\sum_iL_i = \frac1N\sum_i-log(\frac{e_{f_{yi}}}{\sum_i e_{f_{yi}}})
L=N1i∑Li=N1i∑−log(∑iefyiefyi)
其中
f
i
f_i
fi表示样本 $ i$ 属于 第 $ j $ 个类别的可能性,
f
y
i
f_{yi}
fyi 表示 $ i $ 属于其真实类别的可能性
f j f_j fj实际上就是上面提到的FC层的输出,其是样本与 x x x FC层权重 的 w w w 内积(等价于余弦相似性)。实际上,我们可以将分类的过程,理解为计算样本与 x x x 权重 w j w_j wj 的余弦相似性,与 x x x 最相似的 w j w_j wj 便对应着 x x x 的类别。在这个层面上,实际上网络的学习过程是学习能够表示每种类别特征的权重 w j w_j wj ,然后对于任意输入样本,通过与 w j w_j wj 进行比对,来完成类别的预测。
3.2 L_Softmax loss
Softmax 无法确保类内的紧凑和类间的疏离 , Large Margin Softmax Loss(简称L-Softmax loss),其主要思想是在标准的Softmax loss中加入了一个角度约束, 强制让对应类别的W和x夹角增加到原来的m倍, 确保不同类别之间的夹角增大,同时类内分布也更加的紧凑 。
假定样本 $ x$ 属于类别 1 ,则要满足 ∣ ∣ w 1 ∣ ∣ ∣ ∣ x ∣ ∣ c o n ( m θ 1 ) > ∣ ∣ w 2 ∣ ∣ ∣ ∣ x ∣ ∣ c o n s ( θ 2 ) , θ 1 ∈ [ 0 , π m ] ||w_1||||x||con(m\theta_1) > ||w_2||||x||cons(\theta_2),\theta_1 \in [0,\frac\pi m] ∣∣w1∣∣∣∣x∣∣con(mθ1)>∣∣w2∣∣∣∣x∣∣cons(θ2),θ1∈[0,mπ] ,m为整数,cos在区间内单减,则有 ∣ ∣ w 1 ∣ ∣ ∣ ∣ x ∣ ∣ c o n ( θ 1 ) > ∣ ∣ w 2 ∣ ∣ ∣ ∣ x ∣ ∣ c o n s ( m θ 1 ) ||w_1||||x||con(\theta_1) > ||w_2||||x||cons(m\theta_1) ∣∣w1∣∣∣∣x∣∣con(θ1)>∣∣w2∣∣∣∣x∣∣cons(mθ1) ,约束要求变得更加严格了。
具体损失函数如下
L i = − l o g ( e ∣ ∣ W y i ∣ ∣ ∣ ∣ x i ∣ ∣ ψ ( θ y i ) e ∣ ∣ W y i ∣ ∣ ∣ ∣ x i ∣ ∣ ψ ( θ y i ) + ∑ j ≠ y i e ∣ ∣ W y i ∣ ∣ ∣ ∣ x i ∣ ∣ c o n s ( θ y i ) ) L_i = -log(\frac{e^{||W_{y_i}|| ||x_i|| \psi(\theta_{y_i})}}{e^{||W_{y_i}|| ||x_i||\psi(\theta_{y_i})} + \sum_{j \neq y_i} e^{||W_{y_i}|| ||x_i||cons(\theta_{y_i})}}) Li=−log(e∣∣Wyi∣∣∣∣xi∣∣ψ(θyi)+∑j=yie∣∣Wyi∣∣∣∣xi∣∣cons(θyi)e∣∣Wyi∣∣∣∣xi∣∣ψ(θyi))
ψ ( θ ) = ( − 1 ) k c o s ( m θ ) − 2 k , θ ∈ [ k π m , ( k + 1 ) π m ] \psi(\theta) = (-1)^k cos(m\theta) - 2k,\theta \in [\frac{k\pi}m,\frac{(k+1)\pi}m] ψ(θ)=(−1)kcos(mθ)−2k,θ∈[mkπ,m(k+1)π]
3.3 A-softmax loss
在 L_Softmax 的基础上添加了两个限制条件 ∣ ∣ W ∣ ∣ = 1 ||W||=1 ∣∣W∣∣=1( 通过 L2 归一化来固定$ ||Wj|| = 1$ )和 b = 0 b=0 b=0 ,使得预测仅取决于W和x之间的角度, 归一化了权值W,让训练更加集中在优化深度特征映射和特征向量角度上,降低样本数量不均衡问题。
L i = − l o g ( e ∣ ∣ x i ∣ ∣ ψ ( θ y i , i ) e ∣ ∣ x i ∣ ∣ ψ ( θ y i , i ) + ∑ j ≠ y i e ∣ ∣ x i ∣ ∣ c o n s ( θ y i , i ) ) L_i = -log(\frac{e^{ ||x_i|| \psi(\theta_{y_i},i)}}{e^{ ||x_i||\psi(\theta_{y_i},i)} + \sum_{j \neq y_i} e^{||x_i||cons(\theta_{y_i},i)}}) Li=−log(e∣∣xi∣∣ψ(θyi,i)+∑j=yie∣∣xi∣∣cons(θyi,i)e∣∣xi∣∣ψ(θyi,i))
ψ ( θ ) = ( − 1 ) k c o s ( m θ ) − 2 k , θ ∈ [ k π m , ( k + 1 ) π m ] \psi(\theta) = (-1)^k cos(m\theta) - 2k,\theta \in [\frac{k\pi}m,\frac{(k+1)\pi}m] ψ(θ)=(−1)kcos(mθ)−2k,θ∈[mkπ,m(k+1)π]
m = 1.5 降低训练难度,让模型更快收敛
3.4 Center loss
Center loss 能够直接对样本特征之间的距离进行约束。Center loss 添加的约束是特征与同类别的平均特征的距离要足够小,这要求同类特征要接近它们的中心点。为每个类别学习一个中心,并将每个类别的所有特征向量拉向对应类别中心,联合Softmax一起使用
L
=
L
s
+
λ
L
c
=
−
∑
i
=
1
m
l
o
g
e
W
y
i
T
x
i
+
b
y
i
∑
j
=
1
n
e
W
y
i
T
x
i
+
b
y
i
+
λ
2
∑
i
=
1
m
∣
∣
x
i
−
c
y
i
∣
∣
2
2
\begin{aligned} L &= L_s +\lambda L_c \\ &=-\sum_{i=1}^mlog\frac{e^{W^T_{y_i}x_i + b_{y_i}}}{\sum^n_{j=1} e^{W^T_{y_i}x_i + b_{y_i}}} +\frac\lambda2\sum^m_{i=1}||x_i - c_{y_i}||^2_2 \end{aligned}
L=Ls+λLc=−i=1∑mlog∑j=1neWyiTxi+byieWyiTxi+byi+2λi=1∑m∣∣xi−cyi∣∣22
Center Loss能很好地控制类内距离,但控制类间距离能力不足,并且也无法通过角度进行更精细地学习
3.5 CosFace loss
Cosface主要是通过L2归一化特征和权重向量以消除径向变化,并乘以一个缩放系数,忽略偏置项,增加margin
L
=
−
1
N
∑
i
=
1
N
l
o
g
e
s
(
c
o
s
(
θ
y
i
,
i
)
−
m
)
e
s
(
c
o
s
(
θ
y
i
,
i
)
−
m
)
+
∑
j
=
1
,
j
≠
y
i
n
e
s
c
o
s
(
θ
j
,
i
)
L = -\frac1N\sum^N_{i=1}log\frac{e^{s(cos(\theta_{y_i},i)-m)}}{e^{s(cos(\theta_{y_i},i)-m)} + \sum^n_{j=1,j\neq y_i}e^{scos(\theta_j,i)}}
L=−N1i=1∑Nloges(cos(θyi,i)−m)+∑j=1,j=yinescos(θj,i)es(cos(θyi,i)−m)
3.6 ArcFace loss
在CosFace的基础上,通过固定 ∣ ∣ x ∣ ∣ = s ||x|| = s ∣∣x∣∣=s 消除了径向方向的变化 , ArcFace 将惩罚项由cosine函数外移到了函数内,在训练稳定的同时更进一步地提升了人脸识别网络的辨别能力
L = − 1 N ∑ i = 1 N l o g e s ( c o s ( θ y i + m ) ) e s ( c o s ( θ y i + m ) ) + ∑ j = 1 , j ≠ y i n e s c o s ( θ j ) L = -\frac1N\sum^N_{i=1}log\frac{e^{s(cos(\theta_{y_i}+m))}}{e^{s(cos(\theta_{y_i}+m))} + \sum^n_{j=1,j\neq y_i}e^{s\ cos(\theta_j)}} L=−N1i=1∑Nloges(cos(θyi+m))+∑j=1,j=yines cos(θj)es(cos(θyi+m))