多任务学习与域对抗神经网络

多任务学习与域对抗神经网络

多任务学习(Multi- Task Learning)

多任务学习 vs 单任务学习
  在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解成理论上独立的子问题,然后分别对每个子问题进行学习,最后通过对子问题学习结果的组合建立复杂问题的数学模型。多任务学习是一种联合学习,多个任务并行学习,结果相互影响。
  在一般的机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业 KPI。为了达到这个目标,我们训练单一模型或多个模型集合来完成指定得任务。然后,我们通过精细调参,来改进模型直至性能不再提升。尽管这样做可以针对一个任务得到一个可接受的性能,但是我们可能忽略了一些信息,这些信息有助于在我们关心的指标上做得更好。具体来说,这些信息就是相关任务的监督数据。通过在相关任务间共享表示信息,我们的模型在原始任务上泛化性能更好。这种方法称为多任务学习(Multi-Task Learning)。
  多任务学习也是一种归纳迁移机制,主要目标是利用隐含在多个相关任务的训练信号中的特定领域信息来提高泛化能力,多任务学习通过使用共享表示并行训练多个任务来完成这一目标。归纳迁移是一种专注于将解决一个问题的知识应用到相关的问题的方法,从而提高学习的效率。比如,学习行走时掌握的能力可以帮助学会跑,学习识别椅子的知识可以用到识别桌子的学习,我们可以在相关的学习任务之间迁移通用的知识。此外,由于使用共享表示,多个任务同时进行预测时,减少了数据来源的数量以及整体模型参数的规模,使预测更加高效。
  多任务学习早期的研究工作源于对机器学习中的一个重要问题,即“归纳偏置(inductive bias)”问题的研究。归纳偏置可以看作学习算法自身在一个庞大的假设空间中对假设进行选择的启发式或者“价值观”,对应了学习算法本身所做出的关于“什么样的模型更好”的假设。在具体的现实问题中,这个假设是否成立,即算法的归纳偏好是否与问题本身匹配,大多数时候直接决定了算法能否取得好的性能。人们在解决实际问题时就是需要人工地确定采用何种学习算法,实际上也就是主观地选择了不同的归纳偏置策略。
  那么一个很直观的想法就是,是否可以将归纳偏置的确定过程也通过学习过程来自动地完成,也就是采用“学习如何去学(learning to learn)”的思想。多任务学习恰恰为上述思想的实现提供了一条可行途径,即利用相关任务中所包含的有用信息,为所关注任务的学习提供更强的归纳偏置。

典型方法

  目前多任务学习方法大致可以总结为两类,一是不同任务之间共享相同的参数(common parameter),二是挖掘不同任务之间隐藏的共有数据特征(latent feature)。显然 EANN 论文中反复提及的 event-invariant features 就是属于不同任务之间隐藏的共有数据特征,而对于不同事件的虚假新闻检测就视为不同的任务。

神经网络中的两种多任务学习模式

  1、参数的硬共享机制:参数的硬共享机制是神经网络的多任务学习中最常见的一种方式。一般来讲,它可以应用到所有任务的所有隐藏层上,而保留任务相关的输出层。硬共享机制降低了过拟合的风险。事实上,这些共享参数过拟合风险的阶数是 N,其中 N 为任务的数量,比任务相关参数的过拟合风险要小。这表明,越多任务同时学习,模型就能捕捉到越多任务的相同的表示,从而导致在原始任务上的过拟合风险越小。
  2、参数的软共享机制:每个任务都由自己的模型,自己的参数。我们对模型参数的距离进行正则化来保障参数的相似,比如 L2 距离正则化,迹正则化(trace norm)。用于深度神经网络中的软共享机制的约束很大程度上是受传统多任务学习中正则化技术的影响。

总结

  现实世界中很多问题不能分解为一个一个独立的子问题,即使可以分解,各个子问题之间也是相互关联的,通过一些共享因素或共享表示(share representation)联系在一起。把现实问题当做一个个独立的单任务处理,忽略了问题之间所富含的丰富的关联信息。多任务学习就是为了解决这个问题而诞生的。把多个相关(related)的任务(task)放在一起学习。这样做真的有效吗?答案是肯定的。多个任务之间共享一些因素,它们可以在学习过程中,共享它们所学到的信息,这是单任务学习所具备的。相关联的多任务学习比单任务学习能去的更好的泛化(generalization)效果。
  多任务学习是一种归纳迁移机制,利用额外的信息来源来提高当前任务的学习性能,包括提高泛化准确率、学习速度和已学习模型的可理解性。在学习一个问题的同时,可以通过使用共享表示来获得其他相关问题的知识。
  能提高泛化能力的可能原因有三:第一,不相关任务对于聚合梯度的贡献相对于其他任务来说可以视为噪声,不相关任务也可以通过作为噪声源来提高泛化能力;第二,增加任务会影响网络参数的更新,比如增加了隐层有效的学习率;第三,多任务网络在所有任务之间共享网络底部的隐层,或许更小的容量就可以获得同水平或更好的泛化能力。因此,我们需要关注如何选择多个相关任务及数据集使网络更好地泛化,有四种机制可以帮助多任务学习网络更好地泛化:统计数据增强、属性选择、信息窃取、表示偏置。

从域自适应到域对抗

  在 EANN 的模型中,定义了两类损失。其中有一类是 domain_loss,那这就使我猜测,这是否和域对抗等学习方法有关;再加之 EANN 模型的名字与域对抗网络的开山之作模型 DANN 的名字极其相似,有借鉴之意。因此,我继续对这方面的知识进行了相关探索。

域自适应原理

  通俗来说,迁移学习就是利用已有的先验知识让算法来学习新的知识,也就是说要找到先验知识与新知识之间的相似性。深度域自适应当前迁移学习领域中解决问题的主要思路。在迁移学习和深度域自适应中,已有的先验知识的数据集称为源域(source domain),需要算法学习的新知识的数据集叫目标域(target domain)。通常情况下,源域和目标与之间存在较大差异即数据分布不完全相同但是肯定有有所关联。其目的是把具有不同分布的源域(Source Domain) 和目标域 (Target Domain) 中的数据,映射到同一个特征空间,寻找某一种度量准则,使其在这个空间上的“距离”尽可能近。然后,我们在源域 (带标签) 上训练好的分类器,就可以直接用于目标域数据的分类。
Domain Adaptation
  如上图所示,图 a 为源域样本分布(带标签),图 b 为目标域样本分布,它们具有共同的特征空间和标签空间,但源域和目标域通常具有不同的分布,这就意味着我们无法将源域训练好的分类器,直接用于目标域样本的分类。因此,在域适应问题中,我们尝试对两个域中的数据做一个映射,使得属于同一类(标签)的样本聚在一起。此时,我们就可以利用带标签的源域数据,训练分类器供目标域样本使用。
  想象一个分类任务,假设现在我们手里有源域数据和目标域数据,其中源域数据是丰富并且有标记的,而目标域数据是充足但是没有标记的,但是源域和目标域的特征空间和标记空间相同。很显然,我们可以轻松的利用源域数据为源域建立一个分类器,但是由于目标域数据本身没有标记,那么我们无法通过常规方法为目标域构建分类器,这时候 Domain adaptation 就可以发挥作用了,具体过程如下图所示.
Domain Adaptation
  从图中可以看到,源域和目标域的特征都是{X1,X2},并且有相同的标记{-1,+1},但是在目标域数据的标记是不可获得的。此外,虽然源域和目标域的特征空间相同,但是两者的特征分布却不同(两者的样本并不在特征空间的相同位置)。那么我们如何做到利用源域数据来帮助目标域进行分类呢?
  这里最关键的一点就是在同一个特征空间中源域和目标域的分布不同,假设两者分布相同,那么我们就可以直接利用源域分类器对目标域数据进行分类了。因此,Domain adaptation 的思想就是通过消除源域和目标域的分布差异,使得源域数据和目标域数据能同时被分开。在图一中,通过映射函数∅(x) 将源域数据和目标域数据映射到某个空间中,并且将属于 +1 的样本混合在一起,属于 -1 的样本混合在一起。由于源域数据有标记,所以可以利用源域数据建立分类器。又因为源域数据和目标域数据混合在一起了,所以在分开源域样本的同时目标域样本也被分开了,这样任务就完成了。

Domain-Adversarial Training of Neural Networks(DANN)

  在上面的 Domain adaptation 过程中最关键的一点就是如何做到将源域样本和目标域样本混合在一起,并且还能保证被同时分开。2016 年发表在 JMLR 的 Domain-Adversarial Training of Neural Networks,作者从 domain adaption 理论的角度出发,最终提出了域对抗网络,而 DANN 的主要任务就是上面这点。
  这里还需要介绍一下 DANN 的应用背景:源域数据充足并且有标记,目标域数据充足但是无标记,源域和目标域的特征空间和标记空间相同,任务是借助源域数据对目标域数据进行分类。在 DANN 训练,网络的输入为带图像分类标签的源域数据集与不带图像分类标签的目标域数据集,以及源域与目标域数据集的域分类标签。即我们知道源域数据集的图像分类标签,无目标域数据集的图像分类标签。
  DANN 的结构如下:
DANN 框架图
  如上图所示,DANN 结构主要包含 3 个部分:
  1、特征提取器 (feature extractor):
    1)将源域样本和目标域样本进行映射和混合;
    2)提取后续网络完成任务所需要的特征。
  2、标签预测器 (label predictor):利用 Feature extractor 提取的信息对样本进行分类。
  3、域判别器(domain classifier):判断 Feature extractor 提取的信息来自源域还是目标域。
  可见,DANN 中的对抗思想蕴含在特征提取器和域分类器中。其中特征提取器的作用就像是之前提及的映射函数 ∅(x)。但是我们并不知道∅(x)的具体形式,也就是说我们不知道特征提取器的训练目标是什么,无法用一个网络来拟合函数 ∅(x)。因此后面添加了域分类器,用来和特征提取器进行对抗训练。
  特征提取器提取的信息会传入域分类器,之后域分类器会判断传入的信息到底是来自源域还是目标域,并计算损失。在反向传播更新参数的过程中,域分类器和特征提取器中间有一个梯度反转层(Gradient reversal layer),也就是说域分类器的训练目标是尽量将输入的信息分到正确的域类别(源域还是目标域),而特征提取器的训练目标却恰恰相反(由于梯度反转层的存在),特征提取器所提取的特征(或者说映射的结果)目的是是域判别器不能正确的判断出信息来自哪一个域,因此形成一种对抗关系。可见,当域分类器不能将接收的信息正确分为源域样本还是目标域样本时,即当图像分类器与域分类器在训练过程中相互对抗最终实现了图像分类损失与域分类损失之间的相互平衡时,特征提取器的任务就圆满完成了,因为此时源域样本和目标域样本在某个空间中已经被混合在一起不能分开了。
  然而上述过程存在一个问题,我们最终的目的是对目标域样本进行分类,那么我们如何保证特征提取器提取的信息是能够用来分类的呢?假如无论输入什么样本给特征提取器,它都输出一个单位向量,这样依旧可以“骗过”域分类器,但是却无法完成后续的分类工作。这时就要靠 Label predictor (类别预测器)了,因为源域样本是有标记的,所以在提取特征时不仅仅要考虑后面的域判别器的情况,还要利用源域的带标记样本进行有监督训练从而兼顾分类的准确性。
  综上,当把特征提取器、域分类器和类别预测器都训练完成后,就可以做到把源域和目标域混合在一起并且进行分类了。下面这幅图对整个流程进行了解释:
DANN 各模块解释

DANN 与 GAN 对比

  生成对抗网络包含一个生成器(Generator)和一个判别器(Discriminator)。生成器用来生成假图片,判别器则用来区分,输入的图片是真图片还是假图片。生成器希望生成的图片可以骗过判别器(以假乱真),而判别器则希望提高辨别能力防止被骗。两者互相博弈,直到系统达到一个稳定状态(纳什平衡)。
GAN 模型
  在域适应问题中, 存在一个源域和目标域。和生成对抗网络相比,域适应问题免去了生成样本的过程,直接将目标域中的数据看作生成的样本。因此,生成器的目的发生了变化,不再是生成样本,而是扮演了一个特征提取(feature extractor)的功能。

作者

恶龙

发布于

2021-11-05

更新于

2021-11-05