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个笔记都是我的毕业论文需要学习的内容,等搞完了毕设有时间再学习其它的内容吧。
评论(0)
您还未登录,请登录后发表或查看评论