search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

遷移學習實戰:從演算法到實踐

本文是大數據雜談 7 月 27 日社群公開課分享整理,也是第四範式主題月的第四堂公開課內容。

大家好,我是第四範式的羅遠飛。前不久,我參加了國內首個遷移學習演算法比賽,非常幸運地獲得了比賽的冠軍。今天,我將以本次比賽為例,介紹我們基於大規模分散式機器學習框架 GDBT,在遷移學習上進行的一些嘗試。我會首先介紹遷移學習的背景和 GDBT;然後結合比賽,闡述遷移學習的一些經典演算法在實際應用中,可能需要注意的地方;最後,總結本次分享,並簡要介紹比賽中一些未來得及嘗試,卻比較有趣的遷移學習工作。

第一部分:背景介紹

本部分首先介紹遷移學習的背景,其次介紹為何要開發大規模分散式的遷移學習演算法,最後簡要介紹第四範式大規模分散式機器學習框架 GDBT 的特性。

1.1 遷移學習要解決的問題和難點

簡單來說,遷移學習是把一個領域(即源領域)的知識,遷移到另外一個領域(即目標領域),使得目標領域能夠取得更好的學習效果。通常,源領域數據量充足,而目標領域數據量較小,遷移學習需要將在數據量充足的情況下學習到的知識,遷移到數據量小的新環境中。但是,如何形式化的描述所要遷移的知識,使用何種方法遷移知識,以及何時遷移是有效的、何時是有副作用的,是使用者所要關注的重點和難點,本次分享主要集中在前兩個方面。至於如何保證遷移的有效性,目前並沒有很好的理論來支持。

1.2 大規模分散式遷移學習演算法的必要性

我們知道,近年來數據量的迅猛增長和計算能力的提升是推動這一波人工智慧熱潮的主要原因之一。但在實際業務中,我們會發現在很多情況下,數據量較小,不足以支撐 AI 去解決實際問題。而遷移學習能夠通過發現大數據和小數據問題之間的關聯,把知識從大數據中遷移到小數據問題中,從而打破人工智慧對大數據的依賴。那麼我們是否還需要大規模分散式機器學習平台呢?答案是肯定的。

因為即使目標領域數據量較小,我們也不能簡單的將遷移學習視為小數據學習問題。一方面,源領域的數據量可能是巨大的,為了更好的學習到數據內在的結構等信息,需充分利用所有的數據;另一方面,遷移學習所涉及的領域可能有多個,當領域較多,即使每個領域的數據比較少,所有領域數據累計起來,數據量也可能是巨大的;再者,目標領域本身可能也需要較大的計算量,如一些基於深度學習的遷移學習場景。因此,我們在驗證不同的遷移學習演算法效果時,是基於第四範式的大規模分散式機器學習框架 GDBT,實現的多機分散式并行計算版本,而非單機。

1.3 GDBT 簡介

GDBT(General Distributed Brilliant Technology)是一個為分散式大規模機器學習設計的計算框架,兼顧開發效率和運行效率,使演算法工程師可以基於 GDBT 開發各種傳統或者創新演算法的分散式版本,而不用過多地關心分散式底層細節。它針對機器學習任務在計算、通訊、存儲、災備等方面做了深入的優化,定製了通信框架、演算法框架以及參數伺服器,為進行大規模機器學習訓練提供了基石。GDBT 還有一個很大的特性是對演算法開發者友好。它提供的是工業級的開發者易用性,從語言級別上,GDBT 整體基於 C++14 標準,為演算法的開發提供了更大的自由;從功能抽象上,GDBT 提供了對參數伺服器和運算元的良好包裝。在 GDBT 上,只需要數百行代碼就可以實現像對數幾率回歸(LR)、矩陣分解(MF)等演算法的分散式版本。

接下來,我們將結合賽題,重點介紹基於 GDBT,對一些經典的遷移學習演算法進行的嘗試與心得。需要說明的是,以下所提及的演算法,均是我們基於 GDBT,自主研發,暫未使用開源工具。

第二部分:基於 GDBT 的遷移學習實戰

2.1 賽題介紹

比賽主辦方為平安旗下前海徵信,是國內首個遷移學習賽題:給定 4 萬條業務 A 數據及 4 千條業務 B 數據,建立業務 B 的信用評分模型。其中業務 A 為信用貸款, 其特徵是債務人無需提供抵押品,僅憑自己的信譽就能取得貸款,並以借款人信用程度作為還款保證;貸款期限為 1-3 年,平均貸款金額為幾千至幾萬的中等額度信用貸款業務。業務 B 為現金貸,即發薪日貸款,貸款期限為 7-30 天,平均貸款金額為一千的小額短期貸款業務。業務 A、B 對應的數據特徵完全一致。由於業務 A、B 存在關聯性,如何將業務 A 的知識遷移到業務 B,以此增強業務 B 的信用評分模型,是比賽的重點。比賽評測指標是模型在 B 的測試集合上的 AUC。(註:AUC 是業界較為常用的一個模型評測指標,AUC 越高表示模型預測性能越好。)

2.2 問題的限定與形式化

為和比賽保持一致,本次分享在描述相關演算法時,僅考慮兩個領域間的遷移學習,即將一個源領域(記為 Ds)中的知識,遷移到一個目標領域(記為 Dt)中。源領域和目標領域分別對應的學習任務記為 Ts 和 Tt。以比賽為例,業務 A 對應源領域 Ds 和學習任務 Ts,業務 B 對應目標領域 Dt 和學習任務 Tt。

2.3 解題思路

本次比賽的解題流程如下圖所示:首先,我們對原始數據預處理並提取特徵,然後運用遷移學習模型對問題建模,最後將不同的模型結果融合,得到最終的預測結果。因特徵工程和業務強相關,不同的問題對應的特徵提取方法可能相差很大,為了最大化本次解決方案的可擴展性,在參賽過程中,我們並未在特徵工程上花費較多精力,僅是簡單的將所有特徵作為連續值特徵處理和缺失值填充。

圖 1 解題流程

根據 Sinno Jialin Pan 和 Qiang Yang 在 TKDE 2010 上的文章,可將遷移學習演算法,根據所要遷移的知識表示形式(即 「what to transfer」),分為四大類:

1)基於樣本的遷移學習(instance-transfer);

2)基於參數的遷移學習(parameter-transfer);

3)基於特徵表示的遷移學習(feature-representation-transfer);

4)基於關係知識的遷移(relational-knowledge-transfer)。

其中,基於關係知識的遷移認為樣本之間具有相關性,而非獨立同分佈,如知識圖譜,主要應用統計關係學習的方法如馬可夫邏輯網(markov logic network),不在我們本次分享的範圍內。我們將結合比賽,重點闡述前三類方法。

2.3.1 基於樣本的遷移學習

基於樣本的遷移學習是通過從源領域中,選取對目標領域建模有用的樣本,和目標領域的樣本一起使用,來實現遷移學習的效果。在此我們分享兩種方法:

1)通過提升(boosting)演算法,對樣本設置不同權重;

2)通過一定的過濾規則,只選取和目標領域相近的樣本。

第一種方法的代表性工作為 TrAdaBoost,第二種方法是我們從 PU-Learning 中借鑒而來,記為 SPY。

「挑肥揀瘦」的 TrAdaBoost

TrAdaBoost 是戴文淵等人基於 AdaBoost 演算法,在 ICML 2007 上提出的一種針對遷移學習的提升演算法。它適用於源領域 Ds 和目標領域 Dt 均有標籤信息,且特徵空間和目標空間均一致,但 Ds 和 Dt 中樣本分佈不一致的情況。與 AdaBoost 相似,它需要首先選擇一種基學習器(base learner),然後根據之前一些基學習器的表現,來訓練當前的基學習器,并迭代的調整樣本權重。和 AdaBoost 主要區別在於:

  • TrAdaBoost 的輸入是 Ds 和 Dt 對應的兩個數據集,並從 Ds 中只選取對學習任務 Tt 最有用的知識;

  • TrAdaBoost 在計算模型誤差時,僅考慮在 Dt 上的誤差;

  • TrAdaBoost 在 Ds 和 Dt 中使用不同的樣本調權方式;

  • TrAdaBoost 僅使用學習到的所有基學習器中,后訓練的半數基學習器來預測模型效果。

關於該演算法的更多細節和理論可參閱對應論文。

在應用 TrAdaBoost 解決賽題時,我們發現:樣本的初始權重設置和基分類器選取比較關鍵。初始權重設置是較強的先驗信息,而且,如果初始權重設置不當,也會影響計算穩定性。我們可以通過不同領域的樣本比例,或根據不同類別樣本對應的比例,或綜合考慮前二者來設置初始權重。另外,基分類器的選取也會影響迭代輪數、計算穩定性和模型最終效果。在本次比賽時,我們最後選取了梯度提升機(GBM)作為基學習器。和其他選手交流后,發現最優初始權重設置為:Ds 中初始權重均設為 1;Dt 中正樣本權重設為 6,負樣本權重設為 3。

「裡應外合」的 SPY

SPY 是劉冰等人為解決 PU-learning 中只有正樣本和無標籤樣本,而沒有負樣本問題,在 ICML 2002 上提出的一種從無標籤樣本中尋找最可能的負例,以便有監督學習的技術。在比賽過程中,我們借鑒其方法,用來從源領域 Ds 中篩選和目標領域 Dt 最相似的樣本,然後將選出的樣本和 Dt 中的樣本放在一起訓練模型。SPY 的演算法流程為:

  • 樣本重標記:將 Ds 和 Dt 對應的數據重新標記,即 Ds 中的樣本標記為負樣本,Dt 中的樣本標記為正樣本;

  • 數據集切分:將重新標記后的 Ds 和 Dt 放在一起,並隨機切分為訓練集、測試集;

  • 分類器訓練:選擇一個可以輸出概率預測結果的基分類器,並在訓練集上訓練該分類器;

  • 概率預測:將訓練好的模型在測試集上預測,輸出測試集中每條樣本屬於正樣本的概率;

  • 樣本篩選:將測試集中樣本按概率降序排序,設置閾值 k,記不小於第 k 個正樣本對應的概率為 p,選擇 Ds 中概率不小於 p 的樣本,放入 Dt 中。

從上述流程中可以看到,我們首先利用 Dt 和 Ds 中的樣本訓練一個「裁判」,對測試集中樣本打分。然後,利用測試集合中屬於 Dt 的樣本作為「內應」,根據「裁判」的評判結果,選取出 Ds 中,比 Dt 的部分樣本,更「像」Dt 的樣本。

在應用 SPY 方法時,可能有兩點需要注意:基分類器的選擇和篩選閾值的設置。若基分類器太強,SPY 第一步訓練出的分類模型效果很好,將不能從 Ds 中選擇出足夠數量的樣本,因此我們選擇了 LR 和 NB(樸素貝葉斯)作為基分類器,而非 GBM。另外,篩選閾值的設置需要根據實驗結果調整,儘可能既不錯殺,也不誤放。若設置的過高,會使得和 Dt 差別較大的樣本被選中,反之則會遺漏和 Dt 較相似的樣本。另外,SPY 可以和交叉驗證、集成學習相結合,提高選擇出的樣本置信度,或增加樣本的選擇數量。

TrAdaBoost 和 SPY 的結合可能也值得嘗試。比如,用 TrAdaBoost 中源領域樣本的權重作為 SPY 方法中基分類器的預測結果,然後直接選取權重較高的樣本,和目標領域樣本一起建模。

2.3.2 基於參數的遷移學習

基於參數的遷移學習是通過在不同領域間共享參數,來實現遷移學習的效果,代表性方法為多任務學習(multi-task learning)。

「一心二用」的多任務學習

多任務學習,即同時學習多個任務,使得不同的學習任務能相互促進。因多任務學習一般是通過共享特徵來實現共享參數的功能,所以在實際應用中,需著重考慮兩點:1)共享哪些特徵,以確定共享模型對應的哪些參數;2)如何共享參數,即選用何種模型共享參數。

對於第一點,需要具體業務具體分析。在確定共同特徵后,使用多任務學習相關演算法前,需要先將不同領域樣本對應的特徵空間,重新編碼,以便將所有問題映射到同一特徵空間中。具體來說,可將源領域 Ds 和目標領域 Dt 對應的特徵分為三部分:Fc、Fs 和 Ft,其中 Fc 表示 Ds 和 Dt 對應的共同特徵集,Fs 和 Ft 分別表示僅在 Ds 和 Dt 中出現的特徵。然後將 Ds 和 Dt 對應的樣本,統一編碼到 Fc、Fs 和 Ft 三者並集對應的特徵空間中去。

對於第二點,我們實現了三種不同的模型,分別是神經網路(NN)、線性分形分類器(LFC)和梯度提升機(GBM)。下面以 NN 和 LFC 為例來說明多任務學習是如何「一心二用」的。

通過 NN 實現多任務學習的思路比較直觀,如下圖所示。圖片上方是使用 NN,做單任務學習的示意圖,不同任務間並無任何關聯,即「一心一意」。圖片下方是使用 NN,進行多任務學習的模型示意圖,可以看到兩個任務共享一些神經網路層及其相關聯的模型參數,但輸出層對應兩個不同的任務,以此來實現多任務學習。

圖 2 單任務學習 vs. 多任務學習

LFC 是我們基於 GDBT 開發的增強版 LR 演算法,它能根據數據自動生成不同層次的特徵,保證在細粒度特徵無法命中的時候,層次化的上位更粗粒度特徵可以生效。在多個實際業務中應用結果表明,LFC 的預測效果和計算穩定性上均顯著優於 LR。LFC 在進行多任務學習時可看作是將模型參數 w 根據特徵拆成三部分,即(wc,ws,wt),其中,wc、ws 和 wt 分別對應特徵 Fc、Fs 和 Ft 對應的權重。模型訓練階段,在 Ds 對應的樣本中,wt 對應的特徵取值均為 0;在 Dt 對應的樣本中,ws 對應的特徵取值均為 0。兩個領域通過共享 wc 來實現相互學習。

在實際應用多任務學習實現遷移學習效果時,Ds 和 Dt 對應的數據量可能差別很大,在模型迭代訓練時,可以調整不同領域對應的迭代輪數,或對數據進行採樣,或通過定義代價敏感的損失函數(cost-sensitive loss function)來調節。另外,多任務學習的目的是提升各個學習任務的效果,但遷移學習僅關注目標領域 Dt 的學習效果,我們可通過修改多任務學習的損失函數,如給予 Dt 更高的權重,來重點學習 Dt 對應的學習任務 Tt。

除了上述 LFC 和 NN 外,也可考慮使用 AdaBoost/GBM 等作為多任務學習的基分類器,具體可查閱相關文獻。

2.3.3 基於特徵表示的遷移學習

基於特徵表示的遷移學習是利用源領域 Ds(和目標領域 Dt)的信息,尋找合適的特徵表示空間,作為所要遷移知識的載體,來增強目標領域的學習效果。因此,該類方法的關鍵在於如何找到合適的特徵表示空間。

「築巢引鳳」的特徵表示學習

「築巢」的方法可大致分為無監督和有監督兩類。其中,無監督是指只利用數據中的屬性信息,而不使用標籤信息。它一般是通過最小化重構誤差來學習特徵的表示空間,如下圖所示的自編碼器(autoencoder)所示,通過最小化輸入和輸出之間的誤差,來訓練該神經網路,最後使用隱藏層及其相關聯的參數來代表所要學習的特徵表示。除自編碼器外,還有流形學習(manifold learning)、稀疏編碼(sparse coding)等方法。

圖 3 自編碼器示意圖

和無監督不同的是,有監督的方法同時利用數據中的屬性信息和標籤信息。一個最直觀的方法是借鑒深度學習中的微調(fine-tuning)方法,即先用 Ds 中的樣本訓練一個基礎模型,然後利用 Dt 中的樣本,微調此基礎模型。當基礎模型是 GBM 時,該方法是先在 Ds 中訓練一定數量的樹模型,在此基礎上,利用 Dt 的樣本訓練更多樹模型。當基礎模型是 NN 時,做法比較靈活,可以只使用基礎神經網路模型的部分模型參數和結構,餘下部分根據 Dt 的特點設計網路結構並隨機初始化;也可以不做任何改變,直接微調 NN 的權重。

在實際應用過程中,可以從演算法角度,融合各類演算法,以取得更好的效果。比如,結合基於樣本的遷移學習和基於參數的遷移學習,我們可以利用基於樣本的遷移學習演算法對源領域數據進行下採樣,然後再利用基於參數的遷移學習。

第三部分:總結與展望

今天和大家分享的是我們基於大規模分散式機器學習平台 GDBT,在遷移學習演算法上做的一些嘗試,包括演算法原理和實踐時的一些技巧。至於如何度量可遷移性是遷移學習的基本問題之一,目前尚無定論,研究進展也較為緩慢,加之本人才疏學淺,這次分享並未涉及該點。另外,遷移學習能夠打破數據孤島,利用多個企業和用戶的數據共同建立更好的模型,但在此過程中如何確保數據的隱私尚無完善的解決方案。最後,深度遷移學習目前研究活躍,我們公司首席科學家楊強老師在 CCAI 2017 大會上有相關的主題報告,感興趣的可以去學習。

很榮幸能有機會和大家分享,我們在遷移學習實踐上做的若干初步的嘗試,謝謝大家。以上只是我個人關於遷移學習應用時的一些淺見,錯謬之處在所難免,望不吝指點。

答疑環節

Q1:LFC 是怎麼根據數據自動生成不同層次的特徵呢?怎麼判斷生成的特徵的有效性的?

羅遠飛:LFC 是借鑒了多解析度分析(multiresolution analysis)的思想,通過對輸入的連續值特徵進行多尺度的變換,生成不同層次的特徵。在得到不同層次的特徵后,我們讓模型自適應的選擇出泛化性能好的特徵,而非手工篩選。

Q2:分散式計算框架 GDBT 和 Spark 有什麼區別,或者有什麼優勢?

羅遠飛:目前比較流行的計算框架比如 Hadoop、Spark 其重點任務大多是 ETL 類的任務。機器學習計算任務相比於傳統的 ETL 計算任務有很多自身的特點,比如在計算方面,ETL 會做的一些相對「簡單」的運算,機器學習演算法會對數據做相對複雜的運算,在存儲方面,ETL 需要處理來源不同的各種數據,比較少的反覆迭代運算,很多機器學習演算法會對數據做反覆的迭代運算,可能會有大量的不斷擦寫的中間數據產生。GDBT 是一個專門為分散式大規模機器學習設計的計算框架,針對機器學習任務在計算、通訊、存儲、災備等方面做了深入的優化,使演算法工程師可以基於 GDBT 開發各種傳統或者創新演算法的分散式版本,而不用過多地關心分散式底層細節。

Q3:GDBT 上實驗遷移學習演算法,和單機的區別?

羅遠飛:由於 GDBT 良好的設計和抽象,演算法工程師在實現分散式機器學習演算法時,重點關注數據的核心變換和計算邏輯即可,而不用過多地關心分散式底層細節。比如,在需要進程間通信或與參數伺服器交互時,直接調用相應介面就可以想要的功能。

Q4:為什麼將基於特徵表示的遷移學習稱為「築巢引鳳」?

羅遠飛:在此我們將所要學習的特徵表示空間形容為「鳳巢」,在目標領域更好的模型效果比喻為「鳳凰」。該類方法一般是在源領域學習到一個特徵表示空間,即「築巢」;然後將目標領域的數據放入該空間中,建模得到較好的模型效果,即「引鳳」。

Q5:多源遷移學習如何找使得多個源域分佈一致的多個域之間的共同特徵空間呢?

羅遠飛:有兩種直觀的方法,一種是直接根據業務含義,確定哪些特徵是可以在不同域之間共享的;另一種方法是直接通過上面分享的基於特徵表示的遷移學習,找到一個或多個空間,使得不同域在所學習到的空間上的「差異」儘可能小。

Q6:比賽時,是如何做模型融合的?

羅遠飛:我們比賽時僅使用了兩種簡單加權平均的方法,一種是預測結果直接加權平均,一種是按秩加權平均。預測結果直接加權平均時,需要注意的是如果不同模型預測的結果分佈不太一致,如 A 模型預測結果區間一般是 [0, 0.4],而 B 模型的大多在 [0.6, 1],則需要先對 A、B 的預測結果做概率較正(probability calibration)。按秩加權是指將預測結果在預測樣本集合中的序,加權平均。它的好處是不需要概率較正,但不能直接應用於線上實時預估場景中。當然,模型融合(Stacking/Ensembling)有更 fancy 的用法,比如和交叉驗證結合,訓練多層的融合模型。

Q7:多任務學習時,是如何對樣本重新編碼到一個新的共同空間中去的?

羅遠飛:假設我們有兩個業務 A 和 B 的數據,特徵均為 100 維。在多任務學習時,如果我們認為 A 和 B 有 50 維共同特徵,則重新編碼后,空間大小為 100+100-50=150 維,其中,第 1-50 維對應共同特徵,第 51-100 維對應只在 A 中的特徵,第 101-150 維對應只在 B 中的特徵。

Q8:如果找到了不同域共享的特徵,但是因為是不同域數據分佈還是不一致,這能一起合併做分類嗎?第二個上面說的只是針對兩個域的找空間,如果是多個領域的空間,怎麼找,或者有沒有相關文獻啊?

羅遠飛:對於第一點,將不同域的樣本重新編碼到同一個空間中后,是可以合併在一起訓練模型的,有興趣請參考論文《Regularized Multi–Task Learning》,論文中有理論上的證明。對於第二點多個領域的遷移學習,可以參考我們公司首席科學家楊強老師的一些工作,如《Transitive Transfer Learning》。

作者介紹

羅遠飛,第四範式機器學習工程師,從事演算法調研與開發工作,已申請多項機器學習相關專利。碩士畢業於科學院信息工程研究所,研究方向為知識圖譜、自然語言處理與機器學習,曾在自然語言處理國際頂級會議 ACL、EMNLP 上發表論文。

從演算法實現到 MiniFlow 實現,打造機器學習的基礎架構平台



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦