在计算机视觉任务中摸索domain adaptation and transfer learning,新手入门浅谈心得

文中我们用DA代之domain adaptation,TL代指transfer learning。本人初涉这个领域,若下文心得有误,望各位看官老爷/娘娘海涵。read with caution :)

故事如何讲起呢?

首先明确一个故事背景:我们有Source domain(S)Target domain(T)这两个东西。

domain这个概念太玄乎了,什么叫domain?

domain就是三个要素的组合:

input space X:也即feature space,xi in X可以理解为是一个描述输入图像的vector;

output space Y:也即label space,在classfication任务中,yi in Y可以是0,1(binary classification)或者(1,2,。。。,K)(multi-class classification)

probability distribution between X and Y:从X映射到Y的联合概率分布(P(x,y))。

此处插播一个很基础的背景知识:

  • p(x,y)  is joint probability distribution;
  • p(x|y) & p(y|x) are conditional probability distribution;
  • p(x) & p(y) are marginal probability distribution;

在贝叶斯估计的框架下,这几种概率分布被赋予了新的意义和名字:

  • p(x) is the evidence or data distribution;
  • p(x|y) is the likelihood;
  • p(y|x) is the posterior distribution;后验概率,即在验视feature x之后得到的关于sample的label y的估计;
  • p(y) is the prior distribution;先验概率,即验视feature之前(没看到图片I就让你估计I的label)得到的y的估计;

这里再插播一套比较基础的背景知识:

机器学习(Machine Learning)是建立在一个core assumption之上的,即:training and testing data are drawn unbiasedly from the underlying (xi,yi)sample space with the same probability distribution

这个core assumption是怎么来的呢?这可能就要提到ERM(Emprical Risk Minimization)经验风险最小化算法(Empirical risk =  training error?)。

ERM:

这里不展开介绍ERM,仅仅说明一下它的内涵就是:机器学习的本质是,通过最小化一个模型在训练集上的训练误差(training error),来确定模型参数,从而“学到”这个模型,即一个机器学习算法的实现其实是一个最优化过程(因为很多机器学习模型的优化都是non-convex的,所以常常用到SGD这种优化算法)。

那么,ERM通过union bound和Hoeffding不等式给出了一个基于training error的对generalization error(testing error)的approximation,or upper bound。

这里的核心在于,training error仅仅是一个approximation of generalization error。而这个generalization error(模型在测试集,即没见过的新样本上的表现)才是我们最终想要的

好了,我们知道Training error最小化不是我们想要的,我们想要最小化generalization(testing)error。

在一个标准的supervised learning框架下,training set和test set都是关于一个task的,是一个整体dataset的简单split,所以对于traning set和testing set而言,它们的X,Y和P(X,Y)都是稳定的,不变的。

However,目前机器学习面临的一大核心问题就是labelled data的bottleneck,导致最为广泛使用的supervised learning不能够很好地scale-up。

换言之,不是所有应用都能够给你提供足够的labelled data,即成对儿的一大堆(xi,yi),让你来挥霍,来划分traing/test set,来训练庞大参数的learning model。(model太大,数据太小,就很容易overfittin。还是那套嗑儿,数据不够,就支持不了大模型的监督训练。)可怕的是,大部分现实中的应用,都很难轻易得到足够规模的labelled data。

那怎么scale-up呢?怎么用小数据来训练大模型呢?两条出路:

1. semi/un/weakly-supervised learning;

2. Transfer learning or Domain Adaptation。

我们这里只谈后者好么。

洋洋洒洒,终于把这逻辑扯会到主题了:

要做DA或者TL,就是强调训练Domain Source与测试domain Target 不一样。Source大Target小。如何让在S上训的model在T上有很小的test error。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1. 什么是DA和TL:

DA和TL是两种learning-to-learn的approach,即,我的target task的数据贼不好搞,那我可不可以在一个labelled数据贼好搞且与target task近似的source task上,用source数据训练一个模型,然后把这个训练过的模型想办法adapt到target task上呢?从而回避掉target task数据不足的问题

pre-train + fine-tune就可以理解为一种实现TL的手段

即,在S上pre-train网络,用这个pre-trained的参数代替random initialziation,然后在T上fine-tune网络。常见做法是仅pre-train一个CNN的前几层。在fine-tune的时候fixed这些层(认为是general feature extractor),仅仅tune后面几层(往往是FCs构成的classifier)。

                            

2. DA和TL的区别是什么:

DA与TL的区别取决于S与T两个domain的三要素的情况:

所谓change与un-change,指的是S与T之间,相关要素是否有改变。可见,TL是一个比DA更宽泛的概念

3. DA和TL要解决的问题是什么:S与T之间的domain shift

在S中学,在T中用。在这个把在S中学到的东西“transfer”到T中使用的过程,需要克服S与T dataset or domain之间的domain shift

domain shift体现在S于T domain各自的P(x,y)之间的差别

一共有三类domain shift(取决于两种不同的joint probability distribution decomposition的方式):

P(x,y) = P(y)*p(x|y):当S与T domain各自的likelihood p(x|y)是相同的,而prior P(y)不同 -------- prior shift;

P(x,y) = P(x)*p(y|x): posterior p(y|x)不同,evidence p(x)相同 --------- concept shift;

P(x,y) = P(x)*p(y|x): posterior p(y|x)相同,evidence p(x)不同 --------- covariat shift

4. 解决DA和TL的主要手段是什么(之后再展开介绍):

  1. Importance-weighting
  2. Subspace mapping
  3. Finding domain-invariant spaces
  4. Feature augmetnation
  5. Minmax estimators

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章