多任务学习给出多个监督信息(标签),利用任务之间的相关性互相促进。
案例1-人脸识别
香港中文大学汤晓鸥组发表在NIPS14的论文《Deep Learning Face Representation by Joint Identification-Verification》,提出了一种联合训练人脸确认损失和人脸分类损失的多任务人脸识别网络DeepID2(Deep IDentification-verification features),网络结构如下图所示:
DeepID2中共有两个损失函数,分别为人脸分类损失函数,对应于Caffe中的SoftmaxLoss:
I
d
e
n
t
(
f
,
t
,
θ
i
d
)
=
−
∑
−
p
i
l
o
g
p
^
i
=
−
∑
p
^
t
Ident(f,t,\theta_{id})=-\sum-p_ilog\hat p_i=-\sum\hat p_t
Ident(f,t,θid)=−∑−pilogp^i=−∑p^t
I
d
e
n
t
(
f
,
t
,
θ
i
d
)
Ident(f,t,\theta_{id})
Ident(f,t,θid)表示分类任务的损失函数,
f
f
f为DeepID2特征向量,
θ
i
d
\theta_{id}
θid为Softmax层参数,
p
i
p_i
pi为属于第
i
i
i类的先验概率,即对于所有类别
i
i
i,
p
i
=
0
p_i=0
pi=0,除了
p
t
=
1
p_t=1
pt=1,
t
t
t为目标类别。
另外一个是人脸确认损失函数,对应于Caffe中的Contrastive Loss:
V
e
r
i
f
(
f
i
,
f
j
,
y
i
j
,
θ
v
e
)
=
{
1
2
∥
f
i
−
f
j
∥
2
,
if
y
i
j
=
1
1
2
m
a
x
(
0
,
m
−
∥
f
i
−
f
j
∥
)
2
,
if
y
i
j
=
−
1
Verif(f_i,f_j,y_{ij},\theta_{ve})=\begin{cases} \frac 1 2\Vert f_i-f_j\Vert^2, & \text{if } y_{ij}=1 \\ \frac 1 2 max(0,m-\Vert f_i-f_j\Vert)^2, & \text{if } y_{ij}=-1 \end{cases}
Verif(fi,fj,yij,θve)={21∥fi−fj∥2,21max(0,m−∥fi−fj∥)2,if yij=1if yij=−1
V
e
r
i
f
(
f
i
,
f
j
,
y
i
j
,
θ
v
e
)
Verif(f_i,f_j,y_{ij},\theta_{ve})
Verif(fi,fj,yij,θve)为度量学习任务的损失函数,
f
i
,
f
j
f_i,f_j
fi,fj为图片对(
i
,
j
i,j
i,j)的特征向量。
y
i
j
=
1
y_{ij}=1
yij=1表示(
i
,
j
i,j
i,j)属于同一类。
训练过程如下:
补充:
第二次看这篇论文,有了些新的体会:
论文也一直在强调为什么结合分类学习和对比学习效果会更好,论文原话:
“The face identification task increases the inter-personal variations by drawing DeepID2 extracted from different identities apart, while the face verification task reduces the intra-personal variations by pulling DeepID2 extracted from the same identity together”
总结为一句话就是:扩大类间距离和缩小类内距离。
第一次看时不是很理解,现在有了新的看法:
- 分类任务旨在区分不同类,理论上,只要类别不同学习到的特征肯定不同,但是如果类别相同的话就无法保证特征一定相同,可能会出现同一个人脸由于表情不同学习到了不同的特征。
- 验证这个任务从另一个方面提取特征:只要类别相同(即相似),提取到的特征相似,类别不同,特征就不同。但是呢提取到的特征不能用于分类,只能做区分。所以说两个任务具有一定的互补性。
而这篇论文主要目的是为了人脸识别,也就是说验证为主(分类任务是为了进一步提高验证的精度)。所以论文说了这句话:“ while the classification accuracy on identities in the training set is not crucial for us”。
下面实验为证:
λ
\lambda
λ是两个任务的比重,
λ
=
0
\lambda=0
λ=0表示只用了分类任务,
λ
=
+
∞
\lambda=+\infty
λ=+∞表示只用了验证任务,
λ
=
0.05
\lambda=0.05
λ=0.05时验证精度最高(即验证任务的比重为5%)。可以看见
λ
=
0
\lambda=0
λ=0时类间距离最大,同时类内距离同样也很大。
λ
=
+
∞
\lambda=+\infty
λ=+∞时无论类间距离还是类内距离都很小,
λ
=
0.05
\lambda=0.05
λ=0.05则做了一个很好的权衡。
案例2-Text-CNN
《Text-Attentional Convolutional Neural Network for Scene Text Detection》一文中介绍了TextCNN在传统CNN基础上加上了两个辅任务(auxiliary tasks)。
- 主任务:判断图片块是否含有字符(text/non-text,二分类问题)
- 辅任务1:给图片块中的字符分类(‘0-9,a-z,A-Z’,62类分类问题)
- 辅任务2:用Binary Mask表示字符位置(回归问题)
传统MTL训练过程中将所有任务的重要性视为相同,但是在这个模型中显然三个任务的重要性不同,比如低层的字符区域学习(辅任务2)比主任务的二分类要复杂得多,这会导致学习难度和收敛速率不同,因此引入的重要性因子
λ
\lambda
λ 。
a
r
g
m
i
n
W
m
,
W
a
∑
i
=
1
N
L
m
(
y
i
m
,
f
(
x
i
;
W
m
)
)
+
∑
i
=
1
N
∑
a
∈
A
λ
a
L
a
(
y
a
,
f
(
x
i
;
W
a
)
)
\mathop {arg min}_{W^m,W^a}\sum _{i=1}^N\mathcal L^m(y_i^m,f(x_i;W^m))+\sum_{i=1}^N\sum_{a\in A}\lambda^a\mathcal L^a(y^a,f(x_i;W^a))
argminWm,Wai=1∑NLm(yim,f(xi;Wm))+i=1∑Na∈A∑λaLa(ya,f(xi;Wa))
这里
A
A
A表示辅任务集,
N
N
N为训练样本数量,
L
\mathcal L
L为损失函数。其中正则项省略了。
损失函数的具体表示(分别对应上述的三个任务):
L
B
(
y
i
b
,
f
(
x
i
;
W
b
)
=
y
i
b
l
o
g
(
p
(
y
i
b
∣
x
i
;
W
b
)
)
,
\mathcal L^B(y_i^b,f(x_i;W^b)=y_i^blog(p(y_i^b|x_i;W^b)),
LB(yib,f(xi;Wb)=yiblog(p(yib∣xi;Wb)),
L
L
(
y
i
l
,
f
(
x
i
;
W
l
)
=
y
i
l
l
o
g
(
p
(
y
i
l
∣
x
i
;
W
l
)
)
,
\mathcal L^L(y_i^l,f(x_i;W^l)=y_i^llog(p(y_i^l|x_i;W^l)),
LL(yil,f(xi;Wl)=yillog(p(yil∣xi;Wl)),
L
R
(
y
i
r
,
f
(
x
i
;
W
r
)
=
∥
y
i
r
−
f
(
x
i
;
W
r
)
∥
2
.
\mathcal L^R(y_i^r,f(x_i;W^r)=\Vert y_i^r-f(x_i;W^r)\Vert^2.
LR(yir,f(xi;Wr)=∥yir−f(xi;Wr)∥2.
其中
x
i
∈
R
32
×
32
×
3
x_i \in \mathbb R^{32\times 32\times 3}
xi∈R32×32×3,
y
i
b
=
{
0
,
1
}
∈
R
2
y_i^b=\{0,1\} \in \mathbb R^2
yib={0,1}∈R2,
y
i
l
=
{
0...9
,
a
.
.
.
z
,
A
.
.
.
Z
}
∈
R
62
y_i^l=\{0...9,a...z,A...Z\} \in \mathbb R^{62}
yil={0...9,a...z,A...Z}∈R62,
y
i
r
=
{
0
,
1
}
∈
R
32
×
32
y_i^r=\{0,1\} \in \mathbb R^{32\times 32}
yir={0,1}∈R32×32
训练过程类似于人眼识别图片中是否含有文字的过程:首先从复杂背景中定位文字区域(where),然后识别文字内容是什么(what),最后判断图片中是否含有文字(whether)。
先联合训练两个辅任务,接着停止训练辅任务2,继续训练辅任务1和主任务。
案例3-细粒度车辆分类
《Embedding Label Structures for Fine-Grained Feature Representation》介绍了将SoftmaxLoss和TripletLoss结合在一个网络中进行多任务训练的方法。
网络结构如下:
提醒注意的是为了计算Tiplet Loss,特征进行了L2范数归一操作。图中涉及到的Structured Label是为了进一步提升分类效果。
SoftmaxLoss:
E
s
(
r
;
l
)
=
1
N
∑
i
=
1
N
−
l
o
g
e
f
s
(
r
i
,
l
i
)
∑
c
=
1
C
e
f
s
(
r
i
,
c
)
E_s(r; l) =\frac 1 N \sum_{i=1}^N -log \frac {e^{f_s(r_i,l_i)}} {\sum_{c=1}^C e^{f_s(r_i,c)}}
Es(r;l)=N1i=1∑N−log∑c=1Cefs(ri,c)efs(ri,li)
其中
f
s
(
r
i
,
c
)
f_s(r_i,c)
fs(ri,c)表示最后的全连接层在输入为
r
i
r_i
ri下,第c类的输出。
l
l
l为对应输入的类别标签。
TripletLoss:
E
t
(
r
,
p
,
n
,
m
)
=
1
2
N
∑
i
=
1
N
m
a
x
{
0
,
D
(
r
i
,
p
i
)
−
D
(
r
i
,
n
i
)
+
m
}
E_t(r,p,n,m)=\frac 1 {2N} \sum_{i=1}^N max\{0,\mathscr D(r_i,p_i)-\mathscr D(r_i,n_i)+m\}
Et(r,p,n,m)=2N1i=1∑Nmax{0,D(ri,pi)−D(ri,ni)+m}
其中
D
(
⋅
,
⋅
)
\mathscr D(\cdot,\cdot)
D(⋅,⋅)表示两个特征向量
f
(
.
)
f(.)
f(.)(L2范数归一后)之间的欧式距离。
m
m
m为边距最小边距。
最终的Loss:
E
=
λ
s
E
s
(
r
;
l
)
+
(
1
−
λ
s
)
E
t
(
r
;
p
;
n
;
m
)
E = \lambda_s E_s(r; l) + (1 - \lambda_s)E_t(r; p; n;m)
E=λsEs(r;l)+(1−λs)Et(r;p;n;m)