MCD算法及代码理解
这次的内容回归到了我目前的研究领域 – 迁移学习,更细的范围是领域自适应,迁移学习中最简单、最基础的一种问题设置场景。本文是发表在CVPR 2018上的一篇论文,这篇论文从一个基础理论出发,去理解域适应这个问题,并在理解、分析理论的基础上设计了本文中的MCD算法,可以说算法思想有很好的insight,设计的算法也很合理,个人理解也可以用作迁移学习中的一个基础框架。
1.背景知识
机器学习或是深度学习在最近的十几年取得了非常大的成功,其应用领域包括音频、图像、视频、文本等各个方面,其成功的背后依靠大量的有标注数据。而在许多现实场景中,由于获取成本较高或条件受限,有标注的数据很难获得,更多的情况下,我们只能够获得少量的有标注数据甚至无有标注数据。因此,如何在具有少量有标注数据甚至在无有标注数据的情况下训练一个好的学习模型就成为一个有待探索的问题。解决上述问题的方式有很多学习范式,包括半监督学习,无监督学习,主动学习等。本文是通过迁移学习的方式来解决这个问题,其基本思想是将需要建立学习模型的领域叫做目标域,我们先找到一个和目标域相似但不同的领域,被称为源域,源域中含有大量的有标注数据,我们希望能够从源领域中学习到两个领域的共享知识并将其迁移到目标领域中,从而提高目标域的学习效果。这一过程也与人类学习知识的过程相似,形象来说就是能够达到举一反三的能力。
现有的域适用方法可以分为基于统计指标优化及基于对抗学习两种方式,从2014年对抗生成网络(GAN)兴起之后,这一方法也逐渐被人用于解决迁移学习问题,最早的基于对抗网络的算法结构如图1所示:本网络中包括一个生成器G,一个分类器F,一个判别器D,判别器用于将两个领域的数据进行判别(源域数据标记为1,目标域数据标记为0),特征提取器用于提取领域无关的特征从而迷惑判别器,分类器用于将源域数据进行分类,其损失函数为:
2.算法思想
针对于最初的基于对抗网络的算法,提出了各种的改进算法,本算法是通过对2010年的一个迁移学习理论出发,去发展出了新的算法。
首先,2010年有一篇经典的迁移学习理论文章,其给出了目标域上的泛化误差与两个域及特定分类器之间的关系,结果如下:从上述理论我们可以得出,目标域上的泛化出于由源域上的泛化误差及两个领域之间的差异进行界定,其中领域差异通过指标
d
H
δ
H
d_{H\delta H}
dHδH距离进行测量,这也从理论上给出后续我们设计算法的思路,即寻找一个分类器h,使得其在源域上的误差及两个领域之间的差异最小。
针对于
d
H
δ
H
d_{H \delta H}
dHδH距离,其具体的计算表达式为:
假定我们现在已经找到一个学习器使得其在源域上的误差很小,上式中的
R
S
(
h
)
R_S(h)
RS(h)可以省略,以及上式中的
λ
\lambda
λ项由于比较小也可以被省略,此时我们对于一个学习器,需要的目标为min
d
H
δ
H
d_{H \delta H}
dHδH, 由于一个分类器h由特征提取器G和分类器F构成,所以上述目标可以表达为最小化一个上界:
由于这时我们的优化目标是要最小化一个上界,因此这就隐含着一个最小最大化问题,我们将这个问题表述为:
由于存在一个最小最大的优化过程,我们可以采用对抗生成网络的思想来设计算法,设计一个特征提取器G,两个分类器
F
1
F_1
F1、
F
2
F_2
F2, 在最大化阶段,我们最大化两个分类器之间的差异,使得当前的差异值逼近上述表达式的上界,也就是使其更加准确地近似
d
H
δ
H
d_{H \delta H}
dHδH, 在最小化阶段,我们最小化两个分类器之间的差异,也就是上面逼近出来的上界,最终经过多轮迭代,使得两个领域间的差异变小
3.算法流程
该算法对应的模型结构如下图所示:
训练过程分为两个阶段:
第一阶段:
固定G,更新
F
1
F_1
F1,
F
2
F_2
F2:在此阶段的损失函数为:
第二阶段:
固定
F
1
F_1
F1、
F
2
F_2
F2,更新G,在此阶段的损失函数为:
注:上述的测量两个预测值的距离为
L
1
L_1
L1 distance,上述过程并没有真正的写成最大,最小两个过程,而是两个最小过程,使得训练过程可以直接靠神经网络来完成 。
4.代码理解
TBD
5.实验结果
6.思考
本算法是一个比较好的范例,其是从理论的角度进行出发,从而得出了比较好的insight,并且根据这个过程设计出了新的算法,本文呢在写作的时候,是从决策边界的角度进行解释和引入算法,之后在进行理论insight的理解,我认为这种写法正好将一般的过程反过来了,不是很认可这个做法,但这个方法本身还是有很好的性质,也可以从多视角的角度进行理解,可以用作之后许多算法的框架。