在论文中经常碰到covariate shift这个词,网上相关的中文解释比较少。你可能会在介绍深度学习Batch Normalization方法的论文到中看到covariate shift这个词,并且所有看过这篇论文的或者实际做过工程的人,都知道BN这种归一化手段很好用,可以避免covariate shift
那么covariate shift到底是什么?
以上已经知道一个样本点分别在训练集和测试集上的概率密度q0(x)和q1(x),实际当中的解决方案是附加一个由x决定的权值
使得在训练过程当中对于q1(x)很大或者q0(x)很小的样本视作“重要”样本,这样的样本是有益于测试集预测的,我们应该尽量把它分类正确。而对于q1(x)很小或者q0(x)很大的样本,它只是被时代遗弃的“老数据”,这些样本对于模型训练的意义也是无关紧要了
举一个形象的例子:
现在我们要通过多项式回归预测某一个函数。数据产生通过下式,并且用正态分布产生噪声加在上面
通过一个其中产生q0(x)当作训练集,大小为n=100
假设模型的形式是,最终训练得到一根直线去尽可能拟合这些点。
实验结果如左图,最终得到一条线,对应图中OLS
根据其中生成测试集q1(x),如右图
最理想的情况,我们直接拟合测试集的点,得到右图中的实线,和左边的线完全不一样,看出covariate shift发生了。
但是我们需要测试集的辅助来解决covariate shift问题(如果直接训练测试集就毫无意义了),求得
通过附加权值的方法,最终训练得到左图中虚线WLS
可以看出最终得到的模型,是可以很好的适应测试集的。
从迁移学习的角度看,这也是一种用source domain的标签数据,结合target domain的无标签数据,指导进行知识的迁移的方法。