代码:李宏毅机器学习作业11——Transfer Learning,Domain Adversarial Training_iwill323的博客-CSDN博客
目录
domain shift(域的转变)
问题出现的原因
类型
domain adaptation 面临的情况
少量有标注的目标领域资料:微调
大量无标注的目标领域资料:Feature Extractor
如何找到Feature Extractor: domain adversarial training(域对抗训练)
Considering Decision Boundary
在target Domain上只有很少量且没有标注的数据
没有目标领域资料:Domain Generalization
Universal Domain Adaptation
当训练资料和测试资料存在不同的分布时,在训练资料上训练出来的模型在测试资料上面可能就会坏掉,这样的情况叫做domain shift(域的转变)。比如在黑白的数字上面训练一个模型,直接用到彩色的数字上,得到的正确率会低到只有 57%。涉及到域的转变就是领域自适应学习,就是将在A domain上学到的东西应用到B domain上,类似于transfer learning(在A任务上学到的技能可以用到B任务上)。
类似于Anomaly Detection,如果对Source Data中沒有出現過的(或稱Abnormal的)test data做测试,那麼model大部分都會因為不熟悉這個data而可能性能很差。
下面將model拆成Feature Extractor(上半部)和Classifier(下半部)來作例子:
整個Model在學習Source Data的時候,Feature Extrator因為看過很多次Source Data,所以所抽取出來的Feature可能就頗具意義,例如像圖上的藍色Distribution,已經將圖片分成各個Cluster,所以這個時候Classifier就可以依照這個Cluster去預測結果。
但是在做Target Data的時候,Feature Extractor會沒看過這樣的Data,導致輸出的Target Feature可能不屬於在Source Feature Distribution上,這樣的Feature給Classifier預測結果顯然就不會做得好。
domain shift有三种类型:
领域自适应可能面临四种情况(针对掌握的目标领域资料而言):
1、少量有标注的目标领域资料
2、大量无标注的目标领域资料
3、少量无标注的目标领域资料
4、没有目标领域资料
另外,也许在 Target Domain 上有一大堆的资料,那些资料也都有Label,就不需要做 Domain Adaptation,直接拿 Target Domain 的资料来训练就好了
处理思想:先用原始资料训练一个模型,然后用目标资料对模型进行微调,类似于BERT。
处理遇到的困难:只用目标资料来微调,一定要注意在微调时不要让模型过拟合了,一般在target domain的资料上不用跑太多iteration,跑太多轮就容易过拟合。只稍微跑个两三个Epoch就足够了,把 Learning Rate 调小一点,让fine tune前跟fine tune后的模型参数不要差很多
这种情境蛮符合在真实的系统上有可能会发生的情境
处理思想:训练一个Network作为Feature Extractor(特征提取器),使用feature extractor将两个领域相同的部分提取出来,剔除掉不同的部分。下图例子中,Feature Extractor 可以学到无视顏色这件事情,把顏色的资讯滤掉,不管是来自 Source Domain还是来自 Target Domain 的图片,只要通过 Feature Extractor 以后得到的 Feature 有一样的分布,那么后面的模型就会因为输入是正常的output而发挥正常的作用
可以把一般的 Classifier分成 Feature Extractor和Label Predictor 两个部分。比如将前 5 层算是 Feature Extractor,后 5 层算是 Label Predictor,这个层数是一个超参数,需要进行调整得到。(下图中红色和蓝色的点)。训练时,把Source Domain 和 Target Domain的图片丢到这个Image Classifier,希望Feature Extractor 的 Output 看起来要分不出差异。
藉由 Domain Adversarial Training 技术实现。训练一个domain classifier,它是二元分类器,用来判断输入向量是来自於 Source Domain还是来自於 Target Domain。Feature Extractor 学习的目标就是要去想办法骗过这个 Domain Classifier。
并且label predictor要正确分辨图片中是什么数字,这样对Feature Extractor的输出进行了限制,比如Feature Extractor不能看到什麼东西永远输出零向量,虽然这样能骗过 Discriminator。因此,feature extractor抽取的特征既要让domain classifier无法区分两个domain,又要让label predictor能区分Source Domain中的图片。
Label Predictor 的参数叫θp,Domain Classifier 的参数叫做θd,Feature Extractor 的参数叫做θf。
Label Predictor对实际的分类任务进行分类,分类结果与实际分类之间的CrossEntropy记为L(Source Domain 上的 Image分类),Domain Classifier对Feature Extractor得到的feature进行二元分类,判断来自哪个Domain,分类结果与实际分类之间的Loss记为Ld。
训练目标:
但是L-Ld这个式子存在问题,本来是想用 -Ld来表示让classifier分不清向量来源,但是把source误判为target,把target误判为source,这也能实现min-Ld。但是这个式子是有用的,只不过未必是最好的方法,还有待探究。
结果如下图表格的第二行
希望两个domain的分布更加接近——让target domain 的data尽量避开 source domain中得到的分界点boundary,离boundary越远越好,于是让不同类别的“输出”之间差异尽可能地大,尽可能地集中在某一类别上
有一个知名的方法叫做 DIRT-T,还有另外一个招数叫Maximum Classifier Discrepancy
不只没有 Label而且 Data 还很少,比如说只有一张而已。有一个方法叫做 Testing Time Training。
对 Target Domain 一无所知,这个时候不叫 Domain Adaptation,通常就叫 Domain Generalization,在 Testing 的时候,不管来什麼神奇的 Domain,它都可以处理。
分成两种状况。一种状况是训练资料非常地丰富,包含了各式各样不同的 Domain,假设要做猫狗的分类器,现在训练资料裡面有真实的猫跟狗的照片,有素描的猫跟狗的照片,然后有这个水彩画
的猫跟狗的照片,期待模型可以学到如何弥平 Domain 间的差异,测试资料是卡通的猫跟狗,模型可以处理
另外一种,假设训练资料只有一个 Domain 呢,而测试资料有多种不同的 Domain,使用的思想类似于data augumentation,产生多个domain的资料,利用多个domain资料训练出来的模型更强。
source资料和target资料不一定有相同的标签。实线的圈圈代表Source Domain 裡面有的东西,虚实线的圈圈代表 Target Domain 裡面有的东西。
当有不一样的label的时候怎么办呢:通用领域自适应Universal Domain Adaptation,参见下面引用的文献。
参考:Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.