GitHub上有学习的字幕:https://github.com/unclestrong/DeepLearning_LHY21_Notes


1 Domain Shift


假设测试资料,跟训练资料的分布不一样,会发生什么情况?


我们举一个简单的例子,假设训练的时候,数字是黑白的,但测试的时候,数字是彩色的,那么,如果在黑白的数字上面训练一个模型,直接用到彩色的数字上,得到的正确率会非常地低,会低到只有 57%,不能算是一个及格的分数。


所以我们知道,一旦训练资料跟测试资料,它中间有一些差异,它们中间的分布是不一样的,我们在训练资料上训练出来的模型,在测试资料上面可能就会坏掉,那这种问题叫做 Domain Shift
也就是当你的训练资料跟测试资料,它的分布有些不同的时候,这种状况叫做 Domain Shift。
在这里插入图片描述
Domain Shift,其实有很多种不同的类型:


  • 模型输入的资料的分布有变化(源域黑白,目标域彩色)
  • 输出的分布也可能有变化(源域均匀分布,目标域极端分布)
  • 输入跟输出虽然分布可能是一样的,但它们之间的关係变了(源域中叫做“0”,目标域中叫做”1”)

今天只专注在,输入资料不同的 Domain Shift 的上面。
Source Domain 是我们的训练资料,Target Domain 是我们的测试资料.


2 Domain Adaptation


今天的主要情景:在 Targe Domain 上有大量的资料,但是这些资料是没有标注的:
在这里插入图片描述
我们要用这些没有标注的资料,来帮助我们在 Source Domain 上,训练出一个模型,它可以用在 Targe Domain 上。


2.1 Basic Idea——寻找 Feature Extractor


在这里插入图片描述
这个 Feature Extractor 其实也是一个 Network,这个 Network 吃一张图片作为输入,吐出一个 vector,吐出一个 Feature。
虽然 Source Domain 跟 Target Domain 它们的 Image 表面上看起来不一样,但是 Feature Extractor 会把它们不一样的部分拿掉,只抽取出它们共同的部分。


所以虽然从图片上看起来,这两组图片一个有颜色、一个没有颜色,它本来就很不一样,但是我们期待这个 Feature Extractor 可以学到无视顏色这件事情,把顏色的资讯滤掉。
那么,不管是来自 Source Domain 的图片,还是来自 Target Domain 的图片,只要通过这个 Feature Extractor 以后,它得到的 Feature 看起来是没有差异的,它们看起来有一样的分布,那这样就可以用这些 Feature 在 Source Domain 上训练一个模型,直接用在 Target Domain 上。
那接下来的问题就是,怎麼找出这样一个 Feature Extractor。


2.2 Domain Adversarial Training


2.2.1 Feature Extractor


如何找出这样的一个 Feature Extractor?
把一个一般的 Classifier,分成 Feature Extractor,跟 Label Predictor 两个部分。
卷积层就是特征提取,全连接层就是分类。
在这里插入图片描述
今天的方法是Domain Adversarial Training:
把有标注的 Source Domain 的资料丢进去,跟训练一个一般的分类器一样,它通过 Feature Extractor,再通过 Label Predictor,可以产生正确的答案。
而Target Domain 的这些资料是没有任何的标注的,我们把这些图片丢到这个 Image,丢进这个 Image Classifier,然后我们把 Feature Extractor 的 Output 拿出来看,希望两个 Domain 的图片丢进去产生的 Feature,它们看起来分不出差异。
图片中就是让蓝色的点跟红色的点分不出差异。


2.2.2 Domain Classifier


那么如何做到这一点?就是Domain Adversarial Training。
在这里插入图片描述
训练一个 Domain 的 Classifier,它就是一个二元的分类器,它把这个 vector 当作输入,它要做的事情就是判断这个 vector 是来自于 Source Domain,还是来自于 Target Domain。
而 Feature Extractor 它学习的目标,就是要去想办法骗过这个 Domain Classifier,让它分辨不出来。(与Gan很相似)


用符号把刚才讲过的事情,再说得更清楚一点:
在这里插入图片描述
这个是最原始的,Domain Adversarial Training 的做法,但这真的是最好的做法吗?
假设 Domain Classifier 它的工作,是要把 Source Domain 跟 Target Domain 分开,而 Feature Extractor 如果它的 Loss是 Domain Classifier 直接加一个负号,那意味着它要做的事情,就是跟 Domain Classifier 相反,可能会使 Domain Classifier 输出的结果与真实相反(把 Source 的说成是 Target 的)。
所以这未必是最好的做法,当然这招还是有用的。


2.2.3 Limitation


刚才这整套想法,还是有一个限制,我们看下面的结果:
在这里插入图片描述
蓝色的圈圈跟蓝色的三角形代表 Source Domain 上的两个 Class,那我们当然可以找一个 Boundary,去把这两组 Class 把它分开来。
对于 Target Domain 上的 Data,我们没有任何的 Class 的 Label,所以我们都用这个正方形来表示所有 Target Domain 的 Data。


那我们今天训练的目标,就是要让这些正方形它的分布,跟这个圈圈三角形合起来的分布越接近越好,所以我们是不是应该要让右边的状况发生 (就是希望类对齐),而避免让左边的状况发生呢?
一个可能的想法是,我们既然知道蓝色的圈圈跟蓝色的三角形它们的分界点在哪里,那我们应该要让这些方形(虽然我们不知道它是哪一个类别),但我们让这些方形远离这一个分界点,这在文献上就有很多不同的做法。


一个最简单的做法是,我有很多 Unlabeled 的图片,丢到 Feature Extractor,再丢到 Label Predictor 以后,我不知道它是哪一个类别,但是我希望它离 Boundary 越远越好


  • 如果今天输出的结果非常地集中,叫做离 Boundary 远
  • 如果今天输出的结果每一个类别都非常地接近,叫做离 Boundary 近
    在这里插入图片描述
    也就是,希望预测的结果集中在某一个类别上。

2.2.4 类对齐问题


我们到目前为止,好像都假设 Source Domain 跟 Target Domain,它的类别都要是一模一样的,但是真的会如此吗?
在这里插入图片描述
图中,实线的圆圈代表 Source 里面的东西,虚线的圆圈代表 Target 里面的东西,它们可能重合,可能其中一个包含另一个,也有可能交叉。


所以在这个前提之下,硬要把 Source Domain 跟 Target Domain 完全 Align 在一起是有问题的。
举例来说在这个 Case 里面,你要让 Source Domain 的 Data,跟 Target Domain 的 Data 的 Feature 完全 Match 在一起,那意味着说,你硬是要让老虎去变得跟狗像,或者是老虎硬是要变得跟狮子像,到时候你就分不出老虎这个类别了。


Universal Domain Adaptation 这篇文章可以解决这个问题。


3 其它情况


刚才我们是假设 Target Domain 没有 Labeled Data,但至少有一大堆数据,这个时候还可以说,我要把两个 Space 拉在一起。


3.1 Target Domain 极少Data


但是有一个可能是,假设目标域不只没有 Label,而且 Data 还很少,比如说我就只有一张而已:
在这里插入图片描述
这个时候你 Target Domain 只有一张,只有一个点,根本没有办法跟 Source Domain Align 在一起,此时怎么办?
Testing Time Training,它的缩写是 TTT,链接在图上。


3.2 对 Target Domain 一无所知


下图是对 Target Domain 的了解程度的深浅。
在这里插入图片描述
其实还有一个更严峻的状况,如果我们对 Target Domain 一无所知的话,怎么办呢?
这个时候我们就不叫 Domain 的 Adaptation,通常就叫 Domain Generalization,又分为两种情形:
在这里插入图片描述
Domain Generalization,在 Testing 的时候,不管来什么神奇的 Domain,它都可以处理,那 Domain Generalization,又分成两种状况:


  • 训练资料非常地丰富,本来就包含了各式各样不同的 Domain。
    假设要做猫狗的分类器,那现在在训练资料里面有真实的、素描的、水彩画的猫和狗的照片。因为训练资料有多个 Domain,我们希望模型可以学到如何弥平 Domain 间的差异,如果测试资料是卡通的猫跟狗,它也可以处理。
  • 训练资料只有一个 Domain ,而测试资料有多种不同的 Domain。
    在文献上也是有人试着去解惑这种问题的,在概念上就是有点像是 Data Augmentation,虽然你只有一个 Domain 的资料,想个 Data Augmentation 的方法,去产生多个 Domain 的资料,然后你就可以套上面这个方案来做做看,看能不能够在测试的时候,新的 Domain 都可以做好。

结语:李宏毅机器学习系列暂时学习到这里,目前总结的5个笔记都是我的毕业论文需要学习的内容,等搞完了毕设有时间再学习其它的内容吧。