【機器學習】covariate shift現象的解釋

一、什麼是covariate shift?

在論文中經常碰到covariate shift這個詞,網上相關的中文解釋比較少。你可能會在介紹深度學習Batch Normalization方法的論文到中看到covariate shift這個詞,並且所有看過這篇論文的或者實際做過工程的人,都知道BN這種歸一化手段很好用,可以避免covariate shift

那麼covariate shift到底是什麼?
不用想得太複雜,covariate shift最早只是機器學習中的一個問題。同時遷移學習會經常涉及到這個概念。
假設x是屬於特徵空間的某一樣本點,y是標籤。covariate這個詞,其實就是指這裏的x,那麼covariate shift可以直接根據字面意思去理解:樣本點x的變化。
這麼簡單?沒錯就是這麼簡單!

我們講的規範一點:
假設q1(x)是測試集中一個樣本點的概率密度,q0(x)是訓練集中一個樣本點的概率密度。最終我們估計一個條件概率密度p(y|x,θ),它由x和一組參數θ={θ1,θ2......θm}所決定。對於一組參數來說,對應loss(θ)函數評估性能的好壞
綜上,當我們找出在q0(x)分佈上最優的一組θ'時,能否保證q1(x)上測試時也最好呢?
傳統機器學習假設訓練集和測試集是獨立同分布的,即q0(x)=q1(x),所以可以推出最優θ'依然可以保證q1(x)最優。但現實當中這個假設往往不成立,伴隨新數據產生,老數據會過時,當q0(x)不再等於q1(x)時,就被稱作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的無標籤數據,指導進行知識的遷移的方法。

發佈了45 篇原創文章 · 獲贊 387 · 訪問量 84萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章