迁移学习-Transfer Learning
如果我们拥有大量的训练数据,或者神经网络特别的大,我们训练这样的一个模型是非常耗时的。幸运的是,有一些模型已经开源并可以公开使用的。通常,这些模型是在大量数据上进行训练的。
迁移学习的思想就是我们可以使用这些预先训练好的模型,并不断调整这个模型,使得它适应我们的问题。如下图所示:
- 如果我们拥有大量的训练数据,我们可以重新训练整个神经网络。
- 如果我们只有少量的训练数据,我们可以在预训练模型基础上,重新训练最后几层。
Q:在哪种场景可以使用预训练模型?
假设:现有适应任务A的预训练模型,和适应任务B的自身模型。
- 这两个任务应该具有相同的输入格式。
- 对于任务A,我们拥有大量的训练数据;对于任务B,数据量相对于任务A会少很多倍。
- 从任务A学习到的低阶特征,对任务B能起到提升的作用。
多任务学习-Multi-Task Learning
在常规分类任务中,通常每个实例都对应一个label。如下图所示。 第 i 个实例仅对应于第二个类。
y
i
=
(
0
1
0
0
0
)
y^{i} = (\begin{array}{c} 0\\ 1\\0\\0\\0 \end{array})
yi=(01000)
然而,在多分类学习中,一个实例会对应多个label。
y
i
=
(
0
1
1
1
0
)
y^{i} = (\begin{array}{c} 0\\ 1\\1\\1\\0 \end{array})
yi=(01110)
损失函数:
L
o
s
s
F
u
n
c
t
i
o
n
=
1
m
∑
i
=
1
m
∑
j
=
1
5
L
(
y
^
j
i
,
y
j
i
)
L
(
y
^
j
i
,
y
j
i
)
=
−
Y
j
i
l
o
g
y
^
j
i
−
(
1
−
y
j
i
)
l
o
g
(
1
−
y
j
i
)
LossFunction=\frac{1}{m}\sum^m_{i=1}\sum^5_{j=1}L(\widehat{y}^i_j,y^i_j)\\ L(\widehat{y}^i_j,y^i_j) = -Y^i_jlog\widehat{y}^i_j-(1-y^i_j)log(1-y^i_j)
LossFunction=m1i=1∑mj=1∑5L(y
ji,yji)L(y
ji,yji)=−Yjilogy
ji−(1−yji)log(1−yji)
- m为样本数
- j为第j个lable
对于多任务学习的一些Tips:
- 多任务学习会共享相同的低阶特征
- 对于多任务学习,我们可以尝试一个足够大的神经网络来处理所有任务
- 在训练集中,每个任务的实例数量相似