本文對ICML 2018楊強老師團隊的一篇文章《Transfer Learning via Learning To Transfer》進行梳理總結。

先回顧一下遷移學習的主要思想來源:人本身具有遷移知識的能力,比如羽毛球運動員可以更好更快地掌握網球的技巧,因此我們希望機器也具有這種遷移的能力,將以往訓練模型學習到的知識在新的領域加以應用。

那麼這篇文章的出發點又是什麼呢?比如我們現在需要在羽毛球運動員、游泳健將和教授這三人中選擇一位來從事網球運動,我們會選誰呢?當然,根據歷史經驗,我們會選擇羽毛球運動員。注意這裡的歷史經驗,可能是下面的一些歷史觀察:

羽毛球運動員 轉職 網球運動員 適應時間 3個月

游泳健將 轉職 網球運動員 適應時間 6個月

教授 轉職 網球運動員 適應時間 12個月

可以看出,通過歷史的「轉職」數據,可以在新的「轉職」場景下加以應用,比如選擇羽毛球運動員來從事網球運動,可能需要的時間成本會小很多。遷移就類似於「轉職」,要選擇最合適的東西遷移。

本文就是通過歷史的遷移信息,包括遷移的數據、遷移的東西等來擬合遷移的效果提升,從而在新的遷移任務到來時,直接優化最優的遷移內容,使得性能提升最大。

這篇文章提供了一種演算法L2T來決定遷移過程中怎樣遷移(How)以及遷移什麼(What)的問題。遷移學習裡面還有一個重要的問題就是什麼時候遷移(When),這個問題這篇工作並沒有涉及。

這篇文章提出了L2T的學習框架,和遷移學習(Transfer Learning)、多任務學習(Multi-Task Learning)、終生學習(Life-Long Learning)有一定的關聯和區別,用下面的圖來解釋:

  • 遷移學習指的是在Task1上訓練,然後到Task2上測試,主要目的是提升Task2的性能,並且只局限於當前這一組遷移任務
  • 多任務學習是在 N 個任務上同時學習,訓練和測試都在這 N 個任務上,目的是為了提升這 N 個任務的性能
  • 終生學習是指的任務是在線源源不斷地過來的,可以抽象為學習了 N 個任務之後,要在第 N + 1個任務上提升性能
  • 而L2T則是根據歷史的遷移任務,Task1->Task2,Task3->Task4等等遷移信息,目的是為了提升Task 2N+1到Task 2N+2的性能

可以看出,如果L2T不使用歷史的遷移任務的信息,那麼只從Task 2N+1到Task 2N+2的過程是Transfer Learning要做的事情,此時由於沒有任何信息,所以只能將所有遷移演算法和各種參數跑一遍進行試錯調優,需要大量的計算資源和時間成本;但是,有了歷史的遷移信息之後,就有一些經驗知識了,針對不同的數據選擇合適的遷移內容(What to transfer)。

上面大概就是文章的出發點,下面來看具體操作過程。具體過程分為兩個階段,分別對應了上圖的訓練和測試階段:

Stage A : Learning transfering skills from previous transfer learning experiences.

Stage B : Applying those skills to infer what and how to transfer for a future pair of source and target domains.

然後文章的架構示意圖為:

可以看出,L2T分為訓練和測試兩個部分。在訓練的時候,保存以往的遷移軌跡,記為三元組信息 E_e = (langle mathcal{S}_e, mathcal{T}_e 
angle, a_e, l_e) ,其中第一部分 langle mathcal{S}_e, mathcal{T}_e 
angle 指的是Source Domain和Target Domain的數據信息, mathcal{S}_e = {X_e^s, y_e^s}, mathcal{T_e} = {X_e^t, y_e^t} ;第二部分指的是演算法(How and What to transfer),這篇文章選擇的演算法都是基於Feature進行遷移的,所以用特徵變換矩陣 W_e 來代替 a_e ;第三部分 l_e = frac{p_e^{s
ightarrow t}}{p_e^t} 表示的是使用Source Domain遷移之後相較於不遷移的性能提升程度。

訓練過程就是要建立一個 langle mathcal{S}_e, mathcal{T}_e 
angle, a_e(W_e) 
ightarrow  l_e 的映射 l_e = f(mathcal{S}_e, mathcal{T}_e , W_e) ,這樣當一組新的遷移任務 mathcal{S}_{N_e + 1}, mathcal{T}_{N_e + 1} 到來時,就可以優化 W ,使得 f(mathcal{S}_{N_e + 1}, mathcal{T}_{N_e + 1} , W) 的值最大,即使得遷移帶來的性能提升最大。而優化 W 的過程就是決定如何遷移(How)、遷移什麼(What)的過程。

下面看訓練過程,訓練過程是給定歷史遷移任務的數據,即 N_e 個三元組 E_e = (langle mathcal{S}_e, mathcal{T}_e 
angle, a_e, l_e) ,優化目標為:

eta^*, lambda^*, mu^*, b^* = arg min_{eta, lambda, mu, b} sum_{e=1}^{N_e} mathcal{L}_hleft( eta^That{d}_e + lambda eta^That{Q}_eeta + frac{mu}{eta^T	au_e} + b, frac{1}{l_e} 
ight) + gamma_1 R(eta, lambda, mu, b) \ s.t. quad eta_k geq 0, lambda geq 0, mu geq 0

上述式子可能有點複雜,可以慢慢分析。

首先上述優化目標的主要目的是通過 mathcal{S}_e, mathcal{T}_e, W_e 來擬合 l_e ,式子的 mathcal{L}_h 是Huber損失,讓 f(mathcal{S}_e, mathcal{T}_e, W_e; eta, lambda, mu, b) 逼近 l_e 。其中 frac{1}{f} = eta^That{d}_e + lambda eta^That{Q}_eeta + frac{mu}{eta^T	au_e} + b ,下面就看這個式子的具體含義,首先可以肯定的是這個值和遷移性能大概是成反比對應的。

文章指出,遷移性能的提升大小和兩方面因素有關係:1. Source Domain和Target Domain的距離;2. 目標域的可判別性。如果SD和TD的距離越小,目標域的可判別性越大,那麼遷移性能可能的提升空間就會很大。所以可以把上面的 1/f 分解為三部分:

frac{1}{f} = D(mathcal{S}, mathcal{T}) + G(mathcal{T}) + b\ D(mathcal{S}, mathcal{T}) = eta^That{d}_e + lambda eta^That{Q}_eeta quad ,quad G(mathcal{T}) = frac{mu}{eta^T	au_e}

三部分分別是兩個域的距離,目標域的可判別性和偏置。下面分別來看一下這些個是如何參數化的。

第一項,兩個域之間的距離,使用MMD(Maximum Mean Discrepancy)度量,公式為:

d^2(mathcal{S}, mathcal{T}) = leftVert   frac{1}{n_S}sum_{i=1}^{n_S}phi(X_{S_i}) - frac{1}{n_T}sum_{i=1}^{n_T}phi(X_{T_i}) 
ightVert_{mathcal{H}}^2

其中 phi(x) 是希爾伯特空間的映射,有 mathcal{K}(x_i, x_j) = langle phi(x_i), phi(x_j) 
angle 。根據之前的假設,遷移什麼(What)是通過特徵變換矩陣 W_e 定義的,即默認Source Domain和Target Domain經過這一矩陣變換得到的數據是在同一子空間(Common Latent Space)的,因此計算這個子空間裡面的MMD距離便得到:

hat{d}^2_e(mathcal{S}, mathcal{T}) = hat{d}^2_e(X_e^s W_e, X_e^t W_e) =  leftVert   frac{1}{n_e^s}sum_{i=1}^{n_e^s}phi(x_{ei}^s W_e) - frac{1}{n_e^t}sum_{j=1}^{n_e^t}phi(x_{ej}^tW_e) 
ightVert_{mathcal{H}}^2 \ = frac{1}{(n_e^s)^2}sum_{i, i=1}^{n_e^s} mathcal{K}(x_{ei}^sW_e, x_{ei}^sW_e) + frac{1}{(n_e^t)^2}sum_{j, j=1}^{n_e^t} mathcal{K}(x_{ej}^tW_e, x_{ej}^tW_e)  - frac{2}{n_e^s n_e^t}sum_{i, j=1}^{n_e^s, n_e^t} mathcal{K}(x_{ei}^sW_e, x_{ej}^tW_e)

如果經過 W_e 變換後,SD和TD在共同子空間的MMD距離非常小的話,那麼潛在的遷移性能提升會比較大。但是上述的計算需要選擇一個合適的核函數 mathcal{K} ,文章為了避免這個問題選擇了多核的技巧,即 mathcal{K} = sum_{k=1}^{N_k} eta_k mathcal{K}_k ,每個核函數 mathcal{K}_k = exp(-||x - y ||^2 / delta_k) 可以計算得到上面的一個距離 hat{d}_{e(k)}^2 ,那麼最後得到的距離就是:

eta^T hat{d}_e = sum_{k=1}^{N_k} eta_k hat{d}_{e(k)}

這就是 D(mathcal{S}, mathcal{T}) 的第一部分,第二部分則是計算兩個域之間兩兩樣本距離的方差,這部分比較複雜,公式比較多,直接截圖如下,下面主要是介紹了 hat{Q}_e 是如何計算出來的,:

總之,兩個Domain在子空間的距離一定程度上會影響遷移的性能。

此外,目標域本身的可判別性則一定程度上也會影響遷移的性能,判別性越高,可遷移性越強。可判別性的衡量指標是:原空間距離接近的樣本映射到子空間的距離依舊比較小;距離大的仍然很大。因此定義下面的指標:

	au_e = tr(W_e^TS_e^NW_e) / tr(W_e^TS_e^LW_e)

其中:

S_e^L = sum_{j, j=1}^{n_e^t} frac{H_{jj}}{(n_e^t)^2}(x_{ej}^t - x_{ej}^t)(x_{ej}^t - x_{ej}^t)^T \ S_e^N = sum_{j, j=1}^{n_e^t} frac{mathcal{K}(x_{ej}^t , x_{ej}^t) - H_{jj}}{(n_e^t)^2}(x_{ej}^t - x_{ej}^t)(x_{ej}^t - x_{ej}^t)^T \ H_{ij} = mathcal{K}(x_{ei}^t, x_{ej}^t), quad if quad is\_neighbor(x_{ei}^t, x_{ej}^t); quad 0 ,quad otherwise

那麼相應地對於 N_k 個核函數有:

eta^T	au_e = sum_{k=1}^{N_k} eta_k 	au_{e(k)}

至此可以優化求解得到上面的各個參數 eta^*, lambda^*, mu^*, b^* ,那麼在測試過程,優化:

W^* = arg max_{W} f(mathcal{S}_{N_e+1}, mathcal{T}_{N_e+1}, W; eta^*, lambda^*, mu^*, b) \ = arg min_{W} eta^{*}{^T}hat{d}_W + lambda eta^{*}{^T}hat{Q}_Weta^{*} + mu^* frac{1}{eta^{*}{^T}	au_W}

具體優化過程可以對上述公式展開得到和 W 有關的式子,還可以加入正則化項 ||W||_F^2 ,使用共軛梯度下降演算法(Conjugate Gradient Descent)優化求解。

得到 W^* 之後,就得到了投影矩陣,因此可以將SD和TD的數據都投影到同一子空間,即完成分布對齊(遷移)的過程。

最後,文章的實驗過程就不展示了。總結一下本文,本文應該是一篇開創性的工作,利用了以往的遷移經驗來指導後續的遷移任務,文章讀起來不難理解,主要是想法很好。

推薦閱讀:

相关文章